css-to-tailwind-react 0.1.0 → 0.1.1
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 +9 -1
- package/dist/cssParser.js +119 -65
- package/dist/htmlParser.d.ts +15 -0
- package/dist/htmlParser.js +103 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +9 -2
- package/dist/transformer.js +68 -19
- package/dist/utils/breakpointResolver.d.ts +21 -0
- package/dist/utils/breakpointResolver.js +154 -0
- package/dist/utils/config.d.ts +1 -0
- package/dist/utils/config.js +8 -1
- package/package.json +7 -2
package/dist/cssParser.d.ts
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { TailwindMapper, CSSProperty } from './tailwindMapper';
|
|
2
|
+
export interface UtilityWithVariant {
|
|
3
|
+
value: string;
|
|
4
|
+
variant?: string;
|
|
5
|
+
}
|
|
2
6
|
export interface CSSRule {
|
|
3
7
|
selector: string;
|
|
4
8
|
className: string;
|
|
5
9
|
declarations: CSSProperty[];
|
|
6
10
|
convertedClasses: string[];
|
|
11
|
+
utilities: UtilityWithVariant[];
|
|
12
|
+
breakpoint?: string;
|
|
7
13
|
skipped: boolean;
|
|
8
14
|
fullyConverted: boolean;
|
|
9
15
|
partialConversion: boolean;
|
|
@@ -21,7 +27,9 @@ export interface CSSUsageMap {
|
|
|
21
27
|
}
|
|
22
28
|
export declare class CSSParser {
|
|
23
29
|
private mapper;
|
|
24
|
-
|
|
30
|
+
private breakpoints;
|
|
31
|
+
constructor(mapper: TailwindMapper, screens?: Record<string, string | [string, string]>);
|
|
32
|
+
private processRule;
|
|
25
33
|
parse(css: string, filePath: string): Promise<CSSParseResult>;
|
|
26
34
|
parseInternalStyle(html: string): {
|
|
27
35
|
styles: Array<{
|
package/dist/cssParser.js
CHANGED
|
@@ -7,9 +7,74 @@ exports.CSSParser = void 0;
|
|
|
7
7
|
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
|
+
const breakpointResolver_1 = require("./utils/breakpointResolver");
|
|
10
11
|
class CSSParser {
|
|
11
|
-
constructor(mapper) {
|
|
12
|
+
constructor(mapper, screens) {
|
|
12
13
|
this.mapper = mapper;
|
|
14
|
+
this.breakpoints = screens
|
|
15
|
+
? (0, breakpointResolver_1.resolveBreakpointsFromConfig)(screens)
|
|
16
|
+
: (0, breakpointResolver_1.getBreakpoints)();
|
|
17
|
+
}
|
|
18
|
+
processRule(rule, breakpoint) {
|
|
19
|
+
if (rule.selector.includes(':')) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const classNameMatch = rule.selector.match(/^\.([a-zA-Z_-][a-zA-Z0-9_-]*)$/);
|
|
23
|
+
if (!classNameMatch) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const className = classNameMatch[1];
|
|
27
|
+
const declarations = [];
|
|
28
|
+
rule.walkDecls((decl) => {
|
|
29
|
+
if (decl.prop.startsWith('--')) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (decl.value.includes('calc(')) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
declarations.push({
|
|
36
|
+
property: decl.prop,
|
|
37
|
+
value: decl.value
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
if (declarations.length === 0) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const conversionResults = [];
|
|
44
|
+
const conversionWarnings = [];
|
|
45
|
+
declarations.forEach(decl => {
|
|
46
|
+
const result = this.mapper.convertProperty(decl.property, decl.value);
|
|
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
|
|
61
|
+
}));
|
|
62
|
+
const convertedClasses = utilities.map(u => u.variant ? (0, breakpointResolver_1.prefixWithBreakpoint)(u.value, u.variant) : u.value);
|
|
63
|
+
const allDeclarationsConverted = conversionResults.every(r => r.converted);
|
|
64
|
+
const someDeclarationsConverted = convertedClasses.length > 0;
|
|
65
|
+
const cssRule = {
|
|
66
|
+
selector: rule.selector,
|
|
67
|
+
className,
|
|
68
|
+
declarations,
|
|
69
|
+
convertedClasses,
|
|
70
|
+
utilities,
|
|
71
|
+
breakpoint,
|
|
72
|
+
skipped: !someDeclarationsConverted,
|
|
73
|
+
fullyConverted: allDeclarationsConverted,
|
|
74
|
+
partialConversion: someDeclarationsConverted && !allDeclarationsConverted,
|
|
75
|
+
reason: !someDeclarationsConverted ? 'No convertible declarations' : undefined
|
|
76
|
+
};
|
|
77
|
+
return { cssRule, conversionResults, conversionWarnings };
|
|
13
78
|
}
|
|
14
79
|
async parse(css, filePath) {
|
|
15
80
|
const rules = [];
|
|
@@ -20,90 +85,80 @@ class CSSParser {
|
|
|
20
85
|
parser: postcss_safe_parser_1.default,
|
|
21
86
|
from: filePath
|
|
22
87
|
}).then(result => result.root);
|
|
23
|
-
|
|
88
|
+
root.walkAtRules((atRule) => {
|
|
89
|
+
if (atRule.name !== 'media') {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
const mediaResult = (0, breakpointResolver_1.processMediaQuery)(atRule.params, this.breakpoints);
|
|
93
|
+
if (mediaResult.skipped) {
|
|
94
|
+
warnings.push(mediaResult.reason || `Skipped media query: ${atRule.params}`);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const breakpoint = mediaResult.breakpoint;
|
|
98
|
+
const nestedRules = [];
|
|
99
|
+
atRule.walkRules((rule) => {
|
|
100
|
+
nestedRules.push(rule);
|
|
101
|
+
});
|
|
102
|
+
for (const rule of nestedRules) {
|
|
103
|
+
const result = this.processRule(rule, breakpoint);
|
|
104
|
+
if (result) {
|
|
105
|
+
rules.push(result.cssRule);
|
|
106
|
+
warnings.push(...result.conversionWarnings);
|
|
107
|
+
if (result.cssRule.convertedClasses.length > 0) {
|
|
108
|
+
hasChanges = true;
|
|
109
|
+
if (result.cssRule.fullyConverted) {
|
|
110
|
+
rule.remove();
|
|
111
|
+
logger_1.logger.verbose(`Removed rule .${result.cssRule.className} in @media (min-width) → ${breakpoint}`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
for (const cr of result.conversionResults) {
|
|
115
|
+
if (cr.converted) {
|
|
116
|
+
rule.walkDecls((decl) => {
|
|
117
|
+
if (decl.prop === cr.declaration.property && decl.value === cr.declaration.value) {
|
|
118
|
+
decl.remove();
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
logger_1.logger.verbose(`Partial conversion of .${result.cssRule.className} in @media → ${breakpoint}`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (atRule.nodes && atRule.nodes.length === 0) {
|
|
129
|
+
atRule.remove();
|
|
130
|
+
logger_1.logger.verbose(`Removed empty @media rule`);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
24
133
|
root.walkRules((rule) => {
|
|
25
|
-
// Skip rules inside @media, @supports, etc.
|
|
26
134
|
if (rule.parent && rule.parent.type === 'atrule') {
|
|
27
|
-
warnings.push(`Skipped rule with at-rule parent: ${rule.selector}`);
|
|
28
|
-
logger_1.logger.verbose(`Skipping at-rule: ${rule.selector}`);
|
|
29
135
|
return;
|
|
30
136
|
}
|
|
31
|
-
// Skip pseudo-selectors
|
|
32
137
|
if (rule.selector.includes(':')) {
|
|
33
138
|
warnings.push(`Skipped pseudo-selector: ${rule.selector}`);
|
|
34
139
|
logger_1.logger.verbose(`Skipping pseudo-selector: ${rule.selector}`);
|
|
35
140
|
return;
|
|
36
141
|
}
|
|
37
|
-
// Only process simple class selectors
|
|
38
142
|
const classNameMatch = rule.selector.match(/^\.([a-zA-Z_-][a-zA-Z0-9_-]*)$/);
|
|
39
143
|
if (!classNameMatch) {
|
|
40
144
|
warnings.push(`Skipped complex selector: ${rule.selector}`);
|
|
41
145
|
logger_1.logger.verbose(`Skipping complex selector: ${rule.selector}`);
|
|
42
146
|
return;
|
|
43
147
|
}
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
rule.walkDecls((decl) => {
|
|
47
|
-
// Skip CSS variables
|
|
48
|
-
if (decl.prop.startsWith('--')) {
|
|
49
|
-
warnings.push(`Skipped CSS variable: ${decl.prop}`);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
// Skip calc()
|
|
53
|
-
if (decl.value.includes('calc(')) {
|
|
54
|
-
warnings.push(`Skipped calc() value: ${decl.value}`);
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
declarations.push({
|
|
58
|
-
property: decl.prop,
|
|
59
|
-
value: decl.value
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
if (declarations.length === 0) {
|
|
148
|
+
const result = this.processRule(rule);
|
|
149
|
+
if (!result) {
|
|
63
150
|
return;
|
|
64
151
|
}
|
|
65
|
-
|
|
66
|
-
const conversionResults = [];
|
|
67
|
-
const conversionWarnings = [];
|
|
68
|
-
declarations.forEach(decl => {
|
|
69
|
-
const result = this.mapper.convertProperty(decl.property, decl.value);
|
|
70
|
-
conversionResults.push({
|
|
71
|
-
declaration: decl,
|
|
72
|
-
converted: !result.skipped && result.className !== null,
|
|
73
|
-
className: result.className
|
|
74
|
-
});
|
|
75
|
-
if (result.skipped && result.reason) {
|
|
76
|
-
conversionWarnings.push(result.reason);
|
|
77
|
-
}
|
|
78
|
-
});
|
|
79
|
-
const convertedClasses = conversionResults
|
|
80
|
-
.filter(r => r.converted && r.className)
|
|
81
|
-
.map(r => r.className);
|
|
82
|
-
const allDeclarationsConverted = conversionResults.every(r => r.converted);
|
|
83
|
-
const someDeclarationsConverted = convertedClasses.length > 0;
|
|
84
|
-
const cssRule = {
|
|
85
|
-
selector: rule.selector,
|
|
86
|
-
className,
|
|
87
|
-
declarations,
|
|
88
|
-
convertedClasses,
|
|
89
|
-
skipped: !someDeclarationsConverted,
|
|
90
|
-
fullyConverted: allDeclarationsConverted,
|
|
91
|
-
partialConversion: someDeclarationsConverted && !allDeclarationsConverted,
|
|
92
|
-
reason: !someDeclarationsConverted ? 'No convertible declarations' : undefined
|
|
93
|
-
};
|
|
152
|
+
const { cssRule, conversionResults, conversionWarnings } = result;
|
|
94
153
|
rules.push(cssRule);
|
|
95
154
|
warnings.push(...conversionWarnings);
|
|
96
|
-
|
|
97
|
-
// Never remove the entire rule unless ALL declarations are converted
|
|
98
|
-
if (someDeclarationsConverted) {
|
|
155
|
+
if (cssRule.convertedClasses.length > 0) {
|
|
99
156
|
hasChanges = true;
|
|
100
|
-
if (
|
|
101
|
-
// All declarations converted - safe to remove entire rule
|
|
157
|
+
if (cssRule.fullyConverted) {
|
|
102
158
|
rule.remove();
|
|
103
|
-
logger_1.logger.verbose(`Removed rule .${className} (all ${declarations.length} declarations converted)`);
|
|
159
|
+
logger_1.logger.verbose(`Removed rule .${cssRule.className} (all ${cssRule.declarations.length} declarations converted)`);
|
|
104
160
|
}
|
|
105
161
|
else {
|
|
106
|
-
// Partial conversion - only remove the converted declarations
|
|
107
162
|
let removedCount = 0;
|
|
108
163
|
rule.walkDecls((decl) => {
|
|
109
164
|
const wasConverted = conversionResults.some(r => r.converted &&
|
|
@@ -114,11 +169,10 @@ class CSSParser {
|
|
|
114
169
|
removedCount++;
|
|
115
170
|
}
|
|
116
171
|
});
|
|
117
|
-
logger_1.logger.verbose(`Partial conversion of .${className}: removed ${removedCount}/${declarations.length} declarations`);
|
|
172
|
+
logger_1.logger.verbose(`Partial conversion of .${cssRule.className}: removed ${removedCount}/${cssRule.declarations.length} declarations`);
|
|
118
173
|
}
|
|
119
174
|
}
|
|
120
175
|
});
|
|
121
|
-
// Clean up empty at-rules
|
|
122
176
|
root.walkAtRules((atRule) => {
|
|
123
177
|
if (atRule.nodes && atRule.nodes.length === 0) {
|
|
124
178
|
atRule.remove();
|
|
@@ -212,4 +266,4 @@ class CSSParser {
|
|
|
212
266
|
}
|
|
213
267
|
}
|
|
214
268
|
exports.CSSParser = CSSParser;
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzUGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Nzc1BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBbUU7QUFDbkUsOEVBQTZDO0FBRTdDLDJDQUF3QztBQXlCeEMsTUFBYSxTQUFTO0lBR3BCLFlBQVksTUFBc0I7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBVyxFQUFFLFFBQWdCO1FBQ3ZDLE1BQU0sS0FBSyxHQUFjLEVBQUUsQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBYSxFQUFFLENBQUM7UUFDOUIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXZCLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxpQkFBTyxHQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtnQkFDeEMsTUFBTSxFQUFFLDZCQUFVO2dCQUNsQixJQUFJLEVBQUUsUUFBUTthQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0Isb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdEIsNENBQTRDO2dCQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2pELFFBQVEsQ0FBQyxJQUFJLENBQUMscUNBQXFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUNwRSxlQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDckQsT0FBTztnQkFDVCxDQUFDO2dCQUVELHdCQUF3QjtnQkFDeEIsSUFBSSxJQUFJLENBQUMs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biwgQXRSdWxlIH0gZnJvbSAncG9zdGNzcyc7XG5pbXBvcnQgc2FmZVBhcnNlciBmcm9tICdwb3N0Y3NzLXNhZmUtcGFyc2VyJztcbmltcG9ydCB7IFRhaWx3aW5kTWFwcGVyLCBDU1NQcm9wZXJ0eSB9IGZyb20gJy4vdGFpbHdpbmRNYXBwZXInO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi91dGlscy9sb2dnZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIENTU1J1bGUge1xuICBzZWxlY3Rvcjogc3RyaW5nO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgZGVjbGFyYXRpb25zOiBDU1NQcm9wZXJ0eVtdO1xuICBjb252ZXJ0ZWRDbGFzc2VzOiBzdHJpbmdbXTtcbiAgc2tpcHBlZDogYm9vbGVhbjtcbiAgZnVsbHlDb252ZXJ0ZWQ6IGJvb2xlYW47IC8vIE5FVzogdHJ1ZSBpZiBBTEwgZGVjbGFyYXRpb25zIGluIHRoaXMgcnVsZSB3ZXJlIGNvbnZlcnRlZFxuICBwYXJ0aWFsQ29udmVyc2lvbjogYm9vbGVhbjsgLy8gTkVXOiB0cnVlIGlmIFNPTUUgYnV0IG5vdCBhbGwgZGVjbGFyYXRpb25zIHdlcmUgY29udmVydGVkXG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1NQYXJzZVJlc3VsdCB7XG4gIGNzczogc3RyaW5nO1xuICBydWxlczogQ1NTUnVsZVtdO1xuICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICBjYW5EZWxldGU6IGJvb2xlYW47XG4gIHdhcm5pbmdzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDU1NVc2FnZU1hcCB7XG4gIFtjbGFzc05hbWU6IHN0cmluZ106IHN0cmluZ1tdOyAvLyBjbGFzc05hbWUgLT4gZmlsZSBwYXRoc1xufVxuXG5leHBvcnQgY2xhc3MgQ1NTUGFyc2VyIHtcbiAgcHJpdmF0ZSBtYXBwZXI6IFRhaWx3aW5kTWFwcGVyO1xuXG4gIGNvbnN0cnVjdG9yKG1hcHBlcjogVGFpbHdpbmRNYXBwZXIpIHtcbiAgICB0aGlzLm1hcHBlciA9IG1hcHBlcjtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlKGNzczogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxDU1NQYXJzZVJlc3VsdD4ge1xuICAgIGNvbnN0IHJ1bGVzOiBDU1NSdWxlW10gPSBbXTtcbiAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBhd2FpdCBwb3N0Y3NzKCkucHJvY2Vzcyhjc3MsIHtcbiAgICAgICAgcGFyc2VyOiBzYWZlUGFyc2VyLFxuICAgICAgICBmcm9tOiBmaWxlUGF0aFxuICAgICAgfSkudGhlbihyZXN1bHQgPT4gcmVzdWx0LnJvb3QpO1xuXG4gICAgICAvLyBQcm9jZXNzIGVhY2ggcnVsZVxuICAgICAgcm9vdC53YWxrUnVsZXMoKHJ1bGUpID0+IHtcbiAgICAgICAgLy8gU2tpcCBydWxlcyBpbnNpZGUgQG1lZGlhLCBAc3VwcG9ydHMsIGV0Yy5cbiAgICAgICAgaWYgKHJ1bGUucGFyZW50ICYmIHJ1bGUucGFyZW50LnR5cGUgPT09ICdhdHJ1bGUnKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChgU2tpcHBlZCBydWxlIHdpdGggYXQtcnVsZSBwYXJlbnQ6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICBsb2dnZXIudmVyYm9zZShgU2tpcHBpbmcgYXQtcnVsZTogJHtydWxlLnNlbGVjdG9yfWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgcHNldWRvLXNlbGVjdG9yc1xuICAgICAgICBpZiAocnVsZS5zZWxlY3Rvci5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChgU2tpcHBlZCBwc2V1ZG8tc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICBsb2dnZXIudmVyYm9zZShgU2tpcHBpbmcgcHNldWRvLXNlbGVjdG9yOiAke3J1bGUuc2VsZWN0b3J9YCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBwcm9jZXNzIHNpbXBsZSBjbGFzcyBzZWxlY3RvcnNcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lTWF0Y2ggPSBydWxlLnNlbGVjdG9yLm1hdGNoKC9eXFwuKFthLXpBLVpfLV1bYS16QS1aMC05Xy1dKikkLyk7XG4gICAgICAgIGlmICghY2xhc3NOYW1lTWF0Y2gpIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBTa2lwcGVkIGNvbXBsZXggc2VsZWN0b3I6ICR7cnVsZS5zZWxlY3Rvcn1gKTtcbiAgICAgICAgICBsb2dnZXIudmVyYm9zZShgU2tpcHBpbmcgY29tcGxleCBzZWxlY3RvcjogJHtydWxlLnNlbGVjdG9yfWApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGNsYXNzTmFtZU1hdGNoWzFdO1xuICAgICAgICBjb25zdCBkZWNsYXJhdGlvbnM6IENTU1Byb3BlcnR5W10gPSBbXTtcblxuICAgICAgICBydWxlLndhbGtEZWNscygoZGVjbCkgPT4ge1xuICAgICAgICAgIC8vIFNraXAgQ1NTIHZhcmlhYmxlc1xuICAgICAgICAgIGlmIChkZWNsLnByb3Auc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgICAgICAgd2FybmluZ3MucHVzaChgU2tpcHBlZCBDU1MgdmFyaWFibGU6ICR7ZGVjbC5wcm9wfWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNraXAgY2FsYygpXG4gICAgICAgICAgaWYgKGRlY2wudmFsdWUuaW5jbHVkZXMoJ2NhbGMoJykpIHtcbiAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goYFNraXBwZWQgY2FsYygpIHZhbHVlOiAke2RlY2wudmFsdWV9YCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVjbGFyYXRpb25zLnB1c2goe1xuICAgICAgICAgICAgcHJvcGVydHk6IGRlY2wucHJvcCxcbiAgICAgICAgICAgIHZhbHVlOiBkZWNsLnZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChkZWNsYXJhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udmVydCB0byBUYWlsd2luZCBjbGFzc2VzIC0gdHJhY2sgd2hpY2ggc3BlY2lmaWMgZGVjbGFyYXRpb25zIHdlcmUgY29udmVydGVkXG4gICAgICAgIGNvbnN0IGNvbnZlcnNpb25SZXN1bHRzOiBBcnJheTx7XG4gICAgICAgICAgZGVjbGFyYXRpb246IENTU1Byb3BlcnR5O1xuICAgICAgICAgIGNvbnZlcnRlZDogYm9vbGVhbjtcbiAgICAgICAgICBjbGFzc05hbWU6IHN0cmluZyB8IG51bGw7XG4gICAgICAgIH0+ID0gW107XG4gICAgICAgIGNvbnN0IGNvbnZlcnNpb25XYXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBkZWNsYXJhdGlvbnMuZm9yRWFjaChkZWNsID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm1hcHBlci5jb252ZXJ0UHJvcGVydHkoZGVjbC5wcm9wZXJ0eSwgZGVjbC52YWx1ZSk7XG4gICAgICAgICAgY29udmVyc2lvblJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICBkZWNsYXJhdGlvbjogZGVjbCxcbiAgICAgICAgICAgIGNvbnZlcnRlZDogIXJlc3VsdC5za2lwcGVkICYmIHJlc3VsdC5jbGFzc05hbWUgIT09IG51bGwsXG4gICAgICAgICAgICBjbGFzc05hbWU6IHJlc3VsdC5jbGFzc05hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAocmVzdWx0LnNraXBwZWQgJiYgcmVzdWx0LnJlYXNvbikge1xuICAgICAgICAgICAgY29udmVyc2lvbldhcm5pbmdzLnB1c2gocmVzdWx0LnJlYXNvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjb252ZXJ0ZWRDbGFzc2VzID0gY29udmVyc2lvblJlc3VsdHNcbiAgICAgICAgICAuZmlsdGVyKHIgPT4gci5jb252ZXJ0ZWQgJiYgci5jbGFzc05hbWUpXG4gICAgICAgICAgLm1hcChyID0+IHIuY2xhc3NOYW1lISk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQgPSBjb252ZXJzaW9uUmVzdWx0cy5ldmVyeShyID0+IHIuY29udmVydGVkKTtcbiAgICAgICAgY29uc3Qgc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA9IGNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMDtcblxuICAgICAgICBjb25zdCBjc3NSdWxlOiBDU1NSdWxlID0ge1xuICAgICAgICAgIHNlbGVjdG9yOiBydWxlLnNlbGVjdG9yLFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBkZWNsYXJhdGlvbnMsXG4gICAgICAgICAgY29udmVydGVkQ2xhc3NlcyxcbiAgICAgICAgICBza2lwcGVkOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCxcbiAgICAgICAgICBmdWxseUNvbnZlcnRlZDogYWxsRGVjbGFyYXRpb25zQ29udmVydGVkLFxuICAgICAgICAgIHBhcnRpYWxDb252ZXJzaW9uOiBzb21lRGVjbGFyYXRpb25zQ29udmVydGVkICYmICFhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQsXG4gICAgICAgICAgcmVhc29uOiAhc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCA/ICdObyBjb252ZXJ0aWJsZSBkZWNsYXJhdGlvbnMnIDogdW5kZWZpbmVkXG4gICAgICAgIH07XG5cbiAgICAgICAgcnVsZXMucHVzaChjc3NSdWxlKTtcbiAgICAgICAgd2FybmluZ3MucHVzaCguLi5jb252ZXJzaW9uV2FybmluZ3MpO1xuXG4gICAgICAgIC8vIENSSVRJQ0FMIEZJWDogT25seSByZW1vdmUgZGVjbGFyYXRpb25zIHRoYXQgd2VyZSBzdWNjZXNzZnVsbHkgY29udmVydGVkXG4gICAgICAgIC8vIE5ldmVyIHJlbW92ZSB0aGUgZW50aXJlIHJ1bGUgdW5sZXNzIEFMTCBkZWNsYXJhdGlvbnMgYXJlIGNvbnZlcnRlZFxuICAgICAgICBpZiAoc29tZURlY2xhcmF0aW9uc0NvbnZlcnRlZCkge1xuICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChhbGxEZWNsYXJhdGlvbnNDb252ZXJ0ZWQpIHtcbiAgICAgICAgICAgIC8vIEFsbCBkZWNsYXJhdGlvbnMgY29udmVydGVkIC0gc2FmZSB0byByZW1vdmUgZW50aXJlIHJ1bGVcbiAgICAgICAgICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVtb3ZlZCBydWxlIC4ke2NsYXNzTmFtZX0gKGFsbCAke2RlY2xhcmF0aW9ucy5sZW5ndGh9IGRlY2xhcmF0aW9ucyBjb252ZXJ0ZWQpYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFBhcnRpYWwgY29udmVyc2lvbiAtIG9ubHkgcmVtb3ZlIHRoZSBjb252ZXJ0ZWQgZGVjbGFyYXRpb25zXG4gICAgICAgICAgICBsZXQgcmVtb3ZlZENvdW50ID0gMDtcbiAgICAgICAgICAgIHJ1bGUud2Fsa0RlY2xzKChkZWNsKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHdhc0NvbnZlcnRlZCA9IGNvbnZlcnNpb25SZXN1bHRzLnNvbWUociA9PiBcbiAgICAgICAgICAgICAgICByLmNvbnZlcnRlZCAmJiBcbiAgICAgICAgICAgICAgICByLmRlY2xhcmF0aW9uLnByb3BlcnR5ID09PSBkZWNsLnByb3AgJiYgXG4gICAgICAgICAgICAgICAgci5kZWNsYXJhdGlvbi52YWx1ZSA9PT0gZGVjbC52YWx1ZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKHdhc0NvbnZlcnRlZCkge1xuICAgICAgICAgICAgICAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZENvdW50Kys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgUGFydGlhbCBjb252ZXJzaW9uIG9mIC4ke2NsYXNzTmFtZX06IHJlbW92ZWQgJHtyZW1vdmVkQ291bnR9LyR7ZGVjbGFyYXRpb25zLmxlbmd0aH0gZGVjbGFyYXRpb25zYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gQ2xlYW4gdXAgZW1wdHkgYXQtcnVsZXNcbiAgICAgIHJvb3Qud2Fsa0F0UnVsZXMoKGF0UnVsZSkgPT4ge1xuICAgICAgICBpZiAoYXRSdWxlLm5vZGVzICYmIGF0UnVsZS5ub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBhdFJ1bGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjYW5EZWxldGUgPSByb290Lm5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICAgIGNvbnN0IG5ld0NzcyA9IHJvb3QudG9TdHJpbmcoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3NzOiBuZXdDc3MsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBoYXNDaGFuZ2VzLFxuICAgICAgICBjYW5EZWxldGUsXG4gICAgICAgIHdhcm5pbmdzXG4gICAgICB9O1xuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRmFpbGVkIHRvIHBhcnNlIENTUyAke2ZpbGVQYXRofTpgLCBlcnJvcik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENTUyBwYXJzaW5nIGZhaWxlZDogJHtlcnJvcn1gKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZUludGVybmFsU3R5bGUoaHRtbDogc3RyaW5nKTogeyBcbiAgICBzdHlsZXM6IEFycmF5PHsgY29udGVudDogc3RyaW5nOyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PjtcbiAgICB3YXJuaW5nczogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IHN0eWxlczogQXJyYXk8eyBjb250ZW50OiBzdHJpbmc7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+ID0gW107XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggdG8gZmluZCBzdHlsZSB0YWdzICh0aGlzIGlzIHNhZmUgZm9yIGZpbmRpbmcgdGFncywgbm90IGZvciBwYXJzaW5nIGNvbnRlbnQpXG4gICAgY29uc3Qgc3R5bGVSZWdleCA9IC88c3R5bGVbXj5dKj4oW1xcc1xcU10qPyk8XFwvc3R5bGU+L2dpO1xuICAgIGxldCBtYXRjaDtcblxuICAgIHdoaWxlICgobWF0Y2ggPSBzdHlsZVJlZ2V4LmV4ZWMoaHRtbCkpICE9PSBudWxsKSB7XG4gICAgICBzdHlsZXMucHVzaCh7XG4gICAgICAgIGNvbnRlbnQ6IG1hdGNoWzFdLnRyaW0oKSxcbiAgICAgICAgc3RhcnQ6IG1hdGNoLmluZGV4LFxuICAgICAgICBlbmQ6IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdHlsZXMsIHdhcm5pbmdzIH07XG4gIH1cblxuICBhc3luYyBwYXJzZUludGVybmFsQ1NTKGh0bWw6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8e1xuICAgIGh0bWw6IHN0cmluZztcbiAgICBydWxlczogQ1NTUnVsZVtdO1xuICAgIGhhc0NoYW5nZXM6IGJvb2xlYW47XG4gICAgd2FybmluZ3M6IHN0cmluZ1tdO1xuICB9PiB7XG4gICAgY29uc3QgYWxsUnVsZXM6IENTU1J1bGVbXSA9IFtdO1xuICAgIGNvbnN0IGFsbFdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBtb2RpZmllZEh0bWwgPSBodG1sO1xuICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICBjb25zdCB7IHN0eWxlcyB9ID0gdGhpcy5wYXJzZUludGVybmFsU3R5bGUoaHRtbCk7XG5cbiAgICAvLyBQcm9jZXNzIHN0eWxlcyBpbiByZXZlcnNlIG9yZGVyIHRvIHByZXNlcnZlIGluZGljZXNcbiAgICBmb3IgKGxldCBpID0gc3R5bGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBzdHlsZSA9IHN0eWxlc1tpXTtcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5wYXJzZShzdHlsZS5jb250ZW50LCBmaWxlUGF0aCk7XG4gICAgICAgIFxuICAgICAgICBhbGxSdWxlcy5wdXNoKC4uLnJlc3VsdC5ydWxlcyk7XG4gICAgICAgIGFsbFdhcm5pbmdzLnB1c2goLi4ucmVzdWx0Lndhcm5pbmdzKTtcblxuICAgICAgICBpZiAocmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChyZXN1bHQuY2FuRGVsZXRlIHx8IHJlc3VsdC5jc3MudHJpbSgpID09PSAnJykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGVudGlyZSBzdHlsZSB0YWdcbiAgICAgICAgICAgIG1vZGlmaWVkSHRtbCA9IG1vZGlmaWVkSHRtbC5zbGljZSgwLCBzdHlsZS5zdGFydCkgKyBtb2RpZmllZEh0bWwuc2xpY2Uoc3R5bGUuZW5kKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVwbGFjZSBzdHlsZSBjb250ZW50XG4gICAgICAgICAgICBjb25zdCBiZWZvcmUgPSBtb2RpZmllZEh0bWwuc2xpY2UoMCwgc3R5bGUuc3RhcnQpO1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBtb2RpZmllZEh0bWwuc2xpY2Uoc3R5bGUuZW5kKTtcbiAgICAgICAgICAgIGNvbnN0IHRhZ1N0YXJ0ID0gaHRtbC5zbGljZShzdHlsZS5zdGFydCkubWF0Y2goLzxzdHlsZVtePl0qPi8pPy5bMF0gfHwgJzxzdHlsZT4nO1xuICAgICAgICAgICAgY29uc3QgdGFnRW5kID0gJzwvc3R5bGU+JztcbiAgICAgICAgICAgIG1vZGlmaWVkSHRtbCA9IGJlZm9yZSArIHRhZ1N0YXJ0ICsgJ1xcbicgKyByZXN1bHQuY3NzICsgJ1xcbicgKyB0YWdFbmQgKyBhZnRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gcGFyc2UgaW50ZXJuYWwgc3R5bGUgYmxvY2s6ICR7ZXJyb3J9YCk7XG4gICAgICAgIGFsbFdhcm5pbmdzLnB1c2goYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBzdHlsZTogJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaHRtbDogbW9kaWZpZWRIdG1sLFxuICAgICAgcnVsZXM6IGFsbFJ1bGVzLFxuICAgICAgaGFzQ2hhbmdlcyxcbiAgICAgIHdhcm5pbmdzOiBhbGxXYXJuaW5nc1xuICAgIH07XG4gIH1cblxuICBleHRyYWN0SW1wb3J0UGF0aHMoY29kZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGltcG9ydHM6IHN0cmluZ1tdID0gW107XG4gICAgXG4gICAgLy8gTWF0Y2ggQ1NTIGltcG9ydHNcbiAgICBjb25zdCBpbXBvcnRSZWdleCA9IC9pbXBvcnRcXHMrWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXTs/L2c7XG4gICAgbGV0IG1hdGNoO1xuICAgIFxuICAgIHdoaWxlICgobWF0Y2ggPSBpbXBvcnRSZWdleC5leGVjKGNvZGUpKSAhPT0gbnVsbCkge1xuICAgICAgaW1wb3J0cy5wdXNoKG1hdGNoWzFdKTtcbiAgICB9XG5cbiAgICAvLyBNYXRjaCByZXF1aXJlIHN0YXRlbWVudHNcbiAgICBjb25zdCByZXF1aXJlUmVnZXggPSAvcmVxdWlyZVxccypcXChcXHMqWydcIl0oW14nXCJdK1xcLmNzcylbJ1wiXVxccypcXCkvZztcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVxdWlyZVJlZ2V4LmV4ZWMoY29kZSkpICE9PSBudWxsKSB7XG4gICAgICBpbXBvcnRzLnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBvcnRzO1xuICB9XG59XG4iXX0=
|
|
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
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TailwindMapper } from './tailwindMapper';
|
|
2
|
+
export interface HTMLParseResult {
|
|
3
|
+
html: string;
|
|
4
|
+
hasChanges: boolean;
|
|
5
|
+
conversions: number;
|
|
6
|
+
warnings: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare class HTMLParser {
|
|
9
|
+
private mapper;
|
|
10
|
+
constructor(mapper: TailwindMapper);
|
|
11
|
+
parse(html: string, filePath: string): HTMLParseResult;
|
|
12
|
+
private parseInlineStyle;
|
|
13
|
+
private mergeClasses;
|
|
14
|
+
extractStylesheets(html: string): string[];
|
|
15
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HTMLParser = void 0;
|
|
4
|
+
class HTMLParser {
|
|
5
|
+
constructor(mapper) {
|
|
6
|
+
this.mapper = mapper;
|
|
7
|
+
}
|
|
8
|
+
parse(html, filePath) {
|
|
9
|
+
const warnings = [];
|
|
10
|
+
let hasChanges = false;
|
|
11
|
+
let conversions = 0;
|
|
12
|
+
// Parse inline styles: style="display: flex; padding: 16px;"
|
|
13
|
+
// Convert to: class="flex p-4"
|
|
14
|
+
const styleRegex = /style="([^"]*)"/g;
|
|
15
|
+
let modifiedHtml = html;
|
|
16
|
+
let match;
|
|
17
|
+
while ((match = styleRegex.exec(html)) !== null) {
|
|
18
|
+
const fullMatch = match[0];
|
|
19
|
+
const styleValue = match[1];
|
|
20
|
+
// Parse CSS declarations from inline style
|
|
21
|
+
const declarations = this.parseInlineStyle(styleValue);
|
|
22
|
+
if (declarations.length === 0) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
// Convert to Tailwind classes
|
|
26
|
+
const { classes, warnings: convWarnings } = this.mapper.convertMultiple(declarations);
|
|
27
|
+
if (classes.length === 0) {
|
|
28
|
+
warnings.push(...convWarnings);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
// Find existing class attribute
|
|
32
|
+
const beforeStyle = html.substring(0, match.index);
|
|
33
|
+
const tagMatch = beforeStyle.match(/<([a-z][a-z0-9]*)[^>]*$/i);
|
|
34
|
+
if (!tagMatch) {
|
|
35
|
+
warnings.push(`Could not find tag for inline style`);
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
// Check if there's an existing class attribute
|
|
39
|
+
const tagEnd = html.indexOf('>', match.index);
|
|
40
|
+
const tagContent = html.substring(match.index, tagEnd);
|
|
41
|
+
const existingClassMatch = tagContent.match(/class="([^"]*)"/);
|
|
42
|
+
let replacement;
|
|
43
|
+
if (existingClassMatch && existingClassMatch.index !== undefined) {
|
|
44
|
+
// Merge with existing class
|
|
45
|
+
const existingClasses = existingClassMatch[1];
|
|
46
|
+
const mergedClasses = this.mergeClasses(existingClasses, classes);
|
|
47
|
+
// Replace class attribute and remove style
|
|
48
|
+
const beforeClass = modifiedHtml.substring(0, match.index + existingClassMatch.index);
|
|
49
|
+
const afterStyle = modifiedHtml.substring(match.index + fullMatch.length);
|
|
50
|
+
// This is complex - need to handle both class and style replacement
|
|
51
|
+
// For now, simplified version:
|
|
52
|
+
replacement = `class="${mergedClasses}"`;
|
|
53
|
+
modifiedHtml = modifiedHtml.replace(fullMatch, replacement);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Add class attribute, remove style
|
|
57
|
+
replacement = `class="${classes.join(' ')}"`;
|
|
58
|
+
modifiedHtml = modifiedHtml.replace(fullMatch, replacement);
|
|
59
|
+
}
|
|
60
|
+
conversions += classes.length;
|
|
61
|
+
hasChanges = true;
|
|
62
|
+
warnings.push(...convWarnings);
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
html: modifiedHtml,
|
|
66
|
+
hasChanges,
|
|
67
|
+
conversions,
|
|
68
|
+
warnings
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
parseInlineStyle(styleValue) {
|
|
72
|
+
const declarations = [];
|
|
73
|
+
// Split by semicolon
|
|
74
|
+
const props = styleValue.split(';').filter(s => s.trim());
|
|
75
|
+
props.forEach(prop => {
|
|
76
|
+
const colonIndex = prop.indexOf(':');
|
|
77
|
+
if (colonIndex === -1)
|
|
78
|
+
return;
|
|
79
|
+
const property = prop.substring(0, colonIndex).trim();
|
|
80
|
+
const value = prop.substring(colonIndex + 1).trim();
|
|
81
|
+
if (property && value) {
|
|
82
|
+
declarations.push({ property, value });
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
return declarations;
|
|
86
|
+
}
|
|
87
|
+
mergeClasses(existing, newClasses) {
|
|
88
|
+
const existingSet = new Set(existing.split(/\s+/).filter(Boolean));
|
|
89
|
+
newClasses.forEach(cls => existingSet.add(cls));
|
|
90
|
+
return Array.from(existingSet).join(' ');
|
|
91
|
+
}
|
|
92
|
+
extractStylesheets(html) {
|
|
93
|
+
const stylesheets = [];
|
|
94
|
+
const linkRegex = /<link[^>]*rel="stylesheet"[^>]*href="([^"]*)"[^>]*>/gi;
|
|
95
|
+
let match;
|
|
96
|
+
while ((match = linkRegex.exec(html)) !== null) {
|
|
97
|
+
stylesheets.push(match[1]);
|
|
98
|
+
}
|
|
99
|
+
return stylesheets;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.HTMLParser = HTMLParser;
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbFBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odG1sUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBLE1BQWEsVUFBVTtJQUdyQixZQUFZLE1BQXNCO1FBQ2hDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBWSxFQUFFLFFBQWdCO1FBQ2xDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztRQUM5QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRXBCLDZEQUE2RDtRQUM3RCwrQkFBK0I7UUFDL0IsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUM7UUFDdEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksS0FBSyxDQUFDO1FBRVYsT0FBTyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDaEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU1QiwyQ0FBMkM7WUFDM0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXZELElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsU0FBUztZQUNYLENBQUM7WUFFRCw4QkFBOEI7WUFDOUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEYsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN6QixR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IjpbImltcG9ydCB7IFRhaWx3aW5kTWFwcGVyIH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRNTFBhcnNlUmVzdWx0IHtcbiAgaHRtbDogc3RyaW5nO1xuICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICBjb252ZXJzaW9uczogbnVtYmVyO1xuICB3YXJuaW5nczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBIVE1MUGFyc2VyIHtcbiAgcHJpdmF0ZSBtYXBwZXI6IFRhaWx3aW5kTWFwcGVyO1xuXG4gIGNvbnN0cnVjdG9yKG1hcHBlcjogVGFpbHdpbmRNYXBwZXIpIHtcbiAgICB0aGlzLm1hcHBlciA9IG1hcHBlcjtcbiAgfVxuXG4gIHBhcnNlKGh0bWw6IHN0cmluZywgZmlsZVBhdGg6IHN0cmluZyk6IEhUTUxQYXJzZVJlc3VsdCB7XG4gICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGhhc0NoYW5nZXMgPSBmYWxzZTtcbiAgICBsZXQgY29udmVyc2lvbnMgPSAwO1xuXG4gICAgLy8gUGFyc2UgaW5saW5lIHN0eWxlczogc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBwYWRkaW5nOiAxNnB4O1wiXG4gICAgLy8gQ29udmVydCB0bzogY2xhc3M9XCJmbGV4IHAtNFwiXG4gICAgY29uc3Qgc3R5bGVSZWdleCA9IC9zdHlsZT1cIihbXlwiXSopXCIvZztcbiAgICBsZXQgbW9kaWZpZWRIdG1sID0gaHRtbDtcbiAgICBsZXQgbWF0Y2g7XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gc3R5bGVSZWdleC5leGVjKGh0bWwpKSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnVsbE1hdGNoID0gbWF0Y2hbMF07XG4gICAgICBjb25zdCBzdHlsZVZhbHVlID0gbWF0Y2hbMV07XG4gICAgICBcbiAgICAgIC8vIFBhcnNlIENTUyBkZWNsYXJhdGlvbnMgZnJvbSBpbmxpbmUgc3R5bGVcbiAgICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IHRoaXMucGFyc2VJbmxpbmVTdHlsZShzdHlsZVZhbHVlKTtcbiAgICAgIFxuICAgICAgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnZlcnQgdG8gVGFpbHdpbmQgY2xhc3Nlc1xuICAgICAgY29uc3QgeyBjbGFzc2VzLCB3YXJuaW5nczogY29udldhcm5pbmdzIH0gPSB0aGlzLm1hcHBlci5jb252ZXJ0TXVsdGlwbGUoZGVjbGFyYXRpb25zKTtcblxuICAgICAgaWYgKGNsYXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goLi4uY29udldhcm5pbmdzKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgZXhpc3RpbmcgY2xhc3MgYXR0cmlidXRlXG4gICAgICBjb25zdCBiZWZvcmVTdHlsZSA9IGh0bWwuc3Vic3RyaW5nKDAsIG1hdGNoLmluZGV4KTtcbiAgICAgIGNvbnN0IHRhZ01hdGNoID0gYmVmb3JlU3R5bGUubWF0Y2goLzwoW2Etel1bYS16MC05XSopW14+XSokL2kpO1xuICAgICAgXG4gICAgICBpZiAoIXRhZ01hdGNoKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goYENvdWxkIG5vdCBmaW5kIHRhZyBmb3IgaW5saW5lIHN0eWxlYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIGNsYXNzIGF0dHJpYnV0ZVxuICAgICAgY29uc3QgdGFnRW5kID0gaHRtbC5pbmRleE9mKCc+JywgbWF0Y2guaW5kZXgpO1xuICAgICAgY29uc3QgdGFnQ29udGVudCA9IGh0bWwuc3Vic3RyaW5nKG1hdGNoLmluZGV4LCB0YWdFbmQpO1xuICAgICAgY29uc3QgZXhpc3RpbmdDbGFzc01hdGNoID0gdGFnQ29udGVudC5tYXRjaCgvY2xhc3M9XCIoW15cIl0qKVwiLyk7XG5cbiAgICAgIGxldCByZXBsYWNlbWVudDogc3RyaW5nO1xuICAgICAgXG4gICAgICAgIGlmIChleGlzdGluZ0NsYXNzTWF0Y2ggJiYgZXhpc3RpbmdDbGFzc01hdGNoLmluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTWVyZ2Ugd2l0aCBleGlzdGluZyBjbGFzc1xuICAgICAgICBjb25zdCBleGlzdGluZ0NsYXNzZXMgPSBleGlzdGluZ0NsYXNzTWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IG1lcmdlZENsYXNzZXMgPSB0aGlzLm1lcmdlQ2xhc3NlcyhleGlzdGluZ0NsYXNzZXMsIGNsYXNzZXMpO1xuICAgICAgICBcbiAgICAgICAgLy8gUmVwbGFjZSBjbGFzcyBhdHRyaWJ1dGUgYW5kIHJlbW92ZSBzdHlsZVxuICAgICAgICBjb25zdCBiZWZvcmVDbGFzcyA9IG1vZGlmaWVkSHRtbC5zdWJzdHJpbmcoMCwgbWF0Y2guaW5kZXggKyBleGlzdGluZ0NsYXNzTWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCBhZnRlclN0eWxlID0gbW9kaWZpZWRIdG1sLnN1YnN0cmluZyhtYXRjaC5pbmRleCArIGZ1bGxNYXRjaC5sZW5ndGgpO1xuICAgICAgICBcbiAgICAgICAgLy8gVGhpcyBpcyBjb21wbGV4IC0gbmVlZCB0byBoYW5kbGUgYm90aCBjbGFzcyBhbmQgc3R5bGUgcmVwbGFjZW1lbnRcbiAgICAgICAgLy8gRm9yIG5vdywgc2ltcGxpZmllZCB2ZXJzaW9uOlxuICAgICAgICByZXBsYWNlbWVudCA9IGBjbGFzcz1cIiR7bWVyZ2VkQ2xhc3Nlc31cImA7XG4gICAgICAgIG1vZGlmaWVkSHRtbCA9IG1vZGlmaWVkSHRtbC5yZXBsYWNlKGZ1bGxNYXRjaCwgcmVwbGFjZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIGNsYXNzIGF0dHJpYnV0ZSwgcmVtb3ZlIHN0eWxlXG4gICAgICAgIHJlcGxhY2VtZW50ID0gYGNsYXNzPVwiJHtjbGFzc2VzLmpvaW4oJyAnKX1cImA7XG4gICAgICAgIG1vZGlmaWVkSHRtbCA9IG1vZGlmaWVkSHRtbC5yZXBsYWNlKGZ1bGxNYXRjaCwgcmVwbGFjZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBjb252ZXJzaW9ucyArPSBjbGFzc2VzLmxlbmd0aDtcbiAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgd2FybmluZ3MucHVzaCguLi5jb252V2FybmluZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBodG1sOiBtb2RpZmllZEh0bWwsXG4gICAgICBoYXNDaGFuZ2VzLFxuICAgICAgY29udmVyc2lvbnMsXG4gICAgICB3YXJuaW5nc1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW5saW5lU3R5bGUoc3R5bGVWYWx1ZTogc3RyaW5nKTogQXJyYXk8e3Byb3BlcnR5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmd9PiB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zOiBBcnJheTx7cHJvcGVydHk6IHN0cmluZzsgdmFsdWU6IHN0cmluZ30+ID0gW107XG4gICAgXG4gICAgLy8gU3BsaXQgYnkgc2VtaWNvbG9uXG4gICAgY29uc3QgcHJvcHMgPSBzdHlsZVZhbHVlLnNwbGl0KCc7JykuZmlsdGVyKHMgPT4gcy50cmltKCkpO1xuICAgIFxuICAgIHByb3BzLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICBjb25zdCBjb2xvbkluZGV4ID0gcHJvcC5pbmRleE9mKCc6Jyk7XG4gICAgICBpZiAoY29sb25JbmRleCA9PT0gLTEpIHJldHVybjtcbiAgICAgIFxuICAgICAgY29uc3QgcHJvcGVydHkgPSBwcm9wLnN1YnN0cmluZygwLCBjb2xvbkluZGV4KS50cmltKCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHByb3Auc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxKS50cmltKCk7XG4gICAgICBcbiAgICAgIGlmIChwcm9wZXJ0eSAmJiB2YWx1ZSkge1xuICAgICAgICBkZWNsYXJhdGlvbnMucHVzaCh7IHByb3BlcnR5LCB2YWx1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gZGVjbGFyYXRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZUNsYXNzZXMoZXhpc3Rpbmc6IHN0cmluZywgbmV3Q2xhc3Nlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGV4aXN0aW5nU2V0ID0gbmV3IFNldChleGlzdGluZy5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKSk7XG4gICAgbmV3Q2xhc3Nlcy5mb3JFYWNoKGNscyA9PiBleGlzdGluZ1NldC5hZGQoY2xzKSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oZXhpc3RpbmdTZXQpLmpvaW4oJyAnKTtcbiAgfVxuXG4gIGV4dHJhY3RTdHlsZXNoZWV0cyhodG1sOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3R5bGVzaGVldHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbGlua1JlZ2V4ID0gLzxsaW5rW14+XSpyZWw9XCJzdHlsZXNoZWV0XCJbXj5dKmhyZWY9XCIoW15cIl0qKVwiW14+XSo+L2dpO1xuICAgIGxldCBtYXRjaDtcblxuICAgIHdoaWxlICgobWF0Y2ggPSBsaW5rUmVnZXguZXhlYyhodG1sKSkgIT09IG51bGwpIHtcbiAgICAgIHN0eWxlc2hlZXRzLnB1c2gobWF0Y2hbMV0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZXNoZWV0cztcbiAgfVxufVxuIl19
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ export { scanProject, ScannedFile } from './scanner';
|
|
|
2
2
|
export { transformFiles, TransformOptions, TransformResults } from './transformer';
|
|
3
3
|
export { TailwindMapper, CSSProperty, ConversionResult } from './tailwindMapper';
|
|
4
4
|
export { JSXParser, JSXTransformation, JSXParseResult } from './jsxParser';
|
|
5
|
-
export { CSSParser, CSSRule, CSSParseResult } from './cssParser';
|
|
5
|
+
export { CSSParser, CSSRule, CSSParseResult, UtilityWithVariant } from './cssParser';
|
|
6
6
|
export { FileWriter, FileWriteOptions } from './fileWriter';
|
|
7
7
|
export { loadTailwindConfig, TailwindConfig } from './utils/config';
|
|
8
8
|
export { logger } from './utils/logger';
|
|
9
|
+
export { Breakpoint, MediaQueryInfo, getDefaultBreakpoints, resolveBreakpointsFromConfig, parseMediaQuery, findBreakpointForMinWidth, processMediaQuery, prefixWithBreakpoint } from './utils/breakpointResolver';
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.logger = exports.loadTailwindConfig = exports.FileWriter = exports.CSSParser = exports.JSXParser = exports.TailwindMapper = exports.transformFiles = exports.scanProject = void 0;
|
|
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;
|
|
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; } });
|
|
@@ -18,4 +18,11 @@ var config_1 = require("./utils/config");
|
|
|
18
18
|
Object.defineProperty(exports, "loadTailwindConfig", { enumerable: true, get: function () { return config_1.loadTailwindConfig; } });
|
|
19
19
|
var logger_1 = require("./utils/logger");
|
|
20
20
|
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
21
|
-
|
|
21
|
+
var breakpointResolver_1 = require("./utils/breakpointResolver");
|
|
22
|
+
Object.defineProperty(exports, "getDefaultBreakpoints", { enumerable: true, get: function () { return breakpointResolver_1.getDefaultBreakpoints; } });
|
|
23
|
+
Object.defineProperty(exports, "resolveBreakpointsFromConfig", { enumerable: true, get: function () { return breakpointResolver_1.resolveBreakpointsFromConfig; } });
|
|
24
|
+
Object.defineProperty(exports, "parseMediaQuery", { enumerable: true, get: function () { return breakpointResolver_1.parseMediaQuery; } });
|
|
25
|
+
Object.defineProperty(exports, "findBreakpointForMinWidth", { enumerable: true, get: function () { return breakpointResolver_1.findBreakpointForMinWidth; } });
|
|
26
|
+
Object.defineProperty(exports, "processMediaQuery", { enumerable: true, get: function () { return breakpointResolver_1.processMediaQuery; } });
|
|
27
|
+
Object.defineProperty(exports, "prefixWithBreakpoint", { enumerable: true, get: function () { return breakpointResolver_1.prefixWithBreakpoint; } });
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0JBQW9CO0FBQ3BCLHFDQUFxRDtBQUE1QyxzR0FBQSxXQUFXLE9BQUE7QUFDcEIsNkNBQW1GO0FBQTFFLDZHQUFBLGNBQWMsT0FBQTtBQUN2QixtREFBaUY7QUFBeEUsZ0hBQUEsY0FBYyxPQUFBO0FBQ3ZCLHlDQUEyRTtBQUFsRSxzR0FBQSxTQUFTLE9BQUE7QUFDbEIseUNBQXFGO0FBQTVFLHNHQUFBLFNBQVMsT0FBQTtBQUNsQiwyQ0FBNEQ7QUFBbkQsd0dBQUEsVUFBVSxPQUFBO0FBQ25CLHlDQUFvRTtBQUEzRCw0R0FBQSxrQkFBa0IsT0FBQTtBQUMzQix5Q0FBd0M7QUFBL0IsZ0dBQUEsTUFBTSxPQUFBO0FBQ2YsaUVBU29DO0FBTmxDLDJIQUFBLHFCQUFxQixPQUFBO0FBQ3JCLGtJQUFBLDRCQUE0QixPQUFBO0FBQzVCLHFIQUFBLGVBQWUsT0FBQTtBQUNmLCtIQUFBLHlCQUF5QixPQUFBO0FBQ3pCLHVIQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDBIQUFBLG9CQUFvQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhwb3J0IHB1YmxpYyBBUElcbmV4cG9ydCB7IHNjYW5Qcm9qZWN0LCBTY2FubmVkRmlsZSB9IGZyb20gJy4vc2Nhbm5lcic7XG5leHBvcnQgeyB0cmFuc2Zvcm1GaWxlcywgVHJhbnNmb3JtT3B0aW9ucywgVHJhbnNmb3JtUmVzdWx0cyB9IGZyb20gJy4vdHJhbnNmb3JtZXInO1xuZXhwb3J0IHsgVGFpbHdpbmRNYXBwZXIsIENTU1Byb3BlcnR5LCBDb252ZXJzaW9uUmVzdWx0IH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5leHBvcnQgeyBKU1hQYXJzZXIsIEpTWFRyYW5zZm9ybWF0aW9uLCBKU1hQYXJzZVJlc3VsdCB9IGZyb20gJy4vanN4UGFyc2VyJztcbmV4cG9ydCB7IENTU1BhcnNlciwgQ1NTUnVsZSwgQ1NTUGFyc2VSZXN1bHQsIFV0aWxpdHlXaXRoVmFyaWFudCB9IGZyb20gJy4vY3NzUGFyc2VyJztcbmV4cG9ydCB7IEZpbGVXcml0ZXIsIEZpbGVXcml0ZU9wdGlvbnMgfSBmcm9tICcuL2ZpbGVXcml0ZXInO1xuZXhwb3J0IHsgbG9hZFRhaWx3aW5kQ29uZmlnLCBUYWlsd2luZENvbmZpZyB9IGZyb20gJy4vdXRpbHMvY29uZmlnJztcbmV4cG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vdXRpbHMvbG9nZ2VyJztcbmV4cG9ydCB7XG4gIEJyZWFrcG9pbnQsXG4gIE1lZGlhUXVlcnlJbmZvLFxuICBnZXREZWZhdWx0QnJlYWtwb2ludHMsXG4gIHJlc29sdmVCcmVha3BvaW50c0Zyb21Db25maWcsXG4gIHBhcnNlTWVkaWFRdWVyeSxcbiAgZmluZEJyZWFrcG9pbnRGb3JNaW5XaWR0aCxcbiAgcHJvY2Vzc01lZGlhUXVlcnksXG4gIHByZWZpeFdpdGhCcmVha3BvaW50XG59IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcbiJdfQ==
|
package/dist/transformer.js
CHANGED
|
@@ -11,6 +11,7 @@ const jsxParser_1 = require("./jsxParser");
|
|
|
11
11
|
const cssParser_1 = require("./cssParser");
|
|
12
12
|
const fileWriter_1 = require("./fileWriter");
|
|
13
13
|
const logger_1 = require("./utils/logger");
|
|
14
|
+
const breakpointResolver_1 = require("./utils/breakpointResolver");
|
|
14
15
|
async function transformFiles(files, options) {
|
|
15
16
|
const results = {
|
|
16
17
|
filesScanned: files.length,
|
|
@@ -21,8 +22,10 @@ async function transformFiles(files, options) {
|
|
|
21
22
|
};
|
|
22
23
|
const mapper = new tailwindMapper_1.TailwindMapper(options.tailwindConfig || {});
|
|
23
24
|
const jsxParser = new jsxParser_1.JSXParser(mapper);
|
|
24
|
-
const
|
|
25
|
+
const screens = options.tailwindConfig?.theme?.screens;
|
|
26
|
+
const cssParser = new cssParser_1.CSSParser(mapper, screens);
|
|
25
27
|
const fileWriter = new fileWriter_1.FileWriter({ dryRun: options.dryRun });
|
|
28
|
+
(0, breakpointResolver_1.clearBreakpointCache)();
|
|
26
29
|
// PASS 1: Analyze all files WITHOUT modifying anything
|
|
27
30
|
// Collect CSS mappings and gather info about what can be safely converted
|
|
28
31
|
const cssClassMap = {};
|
|
@@ -43,16 +46,16 @@ async function transformFiles(files, options) {
|
|
|
43
46
|
// Build class map (only for fully converted classes - partial conversions keep the CSS)
|
|
44
47
|
result.rules.forEach(rule => {
|
|
45
48
|
if (rule.fullyConverted) {
|
|
46
|
-
cssClassMap[rule.className]
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
const existing = cssClassMap[rule.className];
|
|
50
|
+
if (existing) {
|
|
51
|
+
mergeRuleIntoClassInfo(existing, rule);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
cssClassMap[rule.className] = buildClassInfoFromRule(rule, file.path);
|
|
55
|
+
}
|
|
51
56
|
results.stylesConverted += rule.declarations.length;
|
|
52
57
|
}
|
|
53
58
|
else if (rule.partialConversion) {
|
|
54
|
-
// For partial conversions, we converted some declarations but keep the CSS rule
|
|
55
|
-
// Count the converted declarations
|
|
56
59
|
results.stylesConverted += rule.convertedClasses.length;
|
|
57
60
|
logger_1.logger.verbose(` Rule .${rule.className}: partial conversion (${rule.convertedClasses.length}/${rule.declarations.length} declarations)`);
|
|
58
61
|
}
|
|
@@ -118,11 +121,13 @@ async function transformFiles(files, options) {
|
|
|
118
121
|
// Build class map from internal styles
|
|
119
122
|
internalResult.rules.forEach(rule => {
|
|
120
123
|
if (rule.convertedClasses.length > 0) {
|
|
121
|
-
cssClassMap[rule.className]
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
const existing = cssClassMap[rule.className];
|
|
125
|
+
if (existing) {
|
|
126
|
+
mergeRuleIntoClassInfo(existing, rule);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
cssClassMap[rule.className] = buildClassInfoFromRule(rule, file.path);
|
|
130
|
+
}
|
|
126
131
|
results.stylesConverted += rule.declarations.length;
|
|
127
132
|
}
|
|
128
133
|
});
|
|
@@ -219,17 +224,63 @@ async function transformFiles(files, options) {
|
|
|
219
224
|
}
|
|
220
225
|
return results;
|
|
221
226
|
}
|
|
227
|
+
function buildClassInfoFromRule(rule, sourceFile) {
|
|
228
|
+
const info = {
|
|
229
|
+
baseClasses: [],
|
|
230
|
+
responsiveClasses: new Map(),
|
|
231
|
+
sourceFile,
|
|
232
|
+
fullyConvertible: true
|
|
233
|
+
};
|
|
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
|
+
}
|
|
246
|
+
function mergeRuleIntoClassInfo(info, rule) {
|
|
247
|
+
for (const utility of rule.utilities) {
|
|
248
|
+
if (utility.variant) {
|
|
249
|
+
const existing = info.responsiveClasses.get(utility.variant) || [];
|
|
250
|
+
if (!existing.includes(utility.value)) {
|
|
251
|
+
existing.push(utility.value);
|
|
252
|
+
info.responsiveClasses.set(utility.variant, existing);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
if (!info.baseClasses.includes(utility.value)) {
|
|
257
|
+
info.baseClasses.push(utility.value);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function assembleTailwindClasses(info) {
|
|
263
|
+
const classes = [...info.baseClasses];
|
|
264
|
+
const sortedBreakpoints = ['sm', 'md', 'lg', 'xl', '2xl'];
|
|
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(' ');
|
|
274
|
+
}
|
|
222
275
|
function replaceClassNameReferences(code, classMap) {
|
|
223
276
|
let hasChanges = false;
|
|
224
277
|
let replacements = 0;
|
|
225
278
|
let modifiedCode = code;
|
|
226
279
|
Object.entries(classMap).forEach(([oldClass, info]) => {
|
|
227
|
-
// Skip if not fully convertible
|
|
228
280
|
if (!info.fullyConvertible) {
|
|
229
281
|
return;
|
|
230
282
|
}
|
|
231
|
-
const tailwindClassString = info
|
|
232
|
-
// Pattern 1: className="oldClass" (simple string)
|
|
283
|
+
const tailwindClassString = assembleTailwindClasses(info);
|
|
233
284
|
const pattern1 = new RegExp(`className="${oldClass}"`, 'g');
|
|
234
285
|
if (pattern1.test(modifiedCode)) {
|
|
235
286
|
modifiedCode = modifiedCode.replace(pattern1, `className="${tailwindClassString}"`);
|
|
@@ -237,7 +288,6 @@ function replaceClassNameReferences(code, classMap) {
|
|
|
237
288
|
replacements++;
|
|
238
289
|
logger_1.logger.verbose(`Replaced className="${oldClass}" with "${tailwindClassString}"`);
|
|
239
290
|
}
|
|
240
|
-
// Pattern 2: className={"oldClass"} (expression with string)
|
|
241
291
|
const pattern2 = new RegExp(`className=\\{"${oldClass}"\\}`, 'g');
|
|
242
292
|
if (pattern2.test(modifiedCode)) {
|
|
243
293
|
modifiedCode = modifiedCode.replace(pattern2, `className="${tailwindClassString}"`);
|
|
@@ -245,7 +295,6 @@ function replaceClassNameReferences(code, classMap) {
|
|
|
245
295
|
replacements++;
|
|
246
296
|
logger_1.logger.verbose(`Replaced className={"${oldClass}"} with "${tailwindClassString}"`);
|
|
247
297
|
}
|
|
248
|
-
// Pattern 3: className={`oldClass`} (simple template literal)
|
|
249
298
|
const pattern3 = new RegExp(`className=\\{\`\\s*${oldClass}\\s*\`\\}`, 'g');
|
|
250
299
|
if (pattern3.test(modifiedCode)) {
|
|
251
300
|
modifiedCode = modifiedCode.replace(pattern3, `className="${tailwindClassString}"`);
|
|
@@ -256,4 +305,4 @@ function replaceClassNameReferences(code, classMap) {
|
|
|
256
305
|
});
|
|
257
306
|
return { code: modifiedCode, hasChanges, replacements };
|
|
258
307
|
}
|
|
259
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFvQ0Esd0NBMFBDO0FBOVJELDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIscURBQWtEO0FBQ2xELDJDQUF3QztBQUN4QywyQ0FBaUQ7QUFDakQsNkNBQTBDO0FBRTFDLDJDQUF3QztBQTRCakMsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsS0FBb0IsRUFDcEIsT0FBeUI7SUFFekIsTUFBTSxPQUFPLEdBQXFCO1FBQ2hDLFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTTtRQUMxQixhQUFhLEVBQUUsQ0FBQztRQUNoQixlQUFlLEVBQUUsQ0FBQztRQUNsQixlQUFlLEVBQUUsQ0FBQztRQUNsQixRQUFRLEVBQUUsQ0FBQztLQUNaLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLCtCQUFjLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksdUJBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU5RCx1REFBdUQ7SUFDdkQsMEVBQTBFO0lBQzFFLE1BQU0sV0FBVyxHQUFnQixFQUFFLENBQUM7SUFDcEMsTUFBTSxjQUFjLEdBT2YsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVmLGVBQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUVoRCxvQkFBb0I7SUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FB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QUFFLENBQUM7WUFDZixlQUFNLENBQUMsT0FBTyxDQUFDLHlCQUF5QixRQUFRLGFBQWEsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU2Nhbm5lZEZpbGUgfSBmcm9tICcuL3NjYW5uZXInO1xuaW1wb3J0IHsgVGFpbHdpbmRNYXBwZXIgfSBmcm9tICcuL3RhaWx3aW5kTWFwcGVyJztcbmltcG9ydCB7IEpTWFBhcnNlciB9IGZyb20gJy4vanN4UGFyc2VyJztcbmltcG9ydCB7IENTU1BhcnNlciwgQ1NTUnVsZSB9IGZyb20gJy4vY3NzUGFyc2VyJztcbmltcG9ydCB7IEZpbGVXcml0ZXIgfSBmcm9tICcuL2ZpbGVXcml0ZXInO1xuaW1wb3J0IHsgVGFpbHdpbmRDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtT3B0aW9ucyB7XG4gIGRyeVJ1bjogYm9vbGVhbjtcbiAgZGVsZXRlQ3NzOiBib29sZWFuO1xuICBza2lwRXh0ZXJuYWw6IGJvb2xlYW47XG4gIHNraXBJbmxpbmU6IGJvb2xlYW47XG4gIHNraXBJbnRlcm5hbDogYm9vbGVhbjtcbiAgdGFpbHdpbmRDb25maWc6IFRhaWx3aW5kQ29uZmlnIHwgbnVsbDtcbiAgcHJvamVjdFJvb3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2Zvcm1SZXN1bHRzIHtcbiAgZmlsZXNTY2FubmVkOiBudW1iZXI7XG4gIGZpbGVzTW9kaWZpZWQ6IG51bWJlcjtcbiAgc3R5bGVzQ29udmVydGVkOiBudW1iZXI7XG4gIGNsYXNzZXNSZXBsYWNlZDogbnVtYmVyO1xuICB3YXJuaW5nczogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQ1NTQ2xhc3NNYXAge1xuICBbY2xhc3NOYW1lOiBzdHJpbmddOiB7XG4gICAgdGFpbHdpbmRDbGFzc2VzOiBzdHJpbmdbXTtcbiAgICBzb3VyY2VGaWxlOiBzdHJpbmc7XG4gICAgZnVsbHlDb252ZXJ0aWJsZTogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVzKFxuICBmaWxlczogU2Nhbm5lZEZpbGVbXSxcbiAgb3B0aW9uczogVHJhbnNmb3JtT3B0aW9uc1xuKTogUHJvbWlzZTxUcmFuc2Zvcm1SZXN1bHRzPiB7XG4gIGNvbnN0IHJlc3VsdHM6IFRyYW5zZm9ybVJlc3VsdHMgPSB7XG4gICAgZmlsZXNTY2FubmVkOiBmaWxlcy5sZW5ndGgsXG4gICAgZmlsZXNNb2RpZmllZDogMCxcbiAgICBzdHlsZXNDb252ZXJ0ZWQ6IDAsXG4gICAgY2xhc3Nlc1JlcGxhY2VkOiAwLFxuICAgIHdhcm5pbmdzOiAwXG4gIH07XG5cbiAgY29uc3QgbWFwcGVyID0gbmV3IFRhaWx3aW5kTWFwcGVyKG9wdGlvbnMudGFpbHdpbmRDb25maWcgfHwge30pO1xuICBjb25zdCBqc3hQYXJzZXIgPSBuZXcgSlNYUGFyc2VyKG1hcHBlcik7XG4gIGNvbnN0IGNzc1BhcnNlciA9IG5ldyBDU1NQYXJzZXIobWFwcGVyKTtcbiAgY29uc3QgZmlsZVdyaXRlciA9IG5ldyBGaWxlV3JpdGVyKHsgZHJ5UnVuOiBvcHRpb25zLmRyeVJ1biB9KTtcblxuICAvLyBQQVNTIDE6IEFuYWx5emUgYWxsIGZpbGVzIFdJVEhPVVQgbW9kaWZ5aW5nIGFueXRoaW5nXG4gIC8vIENvbGxlY3QgQ1NTIG1hcHBpbmdzIGFuZCBnYXRoZXIgaW5mbyBhYm91dCB3aGF0IGNhbiBiZSBzYWZlbHkgY29udmVydGVkXG4gIGNvbnN0IGNzc0NsYXNzTWFwOiBDU1NDbGFzc01hcCA9IHt9O1xuICBjb25zdCBjc3NGaWxlUmVzdWx0czogTWFwPHN0cmluZywge1xuICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICBuZXdDb250ZW50OiBzdHJpbmc7XG4gICAgcnVsZXM6IENTU1J1bGVbXTtcbiAgICBjYW5EZWxldGU6IGJvb2xlYW47XG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcbiAgICBmdWxseUNvbnZlcnRpYmxlOiBib29sZWFuO1xuICB9PiA9IG5ldyBNYXAoKTtcblxuICBsb2dnZXIuaW5mbygnXFxu8J+UjSBQaGFzZSAxOiBBbmFseXppbmcgZmlsZXMuLi4nKTtcblxuICAvLyBBbmFseXplIENTUyBmaWxlc1xuICBpZiAoIW9wdGlvbnMuc2tpcEV4dGVybmFsKSB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzLmZpbHRlcihmID0+IGYudHlwZSA9PT0gJ2NzcycpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGUucGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNzc1BhcnNlci5wYXJzZShjb250ZW50LCBmaWxlLnBhdGgpO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIEFMTCBydWxlcyBpbiB0aGlzIGZpbGUgYXJlIEZVTExZIGNvbnZlcnRlZCAoYWxsIGRlY2xhcmF0aW9ucylcbiAgICAgICAgY29uc3QgdG90YWxSdWxlcyA9IHJlc3VsdC5ydWxlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGx5Q29udmVydGVkUnVsZXMgPSByZXN1bHQucnVsZXMuZmlsdGVyKHIgPT4gci5mdWxseUNvbnZlcnRlZCkubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJ0aWFsbHlDb252ZXJ0ZWRSdWxlcyA9IHJlc3VsdC5ydWxlcy5maWx0ZXIociA9PiByLnBhcnRpYWxDb252ZXJzaW9uKS5sZW5ndGg7XG4gICAgICAgIC8vIEEgZmlsZSBpcyBvbmx5IFwiZnVsbHkgY29udmVydGlibGVcIiBpZiBBTEwgcnVsZXMgYXJlIGZ1bGx5IGNvbnZlcnRlZCAobm8gcGFydGlhbCBjb252ZXJzaW9ucylcbiAgICAgICAgY29uc3QgZnVsbHlDb252ZXJ0aWJsZSA9IHRvdGFsUnVsZXMgPiAwICYmIHRvdGFsUnVsZXMgPT09IGZ1bGx5Q29udmVydGVkUnVsZXMgJiYgcGFydGlhbGx5Q29udmVydGVkUnVsZXMgPT09IDA7XG5cbiAgICAgICAgLy8gQnVpbGQgY2xhc3MgbWFwIChvbmx5IGZvciBmdWxseSBjb252ZXJ0ZWQgY2xhc3NlcyAtIHBhcnRpYWwgY29udmVyc2lvbnMga2VlcCB0aGUgQ1NTKVxuICAgICAgICByZXN1bHQucnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgICAgICBpZiAocnVsZS5mdWxseUNvbnZlcnRlZCkge1xuICAgICAgICAgICAgY3NzQ2xhc3NNYXBbcnVsZS5jbGFzc05hbWVdID0ge1xuICAgICAgICAgICAgICB0YWlsd2luZENsYXNzZXM6IHJ1bGUuY29udmVydGVkQ2xhc3NlcyxcbiAgICAgICAgICAgICAgc291cmNlRmlsZTogZmlsZS5wYXRoLFxuICAgICAgICAgICAgICBmdWxseUNvbnZlcnRpYmxlOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0cy5zdHlsZXNDb252ZXJ0ZWQgKz0gcnVsZS5kZWNsYXJhdGlvbnMubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSBpZiAocnVsZS5wYXJ0aWFsQ29udmVyc2lvbikge1xuICAgICAgICAgICAgLy8gRm9yIHBhcnRpYWwgY29udmVyc2lvbnMsIHdlIGNvbnZlcnRlZCBzb21lIGRlY2xhcmF0aW9ucyBidXQga2VlcCB0aGUgQ1NTIHJ1bGVcbiAgICAgICAgICAgIC8vIENvdW50IHRoZSBjb252ZXJ0ZWQgZGVjbGFyYXRpb25zXG4gICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoO1xuICAgICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgUnVsZSAuJHtydWxlLmNsYXNzTmFtZX06IHBhcnRpYWwgY29udmVyc2lvbiAoJHtydWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RofS8ke3J1bGUuZGVjbGFyYXRpb25zLmxlbmd0aH0gZGVjbGFyYXRpb25zKWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3NzRmlsZVJlc3VsdHMuc2V0KGZpbGUucGF0aCwge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgbmV3Q29udGVudDogcmVzdWx0LmNzcyxcbiAgICAgICAgICBydWxlczogcmVzdWx0LnJ1bGVzLFxuICAgICAgICAgIGNhbkRlbGV0ZTogcmVzdWx0LmNhbkRlbGV0ZSxcbiAgICAgICAgICBoYXNDaGFuZ2VzOiByZXN1bHQuaGFzQ2hhbmdlcyxcbiAgICAgICAgICBmdWxseUNvbnZlcnRpYmxlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3VsdHMud2FybmluZ3MgKz0gcmVzdWx0Lndhcm5pbmdzLmxlbmd0aDtcblxuICAgICAgICAvLyBMb2cgYW5hbHlzaXNcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYEFuYWx5emVkICR7ZmlsZS5wYXRofTpgKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgLSBUb3RhbCBydWxlczogJHt0b3RhbFJ1bGVzfWApO1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgICAtIEZ1bGx5IGNvbnZlcnRlZCBydWxlczogJHtmdWxseUNvbnZlcnRlZFJ1bGVzfWApO1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgICAtIFBhcnRpYWxseSBjb252ZXJ0ZWQgcnVsZXM6ICR7cGFydGlhbGx5Q29udmVydGVkUnVsZXN9YCk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGAgIC0gRnVsbHkgY29udmVydGlibGU6ICR7ZnVsbHlDb252ZXJ0aWJsZX1gKTtcblxuICAgICAgICAvLyBMb2cgd2FybmluZ3NcbiAgICAgICAgcmVzdWx0Lndhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYOKaoO+4jyAgJHtmaWxlLnBhdGh9OiAke3dhcm5pbmd9YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBhbmFseXplICR7ZmlsZS5wYXRofTpgLCBlcnJvcik7XG4gICAgICAgIHJlc3VsdHMud2FybmluZ3MrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBQQVNTIDI6IFRyYW5zZm9ybSBKU1gvVFNYIGZpbGVzXG4gIGxvZ2dlci5pbmZvKCdcXG7impvvuI8gIFBoYXNlIDI6IFRyYW5zZm9ybWluZyBSZWFjdCBjb21wb25lbnRzLi4uJyk7XG5cbiAgY29uc3QganN4RmlsZVJlc3VsdHM6IE1hcDxzdHJpbmcsIHtcbiAgICBjb250ZW50OiBzdHJpbmc7XG4gICAgbmV3Q29udGVudDogc3RyaW5nO1xuICAgIGhhc0NoYW5nZXM6IGJvb2xlYW47XG4gIH0+ID0gbmV3IE1hcCgpO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcy5maWx0ZXIoZiA9PiBmLnR5cGUgPT09ICdqc3gnKSkge1xuICAgIHRyeSB7XG4gICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlLnBhdGgsICd1dGYtOCcpO1xuICAgICAgY29uc3Qgb3JpZ2luYWxDb250ZW50ID0gY29udGVudDtcbiAgICAgIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gICAgICBsZXQgZmlsZVdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAvLyBQcm9jZXNzIGlubGluZSBzdHlsZXNcbiAgICAgIGlmICghb3B0aW9ucy5za2lwSW5saW5lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganN4UmVzdWx0ID0ganN4UGFyc2VyLnBhcnNlKGNvbnRlbnQsIGZpbGUucGF0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGpzeFJlc3VsdC5oYXNDaGFuZ2VzKSB7XG4gICAgICAgICAgICBjb250ZW50ID0ganN4UmVzdWx0LmNvZGU7XG4gICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IGpzeFJlc3VsdC50cmFuc2Zvcm1hdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgICAoc3VtLCB0KSA9PiBzdW0gKyB0LmNsYXNzZXMubGVuZ3RoLCAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZmlsZVdhcm5pbmdzLnB1c2goLi4uanN4UmVzdWx0Lndhcm5pbmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBKU1ggaW5saW5lIHN0eWxlcyBpbiAke2ZpbGUucGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgZmlsZVdhcm5pbmdzLnB1c2goYEpTWCBwYXJzZSBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIGludGVybmFsIENTU1xuICAgICAgaWYgKCFvcHRpb25zLnNraXBJbnRlcm5hbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGludGVybmFsUmVzdWx0ID0gYXdhaXQgY3NzUGFyc2VyLnBhcnNlSW50ZXJuYWxDU1MoY29udGVudCwgZmlsZS5wYXRoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoaW50ZXJuYWxSZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICAgICAgY29udGVudCA9IGludGVybmFsUmVzdWx0Lmh0bWw7XG4gICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQnVpbGQgY2xhc3MgbWFwIGZyb20gaW50ZXJuYWwgc3R5bGVzXG4gICAgICAgICAgICBpbnRlcm5hbFJlc3VsdC5ydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgICAgICBpZiAocnVsZS5jb252ZXJ0ZWRDbGFzc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjc3NDbGFzc01hcFtydWxlLmNsYXNzTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICB0YWlsd2luZENsYXNzZXM6IHJ1bGUuY29udmVydGVkQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgIHNvdXJjZUZpbGU6IGZpbGUucGF0aCxcbiAgICAgICAgICAgICAgICAgIGZ1bGx5Q29udmVydGlibGU6IHRydWVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuZGVjbGFyYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZpbGVXYXJuaW5ncy5wdXNoKC4uLmludGVybmFsUmVzdWx0Lndhcm5pbmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYEZhaWxlZCB0byBwYXJzZSBpbnRlcm5hbCBDU1MgaW4gJHtmaWxlLnBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgICAgIGZpbGVXYXJuaW5ncy5wdXNoKGBJbnRlcm5hbCBDU1MgcGFyc2UgZXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAganN4RmlsZVJlc3VsdHMuc2V0KGZpbGUucGF0aCwge1xuICAgICAgICBjb250ZW50OiBvcmlnaW5hbENvbnRlbnQsXG4gICAgICAgIG5ld0NvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGhhc0NoYW5nZXNcbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHRzLndhcm5pbmdzICs9IGZpbGVXYXJuaW5ncy5sZW5ndGg7XG5cbiAgICAgIC8vIExvZyB3YXJuaW5nc1xuICAgICAgZmlsZVdhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGDimqDvuI8gICR7ZmlsZS5wYXRofTogJHt3YXJuaW5nfWApO1xuICAgICAgfSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gcHJvY2VzcyAke2ZpbGUucGF0aH06YCwgZXJyb3IpO1xuICAgICAgcmVzdWx0cy53YXJuaW5ncysrO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBBU1MgMzogUmVwbGFjZSBjbGFzc05hbWUgcmVmZXJlbmNlcyBmcm9tIGV4dGVybmFsIENTU1xuICAvLyBUaGlzIG11c3QgaGFwcGVuIGFmdGVyIGFsbCBKU1ggZmlsZXMgYXJlIHBhcnNlZFxuICBpZiAoT2JqZWN0LmtleXMoY3NzQ2xhc3NNYXApLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIuaW5mbygnXFxu8J+UhCBQaGFzZSAzOiBSZXBsYWNpbmcgY2xhc3NOYW1lIHJlZmVyZW5jZXMuLi4nKTtcblxuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBqc3hGaWxlUmVzdWx0cykge1xuICAgICAgbGV0IGNvbnRlbnQgPSBmaWxlUmVzdWx0Lm5ld0NvbnRlbnQ7XG4gICAgICBsZXQgaGFzQ2hhbmdlcyA9IGZpbGVSZXN1bHQuaGFzQ2hhbmdlcztcblxuICAgICAgLy8gUmVwbGFjZSBjbGFzc05hbWUgcmVmZXJlbmNlc1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnRSZXN1bHQgPSByZXBsYWNlQ2xhc3NOYW1lUmVmZXJlbmNlcyhjb250ZW50LCBjc3NDbGFzc01hcCk7XG4gICAgICBpZiAocmVwbGFjZW1lbnRSZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICBjb250ZW50ID0gcmVwbGFjZW1lbnRSZXN1bHQuY29kZTtcbiAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgIHJlc3VsdHMuY2xhc3Nlc1JlcGxhY2VkICs9IHJlcGxhY2VtZW50UmVzdWx0LnJlcGxhY2VtZW50cztcbiAgICAgICAgXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBSZXBsYWNlZCAke3JlcGxhY2VtZW50UmVzdWx0LnJlcGxhY2VtZW50c30gY2xhc3MgcmVmZXJlbmNlcyBpbiAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgdGhlIHJlc3VsdFxuICAgICAganN4RmlsZVJlc3VsdHMuc2V0KGZpbGVQYXRoLCB7XG4gICAgICAgIC4uLmZpbGVSZXN1bHQsXG4gICAgICAgIG5ld0NvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGhhc0NoYW5nZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFBBU1MgNDogV3JpdGUgYWxsIGNoYW5nZXNcbiAgbG9nZ2VyLmluZm8oJ1xcbvCfkr4gUGhhc2UgNDogV3JpdGluZyBjaGFuZ2VzLi4uJyk7XG5cbiAgLy8gV3JpdGUgSlNYIGZpbGVzXG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBqc3hGaWxlUmVzdWx0cykge1xuICAgIGlmIChmaWxlUmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmaWxlV3JpdGVyLndyaXRlRmlsZShmaWxlUGF0aCwgZmlsZVJlc3VsdC5uZXdDb250ZW50LCBmaWxlUmVzdWx0LmNvbnRlbnQpO1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gV3JpdGUgQ1NTIGZpbGVzIChTQUZFVFk6IE9ubHkgbW9kaWZ5IGlmIGZ1bGx5IGNvbnZlcnRpYmxlIG9yIGV4cGxpY2l0bHkgYWxsb3dlZClcbiAgaWYgKCFvcHRpb25zLnNraXBFeHRlcm5hbCkge1xuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBjc3NGaWxlUmVzdWx0cykge1xuICAgICAgaWYgKCFmaWxlUmVzdWx0Lmhhc0NoYW5nZXMpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBTQUZFVFkgUlVMRSAxOiBOZXZlciBtb2RpZnkgQ1NTIGZpbGVzIHRoYXQgYXJlbid0IGZ1bGx5IGNvbnZlcnRpYmxlXG4gICAgICAvLyB1bmxlc3MgdGhleSBvbmx5IGhhdmUgdW5jb252ZXJ0aWJsZSBydWxlcyAobm8gY2hhbmdlcyBuZWVkZWQpXG4gICAgICBpZiAoIWZpbGVSZXN1bHQuZnVsbHlDb252ZXJ0aWJsZSkge1xuICAgICAgICBsb2dnZXIud2Fybihg4o+t77iPICBTa2lwcGluZyAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfSAtIG5vdCBmdWxseSBjb252ZXJ0aWJsZSAod291bGQgYnJlYWsgc3R5bGVzKWApO1xuICAgICAgICBsb2dnZXIud2FybihgICAgQ29udmVydGlibGU6ICR7ZmlsZVJlc3VsdC5ydWxlcy5maWx0ZXIociA9PiByLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkubGVuZ3RofS8ke2ZpbGVSZXN1bHQucnVsZXMubGVuZ3RofSBydWxlc2ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gU0FGRVRZIFJVTEUgMjogT25seSBkZWxldGUgaWYgQUxMIHJ1bGVzIGNvbnZlcnRlZCBBTkQgLS1kZWxldGUtY3NzIGZsYWcgdXNlZFxuICAgICAgaWYgKGZpbGVSZXN1bHQuY2FuRGVsZXRlICYmIG9wdGlvbnMuZGVsZXRlQ3NzKSB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmaWxlV3JpdGVyLmRlbGV0ZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3VsdHMuZmlsZXNNb2RpZmllZCsrO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGDwn5eR77iPICBEZWxldGVkICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9IChhbGwgcnVsZXMgY29udmVydGVkKWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpbGVSZXN1bHQuY2FuRGVsZXRlICYmICFvcHRpb25zLmRlbGV0ZUNzcykge1xuICAgICAgICAvLyBGaWxlIGlzIGVtcHR5IGJ1dCBkb24ndCBkZWxldGUgd2l0aG91dCBwZXJtaXNzaW9uXG4gICAgICAgIGxvZ2dlci5pbmZvKGDihLnvuI8gICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9IGlzIG5vdyBlbXB0eSAodXNlIC0tZGVsZXRlLWNzcyB0byByZW1vdmUpYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXcml0ZSBtb2RpZmllZCBDU1MgKG9ubHkgaWYgZnVsbHkgY29udmVydGlibGUpXG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmaWxlV3JpdGVyLndyaXRlRmlsZShmaWxlUGF0aCwgZmlsZVJlc3VsdC5uZXdDb250ZW50LCBmaWxlUmVzdWx0LmNvbnRlbnQpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3VsdHMuZmlsZXNNb2RpZmllZCsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VDbGFzc05hbWVSZWZlcmVuY2VzKFxuICBjb2RlOiBzdHJpbmcsIFxuICBjbGFzc01hcDogQ1NTQ2xhc3NNYXBcbik6IHsgXG4gIGNvZGU6IHN0cmluZzsgXG4gIGhhc0NoYW5nZXM6IGJvb2xlYW47IFxuICByZXBsYWNlbWVudHM6IG51bWJlciBcbn0ge1xuICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICBsZXQgcmVwbGFjZW1lbnRzID0gMDtcbiAgbGV0IG1vZGlmaWVkQ29kZSA9IGNvZGU7XG5cbiAgT2JqZWN0LmVudHJpZXMoY2xhc3NNYXApLmZvckVhY2goKFtvbGRDbGFzcywgaW5mb10pID0+IHtcbiAgICAvLyBTa2lwIGlmIG5vdCBmdWxseSBjb252ZXJ0aWJsZVxuICAgIGlmICghaW5mby5mdWxseUNvbnZlcnRpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFpbHdpbmRDbGFzc1N0cmluZyA9IGluZm8udGFpbHdpbmRDbGFzc2VzLmpvaW4oJyAnKTtcbiAgICBcbiAgICAvLyBQYXR0ZXJuIDE6IGNsYXNzTmFtZT1cIm9sZENsYXNzXCIgKHNpbXBsZSBzdHJpbmcpXG4gICAgY29uc3QgcGF0dGVybjEgPSBuZXcgUmVnRXhwKGBjbGFzc05hbWU9XCIke29sZENsYXNzfVwiYCwgJ2cnKTtcbiAgICBpZiAocGF0dGVybjEudGVzdChtb2RpZmllZENvZGUpKSB7XG4gICAgICBtb2RpZmllZENvZGUgPSBtb2RpZmllZENvZGUucmVwbGFjZShwYXR0ZXJuMSwgYGNsYXNzTmFtZT1cIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICByZXBsYWNlbWVudHMrKztcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBSZXBsYWNlZCBjbGFzc05hbWU9XCIke29sZENsYXNzfVwiIHdpdGggXCIke3RhaWx3aW5kQ2xhc3NTdHJpbmd9XCJgKTtcbiAgICB9XG5cbiAgICAvLyBQYXR0ZXJuIDI6IGNsYXNzTmFtZT17XCJvbGRDbGFzc1wifSAoZXhwcmVzc2lvbiB3aXRoIHN0cmluZylcbiAgICBjb25zdCBwYXR0ZXJuMiA9IG5ldyBSZWdFeHAoYGNsYXNzTmFtZT1cXFxce1wiJHtvbGRDbGFzc31cIlxcXFx9YCwgJ2cnKTtcbiAgICBpZiAocGF0dGVybjIudGVzdChtb2RpZmllZENvZGUpKSB7XG4gICAgICBtb2RpZmllZENvZGUgPSBtb2RpZmllZENvZGUucmVwbGFjZShwYXR0ZXJuMiwgYGNsYXNzTmFtZT1cIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICByZXBsYWNlbWVudHMrKztcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBSZXBsYWNlZCBjbGFzc05hbWU9e1wiJHtvbGRDbGFzc31cIn0gd2l0aCBcIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gMzogY2xhc3NOYW1lPXtgb2xkQ2xhc3NgfSAoc2ltcGxlIHRlbXBsYXRlIGxpdGVyYWwpXG4gICAgY29uc3QgcGF0dGVybjMgPSBuZXcgUmVnRXhwKGBjbGFzc05hbWU9XFxcXHtcXGBcXFxccyoke29sZENsYXNzfVxcXFxzKlxcYFxcXFx9YCwgJ2cnKTtcbiAgICBpZiAocGF0dGVybjMudGVzdChtb2RpZmllZENvZGUpKSB7XG4gICAgICBtb2RpZmllZENvZGUgPSBtb2RpZmllZENvZGUucmVwbGFjZShwYXR0ZXJuMywgYGNsYXNzTmFtZT1cIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICByZXBsYWNlbWVudHMrKztcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBSZXBsYWNlZCBjbGFzc05hbWU9e1xcYCR7b2xkQ2xhc3N9XFxgfSB3aXRoIFwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geyBjb2RlOiBtb2RpZmllZENvZGUsIGhhc0NoYW5nZXMsIHJlcGxhY2VtZW50cyB9O1xufVxuIl19
|
|
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
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface Breakpoint {
|
|
2
|
+
name: string;
|
|
3
|
+
minWidth: number;
|
|
4
|
+
}
|
|
5
|
+
export interface MediaQueryInfo {
|
|
6
|
+
type: 'min-width' | 'max-width' | 'unsupported';
|
|
7
|
+
value?: number;
|
|
8
|
+
raw: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function getDefaultBreakpoints(): Breakpoint[];
|
|
11
|
+
export declare function resolveBreakpointsFromConfig(screens: Record<string, string | [string, string]> | undefined): Breakpoint[];
|
|
12
|
+
export declare function getBreakpoints(screens?: Record<string, string | [string, string]>): Breakpoint[];
|
|
13
|
+
export declare function clearBreakpointCache(): void;
|
|
14
|
+
export declare function parseMediaQuery(params: string): MediaQueryInfo;
|
|
15
|
+
export declare function findBreakpointForMinWidth(minWidth: number, breakpoints: Breakpoint[]): string | null;
|
|
16
|
+
export declare function prefixWithBreakpoint(className: string, breakpoint: string): string;
|
|
17
|
+
export declare function processMediaQuery(params: string, breakpoints: Breakpoint[]): {
|
|
18
|
+
breakpoint: string | null;
|
|
19
|
+
skipped: boolean;
|
|
20
|
+
reason?: string;
|
|
21
|
+
};
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDefaultBreakpoints = getDefaultBreakpoints;
|
|
4
|
+
exports.resolveBreakpointsFromConfig = resolveBreakpointsFromConfig;
|
|
5
|
+
exports.getBreakpoints = getBreakpoints;
|
|
6
|
+
exports.clearBreakpointCache = clearBreakpointCache;
|
|
7
|
+
exports.parseMediaQuery = parseMediaQuery;
|
|
8
|
+
exports.findBreakpointForMinWidth = findBreakpointForMinWidth;
|
|
9
|
+
exports.prefixWithBreakpoint = prefixWithBreakpoint;
|
|
10
|
+
exports.processMediaQuery = processMediaQuery;
|
|
11
|
+
const logger_1 = require("./logger");
|
|
12
|
+
const DEFAULT_BREAKPOINTS = [
|
|
13
|
+
{ name: 'sm', minWidth: 640 },
|
|
14
|
+
{ name: 'md', minWidth: 768 },
|
|
15
|
+
{ name: 'lg', minWidth: 1024 },
|
|
16
|
+
{ name: 'xl', minWidth: 1280 },
|
|
17
|
+
{ name: '2xl', minWidth: 1536 }
|
|
18
|
+
];
|
|
19
|
+
let cachedBreakpoints = null;
|
|
20
|
+
function getDefaultBreakpoints() {
|
|
21
|
+
return [...DEFAULT_BREAKPOINTS];
|
|
22
|
+
}
|
|
23
|
+
function resolveBreakpointsFromConfig(screens) {
|
|
24
|
+
if (!screens) {
|
|
25
|
+
return getDefaultBreakpoints();
|
|
26
|
+
}
|
|
27
|
+
const breakpoints = [];
|
|
28
|
+
for (const [name, value] of Object.entries(screens)) {
|
|
29
|
+
let minWidth = null;
|
|
30
|
+
if (typeof value === 'string') {
|
|
31
|
+
minWidth = parsePixelValue(value);
|
|
32
|
+
}
|
|
33
|
+
else if (Array.isArray(value)) {
|
|
34
|
+
minWidth = parsePixelValue(value[0]);
|
|
35
|
+
}
|
|
36
|
+
if (minWidth !== null) {
|
|
37
|
+
breakpoints.push({ name, minWidth });
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
breakpoints.sort((a, b) => a.minWidth - b.minWidth);
|
|
41
|
+
return breakpoints.length > 0 ? breakpoints : getDefaultBreakpoints();
|
|
42
|
+
}
|
|
43
|
+
function parsePixelValue(value) {
|
|
44
|
+
const pxMatch = value.match(/^([\d.]+)px$/);
|
|
45
|
+
if (pxMatch) {
|
|
46
|
+
return parseFloat(pxMatch[1]);
|
|
47
|
+
}
|
|
48
|
+
const remMatch = value.match(/^([\d.]+)rem$/);
|
|
49
|
+
if (remMatch) {
|
|
50
|
+
return parseFloat(remMatch[1]) * 16;
|
|
51
|
+
}
|
|
52
|
+
const emMatch = value.match(/^([\d.]+)em$/);
|
|
53
|
+
if (emMatch) {
|
|
54
|
+
return parseFloat(emMatch[1]) * 16;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
function getBreakpoints(screens) {
|
|
59
|
+
if (cachedBreakpoints && !screens) {
|
|
60
|
+
return cachedBreakpoints;
|
|
61
|
+
}
|
|
62
|
+
const breakpoints = screens ? resolveBreakpointsFromConfig(screens) : getDefaultBreakpoints();
|
|
63
|
+
if (!screens) {
|
|
64
|
+
cachedBreakpoints = breakpoints;
|
|
65
|
+
}
|
|
66
|
+
return breakpoints;
|
|
67
|
+
}
|
|
68
|
+
function clearBreakpointCache() {
|
|
69
|
+
cachedBreakpoints = null;
|
|
70
|
+
}
|
|
71
|
+
function parseMediaQuery(params) {
|
|
72
|
+
const trimmed = params.trim().toLowerCase();
|
|
73
|
+
if (trimmed.includes('screen') && trimmed.includes('and')) {
|
|
74
|
+
return {
|
|
75
|
+
type: 'unsupported',
|
|
76
|
+
raw: params
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (trimmed.includes('orientation') || trimmed.includes('print')) {
|
|
80
|
+
return {
|
|
81
|
+
type: 'unsupported',
|
|
82
|
+
raw: params
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
const minMatch = trimmed.match(/\(\s*min-width\s*:\s*([\d.]+)(px|rem|em)\s*\)/);
|
|
86
|
+
if (minMatch) {
|
|
87
|
+
const value = parseFloat(minMatch[1]);
|
|
88
|
+
const unit = minMatch[2];
|
|
89
|
+
let pxValue = value;
|
|
90
|
+
if (unit === 'rem' || unit === 'em') {
|
|
91
|
+
pxValue = value * 16;
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
type: 'min-width',
|
|
95
|
+
value: pxValue,
|
|
96
|
+
raw: params
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
const maxMatch = trimmed.match(/\(\s*max-width\s*:\s*([\d.]+)(px|rem|em)\s*\)/);
|
|
100
|
+
if (maxMatch) {
|
|
101
|
+
return {
|
|
102
|
+
type: 'max-width',
|
|
103
|
+
raw: params
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
type: 'unsupported',
|
|
108
|
+
raw: params
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function findBreakpointForMinWidth(minWidth, breakpoints) {
|
|
112
|
+
const exact = breakpoints.find(bp => bp.minWidth === minWidth);
|
|
113
|
+
if (exact) {
|
|
114
|
+
return exact.name;
|
|
115
|
+
}
|
|
116
|
+
const closest = breakpoints.reduce((closest, bp) => {
|
|
117
|
+
if (!closest)
|
|
118
|
+
return bp;
|
|
119
|
+
const currentDiff = Math.abs(bp.minWidth - minWidth);
|
|
120
|
+
const closestDiff = Math.abs(closest.minWidth - minWidth);
|
|
121
|
+
return currentDiff < closestDiff ? bp : closest;
|
|
122
|
+
}, null);
|
|
123
|
+
if (closest) {
|
|
124
|
+
const diff = Math.abs(closest.minWidth - minWidth);
|
|
125
|
+
const tolerance = minWidth * 0.05;
|
|
126
|
+
if (diff <= tolerance) {
|
|
127
|
+
logger_1.logger.verbose(`Matched min-width ${minWidth}px to closest breakpoint ${closest.name} (${closest.minWidth}px)`);
|
|
128
|
+
return closest.name;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
function prefixWithBreakpoint(className, breakpoint) {
|
|
134
|
+
return `${breakpoint}:${className}`;
|
|
135
|
+
}
|
|
136
|
+
function processMediaQuery(params, breakpoints) {
|
|
137
|
+
const info = parseMediaQuery(params);
|
|
138
|
+
if (info.type !== 'min-width' || info.value === undefined) {
|
|
139
|
+
const reason = info.type === 'max-width'
|
|
140
|
+
? `Skipped media query (max-width: ...) — unsupported`
|
|
141
|
+
: `Skipped media query (${info.raw}) — unsupported`;
|
|
142
|
+
logger_1.logger.verbose(reason);
|
|
143
|
+
return { breakpoint: null, skipped: true, reason };
|
|
144
|
+
}
|
|
145
|
+
const breakpoint = findBreakpointForMinWidth(info.value, breakpoints);
|
|
146
|
+
if (!breakpoint) {
|
|
147
|
+
const reason = `No matching breakpoint for min-width: ${info.value}px`;
|
|
148
|
+
logger_1.logger.verbose(reason);
|
|
149
|
+
return { breakpoint: null, skipped: true, reason };
|
|
150
|
+
}
|
|
151
|
+
logger_1.logger.verbose(`Converted media query (min-width: ${info.value}px) → ${breakpoint}`);
|
|
152
|
+
return { breakpoint, skipped: false };
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWtwb2ludFJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2JyZWFrcG9pbnRSZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXVCQSxzREFFQztBQUVELG9FQXdCQztBQXFCRCx3Q0FZQztBQUVELG9EQUVDO0FBRUQsMENBOENDO0FBRUQsOERBMEJDO0FBRUQsb0RBRUM7QUFFRCw4Q0EyQkM7QUFyTUQscUNBQWtDO0FBYWxDLE1BQU0sbUJBQW1CLEdBQWlCO0lBQ3hDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO0lBQzdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO0lBQzdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO0lBQzlCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO0lBQzlCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO0NBQ2hDLENBQUM7QUFFRixJQUFJLGlCQUFpQixHQUF3QixJQUFJLENBQUM7QUFFbEQsU0FBZ0IscUJBQXFCO0lBQ25DLE9BQU8sQ0FBQyxHQUFHLG1CQUFtQixDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELFNBQWdCLDRCQUE0QixDQUFDLE9BQThEO0lBQ3pHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8scUJBQXFCLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztJQUVyQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BELElBQUksUUFBUSxHQUFrQixJQUFJLENBQUM7UUFFbkMsSUFBSSxPQUFPLEtB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QU0sR0FBRyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVc7WUFDdEMsQ0FBQyxDQUFDLG9EQUFvRDtZQUN0RCxDQUFDLENBQUMsd0JBQXdCLElBQUksQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1FBRXRELGVBQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUV0RSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxNQUFNLEdBQUcseUNBQXlDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQztRQUN2RSxlQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELGVBQU0sQ0FBQyxPQUFPLENBQUMscUNBQXFDLElBQUksQ0FBQyxLQUFLLFNBQVMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUVyRixPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFrcG9pbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIG1pbldpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVkaWFRdWVyeUluZm8ge1xuICB0eXBlOiAnbWluLXdpZHRoJyB8ICdtYXgtd2lkdGgnIHwgJ3Vuc3VwcG9ydGVkJztcbiAgdmFsdWU/OiBudW1iZXI7XG4gIHJhdzogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX0JSRUFLUE9JTlRTOiBCcmVha3BvaW50W10gPSBbXG4gIHsgbmFtZTogJ3NtJywgbWluV2lkdGg6IDY0MCB9LFxuICB7IG5hbWU6ICdtZCcsIG1pbldpZHRoOiA3NjggfSxcbiAgeyBuYW1lOiAnbGcnLCBtaW5XaWR0aDogMTAyNCB9LFxuICB7IG5hbWU6ICd4bCcsIG1pbldpZHRoOiAxMjgwIH0sXG4gIHsgbmFtZTogJzJ4bCcsIG1pbldpZHRoOiAxNTM2IH1cbl07XG5cbmxldCBjYWNoZWRCcmVha3BvaW50czogQnJlYWtwb2ludFtdIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0QnJlYWtwb2ludHMoKTogQnJlYWtwb2ludFtdIHtcbiAgcmV0dXJuIFsuLi5ERUZBVUxUX0JSRUFLUE9JTlRTXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCcmVha3BvaW50c0Zyb21Db25maWcoc2NyZWVuczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXT4gfCB1bmRlZmluZWQpOiBCcmVha3BvaW50W10ge1xuICBpZiAoIXNjcmVlbnMpIHtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEJyZWFrcG9pbnRzKCk7XG4gIH1cblxuICBjb25zdCBicmVha3BvaW50czogQnJlYWtwb2ludFtdID0gW107XG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNjcmVlbnMpKSB7XG4gICAgbGV0IG1pbldpZHRoOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBtaW5XaWR0aCA9IHBhcnNlUGl4ZWxWYWx1ZSh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgbWluV2lkdGggPSBwYXJzZVBpeGVsVmFsdWUodmFsdWVbMF0pO1xuICAgIH1cblxuICAgIGlmIChtaW5XaWR0aCAhPT0gbnVsbCkge1xuICAgICAgYnJlYWtwb2ludHMucHVzaCh7IG5hbWUsIG1pbldpZHRoIH0pO1xuICAgIH1cbiAgfVxuXG4gIGJyZWFrcG9pbnRzLnNvcnQoKGEsIGIpID0+IGEubWluV2lkdGggLSBiLm1pbldpZHRoKTtcblxuICByZXR1cm4gYnJlYWtwb2ludHMubGVuZ3RoID4gMCA/IGJyZWFrcG9pbnRzIDogZ2V0RGVmYXVsdEJyZWFrcG9pbnRzKCk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUGl4ZWxWYWx1ZSh2YWx1ZTogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IHB4TWF0Y2ggPSB2YWx1ZS5tYXRjaCgvXihbXFxkLl0rKXB4JC8pO1xuICBpZiAocHhNYXRjaCkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHB4TWF0Y2hbMV0pO1xuICB9XG5cbiAgY29uc3QgcmVtTWF0Y2ggPSB2YWx1ZS5tYXRjaCgvXihbXFxkLl0rKXJlbSQvKTtcbiAgaWYgKHJlbU1hdGNoKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQocmVtTWF0Y2hbMV0pICogMTY7XG4gIH1cblxuICBjb25zdCBlbU1hdGNoID0gdmFsdWUubWF0Y2goL14oW1xcZC5dKyllbSQvKTtcbiAgaWYgKGVtTWF0Y2gpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChlbU1hdGNoWzFdKSAqIDE2O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCcmVha3BvaW50cyhzY3JlZW5zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgW3N0cmluZywgc3RyaW5nXT4pOiBCcmVha3BvaW50W10ge1xuICBpZiAoY2FjaGVkQnJlYWtwb2ludHMgJiYgIXNjcmVlbnMpIHtcbiAgICByZXR1cm4gY2FjaGVkQnJlYWtwb2ludHM7XG4gIH1cblxuICBjb25zdCBicmVha3BvaW50cyA9IHNjcmVlbnMgPyByZXNvbHZlQnJlYWtwb2ludHNGcm9tQ29uZmlnKHNjcmVlbnMpIDogZ2V0RGVmYXVsdEJyZWFrcG9pbnRzKCk7XG4gIFxuICBpZiAoIXNjcmVlbnMpIHtcbiAgICBjYWNoZWRCcmVha3BvaW50cyA9IGJyZWFrcG9pbnRzO1xuICB9XG4gIFxuICByZXR1cm4gYnJlYWtwb2ludHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckJyZWFrcG9pbnRDYWNoZSgpOiB2b2lkIHtcbiAgY2FjaGVkQnJlYWtwb2ludHMgPSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VNZWRpYVF1ZXJ5KHBhcmFtczogc3RyaW5nKTogTWVkaWFRdWVyeUluZm8ge1xuICBjb25zdCB0cmltbWVkID0gcGFyYW1zLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICh0cmltbWVkLmluY2x1ZGVzKCdzY3JlZW4nKSAmJiB0cmltbWVkLmluY2x1ZGVzKCdhbmQnKSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgcmF3OiBwYXJhbXNcbiAgICB9O1xuICB9XG5cbiAgaWYgKHRyaW1tZWQuaW5jbHVkZXMoJ29yaWVudGF0aW9uJykgfHwgdHJpbW1lZC5pbmNsdWRlcygncHJpbnQnKSkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgICAgcmF3OiBwYXJhbXNcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbWluTWF0Y2ggPSB0cmltbWVkLm1hdGNoKC9cXChcXHMqbWluLXdpZHRoXFxzKjpcXHMqKFtcXGQuXSspKHB4fHJlbXxlbSlcXHMqXFwpLyk7XG4gIGlmIChtaW5NYXRjaCkge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChtaW5NYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IG1pbk1hdGNoWzJdO1xuXG4gICAgbGV0IHB4VmFsdWUgPSB2YWx1ZTtcbiAgICBpZiAodW5pdCA9PT0gJ3JlbScgfHwgdW5pdCA9PT0gJ2VtJykge1xuICAgICAgcHhWYWx1ZSA9IHZhbHVlICogMTY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdtaW4td2lkdGgnLFxuICAgICAgdmFsdWU6IHB4VmFsdWUsXG4gICAgICByYXc6IHBhcmFtc1xuICAgIH07XG4gIH1cblxuICBjb25zdCBtYXhNYXRjaCA9IHRyaW1tZWQubWF0Y2goL1xcKFxccyptYXgtd2lkdGhcXHMqOlxccyooW1xcZC5dKykocHh8cmVtfGVtKVxccypcXCkvKTtcbiAgaWYgKG1heE1hdGNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdtYXgtd2lkdGgnLFxuICAgICAgcmF3OiBwYXJhbXNcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAndW5zdXBwb3J0ZWQnLFxuICAgIHJhdzogcGFyYW1zXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQnJlYWtwb2ludEZvck1pbldpZHRoKG1pbldpZHRoOiBudW1iZXIsIGJyZWFrcG9pbnRzOiBCcmVha3BvaW50W10pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZXhhY3QgPSBicmVha3BvaW50cy5maW5kKGJwID0+IGJwLm1pbldpZHRoID09PSBtaW5XaWR0aCk7XG4gIGlmIChleGFjdCkge1xuICAgIHJldHVybiBleGFjdC5uYW1lO1xuICB9XG5cbiAgY29uc3QgY2xvc2VzdCA9IGJyZWFrcG9pbnRzLnJlZHVjZTxCcmVha3BvaW50IHwgbnVsbD4oKGNsb3Nlc3QsIGJwKSA9PiB7XG4gICAgaWYgKCFjbG9zZXN0KSByZXR1cm4gYnA7XG5cbiAgICBjb25zdCBjdXJyZW50RGlmZiA9IE1hdGguYWJzKGJwLm1pbldpZHRoIC0gbWluV2lkdGgpO1xuICAgIGNvbnN0IGNsb3Nlc3REaWZmID0gTWF0aC5hYnMoY2xvc2VzdC5taW5XaWR0aCAtIG1pbldpZHRoKTtcblxuICAgIHJldHVybiBjdXJyZW50RGlmZiA8IGNsb3Nlc3REaWZmID8gYnAgOiBjbG9zZXN0O1xuICB9LCBudWxsKTtcblxuICBpZiAoY2xvc2VzdCkge1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhjbG9zZXN0Lm1pbldpZHRoIC0gbWluV2lkdGgpO1xuICAgIGNvbnN0IHRvbGVyYW5jZSA9IG1pbldpZHRoICogMC4wNTtcblxuICAgIGlmIChkaWZmIDw9IHRvbGVyYW5jZSkge1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYE1hdGNoZWQgbWluLXdpZHRoICR7bWluV2lkdGh9cHggdG8gY2xvc2VzdCBicmVha3BvaW50ICR7Y2xvc2VzdC5uYW1lfSAoJHtjbG9zZXN0Lm1pbldpZHRofXB4KWApO1xuICAgICAgcmV0dXJuIGNsb3Nlc3QubmFtZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeFdpdGhCcmVha3BvaW50KGNsYXNzTmFtZTogc3RyaW5nLCBicmVha3BvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7YnJlYWtwb2ludH06JHtjbGFzc05hbWV9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NNZWRpYVF1ZXJ5KHBhcmFtczogc3RyaW5nLCBicmVha3BvaW50czogQnJlYWtwb2ludFtdKToge1xuICBicmVha3BvaW50OiBzdHJpbmcgfCBudWxsO1xuICBza2lwcGVkOiBib29sZWFuO1xuICByZWFzb24/OiBzdHJpbmc7XG59IHtcbiAgY29uc3QgaW5mbyA9IHBhcnNlTWVkaWFRdWVyeShwYXJhbXMpO1xuXG4gIGlmIChpbmZvLnR5cGUgIT09ICdtaW4td2lkdGgnIHx8IGluZm8udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJlYXNvbiA9IGluZm8udHlwZSA9PT0gJ21heC13aWR0aCdcbiAgICAgID8gYFNraXBwZWQgbWVkaWEgcXVlcnkgKG1heC13aWR0aDogLi4uKSDigJQgdW5zdXBwb3J0ZWRgXG4gICAgICA6IGBTa2lwcGVkIG1lZGlhIHF1ZXJ5ICgke2luZm8ucmF3fSkg4oCUIHVuc3VwcG9ydGVkYDtcblxuICAgIGxvZ2dlci52ZXJib3NlKHJlYXNvbik7XG4gICAgcmV0dXJuIHsgYnJlYWtwb2ludDogbnVsbCwgc2tpcHBlZDogdHJ1ZSwgcmVhc29uIH07XG4gIH1cblxuICBjb25zdCBicmVha3BvaW50ID0gZmluZEJyZWFrcG9pbnRGb3JNaW5XaWR0aChpbmZvLnZhbHVlLCBicmVha3BvaW50cyk7XG5cbiAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgY29uc3QgcmVhc29uID0gYE5vIG1hdGNoaW5nIGJyZWFrcG9pbnQgZm9yIG1pbi13aWR0aDogJHtpbmZvLnZhbHVlfXB4YDtcbiAgICBsb2dnZXIudmVyYm9zZShyZWFzb24pO1xuICAgIHJldHVybiB7IGJyZWFrcG9pbnQ6IG51bGwsIHNraXBwZWQ6IHRydWUsIHJlYXNvbiB9O1xuICB9XG5cbiAgbG9nZ2VyLnZlcmJvc2UoYENvbnZlcnRlZCBtZWRpYSBxdWVyeSAobWluLXdpZHRoOiAke2luZm8udmFsdWV9cHgpIOKGkiAke2JyZWFrcG9pbnR9YCk7XG5cbiAgcmV0dXJuIHsgYnJlYWtwb2ludCwgc2tpcHBlZDogZmFsc2UgfTtcbn0iXX0=
|
package/dist/utils/config.d.ts
CHANGED
package/dist/utils/config.js
CHANGED
|
@@ -71,6 +71,13 @@ async function loadTailwindConfig(projectRoot) {
|
|
|
71
71
|
'56': '14rem',
|
|
72
72
|
'64': '16rem'
|
|
73
73
|
},
|
|
74
|
+
screens: {
|
|
75
|
+
'sm': '640px',
|
|
76
|
+
'md': '768px',
|
|
77
|
+
'lg': '1024px',
|
|
78
|
+
'xl': '1280px',
|
|
79
|
+
'2xl': '1536px'
|
|
80
|
+
},
|
|
74
81
|
colors: {
|
|
75
82
|
transparent: 'transparent',
|
|
76
83
|
current: 'currentColor',
|
|
@@ -136,4 +143,4 @@ async function loadTailwindConfig(projectRoot) {
|
|
|
136
143
|
}
|
|
137
144
|
};
|
|
138
145
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWtCQSxnREFvSUM7QUF0SkQsZ0RBQXdCO0FBQ3hCLDRDQUFvQjtBQUNwQixzREFBOEI7QUFnQnZCLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxXQUFtQjtJQUMxRCxNQUFNLFdBQVcsR0FBRztRQUNsQixvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLHFCQUFxQjtRQUNyQixxQkFBcUI7S0FDdEIsQ0FBQztJQUVGLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFcEQsSUFBSSxZQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDO2dCQUNILHdDQUF3QztnQkFDeEMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFFaEQsa0JBQWtCO2dCQUNsQixJQUFJLE1BQXNCLENBQUM7Z0JBRTNCLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMvQiwwREFBMEQ7b0JBQzFELGtEQUFrRDtvQkFDbEQsMkRBQTJEO29CQUMzRCxNQUFNLGVBQWUsR0FBRyxpQkFBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztvQkFDOUUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUU3QyxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDOUIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNy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QUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzlDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQzthQUM3QztZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsS0FBSztnQkFDWCxVQUFVLEVBQUUsS0FBSztnQkFDakIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLEtBQUssRUFBRSxLQUFLO2FBQ2I7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAncmVzb2x2ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFpbHdpbmRDb25maWcge1xuICB0aGVtZT86IHtcbiAgICBleHRlbmQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHNwYWNpbmc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGNvbG9ycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZm9udFNpemU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGZvbnRXZWlnaHQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGJvcmRlclJhZGl1cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xuICBjb250ZW50Pzogc3RyaW5nW107XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRUYWlsd2luZENvbmZpZyhwcm9qZWN0Um9vdDogc3RyaW5nKTogUHJvbWlzZTxUYWlsd2luZENvbmZpZyB8IG51bGw+IHtcbiAgY29uc3QgY29uZmlnUGF0aHMgPSBbXG4gICAgJ3RhaWx3aW5kLmNvbmZpZy5qcycsXG4gICAgJ3RhaWx3aW5kLmNvbmZpZy50cycsXG4gICAgJ3RhaWx3aW5kLmNvbmZpZy5tanMnLFxuICAgICd0YWlsd2luZC5jb25maWcuY2pzJ1xuICBdO1xuXG4gIGZvciAoY29uc3QgY29uZmlnUGF0aCBvZiBjb25maWdQYXRocykge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5qb2luKHByb2plY3RSb290LCBjb25maWdQYXRoKTtcbiAgICBcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhmdWxsUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENsZWFyIHJlcXVpcmUgY2FjaGUgZm9yIGhvdCByZWxvYWRpbmdcbiAgICAgICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVbcmVxdWlyZS5yZXNvbHZlKGZ1bGxQYXRoKV07XG4gICAgICAgIFxuICAgICAgICAvLyBMb2FkIHRoZSBjb25maWdcbiAgICAgICAgbGV0IGNvbmZpZzogVGFpbHdpbmRDb25maWc7XG4gICAgICAgIFxuICAgICAgICBpZiAoY29uZmlnUGF0aC5lbmRzV2l0aCgnLnRzJykpIHtcbiAgICAgICAgICAvLyBGb3IgVHlwZVNjcmlwdCBjb25maWdzLCB3ZSBuZWVkIHRvIHVzZSBhIGR5bmFtaWMgaW1wb3J0XG4gICAgICAgICAgLy8gQnV0IGZvciBDTEkgdXNhZ2UsIHdlJ2xsIHVzZSBhIHNpbXBsZXIgYXBwcm9hY2hcbiAgICAgICAgICAvLyBUcnkgdG8gcmVzb2x2ZSB0YWlsd2luZGNzcyBhbmQgdXNlIGl0cyBjb25maWcgcmVzb2x1dGlvblxuICAgICAgICAgIGNvbnN0IHRhaWx3aW5kY3NzUGF0aCA9IHJlc29sdmUuc3luYygndGFpbHdpbmRjc3MnLCB7IGJhc2VkaXI6IHByb2plY3RSb290IH0pO1xuICAgICAgICAgIGNvbnN0IHRhaWx3aW5kY3NzID0gcmVxdWlyZSh0YWlsd2luZGNzc1BhdGgpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICh0YWlsd2luZGNzcy5yZXNvbHZlQ29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VyQ29uZmlnID0gcmVxdWlyZShmdWxsUGF0aCk7XG4gICAgICAgICAgICBjb25maWcgPSB0YWlsd2luZGNzcy5yZXNvbHZlQ29uZmlnKHVzZXJDb25maWcuZGVmYXVsdCB8fCB1c2VyQ29uZmlnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnID0gcmVxdWlyZShmdWxsUGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHVzZXJDb25maWcgPSByZXF1aXJlKGZ1bGxQYXRoKTtcbiAgICAgICAgICBjb25maWcgPSB1c2VyQ29uZmlnLmRlZmF1bHQgfHwgdXNlckNvbmZpZztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBsb2FkIFRhaWx3aW5kIGNvbmZpZyBhdCAke2Z1bGxQYXRofTpgLCBlcnJvcik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybiBkZWZhdWx0IFRhaWx3aW5kLWxpa2UgY29uZmlnXG4gIHJldHVybiB7XG4gICAgdGhlbWU6IHtcbiAgICAgIHNwYWNpbmc6IHtcbiAgICAgICAgJzAnOiAnMHB4JyxcbiAgICAgICAgJzEnOiAnMC4yNXJlbScsXG4gICAgICAgICcyJzogJzAuNXJlbScsXG4gICAgICAgICczJzogJzAuNzVyZW0nLFxuICAgICAgICAnNCc6ICcxcmVtJyxcbiAgICAgICAgJzUnOiAnMS4yNXJlbScsXG4gICAgICAgICc2JzogJzEuNXJlbScsXG4gICAgICAgICc4JzogJzJyZW0nLFxuICAgICAgICAnMTAnOiAnMi41cmVtJyxcbiAgICAgICAgJzEyJzogJzNyZW0nLFxuICAgICAgICAnMTYnOiAnNHJlbScsXG4gICAgICAgICcyMCc6ICc1cmVtJyxcbiAgICAgICAgJzI0JzogJzZyZW0nLFxuICAgICAgICAnMzInOiAnOHJlbScsXG4gICAgICAgICc0MCc6ICcxMHJlbScsXG4gICAgICAgICc0OCc6ICcxMnJlbScsXG4gICAgICAgICc1Nic6ICcxNHJlbScsXG4gICAgICAgICc2NCc6ICcxNnJlbSdcbiAgICAgIH0sXG4gICAgICBjb2xvcnM6IHtcbiAgICAgICAgdHJhbnNwYXJlbnQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGN1cnJlbnQ6ICdjdXJyZW50Q29sb3InLFxuICAgICAgICBibGFjazogJyMwMDAwMDAnLFxuICAgICAgICB3aGl0ZTogJyNmZmZmZmYnLFxuICAgICAgICBncmF5OiB7XG4gICAgICAgICAgNTA6ICcjZjlmYWZiJyxcbiAgICAgICAgICAxMDA6ICcjZjNmNGY2JyxcbiAgICAgICAgICAyMDA6ICcjZTVlN2ViJyxcbiAgICAgICAgICAzMDA6ICcjZDFkNWRiJyxcbiAgICAgICAgICA0MDA6ICcjOWNhM2FmJyxcbiAgICAgICAgICA1MDA6ICcjNmI3MjgwJyxcbiAgICAgICAgICA2MDA6ICcjNGI1NTYzJyxcbiAgICAgICAgICA3MDA6ICcjMzc0MTUxJyxcbiAgICAgICAgICA4MDA6ICcjMWYyOTM3JyxcbiAgICAgICAgICA5MDA6ICcjMTExODI3J1xuICAgICAgICB9LFxuICAgICAgICByZWQ6IHtcbiAgICAgICAgICA1MDA6ICcjZWY0NDQ0JyxcbiAgICAgICAgICA2MDA6ICcjZGMyNjI2J1xuICAgICAgICB9LFxuICAgICAgICBibHVlOiB7XG4gICAgICAgICAgNTAwOiAnIzNiODJmNicsXG4gICAgICAgICAgNjAwOiAnIzI1NjNlYidcbiAgICAgICAgfSxcbiAgICAgICAgZ3JlZW46IHtcbiAgICAgICAgICA1MDA6ICcjMjJjNTVlJyxcbiAgICAgICAgICA2MDA6ICcjMTZhMzRhJ1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZm9udFNpemU6IHtcbiAgICAgICAgJ3hzJzogWycwLjc1cmVtJywgeyBsaW5lSGVpZ2h0OiAnMXJlbScgfV0sXG4gICAgICAgICdzbSc6IFsnMC44NzVyZW0nLCB7IGxpbmVIZWlnaHQ6ICcxLjI1cmVtJyB9XSxcbiAgICAgICAgJ2Jhc2UnOiBbJzFyZW0nLCB7IGxpbmVIZWlnaHQ6ICcxLjVyZW0nIH1dLFxuICAgICAgICAnbGcnOiBbJzEuMTI1cmVtJywgeyBsaW5lSGVpZ2h0OiAnMS43NXJlbScgfV0sXG4gICAgICAgICd4bCc6IFsnMS4yNXJlbScsIHsgbGluZUhlaWdodDogJzEuNzVyZW0nIH1dLFxuICAgICAgICAnMnhsJzogWycxLjVyZW0nLCB7IGxpbmVIZWlnaHQ6ICcycmVtJyB9XSxcbiAgICAgICAgJzN4bCc6IFsnMS44NzVyZW0nLCB7IGxpbmVIZWlnaHQ6ICcyLjI1cmVtJyB9XSxcbiAgICAgICAgJzR4bCc6IFsnMi4yNXJlbScsIHsgbGluZUhlaWdodDogJzIuNXJlbScgfV1cbiAgICAgIH0sXG4gICAgICBmb250V2VpZ2h0OiB7XG4gICAgICAgIHRoaW46ICcxMDAnLFxuICAgICAgICBleHRyYWxpZ2h0OiAnMjAwJyxcbiAgICAgICAgbGlnaHQ6ICczMDAnLFxuICAgICAgICBub3JtYWw6ICc0MDAnLFxuICAgICAgICBtZWRpdW06ICc1MDAnLFxuICAgICAgICBzZW1pYm9sZDogJzYwMCcsXG4gICAgICAgIGJvbGQ6ICc3MDAnLFxuICAgICAgICBleHRyYWJvbGQ6ICc4MDAnLFxuICAgICAgICBibGFjazogJzkwMCdcbiAgICAgIH0sXG4gICAgICBib3JkZXJSYWRpdXM6IHtcbiAgICAgICAgJ25vbmUnOiAnMHB4JyxcbiAgICAgICAgJ3NtJzogJzAuMTI1cmVtJyxcbiAgICAgICAgJ0RFRkFVTFQnOiAnMC4yNXJlbScsXG4gICAgICAgICdtZCc6ICcwLjM3NXJlbScsXG4gICAgICAgICdsZyc6ICcwLjVyZW0nLFxuICAgICAgICAneGwnOiAnMC43NXJlbScsXG4gICAgICAgICcyeGwnOiAnMXJlbScsXG4gICAgICAgICczeGwnOiAnMS41cmVtJyxcbiAgICAgICAgJ2Z1bGwnOiAnOTk5OXB4J1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiJdfQ==
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQW1CQSxnREEySUM7QUE5SkQsZ0RBQXdCO0FBQ3hCLDRDQUFvQjtBQUNwQixzREFBOEI7QUFpQnZCLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxXQUFtQjtJQUMxRCxNQUFNLFdBQVcsR0FBRztRQUNsQixvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLHFCQUFxQjtRQUNyQixxQkFBcUI7S0FDdEIsQ0FBQztJQUVGLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsTUFBTSxRQUFRLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFcEQsSUFBSSxZQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDO2dCQUNILHdDQUF3QztnQkFDeEMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFFaEQsa0JBQWtCO2dCQUNsQixJQUFJLE1BQXNCLENBQUM7Z0JBRTNCLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMvQiwwREFBMEQ7b0JBQzFELGtEQUFrRDtvQkFDbEQsMkRBQTJEO29CQUMzRCxNQUFNLGVBQWUsR0FBRyxpQkFBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztvQkFDOUUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUU3QyxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDOUIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNy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RUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQztnQkFDNUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUN6QyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQzlDLEtBQUssRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQzthQUM3QztZQUNELFVBQVUsRUFBRTtnQkFDVixJQUFJLEVBQUUsS0FBSztnQkFDWCxVQUFVLEVBQUUsS0FBSztnQkFDakIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLEtBQUssRUFBRSxLQUFLO2FBQ2I7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsTUFBTSxFQUFFLFFBQVE7YUFDakI7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHJlc29sdmUgZnJvbSAncmVzb2x2ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFpbHdpbmRDb25maWcge1xuICB0aGVtZT86IHtcbiAgICBleHRlbmQ/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHNwYWNpbmc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGNvbG9ycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgZm9udFNpemU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIGZvbnRXZWlnaHQ/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGJvcmRlclJhZGl1cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgc2NyZWVucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IFtzdHJpbmcsIHN0cmluZ10+O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgfTtcbiAgY29udGVudD86IHN0cmluZ1tdO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkVGFpbHdpbmRDb25maWcocHJvamVjdFJvb3Q6IHN0cmluZyk6IFByb21pc2U8VGFpbHdpbmRDb25maWcgfCBudWxsPiB7XG4gIGNvbnN0IGNvbmZpZ1BhdGhzID0gW1xuICAgICd0YWlsd2luZC5jb25maWcuanMnLFxuICAgICd0YWlsd2luZC5jb25maWcudHMnLFxuICAgICd0YWlsd2luZC5jb25maWcubWpzJyxcbiAgICAndGFpbHdpbmQuY29uZmlnLmNqcydcbiAgXTtcblxuICBmb3IgKGNvbnN0IGNvbmZpZ1BhdGggb2YgY29uZmlnUGF0aHMpIHtcbiAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihwcm9qZWN0Um9vdCwgY29uZmlnUGF0aCk7XG4gICAgXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZnVsbFBhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDbGVhciByZXF1aXJlIGNhY2hlIGZvciBob3QgcmVsb2FkaW5nXG4gICAgICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW3JlcXVpcmUucmVzb2x2ZShmdWxsUGF0aCldO1xuICAgICAgICBcbiAgICAgICAgLy8gTG9hZCB0aGUgY29uZmlnXG4gICAgICAgIGxldCBjb25maWc6IFRhaWx3aW5kQ29uZmlnO1xuICAgICAgICBcbiAgICAgICAgaWYgKGNvbmZpZ1BhdGguZW5kc1dpdGgoJy50cycpKSB7XG4gICAgICAgICAgLy8gRm9yIFR5cGVTY3JpcHQgY29uZmlncywgd2UgbmVlZCB0byB1c2UgYSBkeW5hbWljIGltcG9ydFxuICAgICAgICAgIC8vIEJ1dCBmb3IgQ0xJIHVzYWdlLCB3ZSdsbCB1c2UgYSBzaW1wbGVyIGFwcHJvYWNoXG4gICAgICAgICAgLy8gVHJ5IHRvIHJlc29sdmUgdGFpbHdpbmRjc3MgYW5kIHVzZSBpdHMgY29uZmlnIHJlc29sdXRpb25cbiAgICAgICAgICBjb25zdCB0YWlsd2luZGNzc1BhdGggPSByZXNvbHZlLnN5bmMoJ3RhaWx3aW5kY3NzJywgeyBiYXNlZGlyOiBwcm9qZWN0Um9vdCB9KTtcbiAgICAgICAgICBjb25zdCB0YWlsd2luZGNzcyA9IHJlcXVpcmUodGFpbHdpbmRjc3NQYXRoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAodGFpbHdpbmRjc3MucmVzb2x2ZUNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgdXNlckNvbmZpZyA9IHJlcXVpcmUoZnVsbFBhdGgpO1xuICAgICAgICAgICAgY29uZmlnID0gdGFpbHdpbmRjc3MucmVzb2x2ZUNvbmZpZyh1c2VyQ29uZmlnLmRlZmF1bHQgfHwgdXNlckNvbmZpZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZyA9IHJlcXVpcmUoZnVsbFBhdGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB1c2VyQ29uZmlnID0gcmVxdWlyZShmdWxsUGF0aCk7XG4gICAgICAgICAgY29uZmlnID0gdXNlckNvbmZpZy5kZWZhdWx0IHx8IHVzZXJDb25maWc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9hZCBUYWlsd2luZCBjb25maWcgYXQgJHtmdWxsUGF0aH06YCwgZXJyb3IpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm4gZGVmYXVsdCBUYWlsd2luZC1saWtlIGNvbmZpZ1xuICByZXR1cm4ge1xuICAgIHRoZW1lOiB7XG4gICAgICBzcGFjaW5nOiB7XG4gICAgICAgICcwJzogJzBweCcsXG4gICAgICAgICcxJzogJzAuMjVyZW0nLFxuICAgICAgICAnMic6ICcwLjVyZW0nLFxuICAgICAgICAnMyc6ICcwLjc1cmVtJyxcbiAgICAgICAgJzQnOiAnMXJlbScsXG4gICAgICAgICc1JzogJzEuMjVyZW0nLFxuICAgICAgICAnNic6ICcxLjVyZW0nLFxuICAgICAgICAnOCc6ICcycmVtJyxcbiAgICAgICAgJzEwJzogJzIuNXJlbScsXG4gICAgICAgICcxMic6ICczcmVtJyxcbiAgICAgICAgJzE2JzogJzRyZW0nLFxuICAgICAgICAnMjAnOiAnNXJlbScsXG4gICAgICAgICcyNCc6ICc2cmVtJyxcbiAgICAgICAgJzMyJzogJzhyZW0nLFxuICAgICAgICAnNDAnOiAnMTByZW0nLFxuICAgICAgICAnNDgnOiAnMTJyZW0nLFxuICAgICAgICAnNTYnOiAnMTRyZW0nLFxuICAgICAgICAnNjQnOiAnMTZyZW0nXG4gICAgICB9LFxuICAgICAgc2NyZWVuczoge1xuICAgICAgICAnc20nOiAnNjQwcHgnLFxuICAgICAgICAnbWQnOiAnNzY4cHgnLFxuICAgICAgICAnbGcnOiAnMTAyNHB4JyxcbiAgICAgICAgJ3hsJzogJzEyODBweCcsXG4gICAgICAgICcyeGwnOiAnMTUzNnB4J1xuICAgICAgfSxcbiAgICAgIGNvbG9yczoge1xuICAgICAgICB0cmFuc3BhcmVudDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgY3VycmVudDogJ2N1cnJlbnRDb2xvcicsXG4gICAgICAgIGJsYWNrOiAnIzAwMDAwMCcsXG4gICAgICAgIHdoaXRlOiAnI2ZmZmZmZicsXG4gICAgICAgIGdyYXk6IHtcbiAgICAgICAgICA1MDogJyNmOWZhZmInLFxuICAgICAgICAgIDEwMDogJyNmM2Y0ZjYnLFxuICAgICAgICAgIDIwMDogJyNlNWU3ZWInLFxuICAgICAgICAgIDMwMDogJyNkMWQ1ZGInLFxuICAgICAgICAgIDQwMDogJyM5Y2EzYWYnLFxuICAgICAgICAgIDUwMDogJyM2YjcyODAnLFxuICAgICAgICAgIDYwMDogJyM0YjU1NjMnLFxuICAgICAgICAgIDcwMDogJyMzNzQxNTEnLFxuICAgICAgICAgIDgwMDogJyMxZjI5MzcnLFxuICAgICAgICAgIDkwMDogJyMxMTE4MjcnXG4gICAgICAgIH0sXG4gICAgICAgIHJlZDoge1xuICAgICAgICAgIDUwMDogJyNlZjQ0NDQnLFxuICAgICAgICAgIDYwMDogJyNkYzI2MjYnXG4gICAgICAgIH0sXG4gICAgICAgIGJsdWU6IHtcbiAgICAgICAgICA1MDA6ICcjM2I4MmY2JyxcbiAgICAgICAgICA2MDA6ICcjMjU2M2ViJ1xuICAgICAgICB9LFxuICAgICAgICBncmVlbjoge1xuICAgICAgICAgIDUwMDogJyMyMmM1NWUnLFxuICAgICAgICAgIDYwMDogJyMxNmEzNGEnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBmb250U2l6ZToge1xuICAgICAgICAneHMnOiBbJzAuNzVyZW0nLCB7IGxpbmVIZWlnaHQ6ICcxcmVtJyB9XSxcbiAgICAgICAgJ3NtJzogWycwLjg3NXJlbScsIHsgbGluZUhlaWdodDogJzEuMjVyZW0nIH1dLFxuICAgICAgICAnYmFzZSc6IFsnMXJlbScsIHsgbGluZUhlaWdodDogJzEuNXJlbScgfV0sXG4gICAgICAgICdsZyc6IFsnMS4xMjVyZW0nLCB7IGxpbmVIZWlnaHQ6ICcxLjc1cmVtJyB9XSxcbiAgICAgICAgJ3hsJzogWycxLjI1cmVtJywgeyBsaW5lSGVpZ2h0OiAnMS43NXJlbScgfV0sXG4gICAgICAgICcyeGwnOiBbJzEuNXJlbScsIHsgbGluZUhlaWdodDogJzJyZW0nIH1dLFxuICAgICAgICAnM3hsJzogWycxLjg3NXJlbScsIHsgbGluZUhlaWdodDogJzIuMjVyZW0nIH1dLFxuICAgICAgICAnNHhsJzogWycyLjI1cmVtJywgeyBsaW5lSGVpZ2h0OiAnMi41cmVtJyB9XVxuICAgICAgfSxcbiAgICAgIGZvbnRXZWlnaHQ6IHtcbiAgICAgICAgdGhpbjogJzEwMCcsXG4gICAgICAgIGV4dHJhbGlnaHQ6ICcyMDAnLFxuICAgICAgICBsaWdodDogJzMwMCcsXG4gICAgICAgIG5vcm1hbDogJzQwMCcsXG4gICAgICAgIG1lZGl1bTogJzUwMCcsXG4gICAgICAgIHNlbWlib2xkOiAnNjAwJyxcbiAgICAgICAgYm9sZDogJzcwMCcsXG4gICAgICAgIGV4dHJhYm9sZDogJzgwMCcsXG4gICAgICAgIGJsYWNrOiAnOTAwJ1xuICAgICAgfSxcbiAgICAgIGJvcmRlclJhZGl1czoge1xuICAgICAgICAnbm9uZSc6ICcwcHgnLFxuICAgICAgICAnc20nOiAnMC4xMjVyZW0nLFxuICAgICAgICAnREVGQVVMVCc6ICcwLjI1cmVtJyxcbiAgICAgICAgJ21kJzogJzAuMzc1cmVtJyxcbiAgICAgICAgJ2xnJzogJzAuNXJlbScsXG4gICAgICAgICd4bCc6ICcwLjc1cmVtJyxcbiAgICAgICAgJzJ4bCc6ICcxcmVtJyxcbiAgICAgICAgJzN4bCc6ICcxLjVyZW0nLFxuICAgICAgICAnZnVsbCc6ICc5OTk5cHgnXG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuIl19
|
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.1",
|
|
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",
|
|
@@ -25,7 +25,9 @@
|
|
|
25
25
|
"build:watch": "tsc --watch",
|
|
26
26
|
"clean": "rm -rf dist",
|
|
27
27
|
"prepublishOnly": "npm run clean && npm run build",
|
|
28
|
-
"test": "
|
|
28
|
+
"test": "jest",
|
|
29
|
+
"test:watch": "jest --watch",
|
|
30
|
+
"test:coverage": "jest --coverage",
|
|
29
31
|
"lint": "tsc --noEmit"
|
|
30
32
|
},
|
|
31
33
|
"keywords": [
|
|
@@ -61,9 +63,12 @@
|
|
|
61
63
|
"devDependencies": {
|
|
62
64
|
"@types/babel__generator": "^7.6.8",
|
|
63
65
|
"@types/babel__traverse": "^7.20.5",
|
|
66
|
+
"@types/jest": "^30.0.0",
|
|
64
67
|
"@types/node": "^20.10.6",
|
|
65
68
|
"@types/postcss-safe-parser": "^5.0.4",
|
|
66
69
|
"@types/resolve": "^1.20.6",
|
|
70
|
+
"jest": "^30.2.0",
|
|
71
|
+
"ts-jest": "^29.4.6",
|
|
67
72
|
"tsc-alias": "^1.8.8",
|
|
68
73
|
"typescript": "^5.3.3"
|
|
69
74
|
},
|