css-to-tailwind-react 0.3.2 ā 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +107 -24
- package/dist/cssParser.js +45 -15
- package/dist/fileWriter.d.ts +11 -3
- package/dist/fileWriter.js +34 -39
- package/dist/index.d.ts +4 -2
- package/dist/index.js +11 -2
- package/dist/tailwindMapper.d.ts +7 -0
- package/dist/tailwindMapper.js +181 -1
- package/dist/transformer.d.ts +6 -0
- package/dist/transformer.js +184 -81
- package/dist/utils/diff.d.ts +26 -0
- package/dist/utils/diff.js +197 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.js +21 -7
- package/dist/utils/propertyMapper.js +45 -4
- package/dist/utils/reporter.d.ts +50 -0
- package/dist/utils/reporter.js +215 -0
- package/package.json +1 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export interface FileResult {
|
|
2
|
+
filePath: string;
|
|
3
|
+
originalContent: string;
|
|
4
|
+
newContent: string;
|
|
5
|
+
hasChanges: boolean;
|
|
6
|
+
status: 'modified' | 'unchanged' | 'error';
|
|
7
|
+
error?: string;
|
|
8
|
+
transformations?: {
|
|
9
|
+
utilitiesGenerated: number;
|
|
10
|
+
classesReplaced: number;
|
|
11
|
+
conflictsResolved: number;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface SummaryStats {
|
|
15
|
+
filesScanned: number;
|
|
16
|
+
filesModified: number;
|
|
17
|
+
filesUnchanged: number;
|
|
18
|
+
filesWithError: number;
|
|
19
|
+
utilitiesGenerated: number;
|
|
20
|
+
classesReplaced: number;
|
|
21
|
+
conflictsResolved: number;
|
|
22
|
+
unsupportedSelectors: number;
|
|
23
|
+
errors: number;
|
|
24
|
+
warnings: number;
|
|
25
|
+
}
|
|
26
|
+
export interface ReporterOptions {
|
|
27
|
+
showDiff: boolean;
|
|
28
|
+
silent: boolean;
|
|
29
|
+
verbose: boolean;
|
|
30
|
+
dryRun: boolean;
|
|
31
|
+
projectRoot: string;
|
|
32
|
+
}
|
|
33
|
+
export declare class Reporter {
|
|
34
|
+
private options;
|
|
35
|
+
private fileResults;
|
|
36
|
+
private stats;
|
|
37
|
+
constructor(options: ReporterOptions);
|
|
38
|
+
addFileResult(result: FileResult): void;
|
|
39
|
+
addWarning(count?: number): void;
|
|
40
|
+
addUnsupportedSelector(count?: number): void;
|
|
41
|
+
recordError(): void;
|
|
42
|
+
getStats(): SummaryStats;
|
|
43
|
+
getFileResults(): FileResult[];
|
|
44
|
+
printDiff(result: FileResult): void;
|
|
45
|
+
printFileStatus(result: FileResult): void;
|
|
46
|
+
printSummary(): void;
|
|
47
|
+
toJSON(): object;
|
|
48
|
+
printJSON(): void;
|
|
49
|
+
print(): void;
|
|
50
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Reporter = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const logger_1 = require("./logger");
|
|
9
|
+
const diff_1 = require("./diff");
|
|
10
|
+
const path_1 = __importDefault(require("path"));
|
|
11
|
+
class Reporter {
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.fileResults = [];
|
|
14
|
+
this.stats = {
|
|
15
|
+
filesScanned: 0,
|
|
16
|
+
filesModified: 0,
|
|
17
|
+
filesUnchanged: 0,
|
|
18
|
+
filesWithError: 0,
|
|
19
|
+
utilitiesGenerated: 0,
|
|
20
|
+
classesReplaced: 0,
|
|
21
|
+
conflictsResolved: 0,
|
|
22
|
+
unsupportedSelectors: 0,
|
|
23
|
+
errors: 0,
|
|
24
|
+
warnings: 0
|
|
25
|
+
};
|
|
26
|
+
this.options = options;
|
|
27
|
+
logger_1.logger.setVerbose(options.verbose);
|
|
28
|
+
logger_1.logger.setSilent(options.silent);
|
|
29
|
+
}
|
|
30
|
+
addFileResult(result) {
|
|
31
|
+
this.fileResults.push(result);
|
|
32
|
+
this.stats.filesScanned++;
|
|
33
|
+
switch (result.status) {
|
|
34
|
+
case 'modified':
|
|
35
|
+
this.stats.filesModified++;
|
|
36
|
+
break;
|
|
37
|
+
case 'unchanged':
|
|
38
|
+
this.stats.filesUnchanged++;
|
|
39
|
+
break;
|
|
40
|
+
case 'error':
|
|
41
|
+
this.stats.filesWithError++;
|
|
42
|
+
this.stats.errors++;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
if (result.transformations) {
|
|
46
|
+
this.stats.utilitiesGenerated += result.transformations.utilitiesGenerated;
|
|
47
|
+
this.stats.classesReplaced += result.transformations.classesReplaced;
|
|
48
|
+
this.stats.conflictsResolved += result.transformations.conflictsResolved;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
addWarning(count = 1) {
|
|
52
|
+
this.stats.warnings += count;
|
|
53
|
+
}
|
|
54
|
+
addUnsupportedSelector(count = 1) {
|
|
55
|
+
this.stats.unsupportedSelectors += count;
|
|
56
|
+
}
|
|
57
|
+
recordError() {
|
|
58
|
+
this.stats.errors++;
|
|
59
|
+
}
|
|
60
|
+
getStats() {
|
|
61
|
+
return { ...this.stats };
|
|
62
|
+
}
|
|
63
|
+
getFileResults() {
|
|
64
|
+
return [...this.fileResults];
|
|
65
|
+
}
|
|
66
|
+
printDiff(result) {
|
|
67
|
+
if (!result.hasChanges || !this.options.showDiff) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const relativePath = path_1.default.relative(this.options.projectRoot, result.filePath);
|
|
71
|
+
const diff = (0, diff_1.computeUnifiedDiff)(result.originalContent, result.newContent);
|
|
72
|
+
const formattedDiff = (0, diff_1.formatDiff)(relativePath, diff);
|
|
73
|
+
if (formattedDiff) {
|
|
74
|
+
console.log('\n' + chalk_1.default.cyan(`diff --git a/${relativePath} b/${relativePath}`));
|
|
75
|
+
const lines = formattedDiff.split('\n');
|
|
76
|
+
for (const line of lines) {
|
|
77
|
+
if (line.startsWith('---') || line.startsWith('+++')) {
|
|
78
|
+
console.log(chalk_1.default.bold(line));
|
|
79
|
+
}
|
|
80
|
+
else if (line.startsWith('@@')) {
|
|
81
|
+
console.log(chalk_1.default.cyan(line));
|
|
82
|
+
}
|
|
83
|
+
else if (line.startsWith('+') && !line.startsWith('+++')) {
|
|
84
|
+
console.log(chalk_1.default.green(line));
|
|
85
|
+
}
|
|
86
|
+
else if (line.startsWith('-') && !line.startsWith('---')) {
|
|
87
|
+
console.log(chalk_1.default.red(line));
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.log(chalk_1.default.gray(line));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
printFileStatus(result) {
|
|
96
|
+
if (this.options.silent) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const relativePath = path_1.default.relative(this.options.projectRoot, result.filePath);
|
|
100
|
+
if (result.status === 'error') {
|
|
101
|
+
logger_1.logger.error(`Failed: ${relativePath}`, result.error);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (!result.hasChanges) {
|
|
105
|
+
if (this.options.verbose) {
|
|
106
|
+
logger_1.logger.verbose(`No changes: ${relativePath}`);
|
|
107
|
+
}
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (this.options.dryRun) {
|
|
111
|
+
if (this.options.showDiff) {
|
|
112
|
+
console.log(chalk_1.default.blue(`\nš ${relativePath}`) + chalk_1.default.yellow(' (dry-run)'));
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
logger_1.logger.info(`Would modify: ${relativePath}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
logger_1.logger.success(`Modified: ${relativePath}`);
|
|
120
|
+
}
|
|
121
|
+
if (this.options.showDiff) {
|
|
122
|
+
this.printDiff(result);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
printSummary() {
|
|
126
|
+
if (this.options.silent) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const stats = this.stats;
|
|
130
|
+
console.log('\n' + '='.repeat(50));
|
|
131
|
+
if (this.options.dryRun) {
|
|
132
|
+
console.log(chalk_1.default.yellow('š DRY RUN - No files were modified'));
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
logger_1.logger.success('Transformation Complete!');
|
|
136
|
+
}
|
|
137
|
+
console.log('='.repeat(50));
|
|
138
|
+
console.log('\nš Summary:');
|
|
139
|
+
console.log(` Files scanned: ${stats.filesScanned}`);
|
|
140
|
+
console.log(` Files modified: ${chalk_1.default.green(stats.filesModified)}`);
|
|
141
|
+
console.log(` Files unchanged: ${chalk_1.default.gray(stats.filesUnchanged)}`);
|
|
142
|
+
if (stats.filesWithError > 0) {
|
|
143
|
+
console.log(` Files with errors: ${chalk_1.default.red(stats.filesWithError)}`);
|
|
144
|
+
}
|
|
145
|
+
console.log(` Utilities generated: ${stats.utilitiesGenerated}`);
|
|
146
|
+
console.log(` Classes replaced: ${stats.classesReplaced}`);
|
|
147
|
+
console.log(` Conflicts resolved: ${stats.conflictsResolved}`);
|
|
148
|
+
if (stats.unsupportedSelectors > 0) {
|
|
149
|
+
console.log(` Unsupported selectors: ${chalk_1.default.yellow(stats.unsupportedSelectors)}`);
|
|
150
|
+
}
|
|
151
|
+
if (stats.warnings > 0) {
|
|
152
|
+
console.log(` Warnings: ${chalk_1.default.yellow(stats.warnings)}`);
|
|
153
|
+
}
|
|
154
|
+
if (stats.errors > 0) {
|
|
155
|
+
console.log(` Errors: ${chalk_1.default.red(stats.errors)}`);
|
|
156
|
+
}
|
|
157
|
+
console.log('='.repeat(50));
|
|
158
|
+
}
|
|
159
|
+
toJSON() {
|
|
160
|
+
return {
|
|
161
|
+
success: this.stats.errors === 0,
|
|
162
|
+
dryRun: this.options.dryRun,
|
|
163
|
+
summary: {
|
|
164
|
+
filesScanned: this.stats.filesScanned,
|
|
165
|
+
filesModified: this.stats.filesModified,
|
|
166
|
+
filesUnchanged: this.stats.filesUnchanged,
|
|
167
|
+
filesWithError: this.stats.filesWithError,
|
|
168
|
+
utilitiesGenerated: this.stats.utilitiesGenerated,
|
|
169
|
+
classesReplaced: this.stats.classesReplaced,
|
|
170
|
+
conflictsResolved: this.stats.conflictsResolved,
|
|
171
|
+
unsupportedSelectors: this.stats.unsupportedSelectors,
|
|
172
|
+
warnings: this.stats.warnings,
|
|
173
|
+
errors: this.stats.errors
|
|
174
|
+
},
|
|
175
|
+
files: this.fileResults.map(result => {
|
|
176
|
+
const relativePath = path_1.default.relative(this.options.projectRoot, result.filePath);
|
|
177
|
+
const output = {
|
|
178
|
+
path: relativePath,
|
|
179
|
+
status: result.status,
|
|
180
|
+
hasChanges: result.hasChanges
|
|
181
|
+
};
|
|
182
|
+
if (result.hasChanges && this.options.showDiff) {
|
|
183
|
+
const diff = (0, diff_1.computeUnifiedDiff)(result.originalContent, result.newContent);
|
|
184
|
+
const stats = (0, diff_1.getChangeStats)(diff);
|
|
185
|
+
output.diff = {
|
|
186
|
+
added: stats.added,
|
|
187
|
+
removed: stats.removed
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
if (result.error) {
|
|
191
|
+
output.error = result.error;
|
|
192
|
+
}
|
|
193
|
+
if (result.transformations) {
|
|
194
|
+
output.transformations = result.transformations;
|
|
195
|
+
}
|
|
196
|
+
return output;
|
|
197
|
+
})
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
printJSON() {
|
|
201
|
+
console.log(JSON.stringify(this.toJSON(), null, 2));
|
|
202
|
+
}
|
|
203
|
+
print() {
|
|
204
|
+
if (this.options.silent) {
|
|
205
|
+
this.printSummary();
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
for (const result of this.fileResults) {
|
|
209
|
+
this.printFileStatus(result);
|
|
210
|
+
}
|
|
211
|
+
this.printSummary();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
exports.Reporter = Reporter;
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcmVwb3J0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0RBQTBCO0FBQzFCLHFDQUFrQztBQUNsQyxpQ0FBb0Y7QUFDcEYsZ0RBQXdCO0FBcUN4QixNQUFhLFFBQVE7SUFnQm5CLFlBQVksT0FBd0I7UUFkNUIsZ0JBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQy9CLFVBQUssR0FBaUI7WUFDNUIsWUFBWSxFQUFFLENBQUM7WUFDZixhQUFhLEVBQUUsQ0FBQztZQUNoQixjQUFjLEVBQUUsQ0FBQztZQUNqQixjQUFjLEVBQUUsQ0FBQztZQUNqQixrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsb0JBQW9CLEVBQUUsQ0FBQztZQUN2QixNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVEsRUFBRSxDQUFDO1NBQ1osQ0FBQztRQUdBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLGVBQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLGVBQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBa0I7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUUxQixRQUFRLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDM0IsTUFBTTtZQUNSLEtBQUssV0FBVztnQkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dC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QUFXLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBcE9ELDRCQW9PQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBjb21wdXRlVW5pZmllZERpZmYsIGZvcm1hdERpZmYsIERpZmZSZXN1bHQsIGdldENoYW5nZVN0YXRzIH0gZnJvbSAnLi9kaWZmJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVSZXN1bHQge1xuICBmaWxlUGF0aDogc3RyaW5nO1xuICBvcmlnaW5hbENvbnRlbnQ6IHN0cmluZztcbiAgbmV3Q29udGVudDogc3RyaW5nO1xuICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICBzdGF0dXM6ICdtb2RpZmllZCcgfCAndW5jaGFuZ2VkJyB8ICdlcnJvcic7XG4gIGVycm9yPzogc3RyaW5nO1xuICB0cmFuc2Zvcm1hdGlvbnM/OiB7XG4gICAgdXRpbGl0aWVzR2VuZXJhdGVkOiBudW1iZXI7XG4gICAgY2xhc3Nlc1JlcGxhY2VkOiBudW1iZXI7XG4gICAgY29uZmxpY3RzUmVzb2x2ZWQ6IG51bWJlcjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdW1tYXJ5U3RhdHMge1xuICBmaWxlc1NjYW5uZWQ6IG51bWJlcjtcbiAgZmlsZXNNb2RpZmllZDogbnVtYmVyO1xuICBmaWxlc1VuY2hhbmdlZDogbnVtYmVyO1xuICBmaWxlc1dpdGhFcnJvcjogbnVtYmVyO1xuICB1dGlsaXRpZXNHZW5lcmF0ZWQ6IG51bWJlcjtcbiAgY2xhc3Nlc1JlcGxhY2VkOiBudW1iZXI7XG4gIGNvbmZsaWN0c1Jlc29sdmVkOiBudW1iZXI7XG4gIHVuc3VwcG9ydGVkU2VsZWN0b3JzOiBudW1iZXI7XG4gIGVycm9yczogbnVtYmVyO1xuICB3YXJuaW5nczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydGVyT3B0aW9ucyB7XG4gIHNob3dEaWZmOiBib29sZWFuO1xuICBzaWxlbnQ6IGJvb2xlYW47XG4gIHZlcmJvc2U6IGJvb2xlYW47XG4gIGRyeVJ1bjogYm9vbGVhbjtcbiAgcHJvamVjdFJvb3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJlcG9ydGVyIHtcbiAgcHJpdmF0ZSBvcHRpb25zOiBSZXBvcnRlck9wdGlvbnM7XG4gIHByaXZhdGUgZmlsZVJlc3VsdHM6IEZpbGVSZXN1bHRbXSA9IFtdO1xuICBwcml2YXRlIHN0YXRzOiBTdW1tYXJ5U3RhdHMgPSB7XG4gICAgZmlsZXNTY2FubmVkOiAwLFxuICAgIGZpbGVzTW9kaWZpZWQ6IDAsXG4gICAgZmlsZXNVbmNoYW5nZWQ6IDAsXG4gICAgZmlsZXNXaXRoRXJyb3I6IDAsXG4gICAgdXRpbGl0aWVzR2VuZXJhdGVkOiAwLFxuICAgIGNsYXNzZXNSZXBsYWNlZDogMCxcbiAgICBjb25mbGljdHNSZXNvbHZlZDogMCxcbiAgICB1bnN1cHBvcnRlZFNlbGVjdG9yczogMCxcbiAgICBlcnJvcnM6IDAsXG4gICAgd2FybmluZ3M6IDBcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXBvcnRlck9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIGxvZ2dlci5zZXRWZXJib3NlKG9wdGlvbnMudmVyYm9zZSk7XG4gICAgbG9nZ2VyLnNldFNpbGVudChvcHRpb25zLnNpbGVudCk7XG4gIH1cblxuICBhZGRGaWxlUmVzdWx0KHJlc3VsdDogRmlsZVJlc3VsdCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZVJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgIHRoaXMuc3RhdHMuZmlsZXNTY2FubmVkKys7XG4gICAgXG4gICAgc3dpdGNoIChyZXN1bHQuc3RhdHVzKSB7XG4gICAgICBjYXNlICdtb2RpZmllZCc6XG4gICAgICAgIHRoaXMuc3RhdHMuZmlsZXNNb2RpZmllZCsrO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3VuY2hhbmdlZCc6XG4gICAgICAgIHRoaXMuc3RhdHMuZmlsZXNVbmNoYW5nZWQrKztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgIHRoaXMuc3RhdHMuZmlsZXNXaXRoRXJyb3IrKztcbiAgICAgICAgdGhpcy5zdGF0cy5lcnJvcnMrKztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIFxuICAgIGlmIChyZXN1bHQudHJhbnNmb3JtYXRpb25zKSB7XG4gICAgICB0aGlzLnN0YXRzLnV0aWxpdGllc0dlbmVyYXRlZCArPSByZXN1bHQudHJhbnNmb3JtYXRpb25zLnV0aWxpdGllc0dlbmVyYXRlZDtcbiAgICAgIHRoaXMuc3RhdHMuY2xhc3Nlc1JlcGxhY2VkICs9IHJlc3VsdC50cmFuc2Zvcm1hdGlvbnMuY2xhc3Nlc1JlcGxhY2VkO1xuICAgICAgdGhpcy5zdGF0cy5jb25mbGljdHNSZXNvbHZlZCArPSByZXN1bHQudHJhbnNmb3JtYXRpb25zLmNvbmZsaWN0c1Jlc29sdmVkO1xuICAgIH1cbiAgfVxuXG4gIGFkZFdhcm5pbmcoY291bnQ6IG51bWJlciA9IDEpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRzLndhcm5pbmdzICs9IGNvdW50O1xuICB9XG5cbiAgYWRkVW5zdXBwb3J0ZWRTZWxlY3Rvcihjb3VudDogbnVtYmVyID0gMSk6IHZvaWQge1xuICAgIHRoaXMuc3RhdHMudW5zdXBwb3J0ZWRTZWxlY3RvcnMgKz0gY291bnQ7XG4gIH1cblxuICByZWNvcmRFcnJvcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRzLmVycm9ycysrO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogU3VtbWFyeVN0YXRzIHtcbiAgICByZXR1cm4geyAuLi50aGlzLnN0YXRzIH07XG4gIH1cblxuICBnZXRGaWxlUmVzdWx0cygpOiBGaWxlUmVzdWx0W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5maWxlUmVzdWx0c107XG4gIH1cblxuICBwcmludERpZmYocmVzdWx0OiBGaWxlUmVzdWx0KTogdm9pZCB7XG4gICAgaWYgKCFyZXN1bHQuaGFzQ2hhbmdlcyB8fCAhdGhpcy5vcHRpb25zLnNob3dEaWZmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9IHBhdGgucmVsYXRpdmUodGhpcy5vcHRpb25zLnByb2plY3RSb290LCByZXN1bHQuZmlsZVBhdGgpO1xuICAgIGNvbnN0IGRpZmYgPSBjb21wdXRlVW5pZmllZERpZmYocmVzdWx0Lm9yaWdpbmFsQ29udGVudCwgcmVzdWx0Lm5ld0NvbnRlbnQpO1xuICAgIGNvbnN0IGZvcm1hdHRlZERpZmYgPSBmb3JtYXREaWZmKHJlbGF0aXZlUGF0aCwgZGlmZik7XG4gICAgXG4gICAgaWYgKGZvcm1hdHRlZERpZmYpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdcXG4nICsgY2hhbGsuY3lhbihgZGlmZiAtLWdpdCBhLyR7cmVsYXRpdmVQYXRofSBiLyR7cmVsYXRpdmVQYXRofWApKTtcbiAgICAgIGNvbnN0IGxpbmVzID0gZm9ybWF0dGVkRGlmZi5zcGxpdCgnXFxuJyk7XG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnLS0tJykgfHwgbGluZS5zdGFydHNXaXRoKCcrKysnKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQobGluZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgnQEAnKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4obGluZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgnKycpICYmICFsaW5lLnN0YXJ0c1dpdGgoJysrKycpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4obGluZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgnLScpICYmICFsaW5lLnN0YXJ0c1dpdGgoJy0tLScpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKGxpbmUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGxpbmUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaW50RmlsZVN0YXR1cyhyZXN1bHQ6IEZpbGVSZXN1bHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKHRoaXMub3B0aW9ucy5wcm9qZWN0Um9vdCwgcmVzdWx0LmZpbGVQYXRoKTtcbiAgICBcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQ6ICR7cmVsYXRpdmVQYXRofWAsIHJlc3VsdC5lcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGlmICghcmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgTm8gY2hhbmdlczogJHtyZWxhdGl2ZVBhdGh9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNob3dEaWZmKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJsdWUoYFxcbvCfk4QgJHtyZWxhdGl2ZVBhdGh9YCkgKyBjaGFsay55ZWxsb3coJyAoZHJ5LXJ1biknKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuaW5mbyhgV291bGQgbW9kaWZ5OiAke3JlbGF0aXZlUGF0aH1gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYE1vZGlmaWVkOiAke3JlbGF0aXZlUGF0aH1gKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaG93RGlmZikge1xuICAgICAgdGhpcy5wcmludERpZmYocmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBwcmludFN1bW1hcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgc3RhdHMgPSB0aGlzLnN0YXRzO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKCdcXG4nICsgJz0nLnJlcGVhdCg1MCkpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ/CflI0gRFJZIFJVTiAtIE5vIGZpbGVzIHdlcmUgbW9kaWZpZWQnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCdUcmFuc2Zvcm1hdGlvbiBDb21wbGV0ZSEnKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJz0nLnJlcGVhdCg1MCkpO1xuICAgIFxuICAgIGNvbnNvbGUubG9nKCdcXG7wn5OKIFN1bW1hcnk6Jyk7XG4gICAgY29uc29sZS5sb2coYCAgIEZpbGVzIHNjYW5uZWQ6ICAgICAgICR7c3RhdHMuZmlsZXNTY2FubmVkfWApO1xuICAgIGNvbnNvbGUubG9nKGAgICBGaWxlcyBtb2RpZmllZDogICAgICAke2NoYWxrLmdyZWVuKHN0YXRzLmZpbGVzTW9kaWZpZWQpfWApO1xuICAgIGNvbnNvbGUubG9nKGAgICBGaWxlcyB1bmNoYW5nZWQ6ICAgICAke2NoYWxrLmdyYXkoc3RhdHMuZmlsZXNVbmNoYW5nZWQpfWApO1xuICAgIGlmIChzdGF0cy5maWxlc1dpdGhFcnJvciA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICBGaWxlcyB3aXRoIGVycm9yczogICAke2NoYWxrLnJlZChzdGF0cy5maWxlc1dpdGhFcnJvcil9YCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGAgICBVdGlsaXRpZXMgZ2VuZXJhdGVkOiAke3N0YXRzLnV0aWxpdGllc0dlbmVyYXRlZH1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgQ2xhc3NlcyByZXBsYWNlZDogICAgJHtzdGF0cy5jbGFzc2VzUmVwbGFjZWR9YCk7XG4gICAgY29uc29sZS5sb2coYCAgIENvbmZsaWN0cyByZXNvbHZlZDogICR7c3RhdHMuY29uZmxpY3RzUmVzb2x2ZWR9YCk7XG4gICAgaWYgKHN0YXRzLnVuc3VwcG9ydGVkU2VsZWN0b3JzID4gMCkge1xuICAgICAgY29uc29sZS5sb2coYCAgIFVuc3VwcG9ydGVkIHNlbGVjdG9yczogJHtjaGFsay55ZWxsb3coc3RhdHMudW5zdXBwb3J0ZWRTZWxlY3RvcnMpfWApO1xuICAgIH1cbiAgICBpZiAoc3RhdHMud2FybmluZ3MgPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhgICAgV2FybmluZ3M6ICAgICAgICAgICAgJHtjaGFsay55ZWxsb3coc3RhdHMud2FybmluZ3MpfWApO1xuICAgIH1cbiAgICBpZiAoc3RhdHMuZXJyb3JzID4gMCkge1xuICAgICAgY29uc29sZS5sb2coYCAgIEVycm9yczogICAgICAgICAgICAgICR7Y2hhbGsucmVkKHN0YXRzLmVycm9ycyl9YCk7XG4gICAgfVxuICAgIFxuICAgIGNvbnNvbGUubG9nKCc9Jy5yZXBlYXQoNTApKTtcbiAgfVxuXG4gIHRvSlNPTigpOiBvYmplY3Qge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiB0aGlzLnN0YXRzLmVycm9ycyA9PT0gMCxcbiAgICAgIGRyeVJ1bjogdGhpcy5vcHRpb25zLmRyeVJ1bixcbiAgICAgIHN1bW1hcnk6IHtcbiAgICAgICAgZmlsZXNTY2FubmVkOiB0aGlzLnN0YXRzLmZpbGVzU2Nhbm5lZCxcbiAgICAgICAgZmlsZXNNb2RpZmllZDogdGhpcy5zdGF0cy5maWxlc01vZGlmaWVkLFxuICAgICAgICBmaWxlc1VuY2hhbmdlZDogdGhpcy5zdGF0cy5maWxlc1VuY2hhbmdlZCxcbiAgICAgICAgZmlsZXNXaXRoRXJyb3I6IHRoaXMuc3RhdHMuZmlsZXNXaXRoRXJyb3IsXG4gICAgICAgIHV0aWxpdGllc0dlbmVyYXRlZDogdGhpcy5zdGF0cy51dGlsaXRpZXNHZW5lcmF0ZWQsXG4gICAgICAgIGNsYXNzZXNSZXBsYWNlZDogdGhpcy5zdGF0cy5jbGFzc2VzUmVwbGFjZWQsXG4gICAgICAgIGNvbmZsaWN0c1Jlc29sdmVkOiB0aGlzLnN0YXRzLmNvbmZsaWN0c1Jlc29sdmVkLFxuICAgICAgICB1bnN1cHBvcnRlZFNlbGVjdG9yczogdGhpcy5zdGF0cy51bnN1cHBvcnRlZFNlbGVjdG9ycyxcbiAgICAgICAgd2FybmluZ3M6IHRoaXMuc3RhdHMud2FybmluZ3MsXG4gICAgICAgIGVycm9yczogdGhpcy5zdGF0cy5lcnJvcnNcbiAgICAgIH0sXG4gICAgICBmaWxlczogdGhpcy5maWxlUmVzdWx0cy5tYXAocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVQYXRoID0gcGF0aC5yZWxhdGl2ZSh0aGlzLm9wdGlvbnMucHJvamVjdFJvb3QsIHJlc3VsdC5maWxlUGF0aCk7XG4gICAgICAgIGNvbnN0IG91dHB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAgICAgcGF0aDogcmVsYXRpdmVQYXRoLFxuICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICBoYXNDaGFuZ2VzOiByZXN1bHQuaGFzQ2hhbmdlc1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHJlc3VsdC5oYXNDaGFuZ2VzICYmIHRoaXMub3B0aW9ucy5zaG93RGlmZikge1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBjb21wdXRlVW5pZmllZERpZmYocmVzdWx0Lm9yaWdpbmFsQ29udGVudCwgcmVzdWx0Lm5ld0NvbnRlbnQpO1xuICAgICAgICAgIGNvbnN0IHN0YXRzID0gZ2V0Q2hhbmdlU3RhdHMoZGlmZik7XG4gICAgICAgICAgb3V0cHV0LmRpZmYgPSB7XG4gICAgICAgICAgICBhZGRlZDogc3RhdHMuYWRkZWQsXG4gICAgICAgICAgICByZW1vdmVkOiBzdGF0cy5yZW1vdmVkXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc3VsdC5lcnJvcikge1xuICAgICAgICAgIG91dHB1dC5lcnJvciA9IHJlc3VsdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHJlc3VsdC50cmFuc2Zvcm1hdGlvbnMpIHtcbiAgICAgICAgICBvdXRwdXQudHJhbnNmb3JtYXRpb25zID0gcmVzdWx0LnRyYW5zZm9ybWF0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHByaW50SlNPTigpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh0aGlzLnRvSlNPTigpLCBudWxsLCAyKSk7XG4gIH1cblxuICBwcmludCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNpbGVudCkge1xuICAgICAgdGhpcy5wcmludFN1bW1hcnkoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgdGhpcy5maWxlUmVzdWx0cykge1xuICAgICAgdGhpcy5wcmludEZpbGVTdGF0dXMocmVzdWx0KTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5wcmludFN1bW1hcnkoKTtcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "css-to-tailwind-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Convert traditional CSS (inline, internal, and external) into Tailwind CSS utility classes for React-based frameworks",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|