css-to-tailwind-react 0.3.4 ā 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/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/transformer.d.ts +6 -0
- package/dist/transformer.js +131 -56
- 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/reporter.d.ts +50 -0
- package/dist/utils/reporter.js +215 -0
- package/package.json +1 -1
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.computeUnifiedDiff = computeUnifiedDiff;
|
|
4
|
+
exports.formatDiffHeader = formatDiffHeader;
|
|
5
|
+
exports.formatDiffHunk = formatDiffHunk;
|
|
6
|
+
exports.formatDiff = formatDiff;
|
|
7
|
+
exports.computeAndFormatDiff = computeAndFormatDiff;
|
|
8
|
+
exports.getChangeStats = getChangeStats;
|
|
9
|
+
function diffLines(oldLines, newLines) {
|
|
10
|
+
const m = oldLines.length;
|
|
11
|
+
const n = newLines.length;
|
|
12
|
+
const dp = [];
|
|
13
|
+
for (let i = 0; i <= m; i++) {
|
|
14
|
+
dp[i] = [];
|
|
15
|
+
for (let j = 0; j <= n; j++) {
|
|
16
|
+
if (i === 0) {
|
|
17
|
+
dp[i][j] = j;
|
|
18
|
+
}
|
|
19
|
+
else if (j === 0) {
|
|
20
|
+
dp[i][j] = i;
|
|
21
|
+
}
|
|
22
|
+
else if (oldLines[i - 1] === newLines[j - 1]) {
|
|
23
|
+
dp[i][j] = dp[i - 1][j - 1];
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
dp[i][j] = 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return dp;
|
|
31
|
+
}
|
|
32
|
+
function backtrackEditScript(dp, oldLines, newLines, i, j) {
|
|
33
|
+
const script = [];
|
|
34
|
+
while (i > 0 || j > 0) {
|
|
35
|
+
if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {
|
|
36
|
+
script.unshift({ type: 'context', oldIndex: i - 1, newIndex: j - 1 });
|
|
37
|
+
i--;
|
|
38
|
+
j--;
|
|
39
|
+
}
|
|
40
|
+
else if (j > 0 && (i === 0 || dp[i][j - 1] <= dp[i - 1][j])) {
|
|
41
|
+
script.unshift({ type: 'added', oldIndex: -1, newIndex: j - 1 });
|
|
42
|
+
j--;
|
|
43
|
+
}
|
|
44
|
+
else if (i > 0) {
|
|
45
|
+
script.unshift({ type: 'removed', oldIndex: i - 1, newIndex: -1 });
|
|
46
|
+
i--;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return script;
|
|
50
|
+
}
|
|
51
|
+
const DEFAULT_CONTEXT_LINES = 3;
|
|
52
|
+
function computeUnifiedDiff(oldContent, newContent, contextLines = DEFAULT_CONTEXT_LINES) {
|
|
53
|
+
const oldLines = oldContent.split('\n');
|
|
54
|
+
const newLines = newContent.split('\n');
|
|
55
|
+
if (oldLines.length === 0 && newLines.length === 0) {
|
|
56
|
+
return { hunks: [], hasChanges: false };
|
|
57
|
+
}
|
|
58
|
+
if (oldContent === newContent) {
|
|
59
|
+
return { hunks: [], hasChanges: false };
|
|
60
|
+
}
|
|
61
|
+
const dp = diffLines(oldLines, newLines);
|
|
62
|
+
const editScript = backtrackEditScript(dp, oldLines, newLines, oldLines.length, newLines.length);
|
|
63
|
+
const changeIndices = [];
|
|
64
|
+
editScript.forEach((item, index) => {
|
|
65
|
+
if (item.type !== 'context') {
|
|
66
|
+
changeIndices.push(index);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
if (changeIndices.length === 0) {
|
|
70
|
+
return { hunks: [], hasChanges: false };
|
|
71
|
+
}
|
|
72
|
+
const hunks = [];
|
|
73
|
+
const visited = new Set();
|
|
74
|
+
for (const changeIndex of changeIndices) {
|
|
75
|
+
if (visited.has(changeIndex))
|
|
76
|
+
continue;
|
|
77
|
+
let start = Math.max(0, changeIndex - contextLines);
|
|
78
|
+
let end = Math.min(editScript.length - 1, changeIndex + contextLines);
|
|
79
|
+
for (let i = changeIndex + contextLines + 1; i < editScript.length; i++) {
|
|
80
|
+
if (editScript[i].type !== 'context') {
|
|
81
|
+
const gapStart = end + 1;
|
|
82
|
+
const gapEnd = i - contextLines;
|
|
83
|
+
if (gapEnd <= gapStart) {
|
|
84
|
+
end = i + contextLines;
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
for (let i = start; i <= end; i++) {
|
|
92
|
+
visited.add(i);
|
|
93
|
+
}
|
|
94
|
+
const hunkLines = [];
|
|
95
|
+
let oldLineNum = 0;
|
|
96
|
+
let newLineNum = 0;
|
|
97
|
+
for (let i = 0; i < start; i++) {
|
|
98
|
+
const item = editScript[i];
|
|
99
|
+
if (item.type === 'context' || item.type === 'removed') {
|
|
100
|
+
oldLineNum++;
|
|
101
|
+
}
|
|
102
|
+
if (item.type === 'context' || item.type === 'added') {
|
|
103
|
+
newLineNum++;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const hunkOldStart = oldLineNum + 1;
|
|
107
|
+
const hunkNewStart = newLineNum + 1;
|
|
108
|
+
let hunkOldLines = 0;
|
|
109
|
+
let hunkNewLines = 0;
|
|
110
|
+
for (let i = start; i <= end && i < editScript.length; i++) {
|
|
111
|
+
const item = editScript[i];
|
|
112
|
+
switch (item.type) {
|
|
113
|
+
case 'context':
|
|
114
|
+
oldLineNum++;
|
|
115
|
+
newLineNum++;
|
|
116
|
+
hunkLines.push({
|
|
117
|
+
type: 'context',
|
|
118
|
+
content: oldLines[item.oldIndex],
|
|
119
|
+
oldLineNumber: oldLineNum,
|
|
120
|
+
newLineNumber: newLineNum
|
|
121
|
+
});
|
|
122
|
+
hunkOldLines++;
|
|
123
|
+
hunkNewLines++;
|
|
124
|
+
break;
|
|
125
|
+
case 'removed':
|
|
126
|
+
oldLineNum++;
|
|
127
|
+
hunkLines.push({
|
|
128
|
+
type: 'removed',
|
|
129
|
+
content: oldLines[item.oldIndex],
|
|
130
|
+
oldLineNumber: oldLineNum
|
|
131
|
+
});
|
|
132
|
+
hunkOldLines++;
|
|
133
|
+
break;
|
|
134
|
+
case 'added':
|
|
135
|
+
newLineNum++;
|
|
136
|
+
hunkLines.push({
|
|
137
|
+
type: 'added',
|
|
138
|
+
content: newLines[item.newIndex],
|
|
139
|
+
newLineNumber: newLineNum
|
|
140
|
+
});
|
|
141
|
+
hunkNewLines++;
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
hunks.push({
|
|
146
|
+
oldStart: hunkOldStart,
|
|
147
|
+
oldLines: hunkOldLines,
|
|
148
|
+
newStart: hunkNewStart,
|
|
149
|
+
newLines: hunkNewLines,
|
|
150
|
+
lines: hunkLines
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
return { hunks, hasChanges: true };
|
|
154
|
+
}
|
|
155
|
+
function formatDiffHeader(filePath) {
|
|
156
|
+
return `--- a/${filePath}\n+++ b/${filePath}`;
|
|
157
|
+
}
|
|
158
|
+
function formatDiffHunk(hunk) {
|
|
159
|
+
const header = `@@ -${hunk.oldStart},${hunk.oldLines} +${hunk.newStart},${hunk.newLines} @@`;
|
|
160
|
+
const lines = hunk.lines.map(line => {
|
|
161
|
+
switch (line.type) {
|
|
162
|
+
case 'context':
|
|
163
|
+
return ` ${line.content}`;
|
|
164
|
+
case 'added':
|
|
165
|
+
return `+${line.content}`;
|
|
166
|
+
case 'removed':
|
|
167
|
+
return `-${line.content}`;
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
return [header, ...lines].join('\n');
|
|
171
|
+
}
|
|
172
|
+
function formatDiff(filePath, diff) {
|
|
173
|
+
if (!diff.hasChanges) {
|
|
174
|
+
return '';
|
|
175
|
+
}
|
|
176
|
+
const header = formatDiffHeader(filePath);
|
|
177
|
+
const hunks = diff.hunks.map(formatDiffHunk);
|
|
178
|
+
return [header, ...hunks].join('\n');
|
|
179
|
+
}
|
|
180
|
+
function computeAndFormatDiff(oldContent, newContent, filePath) {
|
|
181
|
+
const diff = computeUnifiedDiff(oldContent, newContent);
|
|
182
|
+
return formatDiff(filePath, diff);
|
|
183
|
+
}
|
|
184
|
+
function getChangeStats(diff) {
|
|
185
|
+
let added = 0;
|
|
186
|
+
let removed = 0;
|
|
187
|
+
for (const hunk of diff.hunks) {
|
|
188
|
+
for (const line of hunk.lines) {
|
|
189
|
+
if (line.type === 'added')
|
|
190
|
+
added++;
|
|
191
|
+
if (line.type === 'removed')
|
|
192
|
+
removed++;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return { added, removed };
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9kaWZmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUVBLGdEQXlIQztBQUVELDRDQUVDO0FBRUQsd0NBY0M7QUFFRCxnQ0FTQztBQUVELG9EQU9DO0FBRUQsd0NBWUM7QUFsT0QsU0FBUyxTQUFTLENBQUMsUUFBa0IsRUFBRSxRQUFrQjtJQUN2RCxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDMUIsTUFBTSxFQUFFLEdBQWUsRUFBRSxDQUFDO0lBRTFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM1QixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1gsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNaLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDZixDQUFDO2lCQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNuQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQztpQkFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdB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TGluZSB7XG4gIHR5cGU6ICdjb250ZXh0JyB8ICdhZGRlZCcgfCAncmVtb3ZlZCc7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgb2xkTGluZU51bWJlcj86IG51bWJlcjtcbiAgbmV3TGluZU51bWJlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWZmSHVuayB7XG4gIG9sZFN0YXJ0OiBudW1iZXI7XG4gIG9sZExpbmVzOiBudW1iZXI7XG4gIG5ld1N0YXJ0OiBudW1iZXI7XG4gIG5ld0xpbmVzOiBudW1iZXI7XG4gIGxpbmVzOiBEaWZmTGluZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpZmZSZXN1bHQge1xuICBodW5rczogRGlmZkh1bmtbXTtcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gZGlmZkxpbmVzKG9sZExpbmVzOiBzdHJpbmdbXSwgbmV3TGluZXM6IHN0cmluZ1tdKTogbnVtYmVyW11bXSB7XG4gIGNvbnN0IG0gPSBvbGRMaW5lcy5sZW5ndGg7XG4gIGNvbnN0IG4gPSBuZXdMaW5lcy5sZW5ndGg7XG4gIGNvbnN0IGRwOiBudW1iZXJbXVtdID0gW107XG4gIFxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBtOyBpKyspIHtcbiAgICBkcFtpXSA9IFtdO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDw9IG47IGorKykge1xuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgZHBbaV1bal0gPSBqO1xuICAgICAgfSBlbHNlIGlmIChqID09PSAwKSB7XG4gICAgICAgIGRwW2ldW2pdID0gaTtcbiAgICAgIH0gZWxzZSBpZiAob2xkTGluZXNbaSAtIDFdID09PSBuZXdMaW5lc1tqIC0gMV0pIHtcbiAgICAgICAgZHBbaV1bal0gPSBkcFtpIC0gMV1baiAtIDFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHBbaV1bal0gPSAxICsgTWF0aC5taW4oZHBbaSAtIDFdW2pdLCBkcFtpXVtqIC0gMV0sIGRwW2kgLSAxXVtqIC0gMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIGRwO1xufVxuXG5mdW5jdGlvbiBiYWNrdHJhY2tFZGl0U2NyaXB0KFxuICBkcDogbnVtYmVyW11bXSxcbiAgb2xkTGluZXM6IHN0cmluZ1tdLFxuICBuZXdMaW5lczogc3RyaW5nW10sXG4gIGk6IG51bWJlcixcbiAgajogbnVtYmVyXG4pOiBBcnJheTx7IHR5cGU6ICdjb250ZXh0JyB8ICdhZGRlZCcgfCAncmVtb3ZlZCc7IG9sZEluZGV4OiBudW1iZXI7IG5ld0luZGV4OiBudW1iZXIgfT4ge1xuICBjb25zdCBzY3JpcHQ6IEFycmF5PHsgdHlwZTogJ2NvbnRleHQnIHwgJ2FkZGVkJyB8ICdyZW1vdmVkJzsgb2xkSW5kZXg6IG51bWJlcjsgbmV3SW5kZXg6IG51bWJlciB9PiA9IFtdO1xuICBcbiAgd2hpbGUgKGkgPiAwIHx8IGogPiAwKSB7XG4gICAgaWYgKGkgPiAwICYmIGogPiAwICYmIG9sZExpbmVzW2kgLSAxXSA9PT0gbmV3TGluZXNbaiAtIDFdKSB7XG4gICAgICBzY3JpcHQudW5zaGlmdCh7IHR5cGU6ICdjb250ZXh0Jywgb2xkSW5kZXg6IGkgLSAxLCBuZXdJbmRleDogaiAtIDEgfSk7XG4gICAgICBpLS07XG4gICAgICBqLS07XG4gICAgfSBlbHNlIGlmIChqID4gMCAmJiAoaSA9PT0gMCB8fCBkcFtpXVtqIC0gMV0gPD0gZHBbaSAtIDFdW2pdKSkge1xuICAgICAgc2NyaXB0LnVuc2hpZnQoeyB0eXBlOiAnYWRkZWQnLCBvbGRJbmRleDogLTEsIG5ld0luZGV4OiBqIC0gMSB9KTtcbiAgICAgIGotLTtcbiAgICB9IGVsc2UgaWYgKGkgPiAwKSB7XG4gICAgICBzY3JpcHQudW5zaGlmdCh7IHR5cGU6ICdyZW1vdmVkJywgb2xkSW5kZXg6IGkgLSAxLCBuZXdJbmRleDogLTEgfSk7XG4gICAgICBpLS07XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gc2NyaXB0O1xufVxuXG5jb25zdCBERUZBVUxUX0NPTlRFWFRfTElORVMgPSAzO1xuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVVuaWZpZWREaWZmKFxuICBvbGRDb250ZW50OiBzdHJpbmcsXG4gIG5ld0NvbnRlbnQ6IHN0cmluZyxcbiAgY29udGV4dExpbmVzOiBudW1iZXIgPSBERUZBVUxUX0NPTlRFWFRfTElORVNcbik6IERpZmZSZXN1bHQge1xuICBjb25zdCBvbGRMaW5lcyA9IG9sZENvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCBuZXdMaW5lcyA9IG5ld0NvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICBcbiAgaWYgKG9sZExpbmVzLmxlbmd0aCA9PT0gMCAmJiBuZXdMaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBodW5rczogW10sIGhhc0NoYW5nZXM6IGZhbHNlIH07XG4gIH1cbiAgXG4gIGlmIChvbGRDb250ZW50ID09PSBuZXdDb250ZW50KSB7XG4gICAgcmV0dXJuIHsgaHVua3M6IFtdLCBoYXNDaGFuZ2VzOiBmYWxzZSB9O1xuICB9XG4gIFxuICBjb25zdCBkcCA9IGRpZmZMaW5lcyhvbGRMaW5lcywgbmV3TGluZXMpO1xuICBjb25zdCBlZGl0U2NyaXB0ID0gYmFja3RyYWNrRWRpdFNjcmlwdChkcCwgb2xkTGluZXMsIG5ld0xpbmVzLCBvbGRMaW5lcy5sZW5ndGgsIG5ld0xpbmVzLmxlbmd0aCk7XG4gIFxuICBjb25zdCBjaGFuZ2VJbmRpY2VzOiBudW1iZXJbXSA9IFtdO1xuICBlZGl0U2NyaXB0LmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgaWYgKGl0ZW0udHlwZSAhPT0gJ2NvbnRleHQnKSB7XG4gICAgICBjaGFuZ2VJbmRpY2VzLnB1c2goaW5kZXgpO1xuICAgIH1cbiAgfSk7XG4gIFxuICBpZiAoY2hhbmdlSW5kaWNlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4geyBodW5rczogW10sIGhhc0NoYW5nZXM6IGZhbHNlIH07XG4gIH1cbiAgXG4gIGNvbnN0IGh1bmtzOiBEaWZmSHVua1tdID0gW107XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgXG4gIGZvciAoY29uc3QgY2hhbmdlSW5kZXggb2YgY2hhbmdlSW5kaWNlcykge1xuICAgIGlmICh2aXNpdGVkLmhhcyhjaGFuZ2VJbmRleCkpIGNvbnRpbnVlO1xuICAgIFxuICAgIGxldCBzdGFydCA9IE1hdGgubWF4KDAsIGNoYW5nZUluZGV4IC0gY29udGV4dExpbmVzKTtcbiAgICBsZXQgZW5kID0gTWF0aC5taW4oZWRpdFNjcmlwdC5sZW5ndGggLSAxLCBjaGFuZ2VJbmRleCArIGNvbnRleHRMaW5lcyk7XG4gICAgXG4gICAgZm9yIChsZXQgaSA9IGNoYW5nZUluZGV4ICsgY29udGV4dExpbmVzICsgMTsgaSA8IGVkaXRTY3JpcHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChlZGl0U2NyaXB0W2ldLnR5cGUgIT09ICdjb250ZXh0Jykge1xuICAgICAgICBjb25zdCBnYXBTdGFydCA9IGVuZCArIDE7XG4gICAgICAgIGNvbnN0IGdhcEVuZCA9IGkgLSBjb250ZXh0TGluZXM7XG4gICAgICAgIGlmIChnYXBFbmQgPD0gZ2FwU3RhcnQpIHtcbiAgICAgICAgICBlbmQgPSBpICsgY29udGV4dExpbmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgdmlzaXRlZC5hZGQoaSk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGh1bmtMaW5lczogRGlmZkxpbmVbXSA9IFtdO1xuICAgIGxldCBvbGRMaW5lTnVtID0gMDtcbiAgICBsZXQgbmV3TGluZU51bSA9IDA7XG4gICAgXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFydDsgaSsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gZWRpdFNjcmlwdFtpXTtcbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjb250ZXh0JyB8fCBpdGVtLnR5cGUgPT09ICdyZW1vdmVkJykge1xuICAgICAgICBvbGRMaW5lTnVtKys7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS50eXBlID09PSAnY29udGV4dCcgfHwgaXRlbS50eXBlID09PSAnYWRkZWQnKSB7XG4gICAgICAgIG5ld0xpbmVOdW0rKztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgY29uc3QgaHVua09sZFN0YXJ0ID0gb2xkTGluZU51bSArIDE7XG4gICAgY29uc3QgaHVua05ld1N0YXJ0ID0gbmV3TGluZU51bSArIDE7XG4gICAgbGV0IGh1bmtPbGRMaW5lcyA9IDA7XG4gICAgbGV0IGh1bmtOZXdMaW5lcyA9IDA7XG4gICAgXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZCAmJiBpIDwgZWRpdFNjcmlwdC5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IGVkaXRTY3JpcHRbaV07XG4gICAgICBcbiAgICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2NvbnRleHQnOlxuICAgICAgICAgIG9sZExpbmVOdW0rKztcbiAgICAgICAgICBuZXdMaW5lTnVtKys7XG4gICAgICAgICAgaHVua0xpbmVzLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2NvbnRleHQnLFxuICAgICAgICAgICAgY29udGVudDogb2xkTGluZXNbaXRlbS5vbGRJbmRleCFdLFxuICAgICAgICAgICAgb2xkTGluZU51bWJlcjogb2xkTGluZU51bSxcbiAgICAgICAgICAgIG5ld0xpbmVOdW1iZXI6IG5ld0xpbmVOdW1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBodW5rT2xkTGluZXMrKztcbiAgICAgICAgICBodW5rTmV3TGluZXMrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncmVtb3ZlZCc6XG4gICAgICAgICAgb2xkTGluZU51bSsrO1xuICAgICAgICAgIGh1bmtMaW5lcy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdyZW1vdmVkJyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG9sZExpbmVzW2l0ZW0ub2xkSW5kZXghXSxcbiAgICAgICAgICAgIG9sZExpbmVOdW1iZXI6IG9sZExpbmVOdW1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBodW5rT2xkTGluZXMrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICAgIG5ld0xpbmVOdW0rKztcbiAgICAgICAgICBodW5rTGluZXMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYWRkZWQnLFxuICAgICAgICAgICAgY29udGVudDogbmV3TGluZXNbaXRlbS5uZXdJbmRleCFdLFxuICAgICAgICAgICAgbmV3TGluZU51bWJlcjogbmV3TGluZU51bVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGh1bmtOZXdMaW5lcysrO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBodW5rcy5wdXNoKHtcbiAgICAgIG9sZFN0YXJ0OiBodW5rT2xkU3RhcnQsXG4gICAgICBvbGRMaW5lczogaHVua09sZExpbmVzLFxuICAgICAgbmV3U3RhcnQ6IGh1bmtOZXdTdGFydCxcbiAgICAgIG5ld0xpbmVzOiBodW5rTmV3TGluZXMsXG4gICAgICBsaW5lczogaHVua0xpbmVzXG4gICAgfSk7XG4gIH1cbiAgXG4gIHJldHVybiB7IGh1bmtzLCBoYXNDaGFuZ2VzOiB0cnVlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXREaWZmSGVhZGVyKGZpbGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYC0tLSBhLyR7ZmlsZVBhdGh9XFxuKysrIGIvJHtmaWxlUGF0aH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGlmZkh1bmsoaHVuazogRGlmZkh1bmspOiBzdHJpbmcge1xuICBjb25zdCBoZWFkZXIgPSBgQEAgLSR7aHVuay5vbGRTdGFydH0sJHtodW5rLm9sZExpbmVzfSArJHtodW5rLm5ld1N0YXJ0fSwke2h1bmsubmV3TGluZXN9IEBAYDtcbiAgY29uc3QgbGluZXMgPSBodW5rLmxpbmVzLm1hcChsaW5lID0+IHtcbiAgICBzd2l0Y2ggKGxpbmUudHlwZSkge1xuICAgICAgY2FzZSAnY29udGV4dCc6XG4gICAgICAgIHJldHVybiBgICR7bGluZS5jb250ZW50fWA7XG4gICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgIHJldHVybiBgKyR7bGluZS5jb250ZW50fWA7XG4gICAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgICAgcmV0dXJuIGAtJHtsaW5lLmNvbnRlbnR9YDtcbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIFtoZWFkZXIsIC4uLmxpbmVzXS5qb2luKCdcXG4nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERpZmYoZmlsZVBhdGg6IHN0cmluZywgZGlmZjogRGlmZlJlc3VsdCk6IHN0cmluZyB7XG4gIGlmICghZGlmZi5oYXNDaGFuZ2VzKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIFxuICBjb25zdCBoZWFkZXIgPSBmb3JtYXREaWZmSGVhZGVyKGZpbGVQYXRoKTtcbiAgY29uc3QgaHVua3MgPSBkaWZmLmh1bmtzLm1hcChmb3JtYXREaWZmSHVuayk7XG4gIFxuICByZXR1cm4gW2hlYWRlciwgLi4uaHVua3NdLmpvaW4oJ1xcbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZUFuZEZvcm1hdERpZmYoXG4gIG9sZENvbnRlbnQ6IHN0cmluZyxcbiAgbmV3Q29udGVudDogc3RyaW5nLFxuICBmaWxlUGF0aDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICBjb25zdCBkaWZmID0gY29tcHV0ZVVuaWZpZWREaWZmKG9sZENvbnRlbnQsIG5ld0NvbnRlbnQpO1xuICByZXR1cm4gZm9ybWF0RGlmZihmaWxlUGF0aCwgZGlmZik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFuZ2VTdGF0cyhkaWZmOiBEaWZmUmVzdWx0KTogeyBhZGRlZDogbnVtYmVyOyByZW1vdmVkOiBudW1iZXIgfSB7XG4gIGxldCBhZGRlZCA9IDA7XG4gIGxldCByZW1vdmVkID0gMDtcbiAgXG4gIGZvciAoY29uc3QgaHVuayBvZiBkaWZmLmh1bmtzKSB7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGh1bmsubGluZXMpIHtcbiAgICAgIGlmIChsaW5lLnR5cGUgPT09ICdhZGRlZCcpIGFkZGVkKys7XG4gICAgICBpZiAobGluZS50eXBlID09PSAncmVtb3ZlZCcpIHJlbW92ZWQrKztcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiB7IGFkZGVkLCByZW1vdmVkIH07XG59XG4iXX0=
|
package/dist/utils/logger.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
declare class Logger {
|
|
2
2
|
private isVerbose;
|
|
3
|
+
private isSilent;
|
|
3
4
|
setVerbose(verbose: boolean): void;
|
|
5
|
+
setSilent(silent: boolean): void;
|
|
4
6
|
info(message: string, ...args: any[]): void;
|
|
5
7
|
success(message: string, ...args: any[]): void;
|
|
6
8
|
warn(message: string, ...args: any[]): void;
|
package/dist/utils/logger.js
CHANGED
|
@@ -8,20 +8,32 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
8
8
|
class Logger {
|
|
9
9
|
constructor() {
|
|
10
10
|
this.isVerbose = false;
|
|
11
|
+
this.isSilent = false;
|
|
11
12
|
}
|
|
12
13
|
setVerbose(verbose) {
|
|
13
14
|
this.isVerbose = verbose;
|
|
14
15
|
}
|
|
16
|
+
setSilent(silent) {
|
|
17
|
+
this.isSilent = silent;
|
|
18
|
+
}
|
|
15
19
|
info(message, ...args) {
|
|
20
|
+
if (this.isSilent)
|
|
21
|
+
return;
|
|
16
22
|
console.log(chalk_1.default.blue(message), ...args);
|
|
17
23
|
}
|
|
18
24
|
success(message, ...args) {
|
|
25
|
+
if (this.isSilent)
|
|
26
|
+
return;
|
|
19
27
|
console.log(chalk_1.default.green(message), ...args);
|
|
20
28
|
}
|
|
21
29
|
warn(message, ...args) {
|
|
30
|
+
if (this.isSilent)
|
|
31
|
+
return;
|
|
22
32
|
console.log(chalk_1.default.yellow(`ā ļø ${message}`), ...args);
|
|
23
33
|
}
|
|
24
34
|
error(message, error) {
|
|
35
|
+
if (this.isSilent)
|
|
36
|
+
return;
|
|
25
37
|
console.error(chalk_1.default.red(`ā ${message}`));
|
|
26
38
|
if (error && this.isVerbose) {
|
|
27
39
|
if (error instanceof Error) {
|
|
@@ -33,16 +45,18 @@ class Logger {
|
|
|
33
45
|
}
|
|
34
46
|
}
|
|
35
47
|
verbose(message, ...args) {
|
|
36
|
-
if (this.isVerbose)
|
|
37
|
-
|
|
38
|
-
}
|
|
48
|
+
if (this.isSilent || !this.isVerbose)
|
|
49
|
+
return;
|
|
50
|
+
console.log(chalk_1.default.gray(`[verbose] ${message}`), ...args);
|
|
39
51
|
}
|
|
40
52
|
debug(message, ...args) {
|
|
41
|
-
if (this.isVerbose)
|
|
42
|
-
|
|
43
|
-
}
|
|
53
|
+
if (this.isSilent || !this.isVerbose)
|
|
54
|
+
return;
|
|
55
|
+
console.log(chalk_1.default.cyan(`[debug] ${message}`), ...args);
|
|
44
56
|
}
|
|
45
57
|
file(message, filePath) {
|
|
58
|
+
if (this.isSilent)
|
|
59
|
+
return;
|
|
46
60
|
console.log(chalk_1.default.magenta(`${message}:`), chalk_1.default.white(filePath));
|
|
47
61
|
}
|
|
48
62
|
diff(original, converted) {
|
|
@@ -53,4 +67,4 @@ class Logger {
|
|
|
53
67
|
}
|
|
54
68
|
}
|
|
55
69
|
exports.logger = new Logger();
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFFMUIsTUFBTSxNQUFNO0lBQVo7UUFDVSxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGFBQVEsR0FBWSxLQUFLLENBQUM7SUEwRHBDLENBQUM7SUF4REMsVUFBVSxDQUFDLE9BQWdCO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxTQUFTLENBQUMsTUFBZTtRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxHQUFHLElBQVc7UUFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlLEVBQUUsR0FBRyxJQUFXO1FBQ3JDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBZSxFQUFFLEdBQUcsSUFBVztRQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFlLEVBQUUsS0FBVztRQUNoQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixPQUFPLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzVCLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRSxDQUFDO2dCQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN6RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQWUsRUFBRSxHQUFHLElBQVc7UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQyxhQUFhLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWUsRUFBRSxHQUFHLElBQVc7UUFDbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPO1FBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQyxXQUFXLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWUsRUFBRSxRQUFnQjtRQUNwQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLGVBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQWdCLEVBQUUsU0FBaUI7UUFDdEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRVksUUFBQSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNsYXNzIExvZ2dlciB7XG4gIHByaXZhdGUgaXNWZXJib3NlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaXNTaWxlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBzZXRWZXJib3NlKHZlcmJvc2U6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzVmVyYm9zZSA9IHZlcmJvc2U7XG4gIH1cblxuICBzZXRTaWxlbnQoc2lsZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc1NpbGVudCA9IHNpbGVudDtcbiAgfVxuXG4gIGluZm8obWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2lsZW50KSByZXR1cm47XG4gICAgY29uc29sZS5sb2coY2hhbGsuYmx1ZShtZXNzYWdlKSwgLi4uYXJncyk7XG4gIH1cblxuICBzdWNjZXNzKG1lc3NhZ2U6IHN0cmluZywgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NpbGVudCkgcmV0dXJuO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKG1lc3NhZ2UpLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2lsZW50KSByZXR1cm47XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGDimqDvuI8gICR7bWVzc2FnZX1gKSwgLi4uYXJncyk7XG4gIH1cblxuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcsIGVycm9yPzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTaWxlbnQpIHJldHVybjtcbiAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChg4p2MICR7bWVzc2FnZX1gKSk7XG4gICAgaWYgKGVycm9yICYmIHRoaXMuaXNWZXJib3NlKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChlcnJvci5zdGFjayB8fCBlcnJvci5tZXNzYWdlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZChlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZlcmJvc2UobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2lsZW50IHx8ICF0aGlzLmlzVmVyYm9zZSkgcmV0dXJuO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYFt2ZXJib3NlXSAke21lc3NhZ2V9YCksIC4uLmFyZ3MpO1xuICB9XG5cbiAgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2lsZW50IHx8ICF0aGlzLmlzVmVyYm9zZSkgcmV0dXJuO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFtkZWJ1Z10gJHttZXNzYWdlfWApLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGZpbGUobWVzc2FnZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTaWxlbnQpIHJldHVybjtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5tYWdlbnRhKGAke21lc3NhZ2V9OmApLCBjaGFsay53aGl0ZShmaWxlUGF0aCkpO1xuICB9XG5cbiAgZGlmZihvcmlnaW5hbDogc3RyaW5nLCBjb252ZXJ0ZWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzVmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsucmVkKCcgIC0nKSwgb3JpZ2luYWwpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJyAgKycpLCBjb252ZXJ0ZWQpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuIl19
|
|
@@ -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",
|