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.
@@ -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
- constructor(mapper: TailwindMapper);
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
- // Process each rule
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 className = classNameMatch[1];
45
- const declarations = [];
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
- // Convert to Tailwind classes - track which specific declarations were converted
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
- // CRITICAL FIX: Only remove declarations that were successfully converted
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 (allDeclarationsConverted) {
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0JBQW9CO0FBQ3BCLHFDQUFxRDtBQUE1QyxzR0FBQSxXQUFXLE9BQUE7QUFDcEIsNkNBQW1GO0FBQTFFLDZHQUFBLGNBQWMsT0FBQTtBQUN2QixtREFBaUY7QUFBeEUsZ0hBQUEsY0FBYyxPQUFBO0FBQ3ZCLHlDQUEyRTtBQUFsRSxzR0FBQSxTQUFTLE9BQUE7QUFDbEIseUNBQWlFO0FBQXhELHNHQUFBLFNBQVMsT0FBQTtBQUNsQiwyQ0FBNEQ7QUFBbkQsd0dBQUEsVUFBVSxPQUFBO0FBQ25CLHlDQUFvRTtBQUEzRCw0R0FBQSxrQkFBa0IsT0FBQTtBQUMzQix5Q0FBd0M7QUFBL0IsZ0dBQUEsTUFBTSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRXhwb3J0IHB1YmxpYyBBUElcbmV4cG9ydCB7IHNjYW5Qcm9qZWN0LCBTY2FubmVkRmlsZSB9IGZyb20gJy4vc2Nhbm5lcic7XG5leHBvcnQgeyB0cmFuc2Zvcm1GaWxlcywgVHJhbnNmb3JtT3B0aW9ucywgVHJhbnNmb3JtUmVzdWx0cyB9IGZyb20gJy4vdHJhbnNmb3JtZXInO1xuZXhwb3J0IHsgVGFpbHdpbmRNYXBwZXIsIENTU1Byb3BlcnR5LCBDb252ZXJzaW9uUmVzdWx0IH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5leHBvcnQgeyBKU1hQYXJzZXIsIEpTWFRyYW5zZm9ybWF0aW9uLCBKU1hQYXJzZVJlc3VsdCB9IGZyb20gJy4vanN4UGFyc2VyJztcbmV4cG9ydCB7IENTU1BhcnNlciwgQ1NTUnVsZSwgQ1NTUGFyc2VSZXN1bHQgfSBmcm9tICcuL2Nzc1BhcnNlcic7XG5leHBvcnQgeyBGaWxlV3JpdGVyLCBGaWxlV3JpdGVPcHRpb25zIH0gZnJvbSAnLi9maWxlV3JpdGVyJztcbmV4cG9ydCB7IGxvYWRUYWlsd2luZENvbmZpZywgVGFpbHdpbmRDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZyc7XG5leHBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG4iXX0=
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==
@@ -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 cssParser = new cssParser_1.CSSParser(mapper);
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
- tailwindClasses: rule.convertedClasses,
48
- sourceFile: file.path,
49
- fullyConvertible: true
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
- tailwindClasses: rule.convertedClasses,
123
- sourceFile: file.path,
124
- fullyConvertible: true
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.tailwindClasses.join(' ');
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=
@@ -6,6 +6,7 @@ export interface TailwindConfig {
6
6
  fontSize?: Record<string, any>;
7
7
  fontWeight?: Record<string, string>;
8
8
  borderRadius?: Record<string, string>;
9
+ screens?: Record<string, string | [string, string]>;
9
10
  [key: string]: any;
10
11
  };
11
12
  content?: string[];
@@ -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.0",
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": "echo \"No tests yet\" && exit 0",
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
  },