css-to-tailwind-react 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,324 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.transformDescendantSelectors = transformDescendantSelectors;
40
+ exports.groupDescendantRulesByParent = groupDescendantRulesByParent;
41
+ const parser_1 = require("@babel/parser");
42
+ const traverse_1 = __importDefault(require("@babel/traverse"));
43
+ const generator_1 = __importDefault(require("@babel/generator"));
44
+ const t = __importStar(require("@babel/types"));
45
+ const variantAssembler_1 = require("./utils/variantAssembler");
46
+ const logger_1 = require("./utils/logger");
47
+ function isReactComponent(name) {
48
+ return name.length > 0 && name[0] === name[0].toUpperCase();
49
+ }
50
+ function getJSXElementName(node) {
51
+ if (t.isJSXIdentifier(node.name)) {
52
+ return node.name.name;
53
+ }
54
+ return null;
55
+ }
56
+ function parseClassNameValue(attr) {
57
+ const classes = [];
58
+ if (!attr.value) {
59
+ return classes;
60
+ }
61
+ if (t.isStringLiteral(attr.value)) {
62
+ return attr.value.value.split(/\s+/).filter(Boolean);
63
+ }
64
+ if (t.isJSXExpressionContainer(attr.value)) {
65
+ const expr = attr.value.expression;
66
+ if (t.isStringLiteral(expr)) {
67
+ return expr.value.split(/\s+/).filter(Boolean);
68
+ }
69
+ if (t.isTemplateLiteral(expr) && expr.quasis.length > 0 && expr.expressions.length === 0) {
70
+ return expr.quasis[0].value.raw.split(/\s+/).filter(Boolean);
71
+ }
72
+ }
73
+ return classes;
74
+ }
75
+ function elementMatchesSelector(node, selector) {
76
+ const elementName = getJSXElementName(node);
77
+ if (!elementName) {
78
+ return false;
79
+ }
80
+ if (isReactComponent(elementName)) {
81
+ return false;
82
+ }
83
+ if (selector.type === 'element') {
84
+ return elementName.toLowerCase() === selector.name.toLowerCase();
85
+ }
86
+ if (selector.type === 'class') {
87
+ const classNameAttr = node.attributes?.find(attr => t.isJSXAttribute(attr) &&
88
+ t.isJSXIdentifier(attr.name) &&
89
+ attr.name.name === 'className');
90
+ if (!classNameAttr || !t.isJSXAttribute(classNameAttr)) {
91
+ return false;
92
+ }
93
+ const classes = parseClassNameValue(classNameAttr);
94
+ return classes.includes(selector.name);
95
+ }
96
+ return false;
97
+ }
98
+ function mergeClassesIntoAttribute(node, newClasses) {
99
+ if (newClasses.length === 0) {
100
+ return false;
101
+ }
102
+ const classNameAttr = node.attributes?.find(attr => t.isJSXAttribute(attr) &&
103
+ t.isJSXIdentifier(attr.name) &&
104
+ attr.name.name === 'className');
105
+ if (!classNameAttr) {
106
+ const newAttr = t.jsxAttribute(t.jsxIdentifier('className'), t.stringLiteral(newClasses.join(' ')));
107
+ if (!node.attributes) {
108
+ node.attributes = [];
109
+ }
110
+ node.attributes.push(newAttr);
111
+ return true;
112
+ }
113
+ if (!t.isJSXAttribute(classNameAttr)) {
114
+ return false;
115
+ }
116
+ const existingClasses = parseClassNameValue(classNameAttr);
117
+ const allClasses = new Set([...existingClasses, ...newClasses]);
118
+ const mergedClasses = Array.from(allClasses);
119
+ if (t.isStringLiteral(classNameAttr.value)) {
120
+ classNameAttr.value.value = mergedClasses.join(' ');
121
+ return true;
122
+ }
123
+ if (t.isJSXExpressionContainer(classNameAttr.value)) {
124
+ const expr = classNameAttr.value.expression;
125
+ if (t.isStringLiteral(expr)) {
126
+ expr.value = mergedClasses.join(' ');
127
+ return true;
128
+ }
129
+ if (t.isTemplateLiteral(expr) && expr.quasis.length > 0 && expr.expressions.length === 0) {
130
+ expr.quasis[0].value.raw = mergedClasses.join(' ');
131
+ expr.quasis[0].value.cooked = mergedClasses.join(' ');
132
+ return true;
133
+ }
134
+ }
135
+ classNameAttr.value = t.stringLiteral(mergedClasses.join(' '));
136
+ return true;
137
+ }
138
+ function wrapInFragment(code) {
139
+ return `<>${code}</>`;
140
+ }
141
+ function unwrapFragment(code) {
142
+ return code.replace(/^<>\n?/, '').replace(/\n?<\/>$/, '');
143
+ }
144
+ function needsFragmentWrapping(code) {
145
+ const trimmed = code.trim();
146
+ if (trimmed.startsWith('<>') || trimmed.startsWith('<Fragment')) {
147
+ return false;
148
+ }
149
+ const firstChar = trimmed.search(/<[a-zA-Z]/);
150
+ if (firstChar === -1)
151
+ return false;
152
+ let depth = 0;
153
+ let inString = false;
154
+ let stringChar = '';
155
+ for (let i = firstChar; i < trimmed.length; i++) {
156
+ const char = trimmed[i];
157
+ if (inString) {
158
+ if (char === stringChar && trimmed[i - 1] !== '\\') {
159
+ inString = false;
160
+ }
161
+ continue;
162
+ }
163
+ if (char === '"' || char === "'" || char === '`') {
164
+ inString = true;
165
+ stringChar = char;
166
+ continue;
167
+ }
168
+ if (trimmed.slice(i, i + 2) === '</') {
169
+ depth--;
170
+ i++;
171
+ }
172
+ else if (char === '<' && trimmed[i + 1]?.match(/[a-zA-Z]/)) {
173
+ depth++;
174
+ }
175
+ if (depth === 0 && i > firstChar) {
176
+ const remaining = trimmed.slice(i + 1).trim();
177
+ if (remaining.startsWith('<') && !remaining.startsWith('</')) {
178
+ return true;
179
+ }
180
+ }
181
+ }
182
+ return false;
183
+ }
184
+ function transformDescendantSelectors(code, rules) {
185
+ const descendantRules = [];
186
+ for (const rule of rules) {
187
+ if (rule.isDescendant && rule.parentSelector && rule.targetSelector) {
188
+ if (rule.convertedClasses.length > 0) {
189
+ descendantRules.push({
190
+ parentSelector: rule.parentSelector,
191
+ targetSelector: rule.targetSelector,
192
+ utilities: rule.utilities
193
+ });
194
+ }
195
+ }
196
+ }
197
+ if (descendantRules.length === 0) {
198
+ return {
199
+ code,
200
+ hasChanges: false,
201
+ transformations: 0,
202
+ warnings: []
203
+ };
204
+ }
205
+ let hasChanges = false;
206
+ let transformations = 0;
207
+ const warnings = [];
208
+ const needsWrapping = needsFragmentWrapping(code);
209
+ const codeToParse = needsWrapping ? wrapInFragment(code) : code;
210
+ try {
211
+ const ast = (0, parser_1.parse)(codeToParse, {
212
+ sourceType: 'module',
213
+ allowImportExportEverywhere: true,
214
+ allowReturnOutsideFunction: true,
215
+ plugins: [
216
+ 'jsx',
217
+ 'typescript',
218
+ 'decorators-legacy',
219
+ 'classProperties',
220
+ 'optionalChaining',
221
+ 'nullishCoalescingOperator',
222
+ 'dynamicImport'
223
+ ]
224
+ });
225
+ (0, traverse_1.default)(ast, {
226
+ JSXOpeningElement(path) {
227
+ const node = path.node;
228
+ for (const rule of descendantRules) {
229
+ if (elementMatchesSelector(node, rule.parentSelector)) {
230
+ const parentPath = path.parentPath;
231
+ if (!parentPath)
232
+ continue;
233
+ const appliedClasses = applyToDescendants(parentPath, rule);
234
+ if (appliedClasses > 0) {
235
+ hasChanges = true;
236
+ transformations += appliedClasses;
237
+ }
238
+ }
239
+ }
240
+ }
241
+ });
242
+ const output = (0, generator_1.default)(ast, {
243
+ retainLines: true,
244
+ retainFunctionParens: true,
245
+ comments: true
246
+ });
247
+ let outputCode = output.code;
248
+ if (needsWrapping) {
249
+ outputCode = unwrapFragment(outputCode);
250
+ }
251
+ return {
252
+ code: outputCode,
253
+ hasChanges,
254
+ transformations,
255
+ warnings
256
+ };
257
+ }
258
+ catch (error) {
259
+ logger_1.logger.error('Failed to transform descendant selectors:', error);
260
+ warnings.push(`Descendant transformation failed: ${error}`);
261
+ return {
262
+ code,
263
+ hasChanges: false,
264
+ transformations: 0,
265
+ warnings
266
+ };
267
+ }
268
+ }
269
+ function applyToDescendants(parentPath, rule) {
270
+ let appliedCount = 0;
271
+ const newClasses = (0, variantAssembler_1.assembleUtilities)(rule.utilities);
272
+ const parentNode = parentPath.node;
273
+ if (!parentNode) {
274
+ return appliedCount;
275
+ }
276
+ if (t.isJSXElement(parentNode)) {
277
+ if (parentNode.children) {
278
+ for (const child of parentNode.children) {
279
+ if (t.isJSXElement(child)) {
280
+ appliedCount += applyToJSXElement(child, rule, newClasses);
281
+ }
282
+ }
283
+ }
284
+ }
285
+ return appliedCount;
286
+ }
287
+ function applyToJSXElement(element, rule, newClasses) {
288
+ let appliedCount = 0;
289
+ if (elementMatchesSelector(element.openingElement, rule.targetSelector)) {
290
+ if (mergeClassesIntoAttribute(element.openingElement, newClasses)) {
291
+ appliedCount++;
292
+ const elementName = getJSXElementName(element.openingElement);
293
+ logger_1.logger.verbose(`Applied descendant classes to <${elementName}>: ${newClasses.join(' ')}`);
294
+ }
295
+ }
296
+ if (element.children) {
297
+ for (const child of element.children) {
298
+ if (t.isJSXElement(child)) {
299
+ appliedCount += applyToJSXElement(child, rule, newClasses);
300
+ }
301
+ }
302
+ }
303
+ return appliedCount;
304
+ }
305
+ function groupDescendantRulesByParent(rules) {
306
+ const grouped = new Map();
307
+ for (const rule of rules) {
308
+ if (rule.isDescendant && rule.parentSelector && rule.targetSelector) {
309
+ const parentKey = rule.parentSelector.type === 'class'
310
+ ? `.${rule.parentSelector.name}`
311
+ : rule.parentSelector.name;
312
+ if (!grouped.has(parentKey)) {
313
+ grouped.set(parentKey, []);
314
+ }
315
+ grouped.get(parentKey).push({
316
+ parentSelector: rule.parentSelector,
317
+ targetSelector: rule.targetSelector,
318
+ utilities: rule.utilities
319
+ });
320
+ }
321
+ }
322
+ return grouped;
323
+ }
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4RGVzY2VuZGFudFRyYW5zZm9ybWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2pzeERlc2NlbmRhbnRUcmFuc2Zvcm1lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlOQSxvRUFvR0M7QUF1REQsb0VBc0JDO0FBbFlELDBDQUFzQztBQUN0QywrREFBdUM7QUFDdkMsaUVBQXdDO0FBQ3hDLGdEQUFrQztBQUVsQywrREFBNkQ7QUFDN0QsMkNBQXdDO0FBZXhDLFNBQVMsZ0JBQWdCLENBQUMsSUFBWTtJQUNwQyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDOUQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsSUFBeUI7SUFDbEQsSUFBSSxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsSUFBb0I7SUFDL0MsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO0lBRTdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUks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RUQsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQWdCLDRCQUE0QixDQUFDLEtBQWdCO0lBQzNELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBRXBELEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLE9BQU87Z0JBQ3BELENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFFN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFFLENBQUMsSUFBSSxDQUFDO2dCQUMzQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7Z0JBQ25DLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDbkMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2FBQzFCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBhcnNlIH0gZnJvbSAnQGJhYmVsL3BhcnNlcic7XG5pbXBvcnQgdHJhdmVyc2UgZnJvbSAnQGJhYmVsL3RyYXZlcnNlJztcbmltcG9ydCBnZW5lcmF0ZSBmcm9tICdAYmFiZWwvZ2VuZXJhdG9yJztcbmltcG9ydCAqIGFzIHQgZnJvbSAnQGJhYmVsL3R5cGVzJztcbmltcG9ydCB7IENTU1J1bGUsIFNlbGVjdG9yVGFyZ2V0IH0gZnJvbSAnLi9jc3NQYXJzZXInO1xuaW1wb3J0IHsgYXNzZW1ibGVVdGlsaXRpZXMgfSBmcm9tICcuL3V0aWxzL3ZhcmlhbnRBc3NlbWJsZXInO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NlbmRhbnRUcmFuc2Zvcm1SZXN1bHQge1xuICBjb2RlOiBzdHJpbmc7XG4gIGhhc0NoYW5nZXM6IGJvb2xlYW47XG4gIHRyYW5zZm9ybWF0aW9uczogbnVtYmVyO1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBEZXNjZW5kYW50UnVsZSB7XG4gIHBhcmVudFNlbGVjdG9yOiBTZWxlY3RvclRhcmdldDtcbiAgdGFyZ2V0U2VsZWN0b3I6IFNlbGVjdG9yVGFyZ2V0O1xuICB1dGlsaXRpZXM6IEFycmF5PHsgdmFsdWU6IHN0cmluZzsgdmFyaWFudHM6IHN0cmluZ1tdIH0+O1xufVxuXG5mdW5jdGlvbiBpc1JlYWN0Q29tcG9uZW50KG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gbmFtZS5sZW5ndGggPiAwICYmIG5hbWVbMF0gPT09IG5hbWVbMF0udG9VcHBlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gZ2V0SlNYRWxlbWVudE5hbWUobm9kZTogdC5KU1hPcGVuaW5nRWxlbWVudCk6IHN0cmluZyB8IG51bGwge1xuICBpZiAodC5pc0pTWElkZW50aWZpZXIobm9kZS5uYW1lKSkge1xuICAgIHJldHVybiBub2RlLm5hbWUubmFtZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gcGFyc2VDbGFzc05hbWVWYWx1ZShhdHRyOiB0LkpTWEF0dHJpYnV0ZSk6IHN0cmluZ1tdIHtcbiAgY29uc3QgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgXG4gIGlmICghYXR0ci52YWx1ZSkge1xuICAgIHJldHVybiBjbGFzc2VzO1xuICB9XG4gIFxuICBpZiAodC5pc1N0cmluZ0xpdGVyYWwoYXR0ci52YWx1ZSkpIHtcbiAgICByZXR1cm4gYXR0ci52YWx1ZS52YWx1ZS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuICBcbiAgaWYgKHQuaXNKU1hFeHByZXNzaW9uQ29udGFpbmVyKGF0dHIudmFsdWUpKSB7XG4gICAgY29uc3QgZXhwciA9IGF0dHIudmFsdWUuZXhwcmVzc2lvbjtcbiAgICBcbiAgICBpZiAodC5pc1N0cmluZ0xpdGVyYWwoZXhwcikpIHtcbiAgICAgIHJldHVybiBleHByLnZhbHVlLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgIH1cbiAgICBcbiAgICBpZiAodC5pc1RlbXBsYXRlTGl0ZXJhbChleHByKSAmJiBleHByLnF1YXNpcy5sZW5ndGggPiAwICYmIGV4cHIuZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZXhwci5xdWFzaXNbMF0udmFsdWUucmF3LnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIGNsYXNzZXM7XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVzU2VsZWN0b3IoXG4gIG5vZGU6IHQuSlNYT3BlbmluZ0VsZW1lbnQsXG4gIHNlbGVjdG9yOiBTZWxlY3RvclRhcmdldFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGVsZW1lbnROYW1lID0gZ2V0SlNYRWxlbWVudE5hbWUobm9kZSk7XG4gIFxuICBpZiAoIWVsZW1lbnROYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIFxuICBpZiAoaXNSZWFjdENvbXBvbmVudChlbGVtZW50TmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgXG4gIGlmIChzZWxlY3Rvci50eXBlID09PSAnZWxlbWVudCcpIHtcbiAgICByZXR1cm4gZWxlbWVudE5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0b3IubmFtZS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIFxuICBpZiAoc2VsZWN0b3IudHlwZSA9PT0gJ2NsYXNzJykge1xuICAgIGNvbnN0IGNsYXNzTmFtZUF0dHIgPSBub2RlLmF0dHJpYnV0ZXM/LmZpbmQoXG4gICAgICBhdHRyID0+IHQuaXNKU1hBdHRyaWJ1dGUoYXR0cikgJiYgXG4gICAgICAgICAgICAgIHQuaXNKU1hJZGVudGlmaWVyKGF0dHIubmFtZSkgJiYgXG4gICAgICAgICAgICAgIGF0dHIubmFtZS5uYW1lID09PSAnY2xhc3NOYW1lJ1xuICAgICk7XG4gICAgXG4gICAgaWYgKCFjbGFzc05hbWVBdHRyIHx8ICF0LmlzSlNYQXR0cmlidXRlKGNsYXNzTmFtZUF0dHIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGNsYXNzZXMgPSBwYXJzZUNsYXNzTmFtZVZhbHVlKGNsYXNzTmFtZUF0dHIpO1xuICAgIHJldHVybiBjbGFzc2VzLmluY2x1ZGVzKHNlbGVjdG9yLm5hbWUpO1xuICB9XG4gIFxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQ2xhc3Nlc0ludG9BdHRyaWJ1dGUoXG4gIG5vZGU6IHQuSlNYT3BlbmluZ0VsZW1lbnQsXG4gIG5ld0NsYXNzZXM6IHN0cmluZ1tdXG4pOiBib29sZWFuIHtcbiAgaWYgKG5ld0NsYXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIFxuICBjb25zdCBjbGFzc05hbWVBdHRyID0gbm9kZS5hdHRyaWJ1dGVzPy5maW5kKFxuICAgIGF0dHIgPT4gdC5pc0pTWEF0dHJpYnV0ZShhdHRyKSAmJiBcbiAgICAgICAgICAgIHQuaXNKU1hJZGVudGlmaWVyKGF0dHIubmFtZSkgJiYgXG4gICAgICAgICAgICBhdHRyLm5hbWUubmFtZSA9PT0gJ2NsYXNzTmFtZSdcbiAgKTtcbiAgXG4gIGlmICghY2xhc3NOYW1lQXR0cikge1xuICAgIGNvbnN0IG5ld0F0dHIgPSB0LmpzeEF0dHJpYnV0ZShcbiAgICAgIHQuanN4SWRlbnRpZmllcignY2xhc3NOYW1lJyksXG4gICAgICB0LnN0cmluZ0xpdGVyYWwobmV3Q2xhc3Nlcy5qb2luKCcgJykpXG4gICAgKTtcbiAgICBcbiAgICBpZiAoIW5vZGUuYXR0cmlidXRlcykge1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzID0gW107XG4gICAgfVxuICAgIG5vZGUuYXR0cmlidXRlcy5wdXNoKG5ld0F0dHIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIFxuICBpZiAoIXQuaXNKU1hBdHRyaWJ1dGUoY2xhc3NOYW1lQXR0cikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgXG4gIGNvbnN0IGV4aXN0aW5nQ2xhc3NlcyA9IHBhcnNlQ2xhc3NOYW1lVmFsdWUoY2xhc3NOYW1lQXR0cik7XG4gIGNvbnN0IGFsbENsYXNzZXMgPSBuZXcgU2V0KFsuLi5leGlzdGluZ0NsYXNzZXMsIC4uLm5ld0NsYXNzZXNdKTtcbiAgY29uc3QgbWVyZ2VkQ2xhc3NlcyA9IEFycmF5LmZyb20oYWxsQ2xhc3Nlcyk7XG4gIFxuICBpZiAodC5pc1N0cmluZ0xpdGVyYWwoY2xhc3NOYW1lQXR0ci52YWx1ZSkpIHtcbiAgICBjbGFzc05hbWVBdHRyLnZhbHVlLnZhbHVlID0gbWVyZ2VkQ2xhc3Nlcy5qb2luKCcgJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgXG4gIGlmICh0LmlzSlNYRXhwcmVzc2lvbkNvbnRhaW5lcihjbGFzc05hbWVBdHRyLnZhbHVlKSkge1xuICAgIGNvbnN0IGV4cHIgPSBjbGFzc05hbWVBdHRyLnZhbHVlLmV4cHJlc3Npb247XG4gICAgXG4gICAgaWYgKHQuaXNTdHJpbmdMaXRlcmFsKGV4cHIpKSB7XG4gICAgICBleHByLnZhbHVlID0gbWVyZ2VkQ2xhc3Nlcy5qb2luKCcgJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHQuaXNUZW1wbGF0ZUxpdGVyYWwoZXhwcikgJiYgZXhwci5xdWFzaXMubGVuZ3RoID4gMCAmJiBleHByLmV4cHJlc3Npb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZXhwci5xdWFzaXNbMF0udmFsdWUucmF3ID0gbWVyZ2VkQ2xhc3Nlcy5qb2luKCcgJyk7XG4gICAgICBleHByLnF1YXNpc1swXS52YWx1ZS5jb29rZWQgPSBtZXJnZWRDbGFzc2VzLmpvaW4oJyAnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBcbiAgY2xhc3NOYW1lQXR0ci52YWx1ZSA9IHQuc3RyaW5nTGl0ZXJhbChtZXJnZWRDbGFzc2VzLmpvaW4oJyAnKSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB3cmFwSW5GcmFnbWVudChjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYDw+JHtjb2RlfTwvPmA7XG59XG5cbmZ1bmN0aW9uIHVud3JhcEZyYWdtZW50KGNvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb2RlLnJlcGxhY2UoL148Plxcbj8vLCAnJykucmVwbGFjZSgvXFxuPzxcXC8+JC8sICcnKTtcbn1cblxuZnVuY3Rpb24gbmVlZHNGcmFnbWVudFdyYXBwaW5nKGNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCB0cmltbWVkID0gY29kZS50cmltKCk7XG4gIFxuICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCc8PicpIHx8IHRyaW1tZWQuc3RhcnRzV2l0aCgnPEZyYWdtZW50JykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgXG4gIGNvbnN0IGZpcnN0Q2hhciA9IHRyaW1tZWQuc2VhcmNoKC88W2EtekEtWl0vKTtcbiAgaWYgKGZpcnN0Q2hhciA9PT0gLTEpIHJldHVybiBmYWxzZTtcbiAgXG4gIGxldCBkZXB0aCA9IDA7XG4gIGxldCBpblN0cmluZyA9IGZhbHNlO1xuICBsZXQgc3RyaW5nQ2hhciA9ICcnO1xuICBcbiAgZm9yIChsZXQgaSA9IGZpcnN0Q2hhcjsgaSA8IHRyaW1tZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gdHJpbW1lZFtpXTtcbiAgICBcbiAgICBpZiAoaW5TdHJpbmcpIHtcbiAgICAgIGlmIChjaGFyID09PSBzdHJpbmdDaGFyICYmIHRyaW1tZWRbaSAtIDFdICE9PSAnXFxcXCcpIHtcbiAgICAgICAgaW5TdHJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBcbiAgICBpZiAoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIiB8fCBjaGFyID09PSAnYCcpIHtcbiAgICAgIGluU3RyaW5nID0gdHJ1ZTtcbiAgICAgIHN0cmluZ0NoYXIgPSBjaGFyO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIFxuICAgIGlmICh0cmltbWVkLnNsaWNlKGksIGkgKyAyKSA9PT0gJzwvJykge1xuICAgICAgZGVwdGgtLTtcbiAgICAgIGkrKztcbiAgICB9IGVsc2UgaWYgKGNoYXIgPT09ICc8JyAmJiB0cmltbWVkW2kgKyAxXT8ubWF0Y2goL1thLXpBLVpdLykpIHtcbiAgICAgIGRlcHRoKys7XG4gICAgfVxuICAgIFxuICAgIGlmIChkZXB0aCA9PT0gMCAmJiBpID4gZmlyc3RDaGFyKSB7XG4gICAgICBjb25zdCByZW1haW5pbmcgPSB0cmltbWVkLnNsaWNlKGkgKyAxKS50cmltKCk7XG4gICAgICBpZiAocmVtYWluaW5nLnN0YXJ0c1dpdGgoJzwnKSAmJiAhcmVtYWluaW5nLnN0YXJ0c1dpdGgoJzwvJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1EZXNjZW5kYW50U2VsZWN0b3JzKFxuICBjb2RlOiBzdHJpbmcsXG4gIHJ1bGVzOiBDU1NSdWxlW11cbik6IERlc2NlbmRhbnRUcmFuc2Zvcm1SZXN1bHQge1xuICBjb25zdCBkZXNjZW5kYW50UnVsZXM6IERlc2NlbmRhbnRSdWxlW10gPSBbXTtcbiAgXG4gIGZvciAoY29uc3QgcnVsZSBvZiBydWxlcykge1xuICAgIGlmIChydWxlLmlzRGVzY2VuZGFudCAmJiBydWxlLnBhcmVudFNlbGVjdG9yICYmIHJ1bGUudGFyZ2V0U2VsZWN0b3IpIHtcbiAgICAgIGlmIChydWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBkZXNjZW5kYW50UnVsZXMucHVzaCh7XG4gICAgICAgICAgcGFyZW50U2VsZWN0b3I6IHJ1bGUucGFyZW50U2VsZWN0b3IsXG4gICAgICAgICAgdGFyZ2V0U2VsZWN0b3I6IHJ1bGUudGFyZ2V0U2VsZWN0b3IsXG4gICAgICAgICAgdXRpbGl0aWVzOiBydWxlLnV0aWxpdGllc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIGlmIChkZXNjZW5kYW50UnVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGUsXG4gICAgICBoYXNDaGFuZ2VzOiBmYWxzZSxcbiAgICAgIHRyYW5zZm9ybWF0aW9uczogMCxcbiAgICAgIHdhcm5pbmdzOiBbXVxuICAgIH07XG4gIH1cbiAgXG4gIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gIGxldCB0cmFuc2Zvcm1hdGlvbnMgPSAwO1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgXG4gIGNvbnN0IG5lZWRzV3JhcHBpbmcgPSBuZWVkc0ZyYWdtZW50V3JhcHBpbmcoY29kZSk7XG4gIGNvbnN0IGNvZGVUb1BhcnNlID0gbmVlZHNXcmFwcGluZyA/IHdyYXBJbkZyYWdtZW50KGNvZGUpIDogY29kZTtcbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgYXN0ID0gcGFyc2UoY29kZVRvUGFyc2UsIHtcbiAgICAgIHNvdXJjZVR5cGU6ICdtb2R1bGUnLFxuICAgICAgYWxsb3dJbXBvcnRFeHBvcnRFdmVyeXdoZXJlOiB0cnVlLFxuICAgICAgYWxsb3dSZXR1cm5PdXRzaWRlRnVuY3Rpb246IHRydWUsXG4gICAgICBwbHVnaW5zOiBbXG4gICAgICAgICdqc3gnLFxuICAgICAgICAndHlwZXNjcmlwdCcsXG4gICAgICAgICdkZWNvcmF0b3JzLWxlZ2FjeScsXG4gICAgICAgICdjbGFzc1Byb3BlcnRpZXMnLFxuICAgICAgICAnb3B0aW9uYWxDaGFpbmluZycsXG4gICAgICAgICdudWxsaXNoQ29hbGVzY2luZ09wZXJhdG9yJyxcbiAgICAgICAgJ2R5bmFtaWNJbXBvcnQnXG4gICAgICBdXG4gICAgfSk7XG4gICAgXG4gICAgdHJhdmVyc2UoYXN0LCB7XG4gICAgICBKU1hPcGVuaW5nRWxlbWVudChwYXRoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBwYXRoLm5vZGU7XG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgZGVzY2VuZGFudFJ1bGVzKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnRNYXRjaGVzU2VsZWN0b3Iobm9kZSwgcnVsZS5wYXJlbnRTZWxlY3RvcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBwYXRoLnBhcmVudFBhdGg7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghcGFyZW50UGF0aCkgY29udGludWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnN0IGFwcGxpZWRDbGFzc2VzID0gYXBwbHlUb0Rlc2NlbmRhbnRzKHBhcmVudFBhdGgsIHJ1bGUpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoYXBwbGllZENsYXNzZXMgPiAwKSB7XG4gICAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbnMgKz0gYXBwbGllZENsYXNzZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgXG4gICAgY29uc3Qgb3V0cHV0ID0gZ2VuZXJhdGUoYXN0LCB7XG4gICAgICByZXRhaW5MaW5lczogdHJ1ZSxcbiAgICAgIHJldGFpbkZ1bmN0aW9uUGFyZW5zOiB0cnVlLFxuICAgICAgY29tbWVudHM6IHRydWVcbiAgICB9KTtcbiAgICBcbiAgICBsZXQgb3V0cHV0Q29kZSA9IG91dHB1dC5jb2RlO1xuICAgIGlmIChuZWVkc1dyYXBwaW5nKSB7XG4gICAgICBvdXRwdXRDb2RlID0gdW53cmFwRnJhZ21lbnQob3V0cHV0Q29kZSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiBvdXRwdXRDb2RlLFxuICAgICAgaGFzQ2hhbmdlcyxcbiAgICAgIHRyYW5zZm9ybWF0aW9ucyxcbiAgICAgIHdhcm5pbmdzXG4gICAgfTtcbiAgICBcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byB0cmFuc2Zvcm0gZGVzY2VuZGFudCBzZWxlY3RvcnM6JywgZXJyb3IpO1xuICAgIHdhcm5pbmdzLnB1c2goYERlc2NlbmRhbnQgdHJhbnNmb3JtYXRpb24gZmFpbGVkOiAke2Vycm9yfWApO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBjb2RlLFxuICAgICAgaGFzQ2hhbmdlczogZmFsc2UsXG4gICAgICB0cmFuc2Zvcm1hdGlvbnM6IDAsXG4gICAgICB3YXJuaW5nc1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb0Rlc2NlbmRhbnRzKFxuICBwYXJlbnRQYXRoOiBhbnksXG4gIHJ1bGU6IERlc2NlbmRhbnRSdWxlXG4pOiBudW1iZXIge1xuICBsZXQgYXBwbGllZENvdW50ID0gMDtcbiAgY29uc3QgbmV3Q2xhc3NlcyA9IGFzc2VtYmxlVXRpbGl0aWVzKHJ1bGUudXRpbGl0aWVzKTtcbiAgXG4gIGNvbnN0IHBhcmVudE5vZGUgPSBwYXJlbnRQYXRoLm5vZGU7XG4gIFxuICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gYXBwbGllZENvdW50O1xuICB9XG4gIFxuICBpZiAodC5pc0pTWEVsZW1lbnQocGFyZW50Tm9kZSkpIHtcbiAgICBpZiAocGFyZW50Tm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYXJlbnROb2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGlmICh0LmlzSlNYRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICBhcHBsaWVkQ291bnQgKz0gYXBwbHlUb0pTWEVsZW1lbnQoY2hpbGQsIHJ1bGUsIG5ld0NsYXNzZXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gYXBwbGllZENvdW50O1xufVxuXG5mdW5jdGlvbiBhcHBseVRvSlNYRWxlbWVudChcbiAgZWxlbWVudDogdC5KU1hFbGVtZW50LFxuICBydWxlOiBEZXNjZW5kYW50UnVsZSxcbiAgbmV3Q2xhc3Nlczogc3RyaW5nW11cbik6IG51bWJlciB7XG4gIGxldCBhcHBsaWVkQ291bnQgPSAwO1xuICBcbiAgaWYgKGVsZW1lbnRNYXRjaGVzU2VsZWN0b3IoZWxlbWVudC5vcGVuaW5nRWxlbWVudCwgcnVsZS50YXJnZXRTZWxlY3RvcikpIHtcbiAgICBpZiAobWVyZ2VDbGFzc2VzSW50b0F0dHJpYnV0ZShlbGVtZW50Lm9wZW5pbmdFbGVtZW50LCBuZXdDbGFzc2VzKSkge1xuICAgICAgYXBwbGllZENvdW50Kys7XG4gICAgICBcbiAgICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZ2V0SlNYRWxlbWVudE5hbWUoZWxlbWVudC5vcGVuaW5nRWxlbWVudCk7XG4gICAgICBsb2dnZXIudmVyYm9zZShgQXBwbGllZCBkZXNjZW5kYW50IGNsYXNzZXMgdG8gPCR7ZWxlbWVudE5hbWV9PjogJHtuZXdDbGFzc2VzLmpvaW4oJyAnKX1gKTtcbiAgICB9XG4gIH1cbiAgXG4gIGlmIChlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICBpZiAodC5pc0pTWEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIGFwcGxpZWRDb3VudCArPSBhcHBseVRvSlNYRWxlbWVudChjaGlsZCwgcnVsZSwgbmV3Q2xhc3Nlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICByZXR1cm4gYXBwbGllZENvdW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBEZXNjZW5kYW50UnVsZXNCeVBhcmVudChydWxlczogQ1NTUnVsZVtdKTogTWFwPHN0cmluZywgRGVzY2VuZGFudFJ1bGVbXT4ge1xuICBjb25zdCBncm91cGVkID0gbmV3IE1hcDxzdHJpbmcsIERlc2NlbmRhbnRSdWxlW10+KCk7XG4gIFxuICBmb3IgKGNvbnN0IHJ1bGUgb2YgcnVsZXMpIHtcbiAgICBpZiAocnVsZS5pc0Rlc2NlbmRhbnQgJiYgcnVsZS5wYXJlbnRTZWxlY3RvciAmJiBydWxlLnRhcmdldFNlbGVjdG9yKSB7XG4gICAgICBjb25zdCBwYXJlbnRLZXkgPSBydWxlLnBhcmVudFNlbGVjdG9yLnR5cGUgPT09ICdjbGFzcycgXG4gICAgICAgID8gYC4ke3J1bGUucGFyZW50U2VsZWN0b3IubmFtZX1gIFxuICAgICAgICA6IHJ1bGUucGFyZW50U2VsZWN0b3IubmFtZTtcbiAgICAgIFxuICAgICAgaWYgKCFncm91cGVkLmhhcyhwYXJlbnRLZXkpKSB7XG4gICAgICAgIGdyb3VwZWQuc2V0KHBhcmVudEtleSwgW10pO1xuICAgICAgfVxuICAgICAgXG4gICAgICBncm91cGVkLmdldChwYXJlbnRLZXkpIS5wdXNoKHtcbiAgICAgICAgcGFyZW50U2VsZWN0b3I6IHJ1bGUucGFyZW50U2VsZWN0b3IsXG4gICAgICAgIHRhcmdldFNlbGVjdG9yOiBydWxlLnRhcmdldFNlbGVjdG9yLFxuICAgICAgICB1dGlsaXRpZXM6IHJ1bGUudXRpbGl0aWVzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIHJldHVybiBncm91cGVkO1xufSJdfQ==
@@ -13,6 +13,7 @@ const fileWriter_1 = require("./fileWriter");
13
13
  const logger_1 = require("./utils/logger");
14
14
  const breakpointResolver_1 = require("./utils/breakpointResolver");
15
15
  const variantAssembler_1 = require("./utils/variantAssembler");
16
+ const jsxDescendantTransformer_1 = require("./jsxDescendantTransformer");
16
17
  async function transformFiles(files, options) {
17
18
  const results = {
18
19
  filesScanned: files.length,
@@ -28,6 +29,7 @@ async function transformFiles(files, options) {
28
29
  const fileWriter = new fileWriter_1.FileWriter({ dryRun: options.dryRun });
29
30
  (0, breakpointResolver_1.clearBreakpointCache)();
30
31
  const cssClassMap = {};
32
+ const allDescendantRules = [];
31
33
  const cssFileResults = new Map();
32
34
  logger_1.logger.info('\n🔍 Phase 1: Analyzing files...');
33
35
  if (!options.skipExternal) {
@@ -40,7 +42,13 @@ async function transformFiles(files, options) {
40
42
  const partiallyConvertedRules = result.rules.filter(r => r.partialConversion).length;
41
43
  const fullyConvertible = totalRules > 0 && totalRules === fullyConvertedRules && partiallyConvertedRules === 0;
42
44
  result.rules.forEach(rule => {
43
- if (rule.fullyConverted) {
45
+ if (rule.isDescendant) {
46
+ if (rule.convertedClasses.length > 0) {
47
+ allDescendantRules.push(rule);
48
+ results.stylesConverted += rule.declarations.length;
49
+ }
50
+ }
51
+ else if (rule.fullyConverted && rule.className) {
44
52
  const existing = cssClassMap[rule.className];
45
53
  if (existing) {
46
54
  mergeRuleIntoClassInfo(existing, rule);
@@ -109,7 +117,13 @@ async function transformFiles(files, options) {
109
117
  content = internalResult.html;
110
118
  hasChanges = true;
111
119
  internalResult.rules.forEach(rule => {
112
- if (rule.convertedClasses.length > 0) {
120
+ if (rule.isDescendant) {
121
+ if (rule.convertedClasses.length > 0) {
122
+ allDescendantRules.push(rule);
123
+ results.stylesConverted += rule.declarations.length;
124
+ }
125
+ }
126
+ else if (rule.convertedClasses.length > 0 && rule.className) {
113
127
  const existing = cssClassMap[rule.className];
114
128
  if (existing) {
115
129
  mergeRuleIntoClassInfo(existing, rule);
@@ -162,6 +176,31 @@ async function transformFiles(files, options) {
162
176
  });
163
177
  }
164
178
  }
179
+ if (allDescendantRules.length > 0) {
180
+ logger_1.logger.info('\n🌳 Phase 3.5: Applying descendant selector rules...');
181
+ for (const [filePath, fileResult] of jsxFileResults) {
182
+ let content = fileResult.newContent;
183
+ let hasChanges = fileResult.hasChanges;
184
+ const descendantResult = (0, jsxDescendantTransformer_1.transformDescendantSelectors)(content, allDescendantRules);
185
+ if (descendantResult.hasChanges) {
186
+ content = descendantResult.code;
187
+ hasChanges = true;
188
+ results.classesReplaced += descendantResult.transformations;
189
+ logger_1.logger.verbose(`Applied ${descendantResult.transformations} descendant transformations in ${path_1.default.basename(filePath)}`);
190
+ }
191
+ if (descendantResult.warnings.length > 0) {
192
+ results.warnings += descendantResult.warnings.length;
193
+ descendantResult.warnings.forEach(warning => {
194
+ logger_1.logger.verbose(`⚠️ ${filePath}: ${warning}`);
195
+ });
196
+ }
197
+ jsxFileResults.set(filePath, {
198
+ ...fileResult,
199
+ newContent: content,
200
+ hasChanges
201
+ });
202
+ }
203
+ }
165
204
  logger_1.logger.info('\n💾 Phase 4: Writing changes...');
166
205
  for (const [filePath, fileResult] of jsxFileResults) {
167
206
  if (fileResult.hasChanges) {
@@ -266,4 +305,4 @@ function replaceClassNameReferences(code, classMap) {
266
305
  });
267
306
  return { code: modifiedCode, hasChanges, replacements };
268
307
  }
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
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFrREEsd0NBOFFDO0FBaFVELDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIscURBQWtEO0FBQ2xELDJDQUF3QztBQUN4QywyQ0FBcUU7QUFDckUsNkNBQTBDO0FBRTFDLDJDQUF3QztBQUN4QyxtRUFBa0U7QUFDbEUsK0RBSWtDO0FBQ2xDLHlFQUEwRTtBQW1DbkUsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsS0FBb0IsRUFDcEIsT0FBeUI7SUFFekIsTUFBTSxPQUFPLEdBQXFCO1FBQ2hDLFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTTtRQUMxQixhQUFhLEVBQUUsQ0FBQztRQUNoQixlQUFlLEVBQUUsQ0FBQztRQUNsQixlQUFlLEVBQUUsQ0FBQztRQUNsQixRQUFRLEVBQUUsQ0FBQztLQUNaLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLCtCQUFjLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTlELElBQUEseUNBQW9CLEdBQUUsQ0FBQztJQUV2QixNQUFNLFdBQVcsR0FBZ0IsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sa0JBQWtCLEdBQWMsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sY0FBYyxHQU9mLElBQUks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MUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFNjYW5uZWRGaWxlIH0gZnJvbSAnLi9zY2FubmVyJztcbmltcG9ydCB7IFRhaWx3aW5kTWFwcGVyIH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5pbXBvcnQgeyBKU1hQYXJzZXIgfSBmcm9tICcuL2pzeFBhcnNlcic7XG5pbXBvcnQgeyBDU1NQYXJzZXIsIENTU1J1bGUsIFV0aWxpdHlXaXRoVmFyaWFudCB9IGZyb20gJy4vY3NzUGFyc2VyJztcbmltcG9ydCB7IEZpbGVXcml0ZXIgfSBmcm9tICcuL2ZpbGVXcml0ZXInO1xuaW1wb3J0IHsgVGFpbHdpbmRDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5pbXBvcnQgeyBjbGVhckJyZWFrcG9pbnRDYWNoZSB9IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcbmltcG9ydCB7IFxuICBhc3NlbWJsZVV0aWxpdGllcywgXG4gIG1lcmdlVXRpbGl0aWVzLFxuICBub3JtYWxpemVWYXJpYW50T3JkZXIgXG59IGZyb20gJy4vdXRpbHMvdmFyaWFudEFzc2VtYmxlcic7XG5pbXBvcnQgeyB0cmFuc2Zvcm1EZXNjZW5kYW50U2VsZWN0b3JzIH0gZnJvbSAnLi9qc3hEZXNjZW5kYW50VHJhbnNmb3JtZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybU9wdGlvbnMge1xuICBkcnlSdW46IGJvb2xlYW47XG4gIGRlbGV0ZUNzczogYm9vbGVhbjtcbiAgc2tpcEV4dGVybmFsOiBib29sZWFuO1xuICBza2lwSW5saW5lOiBib29sZWFuO1xuICBza2lwSW50ZXJuYWw6IGJvb2xlYW47XG4gIHRhaWx3aW5kQ29uZmlnOiBUYWlsd2luZENvbmZpZyB8IG51bGw7XG4gIHByb2plY3RSb290OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtUmVzdWx0cyB7XG4gIGZpbGVzU2Nhbm5lZDogbnVtYmVyO1xuICBmaWxlc01vZGlmaWVkOiBudW1iZXI7XG4gIHN0eWxlc0NvbnZlcnRlZDogbnVtYmVyO1xuICBjbGFzc2VzUmVwbGFjZWQ6IG51bWJlcjtcbiAgd2FybmluZ3M6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5mbyB7XG4gIHV0aWxpdGllczogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyB2YXJpYW50czogc3RyaW5nW10gfT47XG4gIHNvdXJjZUZpbGU6IHN0cmluZztcbiAgZnVsbHlDb252ZXJ0aWJsZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIENTU0NsYXNzTWFwIHtcbiAgW2NsYXNzTmFtZTogc3RyaW5nXTogQ2xhc3NJbmZvO1xufVxuXG5pbnRlcmZhY2UgQ29sbGVjdGVkUnVsZXMge1xuICBzaW1wbGVSdWxlczogQ1NTUnVsZVtdO1xuICBkZXNjZW5kYW50UnVsZXM6IENTU1J1bGVbXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVzKFxuICBmaWxlczogU2Nhbm5lZEZpbGVbXSxcbiAgb3B0aW9uczogVHJhbnNmb3JtT3B0aW9uc1xuKTogUHJvbWlzZTxUcmFuc2Zvcm1SZXN1bHRzPiB7XG4gIGNvbnN0IHJlc3VsdHM6IFRyYW5zZm9ybVJlc3VsdHMgPSB7XG4gICAgZmlsZXNTY2FubmVkOiBmaWxlcy5sZW5ndGgsXG4gICAgZmlsZXNNb2RpZmllZDogMCxcbiAgICBzdHlsZXNDb252ZXJ0ZWQ6IDAsXG4gICAgY2xhc3Nlc1JlcGxhY2VkOiAwLFxuICAgIHdhcm5pbmdzOiAwXG4gIH07XG5cbiAgY29uc3QgbWFwcGVyID0gbmV3IFRhaWx3aW5kTWFwcGVyKG9wdGlvbnMudGFpbHdpbmRDb25maWcgfHwge30pO1xuICBjb25zdCBqc3hQYXJzZXIgPSBuZXcgSlNYUGFyc2VyKG1hcHBlcik7XG4gIGNvbnN0IHNjcmVlbnMgPSBvcHRpb25zLnRhaWx3aW5kQ29uZmlnPy50aGVtZT8uc2NyZWVucztcbiAgY29uc3QgY3NzUGFyc2VyID0gbmV3IENTU1BhcnNlcihtYXBwZXIsIHNjcmVlbnMpO1xuICBjb25zdCBmaWxlV3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoeyBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuIH0pO1xuXG4gIGNsZWFyQnJlYWtwb2ludENhY2hlKCk7XG5cbiAgY29uc3QgY3NzQ2xhc3NNYXA6IENTU0NsYXNzTWFwID0ge307XG4gIGNvbnN0IGFsbERlc2NlbmRhbnRSdWxlczogQ1NTUnVsZVtdID0gW107XG4gIGNvbnN0IGNzc0ZpbGVSZXN1bHRzOiBNYXA8c3RyaW5nLCB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIG5ld0NvbnRlbnQ6IHN0cmluZztcbiAgICBydWxlczogQ1NTUnVsZVtdO1xuICAgIGNhbkRlbGV0ZTogYm9vbGVhbjtcbiAgICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICAgIGZ1bGx5Q29udmVydGlibGU6IGJvb2xlYW47XG4gIH0+ID0gbmV3IE1hcCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdcXG7wn5SNIFBoYXNlIDE6IEFuYWx5emluZyBmaWxlcy4uLicpO1xuXG4gIGlmICghb3B0aW9ucy5za2lwRXh0ZXJuYWwpIHtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnY3NzJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZS5wYXRoLCAndXRmLTgnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3NzUGFyc2VyLnBhcnNlKGNvbnRlbnQsIGZpbGUucGF0aCk7XG5cbiAgICAgICAgY29uc3QgdG90YWxSdWxlcyA9IHJlc3VsdC5ydWxlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGx5Q29udmVydGVkUnVsZXMgPSByZXN1bHQucnVsZXMuZmlsdGVyKHIgPT4gci5mdWxseUNvbnZlcnRlZCkubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJ0aWFsbHlDb252ZXJ0ZWRSdWxlcyA9IHJlc3VsdC5ydWxlcy5maWx0ZXIociA9PiByLnBhcnRpYWxDb252ZXJzaW9uKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGx5Q29udmVydGlibGUgPSB0b3RhbFJ1bGVzID4gMCAmJiB0b3RhbFJ1bGVzID09PSBmdWxseUNvbnZlcnRlZFJ1bGVzICYmIHBhcnRpYWxseUNvbnZlcnRlZFJ1bGVzID09PSAwO1xuXG4gICAgICAgIHJlc3VsdC5ydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgIGlmIChydWxlLmlzRGVzY2VuZGFudCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGFsbERlc2NlbmRhbnRSdWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChydWxlLmZ1bGx5Q29udmVydGVkICYmIHJ1bGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGV4aXN0aW5nLCBydWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXSA9IGJ1aWxkQ2xhc3NJbmZvRnJvbVJ1bGUocnVsZSwgZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuZGVjbGFyYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUucGFydGlhbENvbnZlcnNpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGg7XG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgICBSdWxlIC4ke3J1bGUuY2xhc3NOYW1lfTogcGFydGlhbCBjb252ZXJzaW9uICgke3J1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGh9LyR7cnVsZS5kZWNsYXJhdGlvbnMubGVuZ3RofSBkZWNsYXJhdGlvbnMpYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjc3NGaWxlUmVzdWx0cy5zZXQoZmlsZS5wYXRoLCB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBuZXdDb250ZW50OiByZXN1bHQuY3NzLFxuICAgICAgICAgIHJ1bGVzOiByZXN1bHQucnVsZXMsXG4gICAgICAgICAgY2FuRGVsZXRlOiByZXN1bHQuY2FuRGVsZXRlLFxuICAgICAgICAgIGhhc0NoYW5nZXM6IHJlc3VsdC5oYXNDaGFuZ2VzLFxuICAgICAgICAgIGZ1bGx5Q29udmVydGlibGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzdWx0cy53YXJuaW5ncyArPSByZXN1bHQud2FybmluZ3MubGVuZ3RoO1xuXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBBbmFseXplZCAke2ZpbGUucGF0aH06YCk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGAgIC0gVG90YWwgcnVsZXM6ICR7dG90YWxSdWxlc31gKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgLSBGdWxseSBjb252ZXJ0ZWQgcnVsZXM6ICR7ZnVsbHlDb252ZXJ0ZWRSdWxlc31gKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgLSBQYXJ0aWFsbHkgY29udmVydGVkIHJ1bGVzOiAke3BhcnRpYWxseUNvbnZlcnRlZFJ1bGVzfWApO1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgICAtIEZ1bGx5IGNvbnZlcnRpYmxlOiAke2Z1bGx5Q29udmVydGlibGV9YCk7XG5cbiAgICAgICAgcmVzdWx0Lndhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYOKaoO+4jyAgJHtmaWxlLnBhdGh9OiAke3dhcm5pbmd9YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBhbmFseXplICR7ZmlsZS5wYXRofTpgLCBlcnJvcik7XG4gICAgICAgIHJlc3VsdHMud2FybmluZ3MrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbygnXFxu4pqb77iPICBQaGFzZSAyOiBUcmFuc2Zvcm1pbmcgUmVhY3QgY29tcG9uZW50cy4uLicpO1xuXG4gIGNvbnN0IGpzeEZpbGVSZXN1bHRzOiBNYXA8c3RyaW5nLCB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIG5ld0NvbnRlbnQ6IHN0cmluZztcbiAgICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICB9PiA9IG5ldyBNYXAoKTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnanN4JykpIHtcbiAgICB0cnkge1xuICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZS5wYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ29udGVudCA9IGNvbnRlbnQ7XG4gICAgICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgbGV0IGZpbGVXYXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKCFvcHRpb25zLnNraXBJbmxpbmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc3hSZXN1bHQgPSBqc3hQYXJzZXIucGFyc2UoY29udGVudCwgZmlsZS5wYXRoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoanN4UmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBqc3hSZXN1bHQuY29kZTtcbiAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmVzdWx0cy5zdHlsZXNDb252ZXJ0ZWQgKz0ganN4UmVzdWx0LnRyYW5zZm9ybWF0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChzdW0sIHQpID0+IHN1bSArIHQuY2xhc3Nlcy5sZW5ndGgsIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaCguLi5qc3hSZXN1bHQud2FybmluZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIEpTWCBpbmxpbmUgc3R5bGVzIGluICR7ZmlsZS5wYXRofTogJHtlcnJvcn1gKTtcbiAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaChgSlNYIHBhcnNlIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy5za2lwSW50ZXJuYWwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpbnRlcm5hbFJlc3VsdCA9IGF3YWl0IGNzc1BhcnNlci5wYXJzZUludGVybmFsQ1NTKGNvbnRlbnQsIGZpbGUucGF0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGludGVybmFsUmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBpbnRlcm5hbFJlc3VsdC5odG1sO1xuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGludGVybmFsUmVzdWx0LnJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChydWxlLmlzRGVzY2VuZGFudCkge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgYWxsRGVzY2VuZGFudFJ1bGVzLnB1c2gocnVsZSk7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwICYmIHJ1bGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBjc3NDbGFzc01hcFtydWxlLmNsYXNzTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGV4aXN0aW5nLCBydWxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NNYXBbcnVsZS5jbGFzc05hbWVdID0gYnVpbGRDbGFzc0luZm9Gcm9tUnVsZShydWxlLCBmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaCguLi5pbnRlcm5hbFJlc3VsdC53YXJuaW5ncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gcGFyc2UgaW50ZXJuYWwgQ1NTIGluICR7ZmlsZS5wYXRofTogJHtlcnJvcn1gKTtcbiAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaChgSW50ZXJuYWwgQ1NTIHBhcnNlIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGpzeEZpbGVSZXN1bHRzLnNldChmaWxlLnBhdGgsIHtcbiAgICAgICAgY29udGVudDogb3JpZ2luYWxDb250ZW50LFxuICAgICAgICBuZXdDb250ZW50OiBjb250ZW50LFxuICAgICAgICBoYXNDaGFuZ2VzXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0cy53YXJuaW5ncyArPSBmaWxlV2FybmluZ3MubGVuZ3RoO1xuXG4gICAgICBmaWxlV2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYOKaoO+4jyAgJHtmaWxlLnBhdGh9OiAke3dhcm5pbmd9YCk7XG4gICAgICB9KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzICR7ZmlsZS5wYXRofTpgLCBlcnJvcik7XG4gICAgICByZXN1bHRzLndhcm5pbmdzKys7XG4gICAgfVxuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNzc0NsYXNzTWFwKS5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1xcbvCflIQgUGhhc2UgMzogUmVwbGFjaW5nIGNsYXNzTmFtZSByZWZlcmVuY2VzLi4uJyk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgZmlsZVJlc3VsdF0gb2YganN4RmlsZVJlc3VsdHMpIHtcbiAgICAgIGxldCBjb250ZW50ID0gZmlsZVJlc3VsdC5uZXdDb250ZW50O1xuICAgICAgbGV0IGhhc0NoYW5nZXMgPSBmaWxlUmVzdWx0Lmhhc0NoYW5nZXM7XG5cbiAgICAgIGNvbnN0IHJlcGxhY2VtZW50UmVzdWx0ID0gcmVwbGFjZUNsYXNzTmFtZVJlZmVyZW5jZXMoY29udGVudCwgY3NzQ2xhc3NNYXApO1xuICAgICAgaWYgKHJlcGxhY2VtZW50UmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgY29udGVudCA9IHJlcGxhY2VtZW50UmVzdWx0LmNvZGU7XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLmNsYXNzZXNSZXBsYWNlZCArPSByZXBsYWNlbWVudFJlc3VsdC5yZXBsYWNlbWVudHM7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVwbGFjZWQgJHtyZXBsYWNlbWVudFJlc3VsdC5yZXBsYWNlbWVudHN9IGNsYXNzIHJlZmVyZW5jZXMgaW4gJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX1gKTtcbiAgICAgIH1cblxuICAgICAganN4RmlsZVJlc3VsdHMuc2V0KGZpbGVQYXRoLCB7XG4gICAgICAgIC4uLmZpbGVSZXN1bHQsXG4gICAgICAgIG5ld0NvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGhhc0NoYW5nZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxEZXNjZW5kYW50UnVsZXMubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci5pbmZvKCdcXG7wn4yzIFBoYXNlIDMuNTogQXBwbHlpbmcgZGVzY2VuZGFudCBzZWxlY3RvciBydWxlcy4uLicpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGZpbGVSZXN1bHRdIG9mIGpzeEZpbGVSZXN1bHRzKSB7XG4gICAgICBsZXQgY29udGVudCA9IGZpbGVSZXN1bHQubmV3Q29udGVudDtcbiAgICAgIGxldCBoYXNDaGFuZ2VzID0gZmlsZVJlc3VsdC5oYXNDaGFuZ2VzO1xuXG4gICAgICBjb25zdCBkZXNjZW5kYW50UmVzdWx0ID0gdHJhbnNmb3JtRGVzY2VuZGFudFNlbGVjdG9ycyhjb250ZW50LCBhbGxEZXNjZW5kYW50UnVsZXMpO1xuICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICBjb250ZW50ID0gZGVzY2VuZGFudFJlc3VsdC5jb2RlO1xuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5jbGFzc2VzUmVwbGFjZWQgKz0gZGVzY2VuZGFudFJlc3VsdC50cmFuc2Zvcm1hdGlvbnM7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIudmVyYm9zZShgQXBwbGllZCAke2Rlc2NlbmRhbnRSZXN1bHQudHJhbnNmb3JtYXRpb25zfSBkZXNjZW5kYW50IHRyYW5zZm9ybWF0aW9ucyBpbiAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMud2FybmluZ3MgKz0gZGVzY2VuZGFudFJlc3VsdC53YXJuaW5ncy5sZW5ndGg7XG4gICAgICAgIGRlc2NlbmRhbnRSZXN1bHQud2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHtcbiAgICAgICAgICBsb2dnZXIudmVyYm9zZShg4pqg77iPICAke2ZpbGVQYXRofTogJHt3YXJuaW5nfWApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAganN4RmlsZVJlc3VsdHMuc2V0KGZpbGVQYXRoLCB7XG4gICAgICAgIC4uLmZpbGVSZXN1bHQsXG4gICAgICAgIG5ld0NvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGhhc0NoYW5nZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKCdcXG7wn5K+IFBoYXNlIDQ6IFdyaXRpbmcgY2hhbmdlcy4uLicpO1xuXG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBqc3hGaWxlUmVzdWx0cykge1xuICAgIGlmIChmaWxlUmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmaWxlV3JpdGVyLndyaXRlRmlsZShmaWxlUGF0aCwgZmlsZVJlc3VsdC5uZXdDb250ZW50LCBmaWxlUmVzdWx0LmNvbnRlbnQpO1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvcHRpb25zLnNraXBFeHRlcm5hbCkge1xuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBjc3NGaWxlUmVzdWx0cykge1xuICAgICAgaWYgKCFmaWxlUmVzdWx0Lmhhc0NoYW5nZXMpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAoIWZpbGVSZXN1bHQuZnVsbHlDb252ZXJ0aWJsZSkge1xuICAgICAgICBsb2dnZXIud2Fybihg4o+t77iPICBTa2lwcGluZyAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfSAtIG5vdCBmdWxseSBjb252ZXJ0aWJsZSAod291bGQgYnJlYWsgc3R5bGVzKWApO1xuICAgICAgICBsb2dnZXIud2FybihgICAgQ29udmVydGlibGU6ICR7ZmlsZVJlc3VsdC5ydWxlcy5maWx0ZXIociA9PiByLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkubGVuZ3RofS8ke2ZpbGVSZXN1bHQucnVsZXMubGVuZ3RofSBydWxlc2ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVSZXN1bHQuY2FuRGVsZXRlICYmIG9wdGlvbnMuZGVsZXRlQ3NzKSB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmaWxlV3JpdGVyLmRlbGV0ZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3VsdHMuZmlsZXNNb2RpZmllZCsrO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGDwn5eR77iPICBEZWxldGVkICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9IChhbGwgcnVsZXMgY29udmVydGVkKWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpbGVSZXN1bHQuY2FuRGVsZXRlICYmICFvcHRpb25zLmRlbGV0ZUNzcykge1xuICAgICAgICBsb2dnZXIuaW5mbyhg4oS577iPICAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfSBpcyBub3cgZW1wdHkgKHVzZSAtLWRlbGV0ZS1jc3MgdG8gcmVtb3ZlKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpbGVXcml0ZXIud3JpdGVGaWxlKGZpbGVQYXRoLCBmaWxlUmVzdWx0Lm5ld0NvbnRlbnQsIGZpbGVSZXN1bHQuY29udGVudCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRDbGFzc0luZm9Gcm9tUnVsZShydWxlOiBDU1NSdWxlLCBzb3VyY2VGaWxlOiBzdHJpbmcpOiBDbGFzc0luZm8ge1xuICByZXR1cm4ge1xuICAgIHV0aWxpdGllczogcnVsZS51dGlsaXRpZXMubWFwKHUgPT4gKHtcbiAgICAgIHZhbHVlOiB1LnZhbHVlLFxuICAgICAgdmFyaWFudHM6IG5vcm1hbGl6ZVZhcmlhbnRPcmRlcihbLi4udS52YXJpYW50c10pXG4gICAgfSkpLFxuICAgIHNvdXJjZUZpbGUsXG4gICAgZnVsbHlDb252ZXJ0aWJsZTogdHJ1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGluZm86IENsYXNzSW5mbywgcnVsZTogQ1NTUnVsZSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHV0aWxpdHkgb2YgcnVsZS51dGlsaXRpZXMpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGluZm8udXRpbGl0aWVzLmZpbmQodSA9PiB1LnZhbHVlID09PSB1dGlsaXR5LnZhbHVlKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiB1dGlsaXR5LnZhcmlhbnRzKSB7XG4gICAgICAgIGlmICghZXhpc3RpbmcudmFyaWFudHMuaW5jbHVkZXModmFyaWFudCkpIHtcbiAgICAgICAgICBleGlzdGluZy52YXJpYW50cy5wdXNoKHZhcmlhbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleGlzdGluZy52YXJpYW50cyA9IG5vcm1hbGl6ZVZhcmlhbnRPcmRlcihleGlzdGluZy52YXJpYW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8udXRpbGl0aWVzLnB1c2goe1xuICAgICAgICB2YWx1ZTogdXRpbGl0eS52YWx1ZSxcbiAgICAgICAgdmFyaWFudHM6IG5vcm1hbGl6ZVZhcmlhbnRPcmRlcihbLi4udXRpbGl0eS52YXJpYW50c10pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZW1ibGVUYWlsd2luZENsYXNzZXMoaW5mbzogQ2xhc3NJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgbWVyZ2VkID0gbWVyZ2VVdGlsaXRpZXMoaW5mby51dGlsaXRpZXMpO1xuICByZXR1cm4gYXNzZW1ibGVVdGlsaXRpZXMobWVyZ2VkKS5qb2luKCcgJyk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VDbGFzc05hbWVSZWZlcmVuY2VzKFxuICBjb2RlOiBzdHJpbmcsIFxuICBjbGFzc01hcDogQ1NTQ2xhc3NNYXBcbik6IHsgXG4gIGNvZGU6IHN0cmluZzsgXG4gIGhhc0NoYW5nZXM6IGJvb2xlYW47IFxuICByZXBsYWNlbWVudHM6IG51bWJlciBcbn0ge1xuICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICBsZXQgcmVwbGFjZW1lbnRzID0gMDtcbiAgbGV0IG1vZGlmaWVkQ29kZSA9IGNvZGU7XG5cbiAgT2JqZWN0LmVudHJpZXMoY2xhc3NNYXApLmZvckVhY2goKFtvbGRDbGFzcywgaW5mb10pID0+IHtcbiAgICBpZiAoIWluZm8uZnVsbHlDb252ZXJ0aWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhaWx3aW5kQ2xhc3NTdHJpbmcgPSBhc3NlbWJsZVRhaWx3aW5kQ2xhc3NlcyhpbmZvKTtcbiAgICBcbiAgICBjb25zdCBwYXR0ZXJuMSA9IG5ldyBSZWdFeHAoYGNsYXNzTmFtZT1cIiR7b2xkQ2xhc3N9XCJgLCAnZycpO1xuICAgIGlmIChwYXR0ZXJuMS50ZXN0KG1vZGlmaWVkQ29kZSkpIHtcbiAgICAgIG1vZGlmaWVkQ29kZSA9IG1vZGlmaWVkQ29kZS5yZXBsYWNlKHBhdHRlcm4xLCBgY2xhc3NOYW1lPVwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIHJlcGxhY2VtZW50cysrO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlcGxhY2VkIGNsYXNzTmFtZT1cIiR7b2xkQ2xhc3N9XCIgd2l0aCBcIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdHRlcm4yID0gbmV3IFJlZ0V4cChgY2xhc3NOYW1lPVxcXFx7XCIke29sZENsYXNzfVwiXFxcXH1gLCAnZycpO1xuICAgIGlmIChwYXR0ZXJuMi50ZXN0KG1vZGlmaWVkQ29kZSkpIHtcbiAgICAgIG1vZGlmaWVkQ29kZSA9IG1vZGlmaWVkQ29kZS5yZXBsYWNlKHBhdHRlcm4yLCBgY2xhc3NOYW1lPVwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIHJlcGxhY2VtZW50cysrO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlcGxhY2VkIGNsYXNzTmFtZT17XCIke29sZENsYXNzfVwifSB3aXRoIFwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybjMgPSBuZXcgUmVnRXhwKGBjbGFzc05hbWU9XFxcXHtcXGBcXFxccyoke29sZENsYXNzfVxcXFxzKlxcYFxcXFx9YCwgJ2cnKTtcbiAgICBpZiAocGF0dGVybjMudGVzdChtb2RpZmllZENvZGUpKSB7XG4gICAgICBtb2RpZmllZENvZGUgPSBtb2RpZmllZENvZGUucmVwbGFjZShwYXR0ZXJuMywgYGNsYXNzTmFtZT1cIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICByZXBsYWNlbWVudHMrKztcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBSZXBsYWNlZCBjbGFzc05hbWU9e1xcYCR7b2xkQ2xhc3N9XFxgfSB3aXRoIFwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geyBjb2RlOiBtb2RpZmllZENvZGUsIGhhc0NoYW5nZXMsIHJlcGxhY2VtZW50cyB9O1xufSJdfQ==
@@ -0,0 +1,20 @@
1
+ export type SelectorType = 'class' | 'element';
2
+ export interface SelectorPart {
3
+ type: SelectorType;
4
+ name: string;
5
+ }
6
+ export interface DescendantSelector {
7
+ parent?: SelectorPart;
8
+ target: SelectorPart;
9
+ isComplex: boolean;
10
+ reason?: string;
11
+ }
12
+ export declare function isHtmlElement(name: string): boolean;
13
+ export declare function parseDescendantSelector(selector: string): DescendantSelector;
14
+ export declare function isDescendantSelector(selector: string): boolean;
15
+ export declare function isSimpleSelector(selector: string): boolean;
16
+ export declare function processDescendantSelector(selector: string): {
17
+ parsed: DescendantSelector | null;
18
+ skipped: boolean;
19
+ reason?: string;
20
+ };