css-to-tailwind-react 0.1.1 → 0.1.2
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/cssParser.d.ts +3 -3
- package/dist/cssParser.js +100 -84
- package/dist/index.d.ts +2 -0
- package/dist/index.js +19 -2
- package/dist/transformer.js +20 -59
- package/dist/utils/pseudoSelectorResolver.d.ts +17 -0
- package/dist/utils/pseudoSelectorResolver.js +163 -0
- package/dist/utils/variantAssembler.d.ts +20 -0
- package/dist/utils/variantAssembler.js +114 -0
- package/package.json +1 -1
package/dist/cssParser.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TailwindMapper, CSSProperty } from './tailwindMapper';
|
|
2
2
|
export interface UtilityWithVariant {
|
|
3
3
|
value: string;
|
|
4
|
-
|
|
4
|
+
variants: string[];
|
|
5
5
|
}
|
|
6
6
|
export interface CSSRule {
|
|
7
7
|
selector: string;
|
|
@@ -9,7 +9,6 @@ export interface CSSRule {
|
|
|
9
9
|
declarations: CSSProperty[];
|
|
10
10
|
convertedClasses: string[];
|
|
11
11
|
utilities: UtilityWithVariant[];
|
|
12
|
-
breakpoint?: string;
|
|
13
12
|
skipped: boolean;
|
|
14
13
|
fullyConverted: boolean;
|
|
15
14
|
partialConversion: boolean;
|
|
@@ -29,7 +28,8 @@ export declare class CSSParser {
|
|
|
29
28
|
private mapper;
|
|
30
29
|
private breakpoints;
|
|
31
30
|
constructor(mapper: TailwindMapper, screens?: Record<string, string | [string, string]>);
|
|
32
|
-
private
|
|
31
|
+
private convertDeclarations;
|
|
32
|
+
private processRuleWithVariants;
|
|
33
33
|
parse(css: string, filePath: string): Promise<CSSParseResult>;
|
|
34
34
|
parseInternalStyle(html: string): {
|
|
35
35
|
styles: Array<{
|
package/dist/cssParser.js
CHANGED
|
@@ -8,6 +8,8 @@ const postcss_1 = __importDefault(require("postcss"));
|
|
|
8
8
|
const postcss_safe_parser_1 = __importDefault(require("postcss-safe-parser"));
|
|
9
9
|
const logger_1 = require("./utils/logger");
|
|
10
10
|
const breakpointResolver_1 = require("./utils/breakpointResolver");
|
|
11
|
+
const pseudoSelectorResolver_1 = require("./utils/pseudoSelectorResolver");
|
|
12
|
+
const variantAssembler_1 = require("./utils/variantAssembler");
|
|
11
13
|
class CSSParser {
|
|
12
14
|
constructor(mapper, screens) {
|
|
13
15
|
this.mapper = mapper;
|
|
@@ -15,15 +17,35 @@ class CSSParser {
|
|
|
15
17
|
? (0, breakpointResolver_1.resolveBreakpointsFromConfig)(screens)
|
|
16
18
|
: (0, breakpointResolver_1.getBreakpoints)();
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
convertDeclarations(declarations) {
|
|
21
|
+
const conversionResults = [];
|
|
22
|
+
const conversionWarnings = [];
|
|
23
|
+
declarations.forEach(decl => {
|
|
24
|
+
const result = this.mapper.convertProperty(decl.property, decl.value);
|
|
25
|
+
conversionResults.push({
|
|
26
|
+
declaration: decl,
|
|
27
|
+
converted: !result.skipped && result.className !== null,
|
|
28
|
+
className: result.className
|
|
29
|
+
});
|
|
30
|
+
if (result.skipped && result.reason) {
|
|
31
|
+
conversionWarnings.push(result.reason);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
const utilities = conversionResults
|
|
35
|
+
.filter(r => r.converted && r.className)
|
|
36
|
+
.map(r => ({
|
|
37
|
+
value: r.className,
|
|
38
|
+
variants: []
|
|
39
|
+
}));
|
|
40
|
+
return { utilities, conversionResults, conversionWarnings };
|
|
41
|
+
}
|
|
42
|
+
processRuleWithVariants(rule, additionalVariants = []) {
|
|
43
|
+
const selector = rule.selector;
|
|
44
|
+
const parsedSelectors = (0, pseudoSelectorResolver_1.parseMultipleSelectors)(selector);
|
|
45
|
+
const validSelectors = parsedSelectors.filter(s => !s.isComplex && s.baseClass);
|
|
46
|
+
if (validSelectors.length === 0) {
|
|
24
47
|
return null;
|
|
25
48
|
}
|
|
26
|
-
const className = classNameMatch[1];
|
|
27
49
|
const declarations = [];
|
|
28
50
|
rule.walkDecls((decl) => {
|
|
29
51
|
if (decl.prop.startsWith('--')) {
|
|
@@ -40,41 +62,38 @@ class CSSParser {
|
|
|
40
62
|
if (declarations.length === 0) {
|
|
41
63
|
return null;
|
|
42
64
|
}
|
|
43
|
-
const conversionResults =
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
conversionResults.push({
|
|
48
|
-
declaration: decl,
|
|
49
|
-
converted: !result.skipped && result.className !== null,
|
|
50
|
-
className: result.className
|
|
51
|
-
});
|
|
52
|
-
if (result.skipped && result.reason) {
|
|
53
|
-
conversionWarnings.push(result.reason);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
const utilities = conversionResults
|
|
57
|
-
.filter(r => r.converted && r.className)
|
|
58
|
-
.map(r => ({
|
|
59
|
-
value: r.className,
|
|
60
|
-
variant: breakpoint
|
|
65
|
+
const { utilities, conversionResults, conversionWarnings } = this.convertDeclarations(declarations);
|
|
66
|
+
const utilitiesWithVariants = utilities.map(u => ({
|
|
67
|
+
value: u.value,
|
|
68
|
+
variants: (0, variantAssembler_1.normalizeVariantOrder)([...u.variants, ...additionalVariants])
|
|
61
69
|
}));
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
70
|
+
const cssRules = [];
|
|
71
|
+
const allConversionResults = [];
|
|
72
|
+
for (const parsed of validSelectors) {
|
|
73
|
+
const pseudoVariants = parsed.pseudos || [];
|
|
74
|
+
const allVariants = (0, variantAssembler_1.normalizeVariantOrder)([...pseudoVariants, ...additionalVariants]);
|
|
75
|
+
const utilitiesForSelector = utilities.map(u => ({
|
|
76
|
+
value: u.value,
|
|
77
|
+
variants: allVariants
|
|
78
|
+
}));
|
|
79
|
+
const convertedClasses = (0, variantAssembler_1.assembleUtilities)(utilitiesForSelector);
|
|
80
|
+
const allDeclarationsConverted = conversionResults.every(r => r.converted);
|
|
81
|
+
const someDeclarationsConverted = convertedClasses.length > 0;
|
|
82
|
+
const cssRule = {
|
|
83
|
+
selector: selector,
|
|
84
|
+
className: parsed.baseClass,
|
|
85
|
+
declarations,
|
|
86
|
+
convertedClasses,
|
|
87
|
+
utilities: utilitiesForSelector,
|
|
88
|
+
skipped: !someDeclarationsConverted,
|
|
89
|
+
fullyConverted: allDeclarationsConverted,
|
|
90
|
+
partialConversion: someDeclarationsConverted && !allDeclarationsConverted,
|
|
91
|
+
reason: !someDeclarationsConverted ? 'No convertible declarations' : undefined
|
|
92
|
+
};
|
|
93
|
+
cssRules.push(cssRule);
|
|
94
|
+
allConversionResults.push(conversionResults);
|
|
95
|
+
}
|
|
96
|
+
return { cssRules, conversionResults: allConversionResults, conversionWarnings };
|
|
78
97
|
}
|
|
79
98
|
async parse(css, filePath) {
|
|
80
99
|
const rules = [];
|
|
@@ -94,24 +113,27 @@ class CSSParser {
|
|
|
94
113
|
warnings.push(mediaResult.reason || `Skipped media query: ${atRule.params}`);
|
|
95
114
|
return;
|
|
96
115
|
}
|
|
97
|
-
const
|
|
116
|
+
const responsiveVariant = mediaResult.breakpoint;
|
|
98
117
|
const nestedRules = [];
|
|
99
118
|
atRule.walkRules((rule) => {
|
|
100
119
|
nestedRules.push(rule);
|
|
101
120
|
});
|
|
102
121
|
for (const rule of nestedRules) {
|
|
103
|
-
const result = this.
|
|
122
|
+
const result = this.processRuleWithVariants(rule, [responsiveVariant]);
|
|
104
123
|
if (result) {
|
|
105
|
-
rules.push(result.
|
|
124
|
+
rules.push(...result.cssRules);
|
|
106
125
|
warnings.push(...result.conversionWarnings);
|
|
107
|
-
|
|
126
|
+
const anyConverted = result.cssRules.some(r => r.convertedClasses.length > 0);
|
|
127
|
+
if (anyConverted) {
|
|
108
128
|
hasChanges = true;
|
|
109
|
-
|
|
129
|
+
const allFullyConverted = result.cssRules.every(r => r.fullyConverted);
|
|
130
|
+
if (allFullyConverted) {
|
|
110
131
|
rule.remove();
|
|
111
|
-
|
|
132
|
+
const classNames = result.cssRules.map(r => r.className).join(', .');
|
|
133
|
+
logger_1.logger.verbose(`Removed rule .${classNames} in @media (min-width) → ${responsiveVariant}`);
|
|
112
134
|
}
|
|
113
135
|
else {
|
|
114
|
-
for (const cr of result.conversionResults) {
|
|
136
|
+
for (const cr of result.conversionResults.flat()) {
|
|
115
137
|
if (cr.converted) {
|
|
116
138
|
rule.walkDecls((decl) => {
|
|
117
139
|
if (decl.prop === cr.declaration.property && decl.value === cr.declaration.value) {
|
|
@@ -120,10 +142,13 @@ class CSSParser {
|
|
|
120
142
|
});
|
|
121
143
|
}
|
|
122
144
|
}
|
|
123
|
-
logger_1.logger.verbose(`Partial conversion
|
|
145
|
+
logger_1.logger.verbose(`Partial conversion in @media → ${responsiveVariant}`);
|
|
124
146
|
}
|
|
125
147
|
}
|
|
126
148
|
}
|
|
149
|
+
else {
|
|
150
|
+
warnings.push(`Skipped rule in @media: ${rule.selector}`);
|
|
151
|
+
}
|
|
127
152
|
}
|
|
128
153
|
if (atRule.nodes && atRule.nodes.length === 0) {
|
|
129
154
|
atRule.remove();
|
|
@@ -134,42 +159,39 @@ class CSSParser {
|
|
|
134
159
|
if (rule.parent && rule.parent.type === 'atrule') {
|
|
135
160
|
return;
|
|
136
161
|
}
|
|
137
|
-
|
|
138
|
-
warnings.push(`Skipped pseudo-selector: ${rule.selector}`);
|
|
139
|
-
logger_1.logger.verbose(`Skipping pseudo-selector: ${rule.selector}`);
|
|
140
|
-
return;
|
|
141
|
-
}
|
|
142
|
-
const classNameMatch = rule.selector.match(/^\.([a-zA-Z_-][a-zA-Z0-9_-]*)$/);
|
|
143
|
-
if (!classNameMatch) {
|
|
144
|
-
warnings.push(`Skipped complex selector: ${rule.selector}`);
|
|
145
|
-
logger_1.logger.verbose(`Skipping complex selector: ${rule.selector}`);
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
const result = this.processRule(rule);
|
|
162
|
+
const result = this.processRuleWithVariants(rule);
|
|
149
163
|
if (!result) {
|
|
164
|
+
const parsedSelectors = (0, pseudoSelectorResolver_1.parseMultipleSelectors)(rule.selector);
|
|
165
|
+
const allComplex = parsedSelectors.every(s => s.isComplex);
|
|
166
|
+
if (allComplex) {
|
|
167
|
+
const reasons = parsedSelectors.map(s => s.reason).filter(Boolean);
|
|
168
|
+
warnings.push(...reasons);
|
|
169
|
+
logger_1.logger.verbose(`Skipping complex selector: ${rule.selector}`);
|
|
170
|
+
}
|
|
150
171
|
return;
|
|
151
172
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
if (
|
|
173
|
+
rules.push(...result.cssRules);
|
|
174
|
+
warnings.push(...result.conversionWarnings);
|
|
175
|
+
const anyConverted = result.cssRules.some(r => r.convertedClasses.length > 0);
|
|
176
|
+
if (anyConverted) {
|
|
156
177
|
hasChanges = true;
|
|
157
|
-
|
|
178
|
+
const allFullyConverted = result.cssRules.every(r => r.fullyConverted);
|
|
179
|
+
if (allFullyConverted) {
|
|
158
180
|
rule.remove();
|
|
159
|
-
|
|
181
|
+
const classNames = result.cssRules.map(r => r.className).join(', .');
|
|
182
|
+
logger_1.logger.verbose(`Removed rule .${classNames} (all declarations converted)`);
|
|
160
183
|
}
|
|
161
184
|
else {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
removedCount++;
|
|
185
|
+
for (const cr of result.conversionResults.flat()) {
|
|
186
|
+
if (cr.converted) {
|
|
187
|
+
rule.walkDecls((decl) => {
|
|
188
|
+
if (decl.prop === cr.declaration.property && decl.value === cr.declaration.value) {
|
|
189
|
+
decl.remove();
|
|
190
|
+
}
|
|
191
|
+
});
|
|
170
192
|
}
|
|
171
|
-
}
|
|
172
|
-
logger_1.logger.verbose(`Partial conversion of
|
|
193
|
+
}
|
|
194
|
+
logger_1.logger.verbose(`Partial conversion of rule`);
|
|
173
195
|
}
|
|
174
196
|
}
|
|
175
197
|
});
|
|
@@ -196,7 +218,6 @@ class CSSParser {
|
|
|
196
218
|
parseInternalStyle(html) {
|
|
197
219
|
const styles = [];
|
|
198
220
|
const warnings = [];
|
|
199
|
-
// Simple regex to find style tags (this is safe for finding tags, not for parsing content)
|
|
200
221
|
const styleRegex = /<style[^>]*>([\s\S]*?)<\/style>/gi;
|
|
201
222
|
let match;
|
|
202
223
|
while ((match = styleRegex.exec(html)) !== null) {
|
|
@@ -214,7 +235,6 @@ class CSSParser {
|
|
|
214
235
|
let modifiedHtml = html;
|
|
215
236
|
let hasChanges = false;
|
|
216
237
|
const { styles } = this.parseInternalStyle(html);
|
|
217
|
-
// Process styles in reverse order to preserve indices
|
|
218
238
|
for (let i = styles.length - 1; i >= 0; i--) {
|
|
219
239
|
const style = styles[i];
|
|
220
240
|
try {
|
|
@@ -224,11 +244,9 @@ class CSSParser {
|
|
|
224
244
|
if (result.hasChanges) {
|
|
225
245
|
hasChanges = true;
|
|
226
246
|
if (result.canDelete || result.css.trim() === '') {
|
|
227
|
-
// Remove entire style tag
|
|
228
247
|
modifiedHtml = modifiedHtml.slice(0, style.start) + modifiedHtml.slice(style.end);
|
|
229
248
|
}
|
|
230
249
|
else {
|
|
231
|
-
// Replace style content
|
|
232
250
|
const before = modifiedHtml.slice(0, style.start);
|
|
233
251
|
const after = modifiedHtml.slice(style.end);
|
|
234
252
|
const tagStart = html.slice(style.start).match(/<style[^>]*>/)?.[0] || '<style>';
|
|
@@ -251,13 +269,11 @@ class CSSParser {
|
|
|
251
269
|
}
|
|
252
270
|
extractImportPaths(code) {
|
|
253
271
|
const imports = [];
|
|
254
|
-
// Match CSS imports
|
|
255
272
|
const importRegex = /import\s+['"]([^'"]+\.css)['"];?/g;
|
|
256
273
|
let match;
|
|
257
274
|
while ((match = importRegex.exec(code)) !== null) {
|
|
258
275
|
imports.push(match[1]);
|
|
259
276
|
}
|
|
260
|
-
// Match require statements
|
|
261
277
|
const requireRegex = /require\s*\(\s*['"]([^'"]+\.css)['"]\s*\)/g;
|
|
262
278
|
while ((match = requireRegex.exec(code)) !== null) {
|
|
263
279
|
imports.push(match[1]);
|
|
@@ -266,4 +282,4 @@ class CSSParser {
|
|
|
266
282
|
}
|
|
267
283
|
}
|
|
268
284
|
exports.CSSParser = CSSParser;
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nzc1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBbUU7QUFDbkUsOEVBQTZDO0FBRTdDLDJDQUF3QztBQUN4QyxtRUFPb0M7QUFnQ3BDLE1BQWEsU0FBUztJQUlwQixZQUFZLE1BQXNCLEVBQUUsT0FBbUQ7UUFDckYsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPO1lBQ3hCLENBQUMsQ0FBQyxJQUFBLGlEQUE0QixFQUFDLE9BQU8sQ0FBQztZQUN2QyxDQUFDLENBQUMsSUFBQSxtQ0FBYyxHQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLFdBQVcsQ0FDakIsSUFBVSxFQUNWLFVBQW1CO1FBRW5CLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQzdFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxZQUFZLEdBQWtCLEVBQUUsQ0FBQztRQUV2QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMvQixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsT0FBTztZ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SyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsTUFBTSxZQUFZLEdBQUcsNENBQTRDLENBQUM7UUFDbEUsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBeFVELDhCQXdVQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwb3N0Y3NzLCB7IFJvb3QsIFJ1bGUsIERlY2xhcmF0aW9uLCBBdFJ1bGUgfSBmcm9tICdwb3N0Y3NzJztcbmltcG9ydCBzYWZlUGFyc2VyIGZyb20gJ3Bvc3Rjc3Mtc2FmZS1wYXJzZXInO1xuaW1wb3J0IHsgVGFpbHdpbmRNYXBwZXIsIENTU1Byb3BlcnR5IH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5pbXBvcnQgeyBcbiAgQnJlYWtwb2ludCwgXG4gIGdldEJyZWFrcG9pbnRzLCBcbiAgcmVzb2x2ZUJyZWFrcG9pbnRzRnJvbUNvbmZpZyxcbiAgcHJvY2Vzc01lZGlhUXVlcnksIFxuICBwcmVmaXhXaXRoQnJlYWtwb2ludCxcbiAgY2xlYXJCcmVha3BvaW50Q2FjaGUgXG59IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcblxuZXhwb3J0IGludGVyZmFjZSBVdGlsaXR5V2l0aFZhcmlhbnQge1xuICB2YWx1ZTogc3RyaW5nO1xuICB2YXJpYW50Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENTU1J1bGUge1xuICBzZWxlY3Rvcjogc3RyaW5nO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdO1xuICBjb252ZXJ0ZWRDbGFzc2VzOiBzdHJpbmdbXTtcbiAgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aFZhcmlhbnRbXTtcbiAgYnJlYWtwb2ludD86IHN0cmluZztcbiAgc2tpcHBlZDogYm9vbGVhbjtcbiAgZnVsbHlDb252ZXJ0ZWQ6IGJvb2xlYW47XG4gIHBhcnRpYWxDb252ZXJzaW9uOiBib29sZWFuO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTUGFyc2VSZXN1bHQge1xuICBjc3M6IHN0cmluZztcbiAgcnVsZXM6IENTU1J1bGVbXTtcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgY2FuRGVsZXRlOiBib29sZWFuO1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTVXNhZ2VNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiBzdHJpbmdbXTsgLy8gY2xhc3NOYW1lIC0+IGZpbGUgcGF0aHNcbn1cblxuZXhwb3J0IGNsYXNzIENTU1BhcnNlciB7XG4gIHByaXZhdGUgbWFwcGVyOiBUYWlsd2luZE1hcHBlcjtcbiAgcHJpdmF0ZSBicmVha3BvaW50czogQnJlYWtwb2ludFtdO1xuXG4gIGNvbnN0cnVjdG9yKG1hcHBlcjogVGFpbHdpbmRNYXBwZXIsIHNjcmVlbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddPikge1xuICAgIHRoaXMubWFwcGVyID0gbWFwcGVyO1xuICAgIHRoaXMuYnJlYWtwb2ludHMgPSBzY3JlZW5zIFxuICAgICAgPyByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnKHNjcmVlbnMpIFxuICAgICAgOiBnZXRCcmVha3BvaW50cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUnVsZShcbiAgICBydWxlOiBSdWxlLFxuICAgIGJyZWFrcG9pbnQ/OiBzdHJpbmdcbiAgKTogeyBjc3NSdWxlOiBDU1NSdWxlOyBjb252ZXJzaW9uUmVzdWx0czogQXJyYXk8eyBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7IGNvbnZlcnRlZDogYm9vbGVhbjsgY2xhc3NOYW1lOiBzdHJpbmcgfCBudWxsIH0+OyBjb252ZXJzaW9uV2FybmluZ3M6IHN0cmluZ1tdIH0gfCBudWxsIHtcbiAgICBpZiAocnVsZS5zZWxlY3Rvci5pbmNsdWRlcygnOicpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWVNYXRjaCA9IHJ1bGUuc2VsZWN0b3IubWF0Y2goL15cXC4oW2EtekEtWl8tXVthLXpBLVowLTlfLV0qKSQvKTtcbiAgICBpZiAoIWNsYXNzTmFtZU1hdGNoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSBjbGFzc05hbWVNYXRjaFsxXTtcbiAgICBjb25zdCBkZWNsYXJhdGlvbnM6IENTU1Byb3BlcnR5W10gPSBbXTtcblxuICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICBpZiAoZGVjbC5wcm9wLnN0YXJ0c1dpdGgoJy0tJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVjbC52YWx1ZS5pbmNsdWRlcygnY2FsYygnKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlY2xhcmF0aW9ucy5wdXNoKHtcbiAgICAgICAgcHJvcGVydHk6IGRlY2wucHJvcCxcbiAgICAgICAgdmFsdWU6IGRlY2wudmFsdWVcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7XG4gICAgICBkZWNsYXJhdGlvbjogQ1NTUHJvcGVydHk7XG4gICAgICBjb252ZXJ0ZWQ6IGJvb2xlYW47XG4gICAgICBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgfT4gPSBbXTtcbiAgICBjb25zdCBjb252ZXJzaW9uV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBkZWNsYXJhdGlvbnMuZm9yRWFjaChkZWNsID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMubWFwcGVyLmNvbnZlcnRQcm9wZXJ0eShkZWNsLnByb3BlcnR5LCBkZWNsLnZhbHVlKTtcbiAgICAgIGNvbnZlcnNpb25SZXN1bHRzLnB1c2goe1xuICAgICAgICBkZWNsYXJhdGlvbjogZGVjbCxcbiAgICAgICAgY29udmVydGVkOiAhcmVzdWx0LnNraXBwZWQgJiYgcmVzdWx0LmNsYXNzTmFtZSAhPT0gbnVsbCxcbiAgICAgICAgY2xhc3NOYW1lOiByZXN1bHQuY2xhc3NOYW1lXG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuc2tpcHBlZCAmJiByZXN1bHQucmVhc29uKSB7XG4gICAgICAgIGNvbnZlcnNpb25XYXJuaW5ncy5wdXNoKHJlc3VsdC5yZWFzb24pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aFZhcmlhbnRbXSA9IGNvbnZlcnNpb25SZXN1bHRzXG4gICAgICAuZmlsdGVyKHIgPT4gci5jb252ZXJ0ZWQgJiYgci5jbGFzc05hbWUpXG4gICAgICAubWFwKHIgPT4gKHtcbiAgICAgICAgdmFsdWU6IHIuY2xhc3NOYW1lISxcbiAgICAgICAgdmFyaWFudDogYnJlYWtwb2ludFxuICAgICAgfSkpO1xuXG4gICAgY29uc3QgY29udmVydGVkQ2xhc3NlcyA9IHV0aWxpdGllcy5tYXAodSA9PiBcbiAgICAgIHUudmFyaWFudCA/IHByZWZpeFdpdGhCcmVha3BvaW50KHUudmFsdWUsIHUudmFyaWFudCkgOiB1LnZhbHVlXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCA9IGNvbnZlcnNpb25SZXN1bHRzLmV2ZXJ5KHIgPT4gci5jb252ZXJ0ZWQpO1xuICAgIGNvbnN0IHNvbWVEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCBjc3NSdWxlOiBDU1NSdWxlID0ge1xuICAgICAgc2VsZWN0b3I6IHJ1bGUuc2VsZWN0b3IsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICBjb252ZXJ0ZWRDbGFzc2VzLFxuICAgICAgdXRpbGl0aWVzLFxuICAgICAgYnJlYWtwb2ludCxcbiAgICAgIHNraXBwZWQ6ICFzb21lRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgZnVsbHlDb252ZXJ0ZWQ6IGFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgIHBhcnRpYWxDb252ZXJzaW9uOiBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkICYmICFhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICByZWFzb246ICFzb21lRGVjbGFyYXRpb25zQ29udmVydGVkID8gJ05vIGNvbnZlcnRpYmxlIGRlY2xhcmF0aW9ucycgOiB1bmRlZmluZWRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHsgY3NzUnVsZSwgY29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5ncyB9O1xuICB9XG5cbiAgYXN5bmMgcGFyc2UoY3NzOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPENTU1BhcnNlUmVzdWx0PiB7XG4gICAgY29uc3QgcnVsZXM6IENTU1J1bGVbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm9vdCA9IGF3YWl0IHBvc3Rjc3MoKS5wcm9jZXNzKGNzcywge1xuICAgICAgICBwYXJzZXI6IHNhZmVQYXJzZXIsXG4gICAgICAgIGZyb206IGZpbGVQYXRoXG4gICAgICB9KS50aGVuKHJlc3VsdCA9PiByZXN1bHQucm9vdCk7XG5cbiAgICAgIHJvb3Qud2Fsa0F0UnVsZXMoKGF0UnVsZSkgPT4ge1xuICAgICAgICBpZiAoYXRSdWxlLm5hbWUgIT09ICdtZWRpYScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZWRpYVJlc3VsdCA9IHByb2Nlc3NNZWRpYVF1ZXJ5KGF0UnVsZS5wYXJhbXMsIHRoaXMuYnJlYWtwb2ludHMpO1xuXG4gICAgICAgIGlmIChtZWRpYVJlc3VsdC5za2lwcGVkKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChtZWRpYVJlc3VsdC5yZWFzb24gfHwgYFNraXBwZWQgbWVkaWEgcXVlcnk6ICR7YXRSdWxlLnBhcmFtc31gKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBicmVha3BvaW50ID0gbWVkaWFSZXN1bHQuYnJlYWtwb2ludCE7XG5cbiAgICAgICAgY29uc3QgbmVzdGVkUnVsZXM6IFJ1bGVbXSA9IFtdO1xuICAgICAgICBhdFJ1bGUud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICAgICAgbmVzdGVkUnVsZXMucHVzaChydWxlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBydWxlIG9mIG5lc3RlZFJ1bGVzKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9jZXNzUnVsZShydWxlLCBicmVha3BvaW50KTtcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICBydWxlcy5wdXNoKHJlc3VsdC5jc3NSdWxlKTtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goLi4ucmVzdWx0LmNvbnZlcnNpb25XYXJuaW5ncyk7XG5cbiAgICAgICAgICAgIGlmIChyZXN1bHQuY3NzUnVsZS5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jc3NSdWxlLmZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBydWxlIC4ke3Jlc3VsdC5jc3NSdWxlLmNsYXNzTmFtZX0gaW4gQG1lZGlhIChtaW4td2lkdGgpIOKGkiAke2JyZWFrcG9pbnR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjciBvZiByZXN1bHQuY29udmVyc2lvblJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjci5jb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjbC5wcm9wID09PSBjci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSAmJiBkZWNsLnZhbHVlID09PSBjci5kZWNsYXJhdGlvbi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUGFydGlhbCBjb252ZXJzaW9uIG9mIC4ke3Jlc3VsdC5jc3NSdWxlLmNsYXNzTmFtZX0gaW4gQG1lZGlhIOKGkiAke2JyZWFrcG9pbnR9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgZW1wdHkgQG1lZGlhIHJ1bGVgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa1J1bGVzKChydWxlKSA9PiB7XG4gICAgICAgIGlmIChydWxlLnBhcmVudCAmJiBydWxlLnBhcmVudC50eXBlID09PSAnYXRydWxlJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChydWxlLnNlbGVjdG9yLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBTa2lwcGVkIHBzZXVkby1zZWxlY3RvcjogJHtydWxlLnNlbGVjdG9yfWApO1xuICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBTa2lwcGluZyBwc2V1ZG8tc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGFzc05hbWVNYXRjaCA9IHJ1bGUuc2VsZWN0b3IubWF0Y2goL15cXC4oW2EtekEtWl8tXVthLXpBLVowLTlfLV0qKSQvKTtcbiAgICAgICAgaWYgKCFjbGFzc05hbWVNYXRjaCkge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFNraXBwZWQgY29tcGxleCBzZWxlY3RvcjogJHtydWxlLnNlbGVjdG9yfWApO1xuICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBTa2lwcGluZyBjb21wbGV4IHNlbGVjdG9yOiAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9jZXNzUnVsZShydWxlKTtcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGNzc1J1bGUsIGNvbnZlcnNpb25SZXN1bHRzLCBjb252ZXJzaW9uV2FybmluZ3MgfSA9IHJlc3VsdDtcbiAgICAgICAgcnVsZXMucHVzaChjc3NSdWxlKTtcbiAgICAgICAgd2FybmluZ3MucHVzaCguLi5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgIGlmIChjc3NSdWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKGNzc1J1bGUuZnVsbHlDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBydWxlIC4ke2Nzc1J1bGUuY2xhc3NOYW1lfSAoYWxsICR7Y3NzUnVsZS5kZWNsYXJhdGlvbnMubGVuZ3RofSBkZWNsYXJhdGlvbnMgY29udmVydGVkKWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVtb3ZlZENvdW50ID0gMDtcbiAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHdhc0NvbnZlcnRlZCA9IGNvbnZlcnNpb25SZXN1bHRzLnNvbWUociA9PlxuICAgICAgICAgICAgICAgIHIuY29udmVydGVkICYmXG4gICAgICAgICAgICAgICAgci5kZWNsYXJhdGlvbi5wcm9wZXJ0eSA9PT0gZGVjbC5wcm9wICYmXG4gICAgICAgICAgICAgICAgci5kZWNsYXJhdGlvbi52YWx1ZSA9PT0gZGVjbC52YWx1ZVxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGlmICh3YXNDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICBkZWNsLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJlbW92ZWRDb3VudCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFBhcnRpYWwgY29udmVyc2lvbiBvZiAuJHtjc3NSdWxlLmNsYXNzTmFtZX06IHJlbW92ZWQgJHtyZW1vdmVkQ291bnR9LyR7Y3NzUnVsZS5kZWNsYXJhdGlvbnMubGVuZ3RofSBkZWNsYXJhdGlvbnNgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByb290LndhbGtBdFJ1bGVzKChhdFJ1bGUpID0+IHtcbiAgICAgICAgaWYgKGF0UnVsZS5ub2RlcyAmJiBhdFJ1bGUubm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYXRSdWxlLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2FuRGVsZXRlID0gcm9vdC5ub2Rlcy5sZW5ndGggPT09IDA7XG4gICAgICBjb25zdCBuZXdDc3MgPSByb290LnRvU3RyaW5nKCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNzczogbmV3Q3NzLFxuICAgICAgICBydWxlcyxcbiAgICAgICAgaGFzQ2hhbmdlcyxcbiAgICAgICAgY2FuRGVsZXRlLFxuICAgICAgICB3YXJuaW5nc1xuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBDU1MgJHtmaWxlUGF0aH06YCwgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDU1MgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VJbnRlcm5hbFN0eWxlKGh0bWw6IHN0cmluZyk6IHsgXG4gICAgc3R5bGVzOiBBcnJheTx7IGNvbnRlbnQ6IHN0cmluZzsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfT47XG4gICAgd2FybmluZ3M6IHN0cmluZ1tdO1xuICB9IHtcbiAgICBjb25zdCBzdHlsZXM6IEFycmF5PHsgY29udGVudDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PiA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gU2ltcGxlIHJlZ2V4IHRvIGZpbmQgc3R5bGUgdGFncyAodGhpcyBpcyBzYWZlIGZvciBmaW5kaW5nIHRhZ3MsIG5vdCBmb3IgcGFyc2luZyBjb250ZW50KVxuICAgIGNvbnN0IHN0eWxlUmVnZXggPSAvPHN0eWxlW14+XSo+KFtcXHNcXFNdKj8pPFxcL3N0eWxlPi9naTtcbiAgICBsZXQgbWF0Y2g7XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gc3R5bGVSZWdleC5leGVjKGh0bWwpKSAhPT0gbnVsbCkge1xuICAgICAgc3R5bGVzLnB1c2goe1xuICAgICAgICBjb250ZW50OiBtYXRjaFsxXS50cmltKCksXG4gICAgICAgIHN0YXJ0OiBtYXRjaC5pbmRleCxcbiAgICAgICAgZW5kOiBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3R5bGVzLCB3YXJuaW5ncyB9O1xuICB9XG5cbiAgYXN5bmMgcGFyc2VJbnRlcm5hbENTUyhodG1sOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHtcbiAgICBodG1sOiBzdHJpbmc7XG4gICAgcnVsZXM6IENTU1J1bGVbXTtcbiAgICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICAgIHdhcm5pbmdzOiBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIGNvbnN0IGFsbFJ1bGVzOiBDU1NSdWxlW10gPSBbXTtcbiAgICBjb25zdCBhbGxXYXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgbW9kaWZpZWRIdG1sID0gaHRtbDtcbiAgICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgeyBzdHlsZXMgfSA9IHRoaXMucGFyc2VJbnRlcm5hbFN0eWxlKGh0bWwpO1xuXG4gICAgLy8gUHJvY2VzcyBzdHlsZXMgaW4gcmV2ZXJzZSBvcmRlciB0byBwcmVzZXJ2ZSBpbmRpY2VzXG4gICAgZm9yIChsZXQgaSA9IHN0eWxlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3Qgc3R5bGUgPSBzdHlsZXNbaV07XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucGFyc2Uoc3R5bGUuY29udGVudCwgZmlsZVBhdGgpO1xuICAgICAgICBcbiAgICAgICAgYWxsUnVsZXMucHVzaCguLi5yZXN1bHQucnVsZXMpO1xuICAgICAgICBhbGxXYXJuaW5ncy5wdXNoKC4uLnJlc3VsdC53YXJuaW5ncyk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5oYXNDaGFuZ2VzKSB7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICBpZiAocmVzdWx0LmNhbkRlbGV0ZSB8fCByZXN1bHQuY3NzLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBlbnRpcmUgc3R5bGUgdGFnXG4gICAgICAgICAgICBtb2RpZmllZEh0bWwgPSBtb2RpZmllZEh0bWwuc2xpY2UoMCwgc3R5bGUuc3RhcnQpICsgbW9kaWZpZWRIdG1sLnNsaWNlKHN0eWxlLmVuZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlcGxhY2Ugc3R5bGUgY29udGVudFxuICAgICAgICAgICAgY29uc3QgYmVmb3JlID0gbW9kaWZpZWRIdG1sLnNsaWNlKDAsIHN0eWxlLnN0YXJ0KTtcbiAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gbW9kaWZpZWRIdG1sLnNsaWNlKHN0eWxlLmVuZCk7XG4gICAgICAgICAgICBjb25zdCB0YWdTdGFydCA9IGh0bWwuc2xpY2Uoc3R5bGUuc3RhcnQpLm1hdGNoKC88c3R5bGVbXj5dKj4vKT8uWzBdIHx8ICc8c3R5bGU+JztcbiAgICAgICAgICAgIGNvbnN0IHRhZ0VuZCA9ICc8L3N0eWxlPic7XG4gICAgICAgICAgICBtb2RpZmllZEh0bWwgPSBiZWZvcmUgKyB0YWdTdGFydCArICdcXG4nICsgcmVzdWx0LmNzcyArICdcXG4nICsgdGFnRW5kICsgYWZ0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIGludGVybmFsIHN0eWxlIGJsb2NrOiAke2Vycm9yfWApO1xuICAgICAgICBhbGxXYXJuaW5ncy5wdXNoKGBGYWlsZWQgdG8gcGFyc2UgaW50ZXJuYWwgc3R5bGU6ICR7ZXJyb3J9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGh0bWw6IG1vZGlmaWVkSHRtbCxcbiAgICAgIHJ1bGVzOiBhbGxSdWxlcyxcbiAgICAgIGhhc0NoYW5nZXMsXG4gICAgICB3YXJuaW5nczogYWxsV2FybmluZ3NcbiAgICB9O1xuICB9XG5cbiAgZXh0cmFjdEltcG9ydFBhdGhzKGNvZGU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIFxuICAgIC8vIE1hdGNoIENTUyBpbXBvcnRzXG4gICAgY29uc3QgaW1wb3J0UmVnZXggPSAvaW1wb3J0XFxzK1snXCJdKFteJ1wiXStcXC5jc3MpWydcIl07Py9nO1xuICAgIGxldCBtYXRjaDtcbiAgICBcbiAgICB3aGlsZSAoKG1hdGNoID0gaW1wb3J0UmVnZXguZXhlYyhjb2RlKSkgIT09IG51bGwpIHtcbiAgICAgIGltcG9ydHMucHVzaChtYXRjaFsxXSk7XG4gICAgfVxuXG4gICAgLy8gTWF0Y2ggcmVxdWlyZSBzdGF0ZW1lbnRzXG4gICAgY29uc3QgcmVxdWlyZVJlZ2V4ID0gL3JlcXVpcmVcXHMqXFwoXFxzKlsnXCJdKFteJ1wiXStcXC5jc3MpWydcIl1cXHMqXFwpL2c7XG4gICAgd2hpbGUgKChtYXRjaCA9IHJlcXVpcmVSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0cy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1wb3J0cztcbiAgfVxufVxuIl19
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nzc1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBbUU7QUFDbkUsOEVBQTZDO0FBRTdDLDJDQUF3QztBQUN4QyxtRUFLb0M7QUFDcEMsMkVBSXdDO0FBQ3hDLCtEQU1rQztBQStCbEMsTUFBYSxTQUFTO0lBSXBCLFlBQVksTUFBc0IsRUFBRSxPQUFtRDtRQUNyRixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU87WUFDeEIsQ0FBQyxDQUFDLElBQUEsaURBQTRCLEVBQUMsT0FBTyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxJQUFBLG1DQUFjLEdBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sbUJBQW1CLENBQUMsWUFBMkI7UUFLckQsTUFBTSxpQkFBaUIsR0FJbEIsRUFBRSxDQUFDO1FBQ1IsTUFBTSxrQkFBa0IsR0FBYSxFQUFFLENBQUM7UUFFeEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN0RSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixTQUFTLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssSUFBSTtnQkFDdkQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2FBQzVCLENBQUMsQ0FBQztZQUNILElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMs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LENBQUMsbUNBQW1DLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDL0QsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFlBQVk7WUFDbEIsS0FBSyxFQUFFLFFBQVE7WUFDZixVQUFVO1lBQ1YsUUFBUSxFQUFFLFdBQVc7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFZO1FBQzdCLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUU3QixNQUFNLFdBQVcsR0FBRyxtQ0FBbUMsQ0FBQztRQUN4RCxJQUFJLEtBQUssQ0FBQztRQUVWLE9BQU8sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLDRDQUE0QyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQTNWRCw4QkEyVkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcG9zdGNzcywgeyBSb290LCBSdWxlLCBEZWNsYXJhdGlvbiwgQXRSdWxlIH0gZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgc2FmZVBhcnNlciBmcm9tICdwb3N0Y3NzLXNhZmUtcGFyc2VyJztcbmltcG9ydCB7IFRhaWx3aW5kTWFwcGVyLCBDU1NQcm9wZXJ0eSB9IGZyb20gJy4vdGFpbHdpbmRNYXBwZXInO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgXG4gIEJyZWFrcG9pbnQsIFxuICBnZXRCcmVha3BvaW50cywgXG4gIHJlc29sdmVCcmVha3BvaW50c0Zyb21Db25maWcsXG4gIHByb2Nlc3NNZWRpYVF1ZXJ5IFxufSBmcm9tICcuL3V0aWxzL2JyZWFrcG9pbnRSZXNvbHZlcic7XG5pbXBvcnQge1xuICBwcm9jZXNzUHNldWRvU2VsZWN0b3IsXG4gIHBhcnNlTXVsdGlwbGVTZWxlY3RvcnMsXG4gIFBhcnNlZFNlbGVjdG9yXG59IGZyb20gJy4vdXRpbHMvcHNldWRvU2VsZWN0b3JSZXNvbHZlcic7XG5pbXBvcnQge1xuICBhc3NlbWJsZVV0aWxpdHksXG4gIGFzc2VtYmxlVXRpbGl0aWVzLFxuICBNZXJnZWRVdGlsaXR5LFxuICBtZXJnZVV0aWxpdGllcyxcbiAgbm9ybWFsaXplVmFyaWFudE9yZGVyXG59IGZyb20gJy4vdXRpbHMvdmFyaWFudEFzc2VtYmxlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXRpbGl0eVdpdGhWYXJpYW50IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgdmFyaWFudHM6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENTU1J1bGUge1xuICBzZWxlY3Rvcjogc3RyaW5nO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdO1xuICBjb252ZXJ0ZWRDbGFzc2VzOiBzdHJpbmdbXTtcbiAgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aFZhcmlhbnRbXTtcbiAgc2tpcHBlZDogYm9vbGVhbjtcbiAgZnVsbHlDb252ZXJ0ZWQ6IGJvb2xlYW47XG4gIHBhcnRpYWxDb252ZXJzaW9uOiBib29sZWFuO1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTUGFyc2VSZXN1bHQge1xuICBjc3M6IHN0cmluZztcbiAgcnVsZXM6IENTU1J1bGVbXTtcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgY2FuRGVsZXRlOiBib29sZWFuO1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ1NTVXNhZ2VNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIENTU1BhcnNlciB7XG4gIHByaXZhdGUgbWFwcGVyOiBUYWlsd2luZE1hcHBlcjtcbiAgcHJpdmF0ZSBicmVha3BvaW50czogQnJlYWtwb2ludFtdO1xuXG4gIGNvbnN0cnVjdG9yKG1hcHBlcjogVGFpbHdpbmRNYXBwZXIsIHNjcmVlbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBbc3RyaW5nLCBzdHJpbmddPikge1xuICAgIHRoaXMubWFwcGVyID0gbWFwcGVyO1xuICAgIHRoaXMuYnJlYWtwb2ludHMgPSBzY3JlZW5zIFxuICAgICAgPyByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnKHNjcmVlbnMpIFxuICAgICAgOiBnZXRCcmVha3BvaW50cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGVjbGFyYXRpb25zKGRlY2xhcmF0aW9uczogQ1NTUHJvcGVydHlbXSk6IHtcbiAgICB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdO1xuICAgIGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGwgfT47XG4gICAgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXTtcbiAgfSB7XG4gICAgY29uc3QgY29udmVyc2lvblJlc3VsdHM6IEFycmF5PHtcbiAgICAgIGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTtcbiAgICAgIGNvbnZlcnRlZDogYm9vbGVhbjtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICB9PiA9IFtdO1xuICAgIGNvbnN0IGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgIGRlY2xhcmF0aW9ucy5mb3JFYWNoKGRlY2wgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5tYXBwZXIuY29udmVydFByb3BlcnR5KGRlY2wucHJvcGVydHksIGRlY2wudmFsdWUpO1xuICAgICAgY29udmVyc2lvblJlc3VsdHMucHVzaCh7XG4gICAgICAgIGRlY2xhcmF0aW9uOiBkZWNsLFxuICAgICAgICBjb252ZXJ0ZWQ6ICFyZXN1bHQuc2tpcHBlZCAmJiByZXN1bHQuY2xhc3NOYW1lICE9PSBudWxsLFxuICAgICAgICBjbGFzc05hbWU6IHJlc3VsdC5jbGFzc05hbWVcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlc3VsdC5za2lwcGVkICYmIHJlc3VsdC5yZWFzb24pIHtcbiAgICAgICAgY29udmVyc2lvbldhcm5pbmdzLnB1c2gocmVzdWx0LnJlYXNvbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoVmFyaWFudFtdID0gY29udmVyc2lvblJlc3VsdHNcbiAgICAgIC5maWx0ZXIociA9PiByLmNvbnZlcnRlZCAmJiByLmNsYXNzTmFtZSlcbiAgICAgIC5tYXAociA9PiAoe1xuICAgICAgICB2YWx1ZTogci5jbGFzc05hbWUhLFxuICAgICAgICB2YXJpYW50czogW11cbiAgICAgIH0pKTtcblxuICAgIHJldHVybiB7IHV0aWxpdGllcywgY29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5ncyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUnVsZVdpdGhWYXJpYW50cyhcbiAgICBydWxlOiBSdWxlLFxuICAgIGFkZGl0aW9uYWxWYXJpYW50czogc3RyaW5nW10gPSBbXVxuICApOiB7IGNzc1J1bGVzOiBDU1NSdWxlW107IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGwgfT5bXTsgY29udmVyc2lvbldhcm5pbmdzOiBzdHJpbmdbXSB9IHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBydWxlLnNlbGVjdG9yO1xuICAgIGNvbnN0IHBhcnNlZFNlbGVjdG9ycyA9IHBhcnNlTXVsdGlwbGVTZWxlY3RvcnMoc2VsZWN0b3IpO1xuICAgIFxuICAgIGNvbnN0IHZhbGlkU2VsZWN0b3JzID0gcGFyc2VkU2VsZWN0b3JzLmZpbHRlcihzID0+ICFzLmlzQ29tcGxleCAmJiBzLmJhc2VDbGFzcyk7XG4gICAgXG4gICAgaWYgKHZhbGlkU2VsZWN0b3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdID0gW107XG5cbiAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgaWYgKGRlY2wucHJvcC5zdGFydHNXaXRoKCctLScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2wudmFsdWUuaW5jbHVkZXMoJ2NhbGMoJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgIHByb3BlcnR5OiBkZWNsLnByb3AsXG4gICAgICAgIHZhbHVlOiBkZWNsLnZhbHVlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB7IHV0aWxpdGllcywgY29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5ncyB9ID0gdGhpcy5jb252ZXJ0RGVjbGFyYXRpb25zKGRlY2xhcmF0aW9ucyk7XG4gICAgXG4gICAgY29uc3QgdXRpbGl0aWVzV2l0aFZhcmlhbnRzID0gdXRpbGl0aWVzLm1hcCh1ID0+ICh7XG4gICAgICB2YWx1ZTogdS52YWx1ZSxcbiAgICAgIHZhcmlhbnRzOiBub3JtYWxpemVWYXJpYW50T3JkZXIoWy4uLnUudmFyaWFudHMsIC4uLmFkZGl0aW9uYWxWYXJpYW50c10pXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY3NzUnVsZXM6IENTU1J1bGVbXSA9IFtdO1xuICAgIGNvbnN0IGFsbENvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7IGRlY2xhcmF0aW9uOiBDU1NQcm9wZXJ0eTsgY29udmVydGVkOiBib29sZWFuOyBjbGFzc05hbWU6IHN0cmluZyB8IG51bGwgfT5bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJzZWQgb2YgdmFsaWRTZWxlY3RvcnMpIHtcbiAgICAgIGNvbnN0IHBzZXVkb1ZhcmlhbnRzID0gcGFyc2VkLnBzZXVkb3MgfHwgW107XG4gICAgICBjb25zdCBhbGxWYXJpYW50cyA9IG5vcm1hbGl6ZVZhcmlhbnRPcmRlcihbLi4ucHNldWRvVmFyaWFudHMsIC4uLmFkZGl0aW9uYWxWYXJpYW50c10pO1xuICAgICAgXG4gICAgICBjb25zdCB1dGlsaXRpZXNGb3JTZWxlY3RvciA9IHV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgICB2YWx1ZTogdS52YWx1ZSxcbiAgICAgICAgdmFyaWFudHM6IGFsbFZhcmlhbnRzXG4gICAgICB9KSk7XG5cbiAgICAgIGNvbnN0IGNvbnZlcnRlZENsYXNzZXMgPSBhc3NlbWJsZVV0aWxpdGllcyh1dGlsaXRpZXNGb3JTZWxlY3Rvcik7XG5cbiAgICAgIGNvbnN0IGFsbERlY2xhcmF0aW9uc0NvbnZlcnRlZCA9IGNvbnZlcnNpb25SZXN1bHRzLmV2ZXJ5KHIgPT4gci5jb252ZXJ0ZWQpO1xuICAgICAgY29uc3Qgc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA9IGNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMDtcblxuICAgICAgY29uc3QgY3NzUnVsZTogQ1NTUnVsZSA9IHtcbiAgICAgICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgICAgICBjbGFzc05hbWU6IHBhcnNlZC5iYXNlQ2xhc3MsXG4gICAgICAgIGRlY2xhcmF0aW9ucyxcbiAgICAgICAgY29udmVydGVkQ2xhc3NlcyxcbiAgICAgICAgdXRpbGl0aWVzOiB1dGlsaXRpZXNGb3JTZWxlY3RvcixcbiAgICAgICAgc2tpcHBlZDogIXNvbWVEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICAgIGZ1bGx5Q29udmVydGVkOiBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICAgIHBhcnRpYWxDb252ZXJzaW9uOiBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkICYmICFhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICAgIHJlYXNvbjogIXNvbWVEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPyAnTm8gY29udmVydGlibGUgZGVjbGFyYXRpb25zJyA6IHVuZGVmaW5lZFxuICAgICAgfTtcblxuICAgICAgY3NzUnVsZXMucHVzaChjc3NSdWxlKTtcbiAgICAgIGFsbENvbnZlcnNpb25SZXN1bHRzLnB1c2goY29udmVyc2lvblJlc3VsdHMpO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNzc1J1bGVzLCBjb252ZXJzaW9uUmVzdWx0czogYWxsQ29udmVyc2lvblJlc3VsdHMsIGNvbnZlcnNpb25XYXJuaW5ncyB9O1xuICB9XG5cbiAgYXN5bmMgcGFyc2UoY3NzOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPENTU1BhcnNlUmVzdWx0PiB7XG4gICAgY29uc3QgcnVsZXM6IENTU1J1bGVbXSA9IFtdO1xuICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgcm9vdCA9IGF3YWl0IHBvc3Rjc3MoKS5wcm9jZXNzKGNzcywge1xuICAgICAgICBwYXJzZXI6IHNhZmVQYXJzZXIsXG4gICAgICAgIGZyb206IGZpbGVQYXRoXG4gICAgICB9KS50aGVuKHJlc3VsdCA9PiByZXN1bHQucm9vdCk7XG5cbiAgICAgIHJvb3Qud2Fsa0F0UnVsZXMoKGF0UnVsZSkgPT4ge1xuICAgICAgICBpZiAoYXRSdWxlLm5hbWUgIT09ICdtZWRpYScpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZWRpYVJlc3VsdCA9IHByb2Nlc3NNZWRpYVF1ZXJ5KGF0UnVsZS5wYXJhbXMsIHRoaXMuYnJlYWtwb2ludHMpO1xuXG4gICAgICAgIGlmIChtZWRpYVJlc3VsdC5za2lwcGVkKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChtZWRpYVJlc3VsdC5yZWFzb24gfHwgYFNraXBwZWQgbWVkaWEgcXVlcnk6ICR7YXRSdWxlLnBhcmFtc31gKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXNwb25zaXZlVmFyaWFudCA9IG1lZGlhUmVzdWx0LmJyZWFrcG9pbnQhO1xuXG4gICAgICAgIGNvbnN0IG5lc3RlZFJ1bGVzOiBSdWxlW10gPSBbXTtcbiAgICAgICAgYXRSdWxlLndhbGtSdWxlcygocnVsZSkgPT4ge1xuICAgICAgICAgIG5lc3RlZFJ1bGVzLnB1c2gocnVsZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAoY29uc3QgcnVsZSBvZiBuZXN0ZWRSdWxlcykge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJvY2Vzc1J1bGVXaXRoVmFyaWFudHMocnVsZSwgW3Jlc3BvbnNpdmVWYXJpYW50XSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgcnVsZXMucHVzaCguLi5yZXN1bHQuY3NzUnVsZXMpO1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaCguLi5yZXN1bHQuY29udmVyc2lvbldhcm5pbmdzKTtcblxuICAgICAgICAgICAgY29uc3QgYW55Q29udmVydGVkID0gcmVzdWx0LmNzc1J1bGVzLnNvbWUociA9PiByLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICBpZiAoYW55Q29udmVydGVkKSB7XG4gICAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGFsbEZ1bGx5Q29udmVydGVkID0gcmVzdWx0LmNzc1J1bGVzLmV2ZXJ5KHIgPT4gci5mdWxseUNvbnZlcnRlZCk7XG4gICAgICAgICAgICAgIGlmIChhbGxGdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lcyA9IHJlc3VsdC5jc3NSdWxlcy5tYXAociA9PiByLmNsYXNzTmFtZSkuam9pbignLCAuJyk7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgcnVsZSAuJHtjbGFzc05hbWVzfSBpbiBAbWVkaWEgKG1pbi13aWR0aCkg4oaSICR7cmVzcG9uc2l2ZVZhcmlhbnR9YCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjciBvZiByZXN1bHQuY29udmVyc2lvblJlc3VsdHMuZmxhdCgpKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2wucHJvcCA9PT0gY3IuZGVjbGFyYXRpb24ucHJvcGVydHkgJiYgZGVjbC52YWx1ZSA9PT0gY3IuZGVjbGFyYXRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFBhcnRpYWwgY29udmVyc2lvbiBpbiBAbWVkaWEg4oaSICR7cmVzcG9uc2l2ZVZhcmlhbnR9YCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaChgU2tpcHBlZCBydWxlIGluIEBtZWRpYTogJHtydWxlLnNlbGVjdG9yfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhdFJ1bGUubm9kZXMgJiYgYXRSdWxlLm5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGF0UnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBlbXB0eSBAbWVkaWEgcnVsZWApO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcm9vdC53YWxrUnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgICAgaWYgKHJ1bGUucGFyZW50ICYmIHJ1bGUucGFyZW50LnR5cGUgPT09ICdhdHJ1bGUnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcm9jZXNzUnVsZVdpdGhWYXJpYW50cyhydWxlKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkU2VsZWN0b3JzID0gcGFyc2VNdWx0aXBsZVNlbGVjdG9ycyhydWxlLnNlbGVjdG9yKTtcbiAgICAgICAgICBjb25zdCBhbGxDb21wbGV4ID0gcGFyc2VkU2VsZWN0b3JzLmV2ZXJ5KHMgPT4gcy5pc0NvbXBsZXgpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChhbGxDb21wbGV4KSB7XG4gICAgICAgICAgICBjb25zdCByZWFzb25zID0gcGFyc2VkU2VsZWN0b3JzLm1hcChzID0+IHMucmVhc29uKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnJlYXNvbnMgYXMgc3RyaW5nW10pO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFNraXBwaW5nIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcnVsZXMucHVzaCguLi5yZXN1bHQuY3NzUnVsZXMpO1xuICAgICAgICB3YXJuaW5ncy5wdXNoKC4uLnJlc3VsdC5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgIGNvbnN0IGFueUNvbnZlcnRlZCA9IHJlc3VsdC5jc3NSdWxlcy5zb21lKHIgPT4gci5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApO1xuICAgICAgICBpZiAoYW55Q29udmVydGVkKSB7XG4gICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG5cbiAgICAgICAgICBjb25zdCBhbGxGdWxseUNvbnZlcnRlZCA9IHJlc3VsdC5jc3NSdWxlcy5ldmVyeShyID0+IHIuZnVsbHlDb252ZXJ0ZWQpO1xuICAgICAgICAgIGlmIChhbGxGdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgcnVsZS5yZW1vdmUoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSByZXN1bHQuY3NzUnVsZXMubWFwKHIgPT4gci5jbGFzc05hbWUpLmpvaW4oJywgLicpO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlbW92ZWQgcnVsZSAuJHtjbGFzc05hbWVzfSAoYWxsIGRlY2xhcmF0aW9ucyBjb252ZXJ0ZWQpYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY3Igb2YgcmVzdWx0LmNvbnZlcnNpb25SZXN1bHRzLmZsYXQoKSkge1xuICAgICAgICAgICAgICBpZiAoY3IuY29udmVydGVkKSB7XG4gICAgICAgICAgICAgICAgcnVsZS53YWxrRGVjbHMoKGRlY2wpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChkZWNsLnByb3AgPT09IGNyLmRlY2xhcmF0aW9uLnByb3BlcnR5ICYmIGRlY2wudmFsdWUgPT09IGNyLmRlY2xhcmF0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGBQYXJ0aWFsIGNvbnZlcnNpb24gb2YgcnVsZWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJvb3Qud2Fsa0F0UnVsZXMoKGF0UnVsZSkgPT4ge1xuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjYW5EZWxldGUgPSByb290Lm5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICAgIGNvbnN0IG5ld0NzcyA9IHJvb3QudG9TdHJpbmcoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3NzOiBuZXdDc3MsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBoYXNDaGFuZ2VzLFxuICAgICAgICBjYW5EZWxldGUsXG4gICAgICAgIHdhcm5pbmdzXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIENTUyAke2ZpbGVQYXRofTpgLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENTUyBwYXJzaW5nIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZUludGVybmFsU3R5bGUoaHRtbDogc3RyaW5nKTogeyBcbiAgICBzdHlsZXM6IEFycmF5PHsgY29udGVudDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IHN0eWxlczogQXJyYXk8eyBjb250ZW50OiBzdHJpbmc7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+ID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICBjb25zdCBzdHlsZVJlZ2V4ID0gLzxzdHlsZVtePl0qPihbXFxzXFxTXSo/KTxcXC9zdHlsZT4vZ2k7XG4gICAgbGV0IG1hdGNoO1xuXG4gICAgd2hpbGUgKChtYXRjaCA9IHN0eWxlUmVnZXguZXhlYyhodG1sKSkgIT09IG51bGwpIHtcbiAgICAgIHN0eWxlcy5wdXNoKHtcbiAgICAgICAgY29udGVudDogbWF0Y2hbMV0udHJpbSgpLFxuICAgICAgICBzdGFydDogbWF0Y2guaW5kZXgsXG4gICAgICAgIGVuZDogbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7IHN0eWxlcywgd2FybmluZ3MgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlSW50ZXJuYWxDU1MoaHRtbDogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTx7XG4gICAgaHRtbDogc3RyaW5nO1xuICAgIHJ1bGVzOiBDU1NSdWxlW107XG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0+IHtcbiAgICBjb25zdCBhbGxSdWxlczogQ1NTUnVsZVtdID0gW107XG4gICAgY29uc3QgYWxsV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IG1vZGlmaWVkSHRtbCA9IGh0bWw7XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHsgc3R5bGVzIH0gPSB0aGlzLnBhcnNlSW50ZXJuYWxTdHlsZShodG1sKTtcblxuICAgIGZvciAobGV0IGkgPSBzdHlsZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gc3R5bGVzW2ldO1xuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnBhcnNlKHN0eWxlLmNvbnRlbnQsIGZpbGVQYXRoKTtcbiAgICAgICAgXG4gICAgICAgIGFsbFJ1bGVzLnB1c2goLi4ucmVzdWx0LnJ1bGVzKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaCguLi5yZXN1bHQud2FybmluZ3MpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKHJlc3VsdC5jYW5EZWxldGUgfHwgcmVzdWx0LmNzcy50cmltKCkgPT09ICcnKSB7XG4gICAgICAgICAgICBtb2RpZmllZEh0bWwgPSBtb2RpZmllZEh0bWwuc2xpY2UoMCwgc3R5bGUuc3RhcnQpICsgbW9kaWZpZWRIdG1sLnNsaWNlKHN0eWxlLmVuZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IG1vZGlmaWVkSHRtbC5zbGljZSgwLCBzdHlsZS5zdGFydCk7XG4gICAgICAgICAgICBjb25zdCBhZnRlciA9IG1vZGlmaWVkSHRtbC5zbGljZShzdHlsZS5lbmQpO1xuICAgICAgICAgICAgY29uc3QgdGFnU3RhcnQgPSBodG1sLnNsaWNlKHN0eWxlLnN0YXJ0KS5tYXRjaCgvPHN0eWxlW14+XSo+Lyk/LlswXSB8fCAnPHN0eWxlPic7XG4gICAgICAgICAgICBjb25zdCB0YWdFbmQgPSAnPC9zdHlsZT4nO1xuICAgICAgICAgICAgbW9kaWZpZWRIdG1sID0gYmVmb3JlICsgdGFnU3RhcnQgKyAnXFxuJyArIHJlc3VsdC5jc3MgKyAnXFxuJyArIHRhZ0VuZCArIGFmdGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBzdHlsZSBibG9jazogJHtlcnJvcn1gKTtcbiAgICAgICAgYWxsV2FybmluZ3MucHVzaChgRmFpbGVkIHRvIHBhcnNlIGludGVybmFsIHN0eWxlOiAke2Vycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBodG1sOiBtb2RpZmllZEh0bWwsXG4gICAgICBydWxlczogYWxsUnVsZXMsXG4gICAgICBoYXNDaGFuZ2VzLFxuICAgICAgd2FybmluZ3M6IGFsbFdhcm5pbmdzXG4gICAgfTtcbiAgfVxuXG4gIGV4dHJhY3RJbXBvcnRQYXRocyhjb2RlOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgaW1wb3J0czogc3RyaW5nW10gPSBbXTtcbiAgICBcbiAgICBjb25zdCBpbXBvcnRSZWdleCA9IC9pbXBvcnRcXHMrWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXTs/L2c7XG4gICAgbGV0IG1hdGNoO1xuICAgIFxuICAgIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0cy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1aXJlUmVnZXggPSAvcmVxdWlyZVxccypcXChcXHMqWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXVxccypcXCkvZztcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVxdWlyZVJlZ2V4LmV4ZWMoY29kZSkpICE9PSBudWxsKSB7XG4gICAgICBpbXBvcnRzLnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBvcnRzO1xuICB9XG59Il19
|
package/dist/index.d.ts
CHANGED
|
@@ -7,3 +7,5 @@ export { FileWriter, FileWriteOptions } from './fileWriter';
|
|
|
7
7
|
export { loadTailwindConfig, TailwindConfig } from './utils/config';
|
|
8
8
|
export { logger } from './utils/logger';
|
|
9
9
|
export { Breakpoint, MediaQueryInfo, getDefaultBreakpoints, resolveBreakpointsFromConfig, parseMediaQuery, findBreakpointForMinWidth, processMediaQuery, prefixWithBreakpoint } from './utils/breakpointResolver';
|
|
10
|
+
export { ParsedSelector, PSEUDO_TO_VARIANT, SUPPORTED_PSEUDOS, parseSelector, mapPseudoToVariant, processPseudoSelector, parseMultipleSelectors } from './utils/pseudoSelectorResolver';
|
|
11
|
+
export { VARIANT_ORDER, isResponsiveVariant, isPseudoVariant, sortVariants, deduplicateVariants, normalizeVariantOrder, assembleUtility, assembleUtilities, mergeUtilities, MergedUtility } from './utils/variantAssembler';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prefixWithBreakpoint = exports.processMediaQuery = exports.findBreakpointForMinWidth = exports.parseMediaQuery = exports.resolveBreakpointsFromConfig = exports.getDefaultBreakpoints = exports.logger = exports.loadTailwindConfig = exports.FileWriter = exports.CSSParser = exports.JSXParser = exports.TailwindMapper = exports.transformFiles = exports.scanProject = void 0;
|
|
3
|
+
exports.mergeUtilities = exports.assembleUtilities = exports.assembleUtility = exports.normalizeVariantOrder = exports.deduplicateVariants = exports.sortVariants = exports.isPseudoVariant = exports.isResponsiveVariant = exports.VARIANT_ORDER = exports.parseMultipleSelectors = exports.processPseudoSelector = exports.mapPseudoToVariant = exports.parseSelector = exports.SUPPORTED_PSEUDOS = exports.PSEUDO_TO_VARIANT = exports.prefixWithBreakpoint = exports.processMediaQuery = exports.findBreakpointForMinWidth = exports.parseMediaQuery = exports.resolveBreakpointsFromConfig = exports.getDefaultBreakpoints = exports.logger = exports.loadTailwindConfig = exports.FileWriter = exports.CSSParser = exports.JSXParser = exports.TailwindMapper = exports.transformFiles = exports.scanProject = void 0;
|
|
4
4
|
// Export public API
|
|
5
5
|
var scanner_1 = require("./scanner");
|
|
6
6
|
Object.defineProperty(exports, "scanProject", { enumerable: true, get: function () { return scanner_1.scanProject; } });
|
|
@@ -25,4 +25,21 @@ Object.defineProperty(exports, "parseMediaQuery", { enumerable: true, get: funct
|
|
|
25
25
|
Object.defineProperty(exports, "findBreakpointForMinWidth", { enumerable: true, get: function () { return breakpointResolver_1.findBreakpointForMinWidth; } });
|
|
26
26
|
Object.defineProperty(exports, "processMediaQuery", { enumerable: true, get: function () { return breakpointResolver_1.processMediaQuery; } });
|
|
27
27
|
Object.defineProperty(exports, "prefixWithBreakpoint", { enumerable: true, get: function () { return breakpointResolver_1.prefixWithBreakpoint; } });
|
|
28
|
-
|
|
28
|
+
var pseudoSelectorResolver_1 = require("./utils/pseudoSelectorResolver");
|
|
29
|
+
Object.defineProperty(exports, "PSEUDO_TO_VARIANT", { enumerable: true, get: function () { return pseudoSelectorResolver_1.PSEUDO_TO_VARIANT; } });
|
|
30
|
+
Object.defineProperty(exports, "SUPPORTED_PSEUDOS", { enumerable: true, get: function () { return pseudoSelectorResolver_1.SUPPORTED_PSEUDOS; } });
|
|
31
|
+
Object.defineProperty(exports, "parseSelector", { enumerable: true, get: function () { return pseudoSelectorResolver_1.parseSelector; } });
|
|
32
|
+
Object.defineProperty(exports, "mapPseudoToVariant", { enumerable: true, get: function () { return pseudoSelectorResolver_1.mapPseudoToVariant; } });
|
|
33
|
+
Object.defineProperty(exports, "processPseudoSelector", { enumerable: true, get: function () { return pseudoSelectorResolver_1.processPseudoSelector; } });
|
|
34
|
+
Object.defineProperty(exports, "parseMultipleSelectors", { enumerable: true, get: function () { return pseudoSelectorResolver_1.parseMultipleSelectors; } });
|
|
35
|
+
var variantAssembler_1 = require("./utils/variantAssembler");
|
|
36
|
+
Object.defineProperty(exports, "VARIANT_ORDER", { enumerable: true, get: function () { return variantAssembler_1.VARIANT_ORDER; } });
|
|
37
|
+
Object.defineProperty(exports, "isResponsiveVariant", { enumerable: true, get: function () { return variantAssembler_1.isResponsiveVariant; } });
|
|
38
|
+
Object.defineProperty(exports, "isPseudoVariant", { enumerable: true, get: function () { return variantAssembler_1.isPseudoVariant; } });
|
|
39
|
+
Object.defineProperty(exports, "sortVariants", { enumerable: true, get: function () { return variantAssembler_1.sortVariants; } });
|
|
40
|
+
Object.defineProperty(exports, "deduplicateVariants", { enumerable: true, get: function () { return variantAssembler_1.deduplicateVariants; } });
|
|
41
|
+
Object.defineProperty(exports, "normalizeVariantOrder", { enumerable: true, get: function () { return variantAssembler_1.normalizeVariantOrder; } });
|
|
42
|
+
Object.defineProperty(exports, "assembleUtility", { enumerable: true, get: function () { return variantAssembler_1.assembleUtility; } });
|
|
43
|
+
Object.defineProperty(exports, "assembleUtilities", { enumerable: true, get: function () { return variantAssembler_1.assembleUtilities; } });
|
|
44
|
+
Object.defineProperty(exports, "mergeUtilities", { enumerable: true, get: function () { return variantAssembler_1.mergeUtilities; } });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0JBQW9CO0FBQ3BCLHFDQUFxRDtBQUE1QyxzR0FBQSxXQUFXLE9BQUE7QUFDcEIsNkNBQW1GO0FBQTFFLDZHQUFBLGNBQWMsT0FBQTtBQUN2QixtREFBaUY7QUFBeEUsZ0hBQUEsY0FBYyxPQUFBO0FBQ3ZCLHlDQUEyRTtBQUFsRSxzR0FBQSxTQUFTLE9BQUE7QUFDbEIseUNBQXFGO0FBQTVFLHNHQUFBLFNBQVMsT0FBQTtBQUNsQiwyQ0FBNEQ7QUFBbkQsd0dBQUEsVUFBVSxPQUFBO0FBQ25CLHlDQUFvRTtBQUEzRCw0R0FBQSxrQkFBa0IsT0FBQTtBQUMzQix5Q0FBd0M7QUFBL0IsZ0dBQUEsTUFBTSxPQUFBO0FBQ2YsaUVBU29DO0FBTmxDLDJIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLGtJQUFBLDRCQUE0QixPQUFBO0FBQzVCLHFIQUFBLGVBQWUsT0FBQTtBQUNmLCtIQUFBLHlCQUF5QixPQUFBO0FBQ3pCLHVIQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDBIQUFBLG9CQUFvQixPQUFBO0FBRXRCLHlFQVF3QztBQU50QywySEFBQSxpQkFBaUIsT0FBQTtBQUNqQiwySEFBQSxpQkFBaUIsT0FBQTtBQUNqQix1SEFBQSxhQUFhLE9BQUE7QUFDYiw0SEFBQSxrQkFBa0IsT0FBQTtBQUNsQiwrSEFBQSxxQkFBcUIsT0FBQTtBQUNyQixnSUFBQSxzQkFBc0IsT0FBQTtBQUV4Qiw2REFXa0M7QUFWaEMsaUhBQUEsYUFBYSxPQUFBO0FBQ2IsdUhBQUEsbUJBQW1CLE9BQUE7QUFDbkIsbUhBQUEsZUFBZSxPQUFBO0FBQ2YsZ0hBQUEsWUFBWSxPQUFBO0FBQ1osdUhBQUEsbUJBQW1CLE9BQUE7QUFDbkIseUhBQUEscUJBQXFCLE9BQUE7QUFDckIsbUhBQUEsZUFBZSxPQUFBO0FBQ2YscUhBQUEsaUJBQWlCLE9BQUE7QUFDakIsa0hBQUEsY0FBYyxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhwb3J0IHB1YmxpYyBBUElcbmV4cG9ydCB7IHNjYW5Qcm9qZWN0LCBTY2FubmVkRmlsZSB9IGZyb20gJy4vc2Nhbm5lcic7XG5leHBvcnQgeyB0cmFuc2Zvcm1GaWxlcywgVHJhbnNmb3JtT3B0aW9ucywgVHJhbnNmb3JtUmVzdWx0cyB9IGZyb20gJy4vdHJhbnNmb3JtZXInO1xuZXhwb3J0IHsgVGFpbHdpbmRNYXBwZXIsIENTU1Byb3BlcnR5LCBDb252ZXJzaW9uUmVzdWx0IH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5leHBvcnQgeyBKU1hQYXJzZXIsIEpTWFRyYW5zZm9ybWF0aW9uLCBKU1hQYXJzZVJlc3VsdCB9IGZyb20gJy4vanN4UGFyc2VyJztcbmV4cG9ydCB7IENTU1BhcnNlciwgQ1NTUnVsZSwgQ1NTUGFyc2VSZXN1bHQsIFV0aWxpdHlXaXRoVmFyaWFudCB9IGZyb20gJy4vY3NzUGFyc2VyJztcbmV4cG9ydCB7IEZpbGVXcml0ZXIsIEZpbGVXcml0ZU9wdGlvbnMgfSBmcm9tICcuL2ZpbGVXcml0ZXInO1xuZXhwb3J0IHsgbG9hZFRhaWx3aW5kQ29uZmlnLCBUYWlsd2luZENvbmZpZyB9IGZyb20gJy4vdXRpbHMvY29uZmlnJztcbmV4cG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmV4cG9ydCB7XG4gIEJyZWFrcG9pbnQsXG4gIE1lZGlhUXVlcnlJbmZvLFxuICBnZXREZWZhdWx0QnJlYWtwb2ludHMsXG4gIHJlc29sdmVCcmVha3BvaW50c0Zyb21Db25maWcsXG4gIHBhcnNlTWVkaWFRdWVyeSxcbiAgZmluZEJyZWFrcG9pbnRGb3JNaW5XaWR0aCxcbiAgcHJvY2Vzc01lZGlhUXVlcnksXG4gIHByZWZpeFdpdGhCcmVha3BvaW50XG59IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcbmV4cG9ydCB7XG4gIFBhcnNlZFNlbGVjdG9yLFxuICBQU0VVRE9fVE9fVkFSSUFOVCxcbiAgU1VQUE9SVEVEX1BTRVVET1MsXG4gIHBhcnNlU2VsZWN0b3IsXG4gIG1hcFBzZXVkb1RvVmFyaWFudCxcbiAgcHJvY2Vzc1BzZXVkb1NlbGVjdG9yLFxuICBwYXJzZU11bHRpcGxlU2VsZWN0b3JzXG59IGZyb20gJy4vdXRpbHMvcHNldWRvU2VsZWN0b3JSZXNvbHZlcic7XG5leHBvcnQge1xuICBWQVJJQU5UX09SREVSLFxuICBpc1Jlc3BvbnNpdmVWYXJpYW50LFxuICBpc1BzZXVkb1ZhcmlhbnQsXG4gIHNvcnRWYXJpYW50cyxcbiAgZGVkdXBsaWNhdGVWYXJpYW50cyxcbiAgbm9ybWFsaXplVmFyaWFudE9yZGVyLFxuICBhc3NlbWJsZVV0aWxpdHksXG4gIGFzc2VtYmxlVXRpbGl0aWVzLFxuICBtZXJnZVV0aWxpdGllcyxcbiAgTWVyZ2VkVXRpbGl0eVxufSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRBc3NlbWJsZXInO1xuIl19
|
package/dist/transformer.js
CHANGED
|
@@ -12,6 +12,7 @@ const cssParser_1 = require("./cssParser");
|
|
|
12
12
|
const fileWriter_1 = require("./fileWriter");
|
|
13
13
|
const logger_1 = require("./utils/logger");
|
|
14
14
|
const breakpointResolver_1 = require("./utils/breakpointResolver");
|
|
15
|
+
const variantAssembler_1 = require("./utils/variantAssembler");
|
|
15
16
|
async function transformFiles(files, options) {
|
|
16
17
|
const results = {
|
|
17
18
|
filesScanned: files.length,
|
|
@@ -26,24 +27,18 @@ async function transformFiles(files, options) {
|
|
|
26
27
|
const cssParser = new cssParser_1.CSSParser(mapper, screens);
|
|
27
28
|
const fileWriter = new fileWriter_1.FileWriter({ dryRun: options.dryRun });
|
|
28
29
|
(0, breakpointResolver_1.clearBreakpointCache)();
|
|
29
|
-
// PASS 1: Analyze all files WITHOUT modifying anything
|
|
30
|
-
// Collect CSS mappings and gather info about what can be safely converted
|
|
31
30
|
const cssClassMap = {};
|
|
32
31
|
const cssFileResults = new Map();
|
|
33
32
|
logger_1.logger.info('\n🔍 Phase 1: Analyzing files...');
|
|
34
|
-
// Analyze CSS files
|
|
35
33
|
if (!options.skipExternal) {
|
|
36
34
|
for (const file of files.filter(f => f.type === 'css')) {
|
|
37
35
|
try {
|
|
38
36
|
const content = fs_1.default.readFileSync(file.path, 'utf-8');
|
|
39
37
|
const result = await cssParser.parse(content, file.path);
|
|
40
|
-
// Check if ALL rules in this file are FULLY converted (all declarations)
|
|
41
38
|
const totalRules = result.rules.length;
|
|
42
39
|
const fullyConvertedRules = result.rules.filter(r => r.fullyConverted).length;
|
|
43
40
|
const partiallyConvertedRules = result.rules.filter(r => r.partialConversion).length;
|
|
44
|
-
// A file is only "fully convertible" if ALL rules are fully converted (no partial conversions)
|
|
45
41
|
const fullyConvertible = totalRules > 0 && totalRules === fullyConvertedRules && partiallyConvertedRules === 0;
|
|
46
|
-
// Build class map (only for fully converted classes - partial conversions keep the CSS)
|
|
47
42
|
result.rules.forEach(rule => {
|
|
48
43
|
if (rule.fullyConverted) {
|
|
49
44
|
const existing = cssClassMap[rule.className];
|
|
@@ -69,13 +64,11 @@ async function transformFiles(files, options) {
|
|
|
69
64
|
fullyConvertible
|
|
70
65
|
});
|
|
71
66
|
results.warnings += result.warnings.length;
|
|
72
|
-
// Log analysis
|
|
73
67
|
logger_1.logger.verbose(`Analyzed ${file.path}:`);
|
|
74
68
|
logger_1.logger.verbose(` - Total rules: ${totalRules}`);
|
|
75
69
|
logger_1.logger.verbose(` - Fully converted rules: ${fullyConvertedRules}`);
|
|
76
70
|
logger_1.logger.verbose(` - Partially converted rules: ${partiallyConvertedRules}`);
|
|
77
71
|
logger_1.logger.verbose(` - Fully convertible: ${fullyConvertible}`);
|
|
78
|
-
// Log warnings
|
|
79
72
|
result.warnings.forEach(warning => {
|
|
80
73
|
logger_1.logger.verbose(`⚠️ ${file.path}: ${warning}`);
|
|
81
74
|
});
|
|
@@ -86,7 +79,6 @@ async function transformFiles(files, options) {
|
|
|
86
79
|
}
|
|
87
80
|
}
|
|
88
81
|
}
|
|
89
|
-
// PASS 2: Transform JSX/TSX files
|
|
90
82
|
logger_1.logger.info('\n⚛️ Phase 2: Transforming React components...');
|
|
91
83
|
const jsxFileResults = new Map();
|
|
92
84
|
for (const file of files.filter(f => f.type === 'jsx')) {
|
|
@@ -95,7 +87,6 @@ async function transformFiles(files, options) {
|
|
|
95
87
|
const originalContent = content;
|
|
96
88
|
let hasChanges = false;
|
|
97
89
|
let fileWarnings = [];
|
|
98
|
-
// Process inline styles
|
|
99
90
|
if (!options.skipInline) {
|
|
100
91
|
try {
|
|
101
92
|
const jsxResult = jsxParser.parse(content, file.path);
|
|
@@ -111,14 +102,12 @@ async function transformFiles(files, options) {
|
|
|
111
102
|
fileWarnings.push(`JSX parse error: ${error}`);
|
|
112
103
|
}
|
|
113
104
|
}
|
|
114
|
-
// Process internal CSS
|
|
115
105
|
if (!options.skipInternal) {
|
|
116
106
|
try {
|
|
117
107
|
const internalResult = await cssParser.parseInternalCSS(content, file.path);
|
|
118
108
|
if (internalResult.hasChanges) {
|
|
119
109
|
content = internalResult.html;
|
|
120
110
|
hasChanges = true;
|
|
121
|
-
// Build class map from internal styles
|
|
122
111
|
internalResult.rules.forEach(rule => {
|
|
123
112
|
if (rule.convertedClasses.length > 0) {
|
|
124
113
|
const existing = cssClassMap[rule.className];
|
|
@@ -145,7 +134,6 @@ async function transformFiles(files, options) {
|
|
|
145
134
|
hasChanges
|
|
146
135
|
});
|
|
147
136
|
results.warnings += fileWarnings.length;
|
|
148
|
-
// Log warnings
|
|
149
137
|
fileWarnings.forEach(warning => {
|
|
150
138
|
logger_1.logger.verbose(`⚠️ ${file.path}: ${warning}`);
|
|
151
139
|
});
|
|
@@ -155,14 +143,11 @@ async function transformFiles(files, options) {
|
|
|
155
143
|
results.warnings++;
|
|
156
144
|
}
|
|
157
145
|
}
|
|
158
|
-
// PASS 3: Replace className references from external CSS
|
|
159
|
-
// This must happen after all JSX files are parsed
|
|
160
146
|
if (Object.keys(cssClassMap).length > 0) {
|
|
161
147
|
logger_1.logger.info('\n🔄 Phase 3: Replacing className references...');
|
|
162
148
|
for (const [filePath, fileResult] of jsxFileResults) {
|
|
163
149
|
let content = fileResult.newContent;
|
|
164
150
|
let hasChanges = fileResult.hasChanges;
|
|
165
|
-
// Replace className references
|
|
166
151
|
const replacementResult = replaceClassNameReferences(content, cssClassMap);
|
|
167
152
|
if (replacementResult.hasChanges) {
|
|
168
153
|
content = replacementResult.code;
|
|
@@ -170,7 +155,6 @@ async function transformFiles(files, options) {
|
|
|
170
155
|
results.classesReplaced += replacementResult.replacements;
|
|
171
156
|
logger_1.logger.verbose(`Replaced ${replacementResult.replacements} class references in ${path_1.default.basename(filePath)}`);
|
|
172
157
|
}
|
|
173
|
-
// Update the result
|
|
174
158
|
jsxFileResults.set(filePath, {
|
|
175
159
|
...fileResult,
|
|
176
160
|
newContent: content,
|
|
@@ -178,9 +162,7 @@ async function transformFiles(files, options) {
|
|
|
178
162
|
});
|
|
179
163
|
}
|
|
180
164
|
}
|
|
181
|
-
// PASS 4: Write all changes
|
|
182
165
|
logger_1.logger.info('\n💾 Phase 4: Writing changes...');
|
|
183
|
-
// Write JSX files
|
|
184
166
|
for (const [filePath, fileResult] of jsxFileResults) {
|
|
185
167
|
if (fileResult.hasChanges) {
|
|
186
168
|
const success = await fileWriter.writeFile(filePath, fileResult.newContent, fileResult.content);
|
|
@@ -189,19 +171,15 @@ async function transformFiles(files, options) {
|
|
|
189
171
|
}
|
|
190
172
|
}
|
|
191
173
|
}
|
|
192
|
-
// Write CSS files (SAFETY: Only modify if fully convertible or explicitly allowed)
|
|
193
174
|
if (!options.skipExternal) {
|
|
194
175
|
for (const [filePath, fileResult] of cssFileResults) {
|
|
195
176
|
if (!fileResult.hasChanges)
|
|
196
177
|
continue;
|
|
197
|
-
// SAFETY RULE 1: Never modify CSS files that aren't fully convertible
|
|
198
|
-
// unless they only have unconvertible rules (no changes needed)
|
|
199
178
|
if (!fileResult.fullyConvertible) {
|
|
200
179
|
logger_1.logger.warn(`⏭️ Skipping ${path_1.default.basename(filePath)} - not fully convertible (would break styles)`);
|
|
201
180
|
logger_1.logger.warn(` Convertible: ${fileResult.rules.filter(r => r.convertedClasses.length > 0).length}/${fileResult.rules.length} rules`);
|
|
202
181
|
continue;
|
|
203
182
|
}
|
|
204
|
-
// SAFETY RULE 2: Only delete if ALL rules converted AND --delete-css flag used
|
|
205
183
|
if (fileResult.canDelete && options.deleteCss) {
|
|
206
184
|
const success = await fileWriter.deleteFile(filePath);
|
|
207
185
|
if (success) {
|
|
@@ -210,11 +188,9 @@ async function transformFiles(files, options) {
|
|
|
210
188
|
}
|
|
211
189
|
}
|
|
212
190
|
else if (fileResult.canDelete && !options.deleteCss) {
|
|
213
|
-
// File is empty but don't delete without permission
|
|
214
191
|
logger_1.logger.info(`ℹ️ ${path_1.default.basename(filePath)} is now empty (use --delete-css to remove)`);
|
|
215
192
|
}
|
|
216
193
|
else {
|
|
217
|
-
// Write modified CSS (only if fully convertible)
|
|
218
194
|
const success = await fileWriter.writeFile(filePath, fileResult.newContent, fileResult.content);
|
|
219
195
|
if (success) {
|
|
220
196
|
results.filesModified++;
|
|
@@ -225,52 +201,37 @@ async function transformFiles(files, options) {
|
|
|
225
201
|
return results;
|
|
226
202
|
}
|
|
227
203
|
function buildClassInfoFromRule(rule, sourceFile) {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
204
|
+
return {
|
|
205
|
+
utilities: rule.utilities.map(u => ({
|
|
206
|
+
value: u.value,
|
|
207
|
+
variants: (0, variantAssembler_1.normalizeVariantOrder)([...u.variants])
|
|
208
|
+
})),
|
|
231
209
|
sourceFile,
|
|
232
210
|
fullyConvertible: true
|
|
233
211
|
};
|
|
234
|
-
for (const utility of rule.utilities) {
|
|
235
|
-
if (utility.variant) {
|
|
236
|
-
const existing = info.responsiveClasses.get(utility.variant) || [];
|
|
237
|
-
existing.push(utility.value);
|
|
238
|
-
info.responsiveClasses.set(utility.variant, existing);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
info.baseClasses.push(utility.value);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
return info;
|
|
245
212
|
}
|
|
246
213
|
function mergeRuleIntoClassInfo(info, rule) {
|
|
247
214
|
for (const utility of rule.utilities) {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
existing.
|
|
252
|
-
|
|
215
|
+
const existing = info.utilities.find(u => u.value === utility.value);
|
|
216
|
+
if (existing) {
|
|
217
|
+
for (const variant of utility.variants) {
|
|
218
|
+
if (!existing.variants.includes(variant)) {
|
|
219
|
+
existing.variants.push(variant);
|
|
220
|
+
}
|
|
253
221
|
}
|
|
222
|
+
existing.variants = (0, variantAssembler_1.normalizeVariantOrder)(existing.variants);
|
|
254
223
|
}
|
|
255
224
|
else {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
225
|
+
info.utilities.push({
|
|
226
|
+
value: utility.value,
|
|
227
|
+
variants: (0, variantAssembler_1.normalizeVariantOrder)([...utility.variants])
|
|
228
|
+
});
|
|
259
229
|
}
|
|
260
230
|
}
|
|
261
231
|
}
|
|
262
232
|
function assembleTailwindClasses(info) {
|
|
263
|
-
const
|
|
264
|
-
|
|
265
|
-
for (const bp of sortedBreakpoints) {
|
|
266
|
-
const bpClasses = info.responsiveClasses.get(bp);
|
|
267
|
-
if (bpClasses) {
|
|
268
|
-
for (const cls of bpClasses) {
|
|
269
|
-
classes.push(`${bp}:${cls}`);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
return classes.join(' ');
|
|
233
|
+
const merged = (0, variantAssembler_1.mergeUtilities)(info.utilities);
|
|
234
|
+
return (0, variantAssembler_1.assembleUtilities)(merged).join(' ');
|
|
274
235
|
}
|
|
275
236
|
function replaceClassNameReferences(code, classMap) {
|
|
276
237
|
let hasChanges = false;
|
|
@@ -305,4 +266,4 @@ function replaceClassNameReferences(code, classMap) {
|
|
|
305
266
|
});
|
|
306
267
|
return { code: modifiedCode, hasChanges, replacements };
|
|
307
268
|
}
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUF3Q0Esd0NBNlBDO0FBclNELDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIscURBQWtEO0FBQ2xELDJDQUF3QztBQUN4QywyQ0FBcUU7QUFDckUsNkNBQTBDO0FBRTFDLDJDQUF3QztBQUN4QyxtRUFBa0U7QUErQjNELEtBQUssVUFBVSxjQUFjLENBQ2xDLEtBQW9CLEVBQ3BCLE9BQXlCO0lBRXpCLE1BQU0sT0FBTyxHQUFxQjtRQUNoQyxZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDMUIsYUFBYSxFQUFFLENBQUM7UUFDaEIsZUFBZSxFQUFFLENBQUM7UUFDbEIsZUFBZSxFQUFFLENBQUM7UUFDbEIsUUFBUSxFQUFFLENBQUM7S0FDWixDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsSUFBSSwrQkFBYyxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQztJQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELE1BQU0sVUFBVSxHQUFHLElBQUksdUJBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU5RCxJQUFBLHlDQUFvQixHQUFFLENBQUM7SUFFdkIsdURBQXVEO0lBQ3ZELDBFQUEwRTtJQUMxRSxNQUFNLFdBQVcsR0FBZ0IsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sY0FBYyxHQU9mLElBQUksR0FBRyxFQUFFLENBQUM7SUFFZixlQUFNLENBQUMsSUFB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LENBQUM7WUFDaEMsWUFBWSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGNBQWMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1lBQ3BGLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDbEIsWUFBWSxFQUFFLENBQUM7WUFDZixlQUFNLENBQUMsT0FBTyxDQUFDLHlCQUF5QixRQUFRLGFBQWEsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU2Nhbm5lZEZpbGUgfSBmcm9tICcuL3NjYW5uZXInO1xuaW1wb3J0IHsgVGFpbHdpbmRNYXBwZXIgfSBmcm9tICcuL3RhaWx3aW5kTWFwcGVyJztcbmltcG9ydCB7IEpTWFBhcnNlciB9IGZyb20gJy4vanN4UGFyc2VyJztcbmltcG9ydCB7IENTU1BhcnNlciwgQ1NTUnVsZSwgVXRpbGl0eVdpdGhWYXJpYW50IH0gZnJvbSAnLi9jc3NQYXJzZXInO1xuaW1wb3J0IHsgRmlsZVdyaXRlciB9IGZyb20gJy4vZmlsZVdyaXRlcic7XG5pbXBvcnQgeyBUYWlsd2luZENvbmZpZyB9IGZyb20gJy4vdXRpbHMvY29uZmlnJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IGNsZWFyQnJlYWtwb2ludENhY2hlIH0gZnJvbSAnLi91dGlscy9icmVha3BvaW50UmVzb2x2ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybU9wdGlvbnMge1xuICBkcnlSdW46IGJvb2xlYW47XG4gIGRlbGV0ZUNzczogYm9vbGVhbjtcbiAgc2tpcEV4dGVybmFsOiBib29sZWFuO1xuICBza2lwSW5saW5lOiBib29sZWFuO1xuICBza2lwSW50ZXJuYWw6IGJvb2xlYW47XG4gIHRhaWx3aW5kQ29uZmlnOiBUYWlsd2luZENvbmZpZyB8IG51bGw7XG4gIHByb2plY3RSb290OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtUmVzdWx0cyB7XG4gIGZpbGVzU2Nhbm5lZDogbnVtYmVyO1xuICBmaWxlc01vZGlmaWVkOiBudW1iZXI7XG4gIHN0eWxlc0NvbnZlcnRlZDogbnVtYmVyO1xuICBjbGFzc2VzUmVwbGFjZWQ6IG51bWJlcjtcbiAgd2FybmluZ3M6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5mbyB7XG4gIGJhc2VDbGFzc2VzOiBzdHJpbmdbXTtcbiAgcmVzcG9uc2l2ZUNsYXNzZXM6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPjtcbiAgc291cmNlRmlsZTogc3RyaW5nO1xuICBmdWxseUNvbnZlcnRpYmxlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQ1NTQ2xhc3NNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiBDbGFzc0luZm87XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm1GaWxlcyhcbiAgZmlsZXM6IFNjYW5uZWRGaWxlW10sXG4gIG9wdGlvbnM6IFRyYW5zZm9ybU9wdGlvbnNcbik6IFByb21pc2U8VHJhbnNmb3JtUmVzdWx0cz4ge1xuICBjb25zdCByZXN1bHRzOiBUcmFuc2Zvcm1SZXN1bHRzID0ge1xuICAgIGZpbGVzU2Nhbm5lZDogZmlsZXMubGVuZ3RoLFxuICAgIGZpbGVzTW9kaWZpZWQ6IDAsXG4gICAgc3R5bGVzQ29udmVydGVkOiAwLFxuICAgIGNsYXNzZXNSZXBsYWNlZDogMCxcbiAgICB3YXJuaW5nczogMFxuICB9O1xuXG4gIGNvbnN0IG1hcHBlciA9IG5ldyBUYWlsd2luZE1hcHBlcihvcHRpb25zLnRhaWx3aW5kQ29uZmlnIHx8IHt9KTtcbiAgY29uc3QganN4UGFyc2VyID0gbmV3IEpTWFBhcnNlcihtYXBwZXIpO1xuICBjb25zdCBzY3JlZW5zID0gb3B0aW9ucy50YWlsd2luZENvbmZpZz8udGhlbWU/LnNjcmVlbnM7XG4gIGNvbnN0IGNzc1BhcnNlciA9IG5ldyBDU1NQYXJzZXIobWFwcGVyLCBzY3JlZW5zKTtcbiAgY29uc3QgZmlsZVdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKHsgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1biB9KTtcblxuICBjbGVhckJyZWFrcG9pbnRDYWNoZSgpO1xuXG4gIC8vIFBBU1MgMTogQW5hbHl6ZSBhbGwgZmlsZXMgV0lUSE9VVCBtb2RpZnlpbmcgYW55dGhpbmdcbiAgLy8gQ29sbGVjdCBDU1MgbWFwcGluZ3MgYW5kIGdhdGhlciBpbmZvIGFib3V0IHdoYXQgY2FuIGJlIHNhZmVseSBjb252ZXJ0ZWRcbiAgY29uc3QgY3NzQ2xhc3NNYXA6IENTU0NsYXNzTWFwID0ge307XG4gIGNvbnN0IGNzc0ZpbGVSZXN1bHRzOiBNYXA8c3RyaW5nLCB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIG5ld0NvbnRlbnQ6IHN0cmluZztcbiAgICBydWxlczogQ1NTUnVsZVtdO1xuICAgIGNhbkRlbGV0ZTogYm9vbGVhbjtcbiAgICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICAgIGZ1bGx5Q29udmVydGlibGU6IGJvb2xlYW47XG4gIH0+ID0gbmV3IE1hcCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdcXG7wn5SNIFBoYXNlIDE6IEFuYWx5emluZyBmaWxlcy4uLicpO1xuXG4gIC8vIEFuYWx5emUgQ1NTIGZpbGVzXG4gIGlmICghb3B0aW9ucy5za2lwRXh0ZXJuYWwpIHtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnY3NzJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZS5wYXRoLCAndXRmLTgnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3NzUGFyc2VyLnBhcnNlKGNvbnRlbnQsIGZpbGUucGF0aCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgQUxMIHJ1bGVzIGluIHRoaXMgZmlsZSBhcmUgRlVMTFkgY29udmVydGVkIChhbGwgZGVjbGFyYXRpb25zKVxuICAgICAgICBjb25zdCB0b3RhbFJ1bGVzID0gcmVzdWx0LnJ1bGVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZnVsbHlDb252ZXJ0ZWRSdWxlcyA9IHJlc3VsdC5ydWxlcy5maWx0ZXIociA9PiByLmZ1bGx5Q29udmVydGVkKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHBhcnRpYWxseUNvbnZlcnRlZFJ1bGVzID0gcmVzdWx0LnJ1bGVzLmZpbHRlcihyID0+IHIucGFydGlhbENvbnZlcnNpb24pLmxlbmd0aDtcbiAgICAgICAgLy8gQSBmaWxlIGlzIG9ubHkgXCJmdWxseSBjb252ZXJ0aWJsZVwiIGlmIEFMTCBydWxlcyBhcmUgZnVsbHkgY29udmVydGVkIChubyBwYXJ0aWFsIGNvbnZlcnNpb25zKVxuICAgICAgICBjb25zdCBmdWxseUNvbnZlcnRpYmxlID0gdG90YWxSdWxlcyA+IDAgJiYgdG90YWxSdWxlcyA9PT0gZnVsbHlDb252ZXJ0ZWRSdWxlcyAmJiBwYXJ0aWFsbHlDb252ZXJ0ZWRSdWxlcyA9PT0gMDtcblxuICAgICAgICAvLyBCdWlsZCBjbGFzcyBtYXAgKG9ubHkgZm9yIGZ1bGx5IGNvbnZlcnRlZCBjbGFzc2VzIC0gcGFydGlhbCBjb252ZXJzaW9ucyBrZWVwIHRoZSBDU1MpXG4gICAgICAgIHJlc3VsdC5ydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgIGlmIChydWxlLmZ1bGx5Q29udmVydGVkKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGV4aXN0aW5nLCBydWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXSA9IGJ1aWxkQ2xhc3NJbmZvRnJvbVJ1bGUocnVsZSwgZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuZGVjbGFyYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUucGFydGlhbENvbnZlcnNpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGg7XG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgICBSdWxlIC4ke3J1bGUuY2xhc3NOYW1lfTogcGFydGlhbCBjb252ZXJzaW9uICgke3J1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGh9LyR7cnVsZS5kZWNsYXJhdGlvbnMubGVuZ3RofSBkZWNsYXJhdGlvbnMpYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjc3NGaWxlUmVzdWx0cy5zZXQoZmlsZS5wYXRoLCB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBuZXdDb250ZW50OiByZXN1bHQuY3NzLFxuICAgICAgICAgIHJ1bGVzOiByZXN1bHQucnVsZXMsXG4gICAgICAgICAgY2FuRGVsZXRlOiByZXN1bHQuY2FuRGVsZXRlLFxuICAgICAgICAgIGhhc0NoYW5nZXM6IHJlc3VsdC5oYXNDaGFuZ2VzLFxuICAgICAgICAgIGZ1bGx5Q29udmVydGlibGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzdWx0cy53YXJuaW5ncyArPSByZXN1bHQud2FybmluZ3MubGVuZ3RoO1xuXG4gICAgICAgIC8vIExvZyBhbmFseXNpc1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgQW5hbHl6ZWQgJHtmaWxlLnBhdGh9OmApO1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgICAtIFRvdGFsIHJ1bGVzOiAke3RvdGFsUnVsZXN9YCk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGAgIC0gRnVsbHkgY29udmVydGVkIHJ1bGVzOiAke2Z1bGx5Q29udmVydGVkUnVsZXN9YCk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGAgIC0gUGFydGlhbGx5IGNvbnZlcnRlZCBydWxlczogJHtwYXJ0aWFsbHlDb252ZXJ0ZWRSdWxlc31gKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgLSBGdWxseSBjb252ZXJ0aWJsZTogJHtmdWxseUNvbnZlcnRpYmxlfWApO1xuXG4gICAgICAgIC8vIExvZyB3YXJuaW5nc1xuICAgICAgICByZXN1bHQud2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHtcbiAgICAgICAgICBsb2dnZXIudmVyYm9zZShg4pqg77iPICAke2ZpbGUucGF0aH06ICR7d2FybmluZ31gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIGFuYWx5emUgJHtmaWxlLnBhdGh9OmAsIGVycm9yKTtcbiAgICAgICAgcmVzdWx0cy53YXJuaW5ncysrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFBBU1MgMjogVHJhbnNmb3JtIEpTWC9UU1ggZmlsZXNcbiAgbG9nZ2VyLmluZm8oJ1xcbuKam++4jyAgUGhhc2UgMjogVHJhbnNmb3JtaW5nIFJlYWN0IGNvbXBvbmVudHMuLi4nKTtcblxuICBjb25zdCBqc3hGaWxlUmVzdWx0czogTWFwPHN0cmluZywge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBuZXdDb250ZW50OiBzdHJpbmc7XG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgfT4gPSBuZXcgTWFwKCk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gJ2pzeCcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUucGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBvcmlnaW5hbENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcbiAgICAgIGxldCBmaWxlV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIC8vIFByb2Nlc3MgaW5saW5lIHN0eWxlc1xuICAgICAgaWYgKCFvcHRpb25zLnNraXBJbmxpbmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc3hSZXN1bHQgPSBqc3hQYXJzZXIucGFyc2UoY29udGVudCwgZmlsZS5wYXRoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoanN4UmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBqc3hSZXN1bHQuY29kZTtcbiAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmVzdWx0cy5zdHlsZXNDb252ZXJ0ZWQgKz0ganN4UmVzdWx0LnRyYW5zZm9ybWF0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChzdW0sIHQpID0+IHN1bSArIHQuY2xhc3Nlcy5sZW5ndGgsIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaCguLi5qc3hSZXN1bHQud2FybmluZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIEpTWCBpbmxpbmUgc3R5bGVzIGluICR7ZmlsZS5wYXRofTogJHtlcnJvcn1gKTtcbiAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaChgSlNYIHBhcnNlIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgaW50ZXJuYWwgQ1NTXG4gICAgICBpZiAoIW9wdGlvbnMuc2tpcEludGVybmFsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaW50ZXJuYWxSZXN1bHQgPSBhd2FpdCBjc3NQYXJzZXIucGFyc2VJbnRlcm5hbENTUyhjb250ZW50LCBmaWxlLnBhdGgpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChpbnRlcm5hbFJlc3VsdC5oYXNDaGFuZ2VzKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gaW50ZXJuYWxSZXN1bHQuaHRtbDtcbiAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBCdWlsZCBjbGFzcyBtYXAgZnJvbSBpbnRlcm5hbCBzdHlsZXNcbiAgICAgICAgICAgIGludGVybmFsUmVzdWx0LnJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChydWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gY3NzQ2xhc3NNYXBbcnVsZS5jbGFzc05hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICAgICAgbWVyZ2VSdWxlSW50b0NsYXNzSW5mbyhleGlzdGluZywgcnVsZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXSA9IGJ1aWxkQ2xhc3NJbmZvRnJvbVJ1bGUocnVsZSwgZmlsZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5zdHlsZXNDb252ZXJ0ZWQgKz0gcnVsZS5kZWNsYXJhdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZmlsZVdhcm5pbmdzLnB1c2goLi4uaW50ZXJuYWxSZXN1bHQud2FybmluZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIGludGVybmFsIENTUyBpbiAke2ZpbGUucGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgZmlsZVdhcm5pbmdzLnB1c2goYEludGVybmFsIENTUyBwYXJzZSBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBqc3hGaWxlUmVzdWx0cy5zZXQoZmlsZS5wYXRoLCB7XG4gICAgICAgIGNvbnRlbnQ6IG9yaWdpbmFsQ29udGVudCxcbiAgICAgICAgbmV3Q29udGVudDogY29udGVudCxcbiAgICAgICAgaGFzQ2hhbmdlc1xuICAgICAgfSk7XG5cbiAgICAgIHJlc3VsdHMud2FybmluZ3MgKz0gZmlsZVdhcm5pbmdzLmxlbmd0aDtcblxuICAgICAgLy8gTG9nIHdhcm5pbmdzXG4gICAgICBmaWxlV2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYOKaoO+4jyAgJHtmaWxlLnBhdGh9OiAke3dhcm5pbmd9YCk7XG4gICAgICB9KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzICR7ZmlsZS5wYXRofTpgLCBlcnJvcik7XG4gICAgICByZXN1bHRzLndhcm5pbmdzKys7XG4gICAgfVxuICB9XG5cbiAgLy8gUEFTUyAzOiBSZXBsYWNlIGNsYXNzTmFtZSByZWZlcmVuY2VzIGZyb20gZXh0ZXJuYWwgQ1NTXG4gIC8vIFRoaXMgbXVzdCBoYXBwZW4gYWZ0ZXIgYWxsIEpTWCBmaWxlcyBhcmUgcGFyc2VkXG4gIGlmIChPYmplY3Qua2V5cyhjc3NDbGFzc01hcCkubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci5pbmZvKCdcXG7wn5SEIFBoYXNlIDM6IFJlcGxhY2luZyBjbGFzc05hbWUgcmVmZXJlbmNlcy4uLicpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGZpbGVSZXN1bHRdIG9mIGpzeEZpbGVSZXN1bHRzKSB7XG4gICAgICBsZXQgY29udGVudCA9IGZpbGVSZXN1bHQubmV3Q29udGVudDtcbiAgICAgIGxldCBoYXNDaGFuZ2VzID0gZmlsZVJlc3VsdC5oYXNDaGFuZ2VzO1xuXG4gICAgICAvLyBSZXBsYWNlIGNsYXNzTmFtZSByZWZlcmVuY2VzXG4gICAgICBjb25zdCByZXBsYWNlbWVudFJlc3VsdCA9IHJlcGxhY2VDbGFzc05hbWVSZWZlcmVuY2VzKGNvbnRlbnQsIGNzc0NsYXNzTWFwKTtcbiAgICAgIGlmIChyZXBsYWNlbWVudFJlc3VsdC5oYXNDaGFuZ2VzKSB7XG4gICAgICAgIGNvbnRlbnQgPSByZXBsYWNlbWVudFJlc3VsdC5jb2RlO1xuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5jbGFzc2VzUmVwbGFjZWQgKz0gcmVwbGFjZW1lbnRSZXN1bHQucmVwbGFjZW1lbnRzO1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlcGxhY2VkICR7cmVwbGFjZW1lbnRSZXN1bHQucmVwbGFjZW1lbnRzfSBjbGFzcyByZWZlcmVuY2VzIGluICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgcmVzdWx0XG4gICAgICBqc3hGaWxlUmVzdWx0cy5zZXQoZmlsZVBhdGgsIHtcbiAgICAgICAgLi4uZmlsZVJlc3VsdCxcbiAgICAgICAgbmV3Q29udGVudDogY29udGVudCxcbiAgICAgICAgaGFzQ2hhbmdlc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUEFTUyA0OiBXcml0ZSBhbGwgY2hhbmdlc1xuICBsb2dnZXIuaW5mbygnXFxu8J+SviBQaGFzZSA0OiBXcml0aW5nIGNoYW5nZXMuLi4nKTtcblxuICAvLyBXcml0ZSBKU1ggZmlsZXNcbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGZpbGVSZXN1bHRdIG9mIGpzeEZpbGVSZXN1bHRzKSB7XG4gICAgaWYgKGZpbGVSZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpbGVXcml0ZXIud3JpdGVGaWxlKGZpbGVQYXRoLCBmaWxlUmVzdWx0Lm5ld0NvbnRlbnQsIGZpbGVSZXN1bHQuY29udGVudCk7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICByZXN1bHRzLmZpbGVzTW9kaWZpZWQrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBXcml0ZSBDU1MgZmlsZXMgKFNBRkVUWTogT25seSBtb2RpZnkgaWYgZnVsbHkgY29udmVydGlibGUgb3IgZXhwbGljaXRseSBhbGxvd2VkKVxuICBpZiAoIW9wdGlvbnMuc2tpcEV4dGVybmFsKSB7XG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGZpbGVSZXN1bHRdIG9mIGNzc0ZpbGVSZXN1bHRzKSB7XG4gICAgICBpZiAoIWZpbGVSZXN1bHQuaGFzQ2hhbmdlcykgY29udGludWU7XG5cbiAgICAgIC8vIFNBRkVUWSBSVUxFIDE6IE5ldmVyIG1vZGlmeSBDU1MgZmlsZXMgdGhhdCBhcmVuJ3QgZnVsbHkgY29udmVydGlibGVcbiAgICAgIC8vIHVubGVzcyB0aGV5IG9ubHkgaGF2ZSB1bmNvbnZlcnRpYmxlIHJ1bGVzIChubyBjaGFuZ2VzIG5lZWRlZClcbiAgICAgIGlmICghZmlsZVJlc3VsdC5mdWxseUNvbnZlcnRpYmxlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGDij63vuI8gIFNraXBwaW5nICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9IC0gbm90IGZ1bGx5IGNvbnZlcnRpYmxlICh3b3VsZCBicmVhayBzdHlsZXMpYCk7XG4gICAgICAgIGxvZ2dlci53YXJuKGAgICBDb252ZXJ0aWJsZTogJHtmaWxlUmVzdWx0LnJ1bGVzLmZpbHRlcihyID0+IHIuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKS5sZW5ndGh9LyR7ZmlsZVJlc3VsdC5ydWxlcy5sZW5ndGh9IHJ1bGVzYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBTQUZFVFkgUlVMRSAyOiBPbmx5IGRlbGV0ZSBpZiBBTEwgcnVsZXMgY29udmVydGVkIEFORCAtLWRlbGV0ZS1jc3MgZmxhZyB1c2VkXG4gICAgICBpZiAoZmlsZVJlc3VsdC5jYW5EZWxldGUgJiYgb3B0aW9ucy5kZWxldGVDc3MpIHtcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpbGVXcml0ZXIuZGVsZXRlRmlsZShmaWxlUGF0aCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYPCfl5HvuI8gIERlbGV0ZWQgJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX0gKGFsbCBydWxlcyBjb252ZXJ0ZWQpYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmlsZVJlc3VsdC5jYW5EZWxldGUgJiYgIW9wdGlvbnMuZGVsZXRlQ3NzKSB7XG4gICAgICAgIC8vIEZpbGUgaXMgZW1wdHkgYnV0IGRvbid0IGRlbGV0ZSB3aXRob3V0IHBlcm1pc3Npb25cbiAgICAgICAgbG9nZ2VyLmluZm8oYOKEue+4jyAgJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX0gaXMgbm93IGVtcHR5ICh1c2UgLS1kZWxldGUtY3NzIHRvIHJlbW92ZSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdyaXRlIG1vZGlmaWVkIENTUyAob25seSBpZiBmdWxseSBjb252ZXJ0aWJsZSlcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpbGVXcml0ZXIud3JpdGVGaWxlKGZpbGVQYXRoLCBmaWxlUmVzdWx0Lm5ld0NvbnRlbnQsIGZpbGVSZXN1bHQuY29udGVudCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRDbGFzc0luZm9Gcm9tUnVsZShydWxlOiBDU1NSdWxlLCBzb3VyY2VGaWxlOiBzdHJpbmcpOiBDbGFzc0luZm8ge1xuICBjb25zdCBpbmZvOiBDbGFzc0luZm8gPSB7XG4gICAgYmFzZUNsYXNzZXM6IFtdLFxuICAgIHJlc3BvbnNpdmVDbGFzc2VzOiBuZXcgTWFwKCksXG4gICAgc291cmNlRmlsZSxcbiAgICBmdWxseUNvbnZlcnRpYmxlOiB0cnVlXG4gIH07XG4gIFxuICBmb3IgKGNvbnN0IHV0aWxpdHkgb2YgcnVsZS51dGlsaXRpZXMpIHtcbiAgICBpZiAodXRpbGl0eS52YXJpYW50KSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGluZm8ucmVzcG9uc2l2ZUNsYXNzZXMuZ2V0KHV0aWxpdHkudmFyaWFudCkgfHwgW107XG4gICAgICBleGlzdGluZy5wdXNoKHV0aWxpdHkudmFsdWUpO1xuICAgICAgaW5mby5yZXNwb25zaXZlQ2xhc3Nlcy5zZXQodXRpbGl0eS52YXJpYW50LCBleGlzdGluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8uYmFzZUNsYXNzZXMucHVzaCh1dGlsaXR5LnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBpbmZvO1xufVxuXG5mdW5jdGlvbiBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGluZm86IENsYXNzSW5mbywgcnVsZTogQ1NTUnVsZSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHV0aWxpdHkgb2YgcnVsZS51dGlsaXRpZXMpIHtcbiAgICBpZiAodXRpbGl0eS52YXJpYW50KSB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IGluZm8ucmVzcG9uc2l2ZUNsYXNzZXMuZ2V0KHV0aWxpdHkudmFyaWFudCkgfHwgW107XG4gICAgICBpZiAoIWV4aXN0aW5nLmluY2x1ZGVzKHV0aWxpdHkudmFsdWUpKSB7XG4gICAgICAgIGV4aXN0aW5nLnB1c2godXRpbGl0eS52YWx1ZSk7XG4gICAgICAgIGluZm8ucmVzcG9uc2l2ZUNsYXNzZXMuc2V0KHV0aWxpdHkudmFyaWFudCwgZXhpc3RpbmcpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWluZm8uYmFzZUNsYXNzZXMuaW5jbHVkZXModXRpbGl0eS52YWx1ZSkpIHtcbiAgICAgICAgaW5mby5iYXNlQ2xhc3Nlcy5wdXNoKHV0aWxpdHkudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlbWJsZVRhaWx3aW5kQ2xhc3NlcyhpbmZvOiBDbGFzc0luZm8pOiBzdHJpbmcge1xuICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFsuLi5pbmZvLmJhc2VDbGFzc2VzXTtcbiAgXG4gIGNvbnN0IHNvcnRlZEJyZWFrcG9pbnRzID0gWydzbScsICdtZCcsICdsZycsICd4bCcsICcyeGwnXTtcbiAgXG4gIGZvciAoY29uc3QgYnAgb2Ygc29ydGVkQnJlYWtwb2ludHMpIHtcbiAgICBjb25zdCBicENsYXNzZXMgPSBpbmZvLnJlc3BvbnNpdmVDbGFzc2VzLmdldChicCk7XG4gICAgaWYgKGJwQ2xhc3Nlcykge1xuICAgICAgZm9yIChjb25zdCBjbHMgb2YgYnBDbGFzc2VzKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChgJHticH06JHtjbHN9YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VDbGFzc05hbWVSZWZlcmVuY2VzKFxuICBjb2RlOiBzdHJpbmcsIFxuICBjbGFzc01hcDogQ1NTQ2xhc3NNYXBcbik6IHsgXG4gIGNvZGU6IHN0cmluZzsgXG4gIGhhc0NoYW5nZXM6IGJvb2xlYW47IFxuICByZXBsYWNlbWVudHM6IG51bWJlciBcbn0ge1xuICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICBsZXQgcmVwbGFjZW1lbnRzID0gMDtcbiAgbGV0IG1vZGlmaWVkQ29kZSA9IGNvZGU7XG5cbiAgT2JqZWN0LmVudHJpZXMoY2xhc3NNYXApLmZvckVhY2goKFtvbGRDbGFzcywgaW5mb10pID0+IHtcbiAgICBpZiAoIWluZm8uZnVsbHlDb252ZXJ0aWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhaWx3aW5kQ2xhc3NTdHJpbmcgPSBhc3NlbWJsZVRhaWx3aW5kQ2xhc3NlcyhpbmZvKTtcbiAgICBcbiAgICBjb25zdCBwYXR0ZXJuMSA9IG5ldyBSZWdFeHAoYGNsYXNzTmFtZT1cIiR7b2xkQ2xhc3N9XCJgLCAnZycpO1xuICAgIGlmIChwYXR0ZXJuMS50ZXN0KG1vZGlmaWVkQ29kZSkpIHtcbiAgICAgIG1vZGlmaWVkQ29kZSA9IG1vZGlmaWVkQ29kZS5yZXBsYWNlKHBhdHRlcm4xLCBgY2xhc3NOYW1lPVwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIHJlcGxhY2VtZW50cysrO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlcGxhY2VkIGNsYXNzTmFtZT1cIiR7b2xkQ2xhc3N9XCIgd2l0aCBcIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdHRlcm4yID0gbmV3IFJlZ0V4cChgY2xhc3NOYW1lPVxcXFx7XCIke29sZENsYXNzfVwiXFxcXH1gLCAnZycpO1xuICAgIGlmIChwYXR0ZXJuMi50ZXN0KG1vZGlmaWVkQ29kZSkpIHtcbiAgICAgIG1vZGlmaWVkQ29kZSA9IG1vZGlmaWVkQ29kZS5yZXBsYWNlKHBhdHRlcm4yLCBgY2xhc3NOYW1lPVwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIHJlcGxhY2VtZW50cysrO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlcGxhY2VkIGNsYXNzTmFtZT17XCIke29sZENsYXNzfVwifSB3aXRoIFwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybjMgPSBuZXcgUmVnRXhwKGBjbGFzc05hbWU9XFxcXHtcXGBcXFxccyoke29sZENsYXNzfVxcXFxzKlxcYFxcXFx9YCwgJ2cnKTtcbiAgICBpZiAocGF0dGVybjMudGVzdChtb2RpZmllZENvZGUpKSB7XG4gICAgICBtb2RpZmllZENvZGUgPSBtb2RpZmllZENvZGUucmVwbGFjZShwYXR0ZXJuMywgYGNsYXNzTmFtZT1cIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICByZXBsYWNlbWVudHMrKztcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBSZXBsYWNlZCBjbGFzc05hbWU9e1xcYCR7b2xkQ2xhc3N9XFxgfSB3aXRoIFwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geyBjb2RlOiBtb2RpZmllZENvZGUsIGhhc0NoYW5nZXMsIHJlcGxhY2VtZW50cyB9O1xufVxuIl19
|
|
269
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE0Q0Esd0NBb09DO0FBaFJELDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIscURBQWtEO0FBQ2xELDJDQUF3QztBQUN4QywyQ0FBcUU7QUFDckUsNkNBQTBDO0FBRTFDLDJDQUF3QztBQUN4QyxtRUFBa0U7QUFDbEUsK0RBSWtDO0FBOEIzQixLQUFLLFVBQVUsY0FBYyxDQUNsQyxLQUFvQixFQUNwQixPQUF5QjtJQUV6QixNQUFNLE9BQU8sR0FBcUI7UUFDaEMsWUFBWSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQzFCLGFBQWEsRUFBRSxDQUFDO1FBQ2hCLGVBQWUsRUFBRSxDQUFDO1FBQ2xCLGVBQWUsRUFBRSxDQUFDO1FBQ2xCLFFBQVEsRUFBRSxDQUFDO0tBQ1osQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLElBQUksK0JBQWMsQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUM7SUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBUyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxNQUFNLFVBQVUsR0FBRyxJQUFJLHVCQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFOUQsSUFBQSx5Q0FBb0IsR0FBRSxDQUFDO0lBRXZCLE1BQU0sV0FBVyxHQUFnQixFQUFFLENBQUM7SUFDcEMsTUFBTSxjQUFjLEdBT2YsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVmLGVBQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtD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QzVFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2hDLFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxjQUFjLG1CQUFtQixHQUFHLENBQUMsQ0FBQztZQUNwRixVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLFlBQVksRUFBRSxDQUFDO1lBQ2YsZUFBTSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsUUFBUSxhQUFhLG1CQUFtQixHQUFHLENBQUMsQ0FBQztRQUN2RixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFNjYW5uZWRGaWxlIH0gZnJvbSAnLi9zY2FubmVyJztcbmltcG9ydCB7IFRhaWx3aW5kTWFwcGVyIH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5pbXBvcnQgeyBKU1hQYXJzZXIgfSBmcm9tICcuL2pzeFBhcnNlcic7XG5pbXBvcnQgeyBDU1NQYXJzZXIsIENTU1J1bGUsIFV0aWxpdHlXaXRoVmFyaWFudCB9IGZyb20gJy4vY3NzUGFyc2VyJztcbmltcG9ydCB7IEZpbGVXcml0ZXIgfSBmcm9tICcuL2ZpbGVXcml0ZXInO1xuaW1wb3J0IHsgVGFpbHdpbmRDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5pbXBvcnQgeyBjbGVhckJyZWFrcG9pbnRDYWNoZSB9IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcbmltcG9ydCB7IFxuICBhc3NlbWJsZVV0aWxpdGllcywgXG4gIG1lcmdlVXRpbGl0aWVzLFxuICBub3JtYWxpemVWYXJpYW50T3JkZXIgXG59IGZyb20gJy4vdXRpbHMvdmFyaWFudEFzc2VtYmxlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtT3B0aW9ucyB7XG4gIGRyeVJ1bjogYm9vbGVhbjtcbiAgZGVsZXRlQ3NzOiBib29sZWFuO1xuICBza2lwRXh0ZXJuYWw6IGJvb2xlYW47XG4gIHNraXBJbmxpbmU6IGJvb2xlYW47XG4gIHNraXBJbnRlcm5hbDogYm9vbGVhbjtcbiAgdGFpbHdpbmRDb25maWc6IFRhaWx3aW5kQ29uZmlnIHwgbnVsbDtcbiAgcHJvamVjdFJvb3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1SZXN1bHRzIHtcbiAgZmlsZXNTY2FubmVkOiBudW1iZXI7XG4gIGZpbGVzTW9kaWZpZWQ6IG51bWJlcjtcbiAgc3R5bGVzQ29udmVydGVkOiBudW1iZXI7XG4gIGNsYXNzZXNSZXBsYWNlZDogbnVtYmVyO1xuICB3YXJuaW5nczogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQ2xhc3NJbmZvIHtcbiAgdXRpbGl0aWVzOiBBcnJheTx7IHZhbHVlOiBzdHJpbmc7IHZhcmlhbnRzOiBzdHJpbmdbXSB9PjtcbiAgc291cmNlRmlsZTogc3RyaW5nO1xuICBmdWxseUNvbnZlcnRpYmxlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgQ1NTQ2xhc3NNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiBDbGFzc0luZm87XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFuc2Zvcm1GaWxlcyhcbiAgZmlsZXM6IFNjYW5uZWRGaWxlW10sXG4gIG9wdGlvbnM6IFRyYW5zZm9ybU9wdGlvbnNcbik6IFByb21pc2U8VHJhbnNmb3JtUmVzdWx0cz4ge1xuICBjb25zdCByZXN1bHRzOiBUcmFuc2Zvcm1SZXN1bHRzID0ge1xuICAgIGZpbGVzU2Nhbm5lZDogZmlsZXMubGVuZ3RoLFxuICAgIGZpbGVzTW9kaWZpZWQ6IDAsXG4gICAgc3R5bGVzQ29udmVydGVkOiAwLFxuICAgIGNsYXNzZXNSZXBsYWNlZDogMCxcbiAgICB3YXJuaW5nczogMFxuICB9O1xuXG4gIGNvbnN0IG1hcHBlciA9IG5ldyBUYWlsd2luZE1hcHBlcihvcHRpb25zLnRhaWx3aW5kQ29uZmlnIHx8IHt9KTtcbiAgY29uc3QganN4UGFyc2VyID0gbmV3IEpTWFBhcnNlcihtYXBwZXIpO1xuICBjb25zdCBzY3JlZW5zID0gb3B0aW9ucy50YWlsd2luZENvbmZpZz8udGhlbWU/LnNjcmVlbnM7XG4gIGNvbnN0IGNzc1BhcnNlciA9IG5ldyBDU1NQYXJzZXIobWFwcGVyLCBzY3JlZW5zKTtcbiAgY29uc3QgZmlsZVdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKHsgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1biB9KTtcblxuICBjbGVhckJyZWFrcG9pbnRDYWNoZSgpO1xuXG4gIGNvbnN0IGNzc0NsYXNzTWFwOiBDU1NDbGFzc01hcCA9IHt9O1xuICBjb25zdCBjc3NGaWxlUmVzdWx0czogTWFwPHN0cmluZywge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBuZXdDb250ZW50OiBzdHJpbmc7XG4gICAgcnVsZXM6IENTU1J1bGVbXTtcbiAgICBjYW5EZWxldGU6IGJvb2xlYW47XG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgICBmdWxseUNvbnZlcnRpYmxlOiBib29sZWFuO1xuICB9PiA9IG5ldyBNYXAoKTtcblxuICBsb2dnZXIuaW5mbygnXFxu8J+UjSBQaGFzZSAxOiBBbmFseXppbmcgZmlsZXMuLi4nKTtcblxuICBpZiAoIW9wdGlvbnMuc2tpcEV4dGVybmFsKSB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gJ2NzcycpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUucGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNzc1BhcnNlci5wYXJzZShjb250ZW50LCBmaWxlLnBhdGgpO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsUnVsZXMgPSByZXN1bHQucnVsZXMubGVuZ3RoO1xuICAgICAgICBjb25zdCBmdWxseUNvbnZlcnRlZFJ1bGVzID0gcmVzdWx0LnJ1bGVzLmZpbHRlcihyID0+IHIuZnVsbHlDb252ZXJ0ZWQpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcGFydGlhbGx5Q29udmVydGVkUnVsZXMgPSByZXN1bHQucnVsZXMuZmlsdGVyKHIgPT4gci5wYXJ0aWFsQ29udmVyc2lvbikubGVuZ3RoO1xuICAgICAgICBjb25zdCBmdWxseUNvbnZlcnRpYmxlID0gdG90YWxSdWxlcyA+IDAgJiYgdG90YWxSdWxlcyA9PT0gZnVsbHlDb252ZXJ0ZWRSdWxlcyAmJiBwYXJ0aWFsbHlDb252ZXJ0ZWRSdWxlcyA9PT0gMDtcblxuICAgICAgICByZXN1bHQucnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgICAgICBpZiAocnVsZS5mdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBjc3NDbGFzc01hcFtydWxlLmNsYXNzTmFtZV07XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgbWVyZ2VSdWxlSW50b0NsYXNzSW5mbyhleGlzdGluZywgcnVsZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjc3NDbGFzc01hcFtydWxlLmNsYXNzTmFtZV0gPSBidWlsZENsYXNzSW5mb0Zyb21SdWxlKHJ1bGUsIGZpbGUucGF0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIGlmIChydWxlLnBhcnRpYWxDb252ZXJzaW9uKSB7XG4gICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgUnVsZSAuJHtydWxlLmNsYXNzTmFtZX06IHBhcnRpYWwgY29udmVyc2lvbiAoJHtydWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RofS8ke3J1bGUuZGVjbGFyYXRpb25zLmxlbmd0aH0gZGVjbGFyYXRpb25zKWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3NzRmlsZVJlc3VsdHMuc2V0KGZpbGUucGF0aCwge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgbmV3Q29udGVudDogcmVzdWx0LmNzcyxcbiAgICAgICAgICBydWxlczogcmVzdWx0LnJ1bGVzLFxuICAgICAgICAgIGNhbkRlbGV0ZTogcmVzdWx0LmNhbkRlbGV0ZSxcbiAgICAgICAgICBoYXNDaGFuZ2VzOiByZXN1bHQuaGFzQ2hhbmdlcyxcbiAgICAgICAgICBmdWxseUNvbnZlcnRpYmxlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3VsdHMud2FybmluZ3MgKz0gcmVzdWx0Lndhcm5pbmdzLmxlbmd0aDtcblxuICAgICAgICBsb2dnZXIudmVyYm9zZShgQW5hbHl6ZWQgJHtmaWxlLnBhdGh9OmApO1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgICAtIFRvdGFsIHJ1bGVzOiAke3RvdGFsUnVsZXN9YCk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGAgIC0gRnVsbHkgY29udmVydGVkIHJ1bGVzOiAke2Z1bGx5Q29udmVydGVkUnVsZXN9YCk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGAgIC0gUGFydGlhbGx5IGNvbnZlcnRlZCBydWxlczogJHtwYXJ0aWFsbHlDb252ZXJ0ZWRSdWxlc31gKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgLSBGdWxseSBjb252ZXJ0aWJsZTogJHtmdWxseUNvbnZlcnRpYmxlfWApO1xuXG4gICAgICAgIHJlc3VsdC53YXJuaW5ncy5mb3JFYWNoKHdhcm5pbmcgPT4ge1xuICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGDimqDvuI8gICR7ZmlsZS5wYXRofTogJHt3YXJuaW5nfWApO1xuICAgICAgICB9KTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gYW5hbHl6ZSAke2ZpbGUucGF0aH06YCwgZXJyb3IpO1xuICAgICAgICByZXN1bHRzLndhcm5pbmdzKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oJ1xcbuKam++4jyAgUGhhc2UgMjogVHJhbnNmb3JtaW5nIFJlYWN0IGNvbXBvbmVudHMuLi4nKTtcblxuICBjb25zdCBqc3hGaWxlUmVzdWx0czogTWFwPHN0cmluZywge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBuZXdDb250ZW50OiBzdHJpbmc7XG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgfT4gPSBuZXcgTWFwKCk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gJ2pzeCcpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUucGF0aCwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBvcmlnaW5hbENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcbiAgICAgIGxldCBmaWxlV2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGlmICghb3B0aW9ucy5za2lwSW5saW5lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganN4UmVzdWx0ID0ganN4UGFyc2VyLnBhcnNlKGNvbnRlbnQsIGZpbGUucGF0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGpzeFJlc3VsdC5oYXNDaGFuZ2VzKSB7XG4gICAgICAgICAgICBjb250ZW50ID0ganN4UmVzdWx0LmNvZGU7XG4gICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IGpzeFJlc3VsdC50cmFuc2Zvcm1hdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgICAoc3VtLCB0KSA9PiBzdW0gKyB0LmNsYXNzZXMubGVuZ3RoLCAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZmlsZVdhcm5pbmdzLnB1c2goLi4uanN4UmVzdWx0Lndhcm5pbmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBKU1ggaW5saW5lIHN0eWxlcyBpbiAke2ZpbGUucGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgZmlsZVdhcm5pbmdzLnB1c2goYEpTWCBwYXJzZSBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMuc2tpcEludGVybmFsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaW50ZXJuYWxSZXN1bHQgPSBhd2FpdCBjc3NQYXJzZXIucGFyc2VJbnRlcm5hbENTUyhjb250ZW50LCBmaWxlLnBhdGgpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChpbnRlcm5hbFJlc3VsdC5oYXNDaGFuZ2VzKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gaW50ZXJuYWxSZXN1bHQuaHRtbDtcbiAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpbnRlcm5hbFJlc3VsdC5ydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgICAgICBpZiAocnVsZS5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgICAgICAgIG1lcmdlUnVsZUludG9DbGFzc0luZm8oZXhpc3RpbmcsIHJ1bGUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjc3NDbGFzc01hcFtydWxlLmNsYXNzTmFtZV0gPSBidWlsZENsYXNzSW5mb0Zyb21SdWxlKHJ1bGUsIGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuZGVjbGFyYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZpbGVXYXJuaW5ncy5wdXNoKC4uLmludGVybmFsUmVzdWx0Lndhcm5pbmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBDU1MgaW4gJHtmaWxlLnBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgICAgIGZpbGVXYXJuaW5ncy5wdXNoKGBJbnRlcm5hbCBDU1MgcGFyc2UgZXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAganN4RmlsZVJlc3VsdHMuc2V0KGZpbGUucGF0aCwge1xuICAgICAgICBjb250ZW50OiBvcmlnaW5hbENvbnRlbnQsXG4gICAgICAgIG5ld0NvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGhhc0NoYW5nZXNcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHRzLndhcm5pbmdzICs9IGZpbGVXYXJuaW5ncy5sZW5ndGg7XG5cbiAgICAgIGZpbGVXYXJuaW5ncy5mb3JFYWNoKHdhcm5pbmcgPT4ge1xuICAgICAgICBsb2dnZXIudmVyYm9zZShg4pqg77iPICAke2ZpbGUucGF0aH06ICR7d2FybmluZ31gKTtcbiAgICAgIH0pO1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgJHtmaWxlLnBhdGh9OmAsIGVycm9yKTtcbiAgICAgIHJlc3VsdHMud2FybmluZ3MrKztcbiAgICB9XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMoY3NzQ2xhc3NNYXApLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIuaW5mbygnXFxu8J+UhCBQaGFzZSAzOiBSZXBsYWNpbmcgY2xhc3NOYW1lIHJlZmVyZW5jZXMuLi4nKTtcblxuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBqc3hGaWxlUmVzdWx0cykge1xuICAgICAgbGV0IGNvbnRlbnQgPSBmaWxlUmVzdWx0Lm5ld0NvbnRlbnQ7XG4gICAgICBsZXQgaGFzQ2hhbmdlcyA9IGZpbGVSZXN1bHQuaGFzQ2hhbmdlcztcblxuICAgICAgY29uc3QgcmVwbGFjZW1lbnRSZXN1bHQgPSByZXBsYWNlQ2xhc3NOYW1lUmVmZXJlbmNlcyhjb250ZW50LCBjc3NDbGFzc01hcCk7XG4gICAgICBpZiAocmVwbGFjZW1lbnRSZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICBjb250ZW50ID0gcmVwbGFjZW1lbnRSZXN1bHQuY29kZTtcbiAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIHJlc3VsdHMuY2xhc3Nlc1JlcGxhY2VkICs9IHJlcGxhY2VtZW50UmVzdWx0LnJlcGxhY2VtZW50cztcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZXBsYWNlZCAke3JlcGxhY2VtZW50UmVzdWx0LnJlcGxhY2VtZW50c30gY2xhc3MgcmVmZXJlbmNlcyBpbiAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWApO1xuICAgICAgfVxuXG4gICAgICBqc3hGaWxlUmVzdWx0cy5zZXQoZmlsZVBhdGgsIHtcbiAgICAgICAgLi4uZmlsZVJlc3VsdCxcbiAgICAgICAgbmV3Q29udGVudDogY29udGVudCxcbiAgICAgICAgaGFzQ2hhbmdlc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmluZm8oJ1xcbvCfkr4gUGhhc2UgNDogV3JpdGluZyBjaGFuZ2VzLi4uJyk7XG5cbiAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGZpbGVSZXN1bHRdIG9mIGpzeEZpbGVSZXN1bHRzKSB7XG4gICAgaWYgKGZpbGVSZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpbGVXcml0ZXIud3JpdGVGaWxlKGZpbGVQYXRoLCBmaWxlUmVzdWx0Lm5ld0NvbnRlbnQsIGZpbGVSZXN1bHQuY29udGVudCk7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICByZXN1bHRzLmZpbGVzTW9kaWZpZWQrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIW9wdGlvbnMuc2tpcEV4dGVybmFsKSB7XG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGZpbGVSZXN1bHRdIG9mIGNzc0ZpbGVSZXN1bHRzKSB7XG4gICAgICBpZiAoIWZpbGVSZXN1bHQuaGFzQ2hhbmdlcykgY29udGludWU7XG5cbiAgICAgIGlmICghZmlsZVJlc3VsdC5mdWxseUNvbnZlcnRpYmxlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGDij63vuI8gIFNraXBwaW5nICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9IC0gbm90IGZ1bGx5IGNvbnZlcnRpYmxlICh3b3VsZCBicmVhayBzdHlsZXMpYCk7XG4gICAgICAgIGxvZ2dlci53YXJuKGAgICBDb252ZXJ0aWJsZTogJHtmaWxlUmVzdWx0LnJ1bGVzLmZpbHRlcihyID0+IHIuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKS5sZW5ndGh9LyR7ZmlsZVJlc3VsdC5ydWxlcy5sZW5ndGh9IHJ1bGVzYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZVJlc3VsdC5jYW5EZWxldGUgJiYgb3B0aW9ucy5kZWxldGVDc3MpIHtcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpbGVXcml0ZXIuZGVsZXRlRmlsZShmaWxlUGF0aCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYPCfl5HvuI8gIERlbGV0ZWQgJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX0gKGFsbCBydWxlcyBjb252ZXJ0ZWQpYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmlsZVJlc3VsdC5jYW5EZWxldGUgJiYgIW9wdGlvbnMuZGVsZXRlQ3NzKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGDihLnvuI8gICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9IGlzIG5vdyBlbXB0eSAodXNlIC0tZGVsZXRlLWNzcyB0byByZW1vdmUpYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgZmlsZVdyaXRlci53cml0ZUZpbGUoZmlsZVBhdGgsIGZpbGVSZXN1bHQubmV3Q29udGVudCwgZmlsZVJlc3VsdC5jb250ZW50KTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN1bHRzLmZpbGVzTW9kaWZpZWQrKztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBidWlsZENsYXNzSW5mb0Zyb21SdWxlKHJ1bGU6IENTU1J1bGUsIHNvdXJjZUZpbGU6IHN0cmluZyk6IENsYXNzSW5mbyB7XG4gIHJldHVybiB7XG4gICAgdXRpbGl0aWVzOiBydWxlLnV0aWxpdGllcy5tYXAodSA9PiAoe1xuICAgICAgdmFsdWU6IHUudmFsdWUsXG4gICAgICB2YXJpYW50czogbm9ybWFsaXplVmFyaWFudE9yZGVyKFsuLi51LnZhcmlhbnRzXSlcbiAgICB9KSksXG4gICAgc291cmNlRmlsZSxcbiAgICBmdWxseUNvbnZlcnRpYmxlOiB0cnVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlUnVsZUludG9DbGFzc0luZm8oaW5mbzogQ2xhc3NJbmZvLCBydWxlOiBDU1NSdWxlKTogdm9pZCB7XG4gIGZvciAoY29uc3QgdXRpbGl0eSBvZiBydWxlLnV0aWxpdGllcykge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gaW5mby51dGlsaXRpZXMuZmluZCh1ID0+IHUudmFsdWUgPT09IHV0aWxpdHkudmFsdWUpO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHV0aWxpdHkudmFyaWFudHMpIHtcbiAgICAgICAgaWYgKCFleGlzdGluZy52YXJpYW50cy5pbmNsdWRlcyh2YXJpYW50KSkge1xuICAgICAgICAgIGV4aXN0aW5nLnZhcmlhbnRzLnB1c2godmFyaWFudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4aXN0aW5nLnZhcmlhbnRzID0gbm9ybWFsaXplVmFyaWFudE9yZGVyKGV4aXN0aW5nLnZhcmlhbnRzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mby51dGlsaXRpZXMucHVzaCh7XG4gICAgICAgIHZhbHVlOiB1dGlsaXR5LnZhbHVlLFxuICAgICAgICB2YXJpYW50czogbm9ybWFsaXplVmFyaWFudE9yZGVyKFsuLi51dGlsaXR5LnZhcmlhbnRzXSlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlbWJsZVRhaWx3aW5kQ2xhc3NlcyhpbmZvOiBDbGFzc0luZm8pOiBzdHJpbmcge1xuICBjb25zdCBtZXJnZWQgPSBtZXJnZVV0aWxpdGllcyhpbmZvLnV0aWxpdGllcyk7XG4gIHJldHVybiBhc3NlbWJsZVV0aWxpdGllcyhtZXJnZWQpLmpvaW4oJyAnKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZVJlZmVyZW5jZXMoXG4gIGNvZGU6IHN0cmluZywgXG4gIGNsYXNzTWFwOiBDU1NDbGFzc01hcFxuKTogeyBcbiAgY29kZTogc3RyaW5nOyBcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjsgXG4gIHJlcGxhY2VtZW50czogbnVtYmVyIFxufSB7XG4gIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gIGxldCByZXBsYWNlbWVudHMgPSAwO1xuICBsZXQgbW9kaWZpZWRDb2RlID0gY29kZTtcblxuICBPYmplY3QuZW50cmllcyhjbGFzc01hcCkuZm9yRWFjaCgoW29sZENsYXNzLCBpbmZvXSkgPT4ge1xuICAgIGlmICghaW5mby5mdWxseUNvbnZlcnRpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFpbHdpbmRDbGFzc1N0cmluZyA9IGFzc2VtYmxlVGFpbHdpbmRDbGFzc2VzKGluZm8pO1xuICAgIFxuICAgIGNvbnN0IHBhdHRlcm4xID0gbmV3IFJlZ0V4cChgY2xhc3NOYW1lPVwiJHtvbGRDbGFzc31cImAsICdnJyk7XG4gICAgaWYgKHBhdHRlcm4xLnRlc3QobW9kaWZpZWRDb2RlKSkge1xuICAgICAgbW9kaWZpZWRDb2RlID0gbW9kaWZpZWRDb2RlLnJlcGxhY2UocGF0dGVybjEsIGBjbGFzc05hbWU9XCIke3RhaWx3aW5kQ2xhc3NTdHJpbmd9XCJgKTtcbiAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgcmVwbGFjZW1lbnRzKys7XG4gICAgICBsb2dnZXIudmVyYm9zZShgUmVwbGFjZWQgY2xhc3NOYW1lPVwiJHtvbGRDbGFzc31cIiB3aXRoIFwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybjIgPSBuZXcgUmVnRXhwKGBjbGFzc05hbWU9XFxcXHtcIiR7b2xkQ2xhc3N9XCJcXFxcfWAsICdnJyk7XG4gICAgaWYgKHBhdHRlcm4yLnRlc3QobW9kaWZpZWRDb2RlKSkge1xuICAgICAgbW9kaWZpZWRDb2RlID0gbW9kaWZpZWRDb2RlLnJlcGxhY2UocGF0dGVybjIsIGBjbGFzc05hbWU9XCIke3RhaWx3aW5kQ2xhc3NTdHJpbmd9XCJgKTtcbiAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgcmVwbGFjZW1lbnRzKys7XG4gICAgICBsb2dnZXIudmVyYm9zZShgUmVwbGFjZWQgY2xhc3NOYW1lPXtcIiR7b2xkQ2xhc3N9XCJ9IHdpdGggXCIke3RhaWx3aW5kQ2xhc3NTdHJpbmd9XCJgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXR0ZXJuMyA9IG5ldyBSZWdFeHAoYGNsYXNzTmFtZT1cXFxce1xcYFxcXFxzKiR7b2xkQ2xhc3N9XFxcXHMqXFxgXFxcXH1gLCAnZycpO1xuICAgIGlmIChwYXR0ZXJuMy50ZXN0KG1vZGlmaWVkQ29kZSkpIHtcbiAgICAgIG1vZGlmaWVkQ29kZSA9IG1vZGlmaWVkQ29kZS5yZXBsYWNlKHBhdHRlcm4zLCBgY2xhc3NOYW1lPVwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIHJlcGxhY2VtZW50cysrO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlcGxhY2VkIGNsYXNzTmFtZT17XFxgJHtvbGRDbGFzc31cXGB9IHdpdGggXCIke3RhaWx3aW5kQ2xhc3NTdHJpbmd9XCJgKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7IGNvZGU6IG1vZGlmaWVkQ29kZSwgaGFzQ2hhbmdlcywgcmVwbGFjZW1lbnRzIH07XG59Il19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface ParsedSelector {
|
|
2
|
+
baseClass: string;
|
|
3
|
+
pseudos: string[];
|
|
4
|
+
isComplex: boolean;
|
|
5
|
+
reason?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const PSEUDO_TO_VARIANT: Record<string, string>;
|
|
8
|
+
export declare const SUPPORTED_PSEUDOS: Set<string>;
|
|
9
|
+
export declare function parseSelector(selector: string): ParsedSelector;
|
|
10
|
+
export declare function mapPseudoToVariant(pseudo: string): string | null;
|
|
11
|
+
export declare function processPseudoSelector(selector: string): {
|
|
12
|
+
baseClass: string | null;
|
|
13
|
+
variants: string[];
|
|
14
|
+
skipped: boolean;
|
|
15
|
+
reason?: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function parseMultipleSelectors(selector: string): ParsedSelector[];
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SUPPORTED_PSEUDOS = exports.PSEUDO_TO_VARIANT = void 0;
|
|
4
|
+
exports.parseSelector = parseSelector;
|
|
5
|
+
exports.mapPseudoToVariant = mapPseudoToVariant;
|
|
6
|
+
exports.processPseudoSelector = processPseudoSelector;
|
|
7
|
+
exports.parseMultipleSelectors = parseMultipleSelectors;
|
|
8
|
+
const logger_1 = require("./logger");
|
|
9
|
+
exports.PSEUDO_TO_VARIANT = {
|
|
10
|
+
'hover': 'hover',
|
|
11
|
+
'focus': 'focus',
|
|
12
|
+
'active': 'active',
|
|
13
|
+
'disabled': 'disabled',
|
|
14
|
+
'visited': 'visited',
|
|
15
|
+
'first-child': 'first',
|
|
16
|
+
'last-child': 'last',
|
|
17
|
+
'before': 'before',
|
|
18
|
+
'after': 'after'
|
|
19
|
+
};
|
|
20
|
+
exports.SUPPORTED_PSEUDOS = new Set(Object.keys(exports.PSEUDO_TO_VARIANT));
|
|
21
|
+
const UNSUPPORTED_PATTERNS = [
|
|
22
|
+
':nth-child',
|
|
23
|
+
':nth-of-type',
|
|
24
|
+
':not(',
|
|
25
|
+
':has(',
|
|
26
|
+
':is(',
|
|
27
|
+
':where(',
|
|
28
|
+
':first-of-type',
|
|
29
|
+
':last-of-type',
|
|
30
|
+
':only-child',
|
|
31
|
+
':only-of-type',
|
|
32
|
+
':empty',
|
|
33
|
+
':checked',
|
|
34
|
+
':indeterminate',
|
|
35
|
+
':default',
|
|
36
|
+
':required',
|
|
37
|
+
':valid',
|
|
38
|
+
':invalid',
|
|
39
|
+
':in-range',
|
|
40
|
+
':out-of-range',
|
|
41
|
+
':placeholder-shown',
|
|
42
|
+
':autofill',
|
|
43
|
+
':read-only',
|
|
44
|
+
':target',
|
|
45
|
+
':root',
|
|
46
|
+
':scope',
|
|
47
|
+
':lang(',
|
|
48
|
+
':dir('
|
|
49
|
+
];
|
|
50
|
+
function parseSelector(selector) {
|
|
51
|
+
const trimmed = selector.trim();
|
|
52
|
+
if (!trimmed.startsWith('.')) {
|
|
53
|
+
return {
|
|
54
|
+
baseClass: '',
|
|
55
|
+
pseudos: [],
|
|
56
|
+
isComplex: true,
|
|
57
|
+
reason: `Not a class selector: ${selector}`
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
for (const pattern of UNSUPPORTED_PATTERNS) {
|
|
61
|
+
if (trimmed.toLowerCase().includes(pattern.toLowerCase())) {
|
|
62
|
+
return {
|
|
63
|
+
baseClass: '',
|
|
64
|
+
pseudos: [],
|
|
65
|
+
isComplex: true,
|
|
66
|
+
reason: `Unsupported pseudo selector pattern: ${pattern}`
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const pseudoMatches = [];
|
|
71
|
+
let remaining = trimmed.slice(1);
|
|
72
|
+
const pseudoRegex = /:([a-zA-Z-]+)/g;
|
|
73
|
+
let match;
|
|
74
|
+
let hasComplexPseudo = false;
|
|
75
|
+
while ((match = pseudoRegex.exec(trimmed)) !== null) {
|
|
76
|
+
const pseudo = match[1].toLowerCase();
|
|
77
|
+
pseudoMatches.push(pseudo);
|
|
78
|
+
if (!exports.SUPPORTED_PSEUDOS.has(pseudo)) {
|
|
79
|
+
hasComplexPseudo = true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (pseudoMatches.length > 1) {
|
|
83
|
+
return {
|
|
84
|
+
baseClass: '',
|
|
85
|
+
pseudos: [],
|
|
86
|
+
isComplex: true,
|
|
87
|
+
reason: `Skipped complex pseudo chain (${selector})`
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
if (hasComplexPseudo && pseudoMatches.some(p => !exports.SUPPORTED_PSEUDOS.has(p))) {
|
|
91
|
+
const unsupported = pseudoMatches.find(p => !exports.SUPPORTED_PSEUDOS.has(p));
|
|
92
|
+
return {
|
|
93
|
+
baseClass: '',
|
|
94
|
+
pseudos: [],
|
|
95
|
+
isComplex: true,
|
|
96
|
+
reason: `Unsupported pseudo selector :${unsupported}`
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const baseClassMatch = remaining.match(/^([a-zA-Z_-][a-zA-Z0-9_-]*)/);
|
|
100
|
+
if (!baseClassMatch) {
|
|
101
|
+
return {
|
|
102
|
+
baseClass: '',
|
|
103
|
+
pseudos: [],
|
|
104
|
+
isComplex: true,
|
|
105
|
+
reason: `Invalid class name in selector: ${selector}`
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
const baseClass = baseClassMatch[1];
|
|
109
|
+
const expectedSelector = '.' + baseClass + pseudoMatches.map(p => `:${p}`).join('');
|
|
110
|
+
const hasMultipleSelectors = trimmed.includes(',');
|
|
111
|
+
const hasCombinators = /[>\s+~]/.test(trimmed.slice(baseClass.length + 1).replace(/:[a-zA-Z-]+/g, ''));
|
|
112
|
+
if (hasCombinators && !hasMultipleSelectors) {
|
|
113
|
+
return {
|
|
114
|
+
baseClass: '',
|
|
115
|
+
pseudos: [],
|
|
116
|
+
isComplex: true,
|
|
117
|
+
reason: `Complex selector with combinators: ${selector}`
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const variants = pseudoMatches
|
|
121
|
+
.filter(p => exports.SUPPORTED_PSEUDOS.has(p))
|
|
122
|
+
.map(p => exports.PSEUDO_TO_VARIANT[p]);
|
|
123
|
+
return {
|
|
124
|
+
baseClass,
|
|
125
|
+
pseudos: variants,
|
|
126
|
+
isComplex: false
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
function mapPseudoToVariant(pseudo) {
|
|
130
|
+
const normalized = pseudo.toLowerCase().replace(/^:/, '');
|
|
131
|
+
return exports.PSEUDO_TO_VARIANT[normalized] || null;
|
|
132
|
+
}
|
|
133
|
+
function processPseudoSelector(selector) {
|
|
134
|
+
const parsed = parseSelector(selector);
|
|
135
|
+
if (parsed.isComplex) {
|
|
136
|
+
logger_1.logger.verbose(parsed.reason || `Skipped complex selector: ${selector}`);
|
|
137
|
+
return {
|
|
138
|
+
baseClass: null,
|
|
139
|
+
variants: [],
|
|
140
|
+
skipped: true,
|
|
141
|
+
reason: parsed.reason
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
if (parsed.pseudos.length > 0) {
|
|
145
|
+
logger_1.logger.verbose(`Converted pseudo selector :${parsed.pseudos.join(':')} → ${parsed.pseudos.join(':')}:`);
|
|
146
|
+
logger_1.logger.verbose(`Applied to class .${parsed.baseClass}`);
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
baseClass: parsed.baseClass,
|
|
150
|
+
variants: parsed.pseudos,
|
|
151
|
+
skipped: false
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function parseMultipleSelectors(selector) {
|
|
155
|
+
const parts = selector.split(',').map(s => s.trim()).filter(Boolean);
|
|
156
|
+
const results = [];
|
|
157
|
+
for (const part of parts) {
|
|
158
|
+
const parsed = parseSelector(part);
|
|
159
|
+
results.push(parsed);
|
|
160
|
+
}
|
|
161
|
+
return results;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNldWRvU2VsZWN0b3JSZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wc2V1ZG9TZWxlY3RvclJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXFEQSxzQ0E0RkM7QUFFRCxnREFHQztBQUVELHNEQTRCQztBQUVELHdEQVVDO0FBaE1ELHFDQUFrQztBQVNyQixRQUFBLGlCQUFpQixHQUEyQjtJQUN2RCxPQUFPLEVBQUUsT0FBTztJQUNoQixPQUFPLEVBQUUsT0FBTztJQUNoQixRQUFRLEVBQUUsUUFBUTtJQUNsQixVQUFVLEVBQUUsVUFBVTtJQUN0QixTQUFTLEVBQUUsU0FBUztJQUNwQixhQUFhLEVBQUUsT0FBTztJQUN0QixZQUFZLEVBQUUsTUFBTTtJQUNwQixRQUFRLEVBQUUsUUFBUTtJQUNsQixPQUFPLEVBQUUsT0FBTztDQUNqQixDQUFDO0FBRVcsUUFBQSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUV6RSxNQUFNLG9CQUFvQixHQUFHO0lBQzNCLFlBQVk7SUFDWixjQUFjO0lBQ2QsT0FBTztJQUNQLE9BQU87SUFDUCxNQUFNO0lBQ04sU0FBUztJQUNULGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YsYUFBYTtJQUNiLGVBQWU7SUFDZixRQUFRO0lBQ1IsVUFBVTtJQUNWLGdCQUFnQjtJQUNoQixVQUFVO0lBQ1YsV0FBVztJQUNYLFFBQVE7SUFDUixVQUFVO0lBQ1YsV0FBVztJQUNYLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsV0FBVztJQUNYLFlBQVk7SUFDWixTQUFTO0lBQ1QsT0FBTztJQUNQLFFBQVE7SUFDUixRQUFRO0lBQ1IsT0FBTztDQUNSLENBQUM7QUFFRixTQUFnQixhQUFhLENBQUMsUUFBZ0I7SUFDNUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBRWhD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QztJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkU2VsZWN0b3Ige1xuICBiYXNlQ2xhc3M6IHN0cmluZztcbiAgcHNldWRvczogc3RyaW5nW107XG4gIGlzQ29tcGxleDogYm9vbGVhbjtcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgUFNFVURPX1RPX1ZBUklBTlQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdob3Zlcic6ICdob3ZlcicsXG4gICdmb2N1cyc6ICdmb2N1cycsXG4gICdhY3RpdmUnOiAnYWN0aXZlJyxcbiAgJ2Rpc2FibGVkJzogJ2Rpc2FibGVkJyxcbiAgJ3Zpc2l0ZWQnOiAndmlzaXRlZCcsXG4gICdmaXJzdC1jaGlsZCc6ICdmaXJzdCcsXG4gICdsYXN0LWNoaWxkJzogJ2xhc3QnLFxuICAnYmVmb3JlJzogJ2JlZm9yZScsXG4gICdhZnRlcic6ICdhZnRlcidcbn07XG5cbmV4cG9ydCBjb25zdCBTVVBQT1JURURfUFNFVURPUyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoUFNFVURPX1RPX1ZBUklBTlQpKTtcblxuY29uc3QgVU5TVVBQT1JURURfUEFUVEVSTlMgPSBbXG4gICc6bnRoLWNoaWxkJyxcbiAgJzpudGgtb2YtdHlwZScsXG4gICc6bm90KCcsXG4gICc6aGFzKCcsXG4gICc6aXMoJyxcbiAgJzp3aGVyZSgnLFxuICAnOmZpcnN0LW9mLXR5cGUnLFxuICAnOmxhc3Qtb2YtdHlwZScsXG4gICc6b25seS1jaGlsZCcsXG4gICc6b25seS1vZi10eXBlJyxcbiAgJzplbXB0eScsXG4gICc6Y2hlY2tlZCcsXG4gICc6aW5kZXRlcm1pbmF0ZScsXG4gICc6ZGVmYXVsdCcsXG4gICc6cmVxdWlyZWQnLFxuICAnOnZhbGlkJyxcbiAgJzppbnZhbGlkJyxcbiAgJzppbi1yYW5nZScsXG4gICc6b3V0LW9mLXJhbmdlJyxcbiAgJzpwbGFjZWhvbGRlci1zaG93bicsXG4gICc6YXV0b2ZpbGwnLFxuICAnOnJlYWQtb25seScsXG4gICc6dGFyZ2V0JyxcbiAgJzpyb290JyxcbiAgJzpzY29wZScsXG4gICc6bGFuZygnLFxuICAnOmRpcignXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTZWxlY3RvcihzZWxlY3Rvcjogc3RyaW5nKTogUGFyc2VkU2VsZWN0b3Ige1xuICBjb25zdCB0cmltbWVkID0gc2VsZWN0b3IudHJpbSgpO1xuICBcbiAgaWYgKCF0cmltbWVkLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgIHJldHVybiB7XG4gICAgICBiYXNlQ2xhc3M6ICcnLFxuICAgICAgcHNldWRvczogW10sXG4gICAgICBpc0NvbXBsZXg6IHRydWUsXG4gICAgICByZWFzb246IGBOb3QgYSBjbGFzcyBzZWxlY3RvcjogJHtzZWxlY3Rvcn1gXG4gICAgfTtcbiAgfVxuICBcbiAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIFVOU1VQUE9SVEVEX1BBVFRFUk5TKSB7XG4gICAgaWYgKHRyaW1tZWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhwYXR0ZXJuLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlQ2xhc3M6ICcnLFxuICAgICAgICBwc2V1ZG9zOiBbXSxcbiAgICAgICAgaXNDb21wbGV4OiB0cnVlLFxuICAgICAgICByZWFzb246IGBVbnN1cHBvcnRlZCBwc2V1ZG8gc2VsZWN0b3IgcGF0dGVybjogJHtwYXR0ZXJufWBcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIFxuICBjb25zdCBwc2V1ZG9NYXRjaGVzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgcmVtYWluaW5nID0gdHJpbW1lZC5zbGljZSgxKTtcbiAgXG4gIGNvbnN0IHBzZXVkb1JlZ2V4ID0gLzooW2EtekEtWi1dKykvZztcbiAgbGV0IG1hdGNoO1xuICBsZXQgaGFzQ29tcGxleFBzZXVkbyA9IGZhbHNlO1xuICBcbiAgd2hpbGUgKChtYXRjaCA9IHBzZXVkb1JlZ2V4LmV4ZWModHJpbW1lZCkpICE9PSBudWxsKSB7XG4gICAgY29uc3QgcHNldWRvID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBwc2V1ZG9NYXRjaGVzLnB1c2gocHNldWRvKTtcbiAgICBcbiAgICBpZiAoIVNVUFBPUlRFRF9QU0VVRE9TLmhhcyhwc2V1ZG8pKSB7XG4gICAgICBoYXNDb21wbGV4UHNldWRvID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgXG4gIGlmIChwc2V1ZG9NYXRjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFzZUNsYXNzOiAnJyxcbiAgICAgIHBzZXVkb3M6IFtdLFxuICAgICAgaXNDb21wbGV4OiB0cnVlLFxuICAgICAgcmVhc29uOiBgU2tpcHBlZCBjb21wbGV4IHBzZXVkbyBjaGFpbiAoJHtzZWxlY3Rvcn0pYFxuICAgIH07XG4gIH1cbiAgXG4gIGlmIChoYXNDb21wbGV4UHNldWRvICYmIHBzZXVkb01hdGNoZXMuc29tZShwID0+ICFTVVBQT1JURURfUFNFVURPUy5oYXMocCkpKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWQgPSBwc2V1ZG9NYXRjaGVzLmZpbmQocCA9PiAhU1VQUE9SVEVEX1BTRVVET1MuaGFzKHApKTtcbiAgICByZXR1cm4ge1xuICAgICAgYmFzZUNsYXNzOiAnJyxcbiAgICAgIHBzZXVkb3M6IFtdLFxuICAgICAgaXNDb21wbGV4OiB0cnVlLFxuICAgICAgcmVhc29uOiBgVW5zdXBwb3J0ZWQgcHNldWRvIHNlbGVjdG9yIDoke3Vuc3VwcG9ydGVkfWBcbiAgICB9O1xuICB9XG4gIFxuICBjb25zdCBiYXNlQ2xhc3NNYXRjaCA9IHJlbWFpbmluZy5tYXRjaCgvXihbYS16QS1aXy1dW2EtekEtWjAtOV8tXSopLyk7XG4gIGlmICghYmFzZUNsYXNzTWF0Y2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFzZUNsYXNzOiAnJyxcbiAgICAgIHBzZXVkb3M6IFtdLFxuICAgICAgaXNDb21wbGV4OiB0cnVlLFxuICAgICAgcmVhc29uOiBgSW52YWxpZCBjbGFzcyBuYW1lIGluIHNlbGVjdG9yOiAke3NlbGVjdG9yfWBcbiAgICB9O1xuICB9XG4gIFxuICBjb25zdCBiYXNlQ2xhc3MgPSBiYXNlQ2xhc3NNYXRjaFsxXTtcbiAgXG4gIGNvbnN0IGV4cGVjdGVkU2VsZWN0b3IgPSAnLicgKyBiYXNlQ2xhc3MgKyBwc2V1ZG9NYXRjaGVzLm1hcChwID0+IGA6JHtwfWApLmpvaW4oJycpO1xuICBjb25zdCBoYXNNdWx0aXBsZVNlbGVjdG9ycyA9IHRyaW1tZWQuaW5jbHVkZXMoJywnKTtcbiAgY29uc3QgaGFzQ29tYmluYXRvcnMgPSAvWz5cXHMrfl0vLnRlc3QodHJpbW1lZC5zbGljZShiYXNlQ2xhc3MubGVuZ3RoICsgMSkucmVwbGFjZSgvOlthLXpBLVotXSsvZywgJycpKTtcbiAgXG4gIGlmIChoYXNDb21iaW5hdG9ycyAmJiAhaGFzTXVsdGlwbGVTZWxlY3RvcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFzZUNsYXNzOiAnJyxcbiAgICAgIHBzZXVkb3M6IFtdLFxuICAgICAgaXNDb21wbGV4OiB0cnVlLFxuICAgICAgcmVhc29uOiBgQ29tcGxleCBzZWxlY3RvciB3aXRoIGNvbWJpbmF0b3JzOiAke3NlbGVjdG9yfWBcbiAgICB9O1xuICB9XG4gIFxuICBjb25zdCB2YXJpYW50cyA9IHBzZXVkb01hdGNoZXNcbiAgICAuZmlsdGVyKHAgPT4gU1VQUE9SVEVEX1BTRVVET1MuaGFzKHApKVxuICAgIC5tYXAocCA9PiBQU0VVRE9fVE9fVkFSSUFOVFtwXSk7XG4gIFxuICByZXR1cm4ge1xuICAgIGJhc2VDbGFzcyxcbiAgICBwc2V1ZG9zOiB2YXJpYW50cyxcbiAgICBpc0NvbXBsZXg6IGZhbHNlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBQc2V1ZG9Ub1ZhcmlhbnQocHNldWRvOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBzZXVkby50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL146LywgJycpO1xuICByZXR1cm4gUFNFVURPX1RPX1ZBUklBTlRbbm9ybWFsaXplZF0gfHwgbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NQc2V1ZG9TZWxlY3RvcihzZWxlY3Rvcjogc3RyaW5nKToge1xuICBiYXNlQ2xhc3M6IHN0cmluZyB8IG51bGw7XG4gIHZhcmlhbnRzOiBzdHJpbmdbXTtcbiAgc2tpcHBlZDogYm9vbGVhbjtcbiAgcmVhc29uPzogc3RyaW5nO1xufSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2VsZWN0b3Ioc2VsZWN0b3IpO1xuICBcbiAgaWYgKHBhcnNlZC5pc0NvbXBsZXgpIHtcbiAgICBsb2dnZXIudmVyYm9zZShwYXJzZWQucmVhc29uIHx8IGBTa2lwcGVkIGNvbXBsZXggc2VsZWN0b3I6ICR7c2VsZWN0b3J9YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2VDbGFzczogbnVsbCxcbiAgICAgIHZhcmlhbnRzOiBbXSxcbiAgICAgIHNraXBwZWQ6IHRydWUsXG4gICAgICByZWFzb246IHBhcnNlZC5yZWFzb25cbiAgICB9O1xuICB9XG4gIFxuICBpZiAocGFyc2VkLnBzZXVkb3MubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci52ZXJib3NlKGBDb252ZXJ0ZWQgcHNldWRvIHNlbGVjdG9yIDoke3BhcnNlZC5wc2V1ZG9zLmpvaW4oJzonKX0g4oaSICR7cGFyc2VkLnBzZXVkb3Muam9pbignOicpfTpgKTtcbiAgICBsb2dnZXIudmVyYm9zZShgQXBwbGllZCB0byBjbGFzcyAuJHtwYXJzZWQuYmFzZUNsYXNzfWApO1xuICB9XG4gIFxuICByZXR1cm4ge1xuICAgIGJhc2VDbGFzczogcGFyc2VkLmJhc2VDbGFzcyxcbiAgICB2YXJpYW50czogcGFyc2VkLnBzZXVkb3MsXG4gICAgc2tpcHBlZDogZmFsc2VcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTXVsdGlwbGVTZWxlY3RvcnMoc2VsZWN0b3I6IHN0cmluZyk6IFBhcnNlZFNlbGVjdG9yW10ge1xuICBjb25zdCBwYXJ0cyA9IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHMgPT4gcy50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgcmVzdWx0czogUGFyc2VkU2VsZWN0b3JbXSA9IFtdO1xuICBcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTZWxlY3RvcihwYXJ0KTtcbiAgICByZXN1bHRzLnB1c2gocGFyc2VkKTtcbiAgfVxuICBcbiAgcmV0dXJuIHJlc3VsdHM7XG59Il19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare const VARIANT_ORDER: string[];
|
|
2
|
+
export declare function isResponsiveVariant(variant: string): boolean;
|
|
3
|
+
export declare function isPseudoVariant(variant: string): boolean;
|
|
4
|
+
export declare function sortVariants(variants: string[]): string[];
|
|
5
|
+
export declare function deduplicateVariants(variants: string[]): string[];
|
|
6
|
+
export declare function validateVariantOrder(variants: string[]): boolean;
|
|
7
|
+
export declare function normalizeVariantOrder(variants: string[]): string[];
|
|
8
|
+
export declare function assembleUtility(utility: string, variants?: string[]): string;
|
|
9
|
+
export declare function assembleUtilities(utilities: Array<{
|
|
10
|
+
value: string;
|
|
11
|
+
variants?: string[];
|
|
12
|
+
}>): string[];
|
|
13
|
+
export interface MergedUtility {
|
|
14
|
+
value: string;
|
|
15
|
+
variants: string[];
|
|
16
|
+
}
|
|
17
|
+
export declare function mergeUtilities(utilities: Array<{
|
|
18
|
+
value: string;
|
|
19
|
+
variants?: string[];
|
|
20
|
+
}>): MergedUtility[];
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VARIANT_ORDER = void 0;
|
|
4
|
+
exports.isResponsiveVariant = isResponsiveVariant;
|
|
5
|
+
exports.isPseudoVariant = isPseudoVariant;
|
|
6
|
+
exports.sortVariants = sortVariants;
|
|
7
|
+
exports.deduplicateVariants = deduplicateVariants;
|
|
8
|
+
exports.validateVariantOrder = validateVariantOrder;
|
|
9
|
+
exports.normalizeVariantOrder = normalizeVariantOrder;
|
|
10
|
+
exports.assembleUtility = assembleUtility;
|
|
11
|
+
exports.assembleUtilities = assembleUtilities;
|
|
12
|
+
exports.mergeUtilities = mergeUtilities;
|
|
13
|
+
exports.VARIANT_ORDER = ['sm', 'md', 'lg', 'xl', '2xl', 'hover', 'focus', 'active', 'disabled', 'visited', 'first', 'last', 'before', 'after', 'dark', 'light'];
|
|
14
|
+
const RESPONSIVE_VARIANTS = new Set(['sm', 'md', 'lg', 'xl', '2xl']);
|
|
15
|
+
const PSEUDO_VARIANTS = new Set(['hover', 'focus', 'active', 'disabled', 'visited', 'first', 'last', 'before', 'after']);
|
|
16
|
+
function isResponsiveVariant(variant) {
|
|
17
|
+
return RESPONSIVE_VARIANTS.has(variant);
|
|
18
|
+
}
|
|
19
|
+
function isPseudoVariant(variant) {
|
|
20
|
+
return PSEUDO_VARIANTS.has(variant);
|
|
21
|
+
}
|
|
22
|
+
function sortVariants(variants) {
|
|
23
|
+
return [...variants].sort((a, b) => {
|
|
24
|
+
const aIndex = exports.VARIANT_ORDER.indexOf(a);
|
|
25
|
+
const bIndex = exports.VARIANT_ORDER.indexOf(b);
|
|
26
|
+
if (aIndex === -1 && bIndex === -1)
|
|
27
|
+
return a.localeCompare(b);
|
|
28
|
+
if (aIndex === -1)
|
|
29
|
+
return 1;
|
|
30
|
+
if (bIndex === -1)
|
|
31
|
+
return -1;
|
|
32
|
+
return aIndex - bIndex;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
function deduplicateVariants(variants) {
|
|
36
|
+
const seen = new Set();
|
|
37
|
+
const result = [];
|
|
38
|
+
for (const variant of variants) {
|
|
39
|
+
if (!seen.has(variant)) {
|
|
40
|
+
seen.add(variant);
|
|
41
|
+
result.push(variant);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
function validateVariantOrder(variants) {
|
|
47
|
+
let hasSeenPseudo = false;
|
|
48
|
+
for (const variant of variants) {
|
|
49
|
+
if (isPseudoVariant(variant)) {
|
|
50
|
+
hasSeenPseudo = true;
|
|
51
|
+
}
|
|
52
|
+
else if (isResponsiveVariant(variant) && hasSeenPseudo) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
function normalizeVariantOrder(variants) {
|
|
59
|
+
const deduped = deduplicateVariants(variants);
|
|
60
|
+
const responsive = [];
|
|
61
|
+
const pseudo = [];
|
|
62
|
+
const other = [];
|
|
63
|
+
for (const variant of deduped) {
|
|
64
|
+
if (isResponsiveVariant(variant)) {
|
|
65
|
+
responsive.push(variant);
|
|
66
|
+
}
|
|
67
|
+
else if (isPseudoVariant(variant)) {
|
|
68
|
+
pseudo.push(variant);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
other.push(variant);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const sortedResponsive = sortVariants(responsive);
|
|
75
|
+
const sortedPseudo = sortVariants(pseudo);
|
|
76
|
+
const sortedOther = sortVariants(other);
|
|
77
|
+
return [...sortedResponsive, ...sortedPseudo, ...sortedOther];
|
|
78
|
+
}
|
|
79
|
+
function assembleUtility(utility, variants) {
|
|
80
|
+
if (!variants || variants.length === 0) {
|
|
81
|
+
return utility;
|
|
82
|
+
}
|
|
83
|
+
const normalized = normalizeVariantOrder(variants);
|
|
84
|
+
if (normalized.length === 0) {
|
|
85
|
+
return utility;
|
|
86
|
+
}
|
|
87
|
+
const prefix = normalized.join(':');
|
|
88
|
+
return `${prefix}:${utility}`;
|
|
89
|
+
}
|
|
90
|
+
function assembleUtilities(utilities) {
|
|
91
|
+
return utilities.map(u => assembleUtility(u.value, u.variants));
|
|
92
|
+
}
|
|
93
|
+
function mergeUtilities(utilities) {
|
|
94
|
+
const merged = new Map();
|
|
95
|
+
for (const utility of utilities) {
|
|
96
|
+
const key = utility.value;
|
|
97
|
+
const existing = merged.get(key) || new Set();
|
|
98
|
+
if (utility.variants) {
|
|
99
|
+
for (const v of utility.variants) {
|
|
100
|
+
existing.add(v);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
merged.set(key, existing);
|
|
104
|
+
}
|
|
105
|
+
const result = [];
|
|
106
|
+
for (const [value, variantSet] of merged.entries()) {
|
|
107
|
+
result.push({
|
|
108
|
+
value,
|
|
109
|
+
variants: Array.from(variantSet)
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFyaWFudEFzc2VtYmxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy92YXJpYW50QXNzZW1ibGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLGtEQUVDO0FBRUQsMENBRUM7QUFFRCxvQ0FXQztBQUVELGtEQVlDO0FBRUQsb0RBWUM7QUFFRCxzREFxQkM7QUFFRCwwQ0FhQztBQUVELDhDQUVDO0FBT0Qsd0NBMEJDO0FBL0hZLFFBQUEsYUFBYSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFFckssTUFBTSxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRXpILFNBQWdCLG1CQUFtQixDQUFDLE9BQWU7SUFDakQsT0FBTyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQWdCLGVBQWUsQ0FBQyxPQUFlO0lBQzdDLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLFFBQWtCO0lBQzdDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxD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SUFFRCxNQUFNLE1BQU0sR0FBb0IsRUFBRSxDQUFDO0lBRW5DLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsS0FBSztZQUNMLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IGNvbnN0IFZBUklBTlRfT1JERVIgPSBbJ3NtJywgJ21kJywgJ2xnJywgJ3hsJywgJzJ4bCcsICdob3ZlcicsICdmb2N1cycsICdhY3RpdmUnLCAnZGlzYWJsZWQnLCAndmlzaXRlZCcsICdmaXJzdCcsICdsYXN0JywgJ2JlZm9yZScsICdhZnRlcicsICdkYXJrJywgJ2xpZ2h0J107XG5cbmNvbnN0IFJFU1BPTlNJVkVfVkFSSUFOVFMgPSBuZXcgU2V0KFsnc20nLCAnbWQnLCAnbGcnLCAneGwnLCAnMnhsJ10pO1xuY29uc3QgUFNFVURPX1ZBUklBTlRTID0gbmV3IFNldChbJ2hvdmVyJywgJ2ZvY3VzJywgJ2FjdGl2ZScsICdkaXNhYmxlZCcsICd2aXNpdGVkJywgJ2ZpcnN0JywgJ2xhc3QnLCAnYmVmb3JlJywgJ2FmdGVyJ10pO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXNwb25zaXZlVmFyaWFudCh2YXJpYW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFJFU1BPTlNJVkVfVkFSSUFOVFMuaGFzKHZhcmlhbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQc2V1ZG9WYXJpYW50KHZhcmlhbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gUFNFVURPX1ZBUklBTlRTLmhhcyh2YXJpYW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRWYXJpYW50cyh2YXJpYW50czogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4udmFyaWFudHNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBhSW5kZXggPSBWQVJJQU5UX09SREVSLmluZGV4T2YoYSk7XG4gICAgY29uc3QgYkluZGV4ID0gVkFSSUFOVF9PUkRFUi5pbmRleE9mKGIpO1xuICAgIFxuICAgIGlmIChhSW5kZXggPT09IC0xICYmIGJJbmRleCA9PT0gLTEpIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYik7XG4gICAgaWYgKGFJbmRleCA9PT0gLTEpIHJldHVybiAxO1xuICAgIGlmIChiSW5kZXggPT09IC0xKSByZXR1cm4gLTE7XG4gICAgXG4gICAgcmV0dXJuIGFJbmRleCAtIGJJbmRleDtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWR1cGxpY2F0ZVZhcmlhbnRzKHZhcmlhbnRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gIFxuICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdmFyaWFudHMpIHtcbiAgICBpZiAoIXNlZW4uaGFzKHZhcmlhbnQpKSB7XG4gICAgICBzZWVuLmFkZCh2YXJpYW50KTtcbiAgICAgIHJlc3VsdC5wdXNoKHZhcmlhbnQpO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVmFyaWFudE9yZGVyKHZhcmlhbnRzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBsZXQgaGFzU2VlblBzZXVkbyA9IGZhbHNlO1xuICBcbiAgZm9yIChjb25zdCB2YXJpYW50IG9mIHZhcmlhbnRzKSB7XG4gICAgaWYgKGlzUHNldWRvVmFyaWFudCh2YXJpYW50KSkge1xuICAgICAgaGFzU2VlblBzZXVkbyA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChpc1Jlc3BvbnNpdmVWYXJpYW50KHZhcmlhbnQpICYmIGhhc1NlZW5Qc2V1ZG8pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplVmFyaWFudE9yZGVyKHZhcmlhbnRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgZGVkdXBlZCA9IGRlZHVwbGljYXRlVmFyaWFudHModmFyaWFudHMpO1xuICBjb25zdCByZXNwb25zaXZlOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBwc2V1ZG86IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IG90aGVyOiBzdHJpbmdbXSA9IFtdO1xuICBcbiAgZm9yIChjb25zdCB2YXJpYW50IG9mIGRlZHVwZWQpIHtcbiAgICBpZiAoaXNSZXNwb25zaXZlVmFyaWFudCh2YXJpYW50KSkge1xuICAgICAgcmVzcG9uc2l2ZS5wdXNoKHZhcmlhbnQpO1xuICAgIH0gZWxzZSBpZiAoaXNQc2V1ZG9WYXJpYW50KHZhcmlhbnQpKSB7XG4gICAgICBwc2V1ZG8ucHVzaCh2YXJpYW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3RoZXIucHVzaCh2YXJpYW50KTtcbiAgICB9XG4gIH1cbiAgXG4gIGNvbnN0IHNvcnRlZFJlc3BvbnNpdmUgPSBzb3J0VmFyaWFudHMocmVzcG9uc2l2ZSk7XG4gIGNvbnN0IHNvcnRlZFBzZXVkbyA9IHNvcnRWYXJpYW50cyhwc2V1ZG8pO1xuICBjb25zdCBzb3J0ZWRPdGhlciA9IHNvcnRWYXJpYW50cyhvdGhlcik7XG4gIFxuICByZXR1cm4gWy4uLnNvcnRlZFJlc3BvbnNpdmUsIC4uLnNvcnRlZFBzZXVkbywgLi4uc29ydGVkT3RoZXJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZW1ibGVVdGlsaXR5KHV0aWxpdHk6IHN0cmluZywgdmFyaWFudHM/OiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGlmICghdmFyaWFudHMgfHwgdmFyaWFudHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHV0aWxpdHk7XG4gIH1cbiAgXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVWYXJpYW50T3JkZXIodmFyaWFudHMpO1xuICBcbiAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHV0aWxpdHk7XG4gIH1cbiAgXG4gIGNvbnN0IHByZWZpeCA9IG5vcm1hbGl6ZWQuam9pbignOicpO1xuICByZXR1cm4gYCR7cHJlZml4fToke3V0aWxpdHl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VtYmxlVXRpbGl0aWVzKHV0aWxpdGllczogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyB2YXJpYW50cz86IHN0cmluZ1tdIH0+KTogc3RyaW5nW10ge1xuICByZXR1cm4gdXRpbGl0aWVzLm1hcCh1ID0+IGFzc2VtYmxlVXRpbGl0eSh1LnZhbHVlLCB1LnZhcmlhbnRzKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVyZ2VkVXRpbGl0eSB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHZhcmlhbnRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlVXRpbGl0aWVzKHV0aWxpdGllczogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyB2YXJpYW50cz86IHN0cmluZ1tdIH0+KTogTWVyZ2VkVXRpbGl0eVtdIHtcbiAgY29uc3QgbWVyZ2VkID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICBcbiAgZm9yIChjb25zdCB1dGlsaXR5IG9mIHV0aWxpdGllcykge1xuICAgIGNvbnN0IGtleSA9IHV0aWxpdHkudmFsdWU7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBtZXJnZWQuZ2V0KGtleSkgfHwgbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgXG4gICAgaWYgKHV0aWxpdHkudmFyaWFudHMpIHtcbiAgICAgIGZvciAoY29uc3QgdiBvZiB1dGlsaXR5LnZhcmlhbnRzKSB7XG4gICAgICAgIGV4aXN0aW5nLmFkZCh2KTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgbWVyZ2VkLnNldChrZXksIGV4aXN0aW5nKTtcbiAgfVxuICBcbiAgY29uc3QgcmVzdWx0OiBNZXJnZWRVdGlsaXR5W10gPSBbXTtcbiAgXG4gIGZvciAoY29uc3QgW3ZhbHVlLCB2YXJpYW50U2V0XSBvZiBtZXJnZWQuZW50cmllcygpKSB7XG4gICAgcmVzdWx0LnB1c2goe1xuICAgICAgdmFsdWUsXG4gICAgICB2YXJpYW50czogQXJyYXkuZnJvbSh2YXJpYW50U2V0KVxuICAgIH0pO1xuICB9XG4gIFxuICByZXR1cm4gcmVzdWx0O1xufSJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "css-to-tailwind-react",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
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",
|