css-to-tailwind-react 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cssParser.d.ts +7 -0
- package/dist/cssParser.js +33 -12
- package/dist/jsxDescendantTransformer.d.ts +3 -5
- package/dist/jsxDescendantTransformer.js +16 -5
- package/dist/transformer.js +27 -24
- package/dist/utils/conflictResolver.d.ts +39 -0
- package/dist/utils/conflictResolver.js +140 -0
- package/dist/utils/propertyMapper.d.ts +7 -0
- package/dist/utils/propertyMapper.js +277 -0
- package/dist/utils/specificityCalculator.d.ts +25 -0
- package/dist/utils/specificityCalculator.js +150 -0
- package/package.json +1 -1
package/dist/transformer.js
CHANGED
|
@@ -14,6 +14,7 @@ const logger_1 = require("./utils/logger");
|
|
|
14
14
|
const breakpointResolver_1 = require("./utils/breakpointResolver");
|
|
15
15
|
const variantAssembler_1 = require("./utils/variantAssembler");
|
|
16
16
|
const jsxDescendantTransformer_1 = require("./jsxDescendantTransformer");
|
|
17
|
+
const conflictResolver_1 = require("./utils/conflictResolver");
|
|
17
18
|
async function transformFiles(files, options) {
|
|
18
19
|
const results = {
|
|
19
20
|
filesScanned: files.length,
|
|
@@ -214,11 +215,6 @@ async function transformFiles(files, options) {
|
|
|
214
215
|
for (const [filePath, fileResult] of cssFileResults) {
|
|
215
216
|
if (!fileResult.hasChanges)
|
|
216
217
|
continue;
|
|
217
|
-
if (!fileResult.fullyConvertible) {
|
|
218
|
-
logger_1.logger.warn(`⏭️ Skipping ${path_1.default.basename(filePath)} - not fully convertible (would break styles)`);
|
|
219
|
-
logger_1.logger.warn(` Convertible: ${fileResult.rules.filter(r => r.convertedClasses.length > 0).length}/${fileResult.rules.length} rules`);
|
|
220
|
-
continue;
|
|
221
|
-
}
|
|
222
218
|
if (fileResult.canDelete && options.deleteCss) {
|
|
223
219
|
const success = await fileWriter.deleteFile(filePath);
|
|
224
220
|
if (success) {
|
|
@@ -229,10 +225,19 @@ async function transformFiles(files, options) {
|
|
|
229
225
|
else if (fileResult.canDelete && !options.deleteCss) {
|
|
230
226
|
logger_1.logger.info(`ℹ️ ${path_1.default.basename(filePath)} is now empty (use --delete-css to remove)`);
|
|
231
227
|
}
|
|
228
|
+
else if (fileResult.fullyConvertible) {
|
|
229
|
+
const success = await fileWriter.writeFile(filePath, fileResult.newContent, fileResult.content);
|
|
230
|
+
if (success) {
|
|
231
|
+
results.filesModified++;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
232
234
|
else {
|
|
233
235
|
const success = await fileWriter.writeFile(filePath, fileResult.newContent, fileResult.content);
|
|
234
236
|
if (success) {
|
|
235
237
|
results.filesModified++;
|
|
238
|
+
const convertedCount = fileResult.rules.filter(r => r.convertedClasses.length > 0).length;
|
|
239
|
+
const totalCount = fileResult.rules.length;
|
|
240
|
+
logger_1.logger.info(`📝 ${path_1.default.basename(filePath)}: converted ${convertedCount}/${totalCount} rules (unconverted properties kept)`);
|
|
236
241
|
}
|
|
237
242
|
}
|
|
238
243
|
}
|
|
@@ -243,7 +248,11 @@ function buildClassInfoFromRule(rule, sourceFile) {
|
|
|
243
248
|
return {
|
|
244
249
|
utilities: rule.utilities.map(u => ({
|
|
245
250
|
value: u.value,
|
|
246
|
-
variants: (0, variantAssembler_1.normalizeVariantOrder)([...u.variants])
|
|
251
|
+
variants: (0, variantAssembler_1.normalizeVariantOrder)([...u.variants]),
|
|
252
|
+
cssProperty: u.cssProperty,
|
|
253
|
+
specificity: u.specificity,
|
|
254
|
+
sourceOrder: u.sourceOrder,
|
|
255
|
+
originalSelector: rule.selector
|
|
247
256
|
})),
|
|
248
257
|
sourceFile,
|
|
249
258
|
fullyConvertible: true
|
|
@@ -251,26 +260,20 @@ function buildClassInfoFromRule(rule, sourceFile) {
|
|
|
251
260
|
}
|
|
252
261
|
function mergeRuleIntoClassInfo(info, rule) {
|
|
253
262
|
for (const utility of rule.utilities) {
|
|
254
|
-
const
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
else {
|
|
264
|
-
info.utilities.push({
|
|
265
|
-
value: utility.value,
|
|
266
|
-
variants: (0, variantAssembler_1.normalizeVariantOrder)([...utility.variants])
|
|
267
|
-
});
|
|
268
|
-
}
|
|
263
|
+
const utilityWithMeta = {
|
|
264
|
+
value: utility.value,
|
|
265
|
+
variants: (0, variantAssembler_1.normalizeVariantOrder)([...utility.variants]),
|
|
266
|
+
cssProperty: utility.cssProperty,
|
|
267
|
+
specificity: utility.specificity,
|
|
268
|
+
sourceOrder: utility.sourceOrder,
|
|
269
|
+
originalSelector: rule.selector
|
|
270
|
+
};
|
|
271
|
+
info.utilities.push(utilityWithMeta);
|
|
269
272
|
}
|
|
270
273
|
}
|
|
271
274
|
function assembleTailwindClasses(info) {
|
|
272
|
-
const
|
|
273
|
-
return (0,
|
|
275
|
+
const { resolved } = (0, conflictResolver_1.resolveConflicts)(info.utilities, false);
|
|
276
|
+
return (0, conflictResolver_1.resolvedUtilitiesToStrings)(resolved).join(' ');
|
|
274
277
|
}
|
|
275
278
|
function replaceClassNameReferences(code, classMap) {
|
|
276
279
|
let hasChanges = false;
|
|
@@ -305,4 +308,4 @@ function replaceClassNameReferences(code, classMap) {
|
|
|
305
308
|
});
|
|
306
309
|
return { code: modifiedCode, hasChanges, replacements };
|
|
307
310
|
}
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFrREEsd0NBOFFDO0FBaFVELDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIscURBQWtEO0FBQ2xELDJDQUF3QztBQUN4QywyQ0FBcUU7QUFDckUsNkNBQTBDO0FBRTFDLDJDQUF3QztBQUN4QyxtRUFBa0U7QUFDbEUsK0RBSWtDO0FBQ2xDLHlFQUEwRTtBQW1DbkUsS0FBSyxVQUFVLGNBQWMsQ0FDbEMsS0FBb0IsRUFDcEIsT0FBeUI7SUFFekIsTUFBTSxPQUFPLEdBQXFCO1FBQ2hDLFlBQVksRUFBRSxLQUFLLENBQUMsTUFBTTtRQUMxQixhQUFhLEVBQUUsQ0FBQztRQUNoQixlQUFlLEVBQUUsQ0FBQztRQUNsQixlQUFlLEVBQUUsQ0FBQztRQUNsQixRQUFRLEVBQUUsQ0FBQztLQUNaLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLCtCQUFjLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO0lBQ3ZELE1BQU0sU0FBUyxHQUFHLElBQUkscUJBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsTUFBTSxVQUFVLEdBQUcsSUFBSSx1QkFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRTlELElBQUEseUNBQW9CLEdBQUUsQ0FBQztJQUV2QixNQUFNLFdBQVcsR0FBZ0IsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sa0JBQWtCLEdBQWMsRUFBRSxDQUFDO0lBQ3pDLE1BQU0sY0FBYyxHQU9mLElBQUks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MUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFNjYW5uZWRGaWxlIH0gZnJvbSAnLi9zY2FubmVyJztcbmltcG9ydCB7IFRhaWx3aW5kTWFwcGVyIH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5pbXBvcnQgeyBKU1hQYXJzZXIgfSBmcm9tICcuL2pzeFBhcnNlcic7XG5pbXBvcnQgeyBDU1NQYXJzZXIsIENTU1J1bGUsIFV0aWxpdHlXaXRoVmFyaWFudCB9IGZyb20gJy4vY3NzUGFyc2VyJztcbmltcG9ydCB7IEZpbGVXcml0ZXIgfSBmcm9tICcuL2ZpbGVXcml0ZXInO1xuaW1wb3J0IHsgVGFpbHdpbmRDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5pbXBvcnQgeyBjbGVhckJyZWFrcG9pbnRDYWNoZSB9IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcbmltcG9ydCB7IFxuICBhc3NlbWJsZVV0aWxpdGllcywgXG4gIG1lcmdlVXRpbGl0aWVzLFxuICBub3JtYWxpemVWYXJpYW50T3JkZXIgXG59IGZyb20gJy4vdXRpbHMvdmFyaWFudEFzc2VtYmxlcic7XG5pbXBvcnQgeyB0cmFuc2Zvcm1EZXNjZW5kYW50U2VsZWN0b3JzIH0gZnJvbSAnLi9qc3hEZXNjZW5kYW50VHJhbnNmb3JtZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybU9wdGlvbnMge1xuICBkcnlSdW46IGJvb2xlYW47XG4gIGRlbGV0ZUNzczogYm9vbGVhbjtcbiAgc2tpcEV4dGVybmFsOiBib29sZWFuO1xuICBza2lwSW5saW5lOiBib29sZWFuO1xuICBza2lwSW50ZXJuYWw6IGJvb2xlYW47XG4gIHRhaWx3aW5kQ29uZmlnOiBUYWlsd2luZENvbmZpZyB8IG51bGw7XG4gIHByb2plY3RSb290OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtUmVzdWx0cyB7XG4gIGZpbGVzU2Nhbm5lZDogbnVtYmVyO1xuICBmaWxlc01vZGlmaWVkOiBudW1iZXI7XG4gIHN0eWxlc0NvbnZlcnRlZDogbnVtYmVyO1xuICBjbGFzc2VzUmVwbGFjZWQ6IG51bWJlcjtcbiAgd2FybmluZ3M6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5mbyB7XG4gIHV0aWxpdGllczogQXJyYXk8eyB2YWx1ZTogc3RyaW5nOyB2YXJpYW50czogc3RyaW5nW10gfT47XG4gIHNvdXJjZUZpbGU6IHN0cmluZztcbiAgZnVsbHlDb252ZXJ0aWJsZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIENTU0NsYXNzTWFwIHtcbiAgW2NsYXNzTmFtZTogc3RyaW5nXTogQ2xhc3NJbmZvO1xufVxuXG5pbnRlcmZhY2UgQ29sbGVjdGVkUnVsZXMge1xuICBzaW1wbGVSdWxlczogQ1NTUnVsZVtdO1xuICBkZXNjZW5kYW50UnVsZXM6IENTU1J1bGVbXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVzKFxuICBmaWxlczogU2Nhbm5lZEZpbGVbXSxcbiAgb3B0aW9uczogVHJhbnNmb3JtT3B0aW9uc1xuKTogUHJvbWlzZTxUcmFuc2Zvcm1SZXN1bHRzPiB7XG4gIGNvbnN0IHJlc3VsdHM6IFRyYW5zZm9ybVJlc3VsdHMgPSB7XG4gICAgZmlsZXNTY2FubmVkOiBmaWxlcy5sZW5ndGgsXG4gICAgZmlsZXNNb2RpZmllZDogMCxcbiAgICBzdHlsZXNDb252ZXJ0ZWQ6IDAsXG4gICAgY2xhc3Nlc1JlcGxhY2VkOiAwLFxuICAgIHdhcm5pbmdzOiAwXG4gIH07XG5cbiAgY29uc3QgbWFwcGVyID0gbmV3IFRhaWx3aW5kTWFwcGVyKG9wdGlvbnMudGFpbHdpbmRDb25maWcgfHwge30pO1xuICBjb25zdCBqc3hQYXJzZXIgPSBuZXcgSlNYUGFyc2VyKG1hcHBlcik7XG4gIGNvbnN0IHNjcmVlbnMgPSBvcHRpb25zLnRhaWx3aW5kQ29uZmlnPy50aGVtZT8uc2NyZWVucztcbiAgY29uc3QgY3NzUGFyc2VyID0gbmV3IENTU1BhcnNlcihtYXBwZXIsIHNjcmVlbnMpO1xuICBjb25zdCBmaWxlV3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoeyBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuIH0pO1xuXG4gIGNsZWFyQnJlYWtwb2ludENhY2hlKCk7XG5cbiAgY29uc3QgY3NzQ2xhc3NNYXA6IENTU0NsYXNzTWFwID0ge307XG4gIGNvbnN0IGFsbERlc2NlbmRhbnRSdWxlczogQ1NTUnVsZVtdID0gW107XG4gIGNvbnN0IGNzc0ZpbGVSZXN1bHRzOiBNYXA8c3RyaW5nLCB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIG5ld0NvbnRlbnQ6IHN0cmluZztcbiAgICBydWxlczogQ1NTUnVsZVtdO1xuICAgIGNhbkRlbGV0ZTogYm9vbGVhbjtcbiAgICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICAgIGZ1bGx5Q29udmVydGlibGU6IGJvb2xlYW47XG4gIH0+ID0gbmV3IE1hcCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdcXG7wn5SNIFBoYXNlIDE6IEFuYWx5emluZyBmaWxlcy4uLicpO1xuXG4gIGlmICghb3B0aW9ucy5za2lwRXh0ZXJuYWwpIHtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnY3NzJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZS5wYXRoLCAndXRmLTgnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3NzUGFyc2VyLnBhcnNlKGNvbnRlbnQsIGZpbGUucGF0aCk7XG5cbiAgICAgICAgY29uc3QgdG90YWxSdWxlcyA9IHJlc3VsdC5ydWxlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGx5Q29udmVydGVkUnVsZXMgPSByZXN1bHQucnVsZXMuZmlsdGVyKHIgPT4gci5mdWxseUNvbnZlcnRlZCkubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJ0aWFsbHlDb252ZXJ0ZWRSdWxlcyA9IHJlc3VsdC5ydWxlcy5maWx0ZXIociA9PiByLnBhcnRpYWxDb252ZXJzaW9uKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGx5Q29udmVydGlibGUgPSB0b3RhbFJ1bGVzID4gMCAmJiB0b3RhbFJ1bGVzID09PSBmdWxseUNvbnZlcnRlZFJ1bGVzICYmIHBhcnRpYWxseUNvbnZlcnRlZFJ1bGVzID09PSAwO1xuXG4gICAgICAgIHJlc3VsdC5ydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgIGlmIChydWxlLmlzRGVzY2VuZGFudCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGFsbERlc2NlbmRhbnRSdWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChydWxlLmZ1bGx5Q29udmVydGVkICYmIHJ1bGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGV4aXN0aW5nLCBydWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXSA9IGJ1aWxkQ2xhc3NJbmZvRnJvbVJ1bGUocnVsZSwgZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuZGVjbGFyYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUucGFydGlhbENvbnZlcnNpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGg7XG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgICBSdWxlIC4ke3J1bGUuY2xhc3NOYW1lfTogcGFydGlhbCBjb252ZXJzaW9uICgke3J1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGh9LyR7cnVsZS5kZWNsYXJhdGlvbnMubGVuZ3RofSBkZWNsYXJhdGlvbnMpYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjc3NGaWxlUmVzdWx0cy5zZXQoZmlsZS5wYXRoLCB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBuZXdDb250ZW50OiByZXN1bHQuY3NzLFxuICAgICAgICAgIHJ1bGVzOiByZXN1bHQucnVsZXMsXG4gICAgICAgICAgY2FuRGVsZXRlOiByZXN1bHQuY2FuRGVsZXRlLFxuICAgICAgICAgIGhhc0NoYW5nZXM6IHJlc3VsdC5oYXNDaGFuZ2VzLFxuICAgICAgICAgIGZ1bGx5Q29udmVydGlibGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzdWx0cy53YXJuaW5ncyArPSByZXN1bHQud2FybmluZ3MubGVuZ3RoO1xuXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBBbmFseXplZCAke2ZpbGUucGF0aH06YCk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGAgIC0gVG90YWwgcnVsZXM6ICR7dG90YWxSdWxlc31gKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgLSBGdWxseSBjb252ZXJ0ZWQgcnVsZXM6ICR7ZnVsbHlDb252ZXJ0ZWRSdWxlc31gKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgLSBQYXJ0aWFsbHkgY29udmVydGVkIHJ1bGVzOiAke3BhcnRpYWxseUNvbnZlcnRlZFJ1bGVzfWApO1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgICAtIEZ1bGx5IGNvbnZlcnRpYmxlOiAke2Z1bGx5Q29udmVydGlibGV9YCk7XG5cbiAgICAgICAgcmVzdWx0Lndhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYOKaoO+4jyAgJHtmaWxlLnBhdGh9OiAke3dhcm5pbmd9YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBhbmFseXplICR7ZmlsZS5wYXRofTpgLCBlcnJvcik7XG4gICAgICAgIHJlc3VsdHMud2FybmluZ3MrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbygnXFxu4pqb77iPICBQaGFzZSAyOiBUcmFuc2Zvcm1pbmcgUmVhY3QgY29tcG9uZW50cy4uLicpO1xuXG4gIGNvbnN0IGpzeEZpbGVSZXN1bHRzOiBNYXA8c3RyaW5nLCB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIG5ld0NvbnRlbnQ6IHN0cmluZztcbiAgICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICB9PiA9IG5ldyBNYXAoKTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnanN4JykpIHtcbiAgICB0cnkge1xuICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZS5wYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ29udGVudCA9IGNvbnRlbnQ7XG4gICAgICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgbGV0IGZpbGVXYXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKCFvcHRpb25zLnNraXBJbmxpbmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc3hSZXN1bHQgPSBqc3hQYXJzZXIucGFyc2UoY29udGVudCwgZmlsZS5wYXRoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoanN4UmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBqc3hSZXN1bHQuY29kZTtcbiAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmVzdWx0cy5zdHlsZXNDb252ZXJ0ZWQgKz0ganN4UmVzdWx0LnRyYW5zZm9ybWF0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChzdW0sIHQpID0+IHN1bSArIHQuY2xhc3Nlcy5sZW5ndGgsIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaCguLi5qc3hSZXN1bHQud2FybmluZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIEpTWCBpbmxpbmUgc3R5bGVzIGluICR7ZmlsZS5wYXRofTogJHtlcnJvcn1gKTtcbiAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaChgSlNYIHBhcnNlIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy5za2lwSW50ZXJuYWwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpbnRlcm5hbFJlc3VsdCA9IGF3YWl0IGNzc1BhcnNlci5wYXJzZUludGVybmFsQ1NTKGNvbnRlbnQsIGZpbGUucGF0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGludGVybmFsUmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBpbnRlcm5hbFJlc3VsdC5odG1sO1xuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGludGVybmFsUmVzdWx0LnJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChydWxlLmlzRGVzY2VuZGFudCkge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgYWxsRGVzY2VuZGFudFJ1bGVzLnB1c2gocnVsZSk7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwICYmIHJ1bGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBjc3NDbGFzc01hcFtydWxlLmNsYXNzTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGV4aXN0aW5nLCBydWxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NNYXBbcnVsZS5jbGFzc05hbWVdID0gYnVpbGRDbGFzc0luZm9Gcm9tUnVsZShydWxlLCBmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaCguLi5pbnRlcm5hbFJlc3VsdC53YXJuaW5ncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gcGFyc2UgaW50ZXJuYWwgQ1NTIGluICR7ZmlsZS5wYXRofTogJHtlcnJvcn1gKTtcbiAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaChgSW50ZXJuYWwgQ1NTIHBhcnNlIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGpzeEZpbGVSZXN1bHRzLnNldChmaWxlLnBhdGgsIHtcbiAgICAgICAgY29udGVudDogb3JpZ2luYWxDb250ZW50LFxuICAgICAgICBuZXdDb250ZW50OiBjb250ZW50LFxuICAgICAgICBoYXNDaGFuZ2VzXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0cy53YXJuaW5ncyArPSBmaWxlV2FybmluZ3MubGVuZ3RoO1xuXG4gICAgICBmaWxlV2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYOKaoO+4jyAgJHtmaWxlLnBhdGh9OiAke3dhcm5pbmd9YCk7XG4gICAgICB9KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzICR7ZmlsZS5wYXRofTpgLCBlcnJvcik7XG4gICAgICByZXN1bHRzLndhcm5pbmdzKys7XG4gICAgfVxuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNzc0NsYXNzTWFwKS5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1xcbvCflIQgUGhhc2UgMzogUmVwbGFjaW5nIGNsYXNzTmFtZSByZWZlcmVuY2VzLi4uJyk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgZmlsZVJlc3VsdF0gb2YganN4RmlsZVJlc3VsdHMpIHtcbiAgICAgIGxldCBjb250ZW50ID0gZmlsZVJlc3VsdC5uZXdDb250ZW50O1xuICAgICAgbGV0IGhhc0NoYW5nZXMgPSBmaWxlUmVzdWx0Lmhhc0NoYW5nZXM7XG5cbiAgICAgIGNvbnN0IHJlcGxhY2VtZW50UmVzdWx0ID0gcmVwbGFjZUNsYXNzTmFtZVJlZmVyZW5jZXMoY29udGVudCwgY3NzQ2xhc3NNYXApO1xuICAgICAgaWYgKHJlcGxhY2VtZW50UmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgY29udGVudCA9IHJlcGxhY2VtZW50UmVzdWx0LmNvZGU7XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLmNsYXNzZXNSZXBsYWNlZCArPSByZXBsYWNlbWVudFJlc3VsdC5yZXBsYWNlbWVudHM7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVwbGFjZWQgJHtyZXBsYWNlbWVudFJlc3VsdC5yZXBsYWNlbWVudHN9IGNsYXNzIHJlZmVyZW5jZXMgaW4gJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX1gKTtcbiAgICAgIH1cblxuICAgICAganN4RmlsZVJlc3VsdHMuc2V0KGZpbGVQYXRoLCB7XG4gICAgICAgIC4uLmZpbGVSZXN1bHQsXG4gICAgICAgIG5ld0NvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGhhc0NoYW5nZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxEZXNjZW5kYW50UnVsZXMubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci5pbmZvKCdcXG7wn4yzIFBoYXNlIDMuNTogQXBwbHlpbmcgZGVzY2VuZGFudCBzZWxlY3RvciBydWxlcy4uLicpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGZpbGVSZXN1bHRdIG9mIGpzeEZpbGVSZXN1bHRzKSB7XG4gICAgICBsZXQgY29udGVudCA9IGZpbGVSZXN1bHQubmV3Q29udGVudDtcbiAgICAgIGxldCBoYXNDaGFuZ2VzID0gZmlsZVJlc3VsdC5oYXNDaGFuZ2VzO1xuXG4gICAgICBjb25zdCBkZXNjZW5kYW50UmVzdWx0ID0gdHJhbnNmb3JtRGVzY2VuZGFudFNlbGVjdG9ycyhjb250ZW50LCBhbGxEZXNjZW5kYW50UnVsZXMpO1xuICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICBjb250ZW50ID0gZGVzY2VuZGFudFJlc3VsdC5jb2RlO1xuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5jbGFzc2VzUmVwbGFjZWQgKz0gZGVzY2VuZGFudFJlc3VsdC50cmFuc2Zvcm1hdGlvbnM7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIudmVyYm9zZShgQXBwbGllZCAke2Rlc2NlbmRhbnRSZXN1bHQudHJhbnNmb3JtYXRpb25zfSBkZXNjZW5kYW50IHRyYW5zZm9ybWF0aW9ucyBpbiAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMud2FybmluZ3MgKz0gZGVzY2VuZGFudFJlc3VsdC53YXJuaW5ncy5sZW5ndGg7XG4gICAgICAgIGRlc2NlbmRhbnRSZXN1bHQud2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHtcbiAgICAgICAgICBsb2dnZXIudmVyYm9zZShg4pqg77iPICAke2ZpbGVQYXRofTogJHt3YXJuaW5nfWApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAganN4RmlsZVJlc3VsdHMuc2V0KGZpbGVQYXRoLCB7XG4gICAgICAgIC4uLmZpbGVSZXN1bHQsXG4gICAgICAgIG5ld0NvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGhhc0NoYW5nZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKCdcXG7wn5K+IFBoYXNlIDQ6IFdyaXRpbmcgY2hhbmdlcy4uLicpO1xuXG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBqc3hGaWxlUmVzdWx0cykge1xuICAgIGlmIChmaWxlUmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmaWxlV3JpdGVyLndyaXRlRmlsZShmaWxlUGF0aCwgZmlsZVJlc3VsdC5uZXdDb250ZW50LCBmaWxlUmVzdWx0LmNvbnRlbnQpO1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvcHRpb25zLnNraXBFeHRlcm5hbCkge1xuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBjc3NGaWxlUmVzdWx0cykge1xuICAgICAgaWYgKCFmaWxlUmVzdWx0Lmhhc0NoYW5nZXMpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAoIWZpbGVSZXN1bHQuZnVsbHlDb252ZXJ0aWJsZSkge1xuICAgICAgICBsb2dnZXIud2Fybihg4o+t77iPICBTa2lwcGluZyAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfSAtIG5vdCBmdWxseSBjb252ZXJ0aWJsZSAod291bGQgYnJlYWsgc3R5bGVzKWApO1xuICAgICAgICBsb2dnZXIud2FybihgICAgQ29udmVydGlibGU6ICR7ZmlsZVJlc3VsdC5ydWxlcy5maWx0ZXIociA9PiByLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkubGVuZ3RofS8ke2ZpbGVSZXN1bHQucnVsZXMubGVuZ3RofSBydWxlc2ApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVSZXN1bHQuY2FuRGVsZXRlICYmIG9wdGlvbnMuZGVsZXRlQ3NzKSB7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmaWxlV3JpdGVyLmRlbGV0ZUZpbGUoZmlsZVBhdGgpO1xuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHJlc3VsdHMuZmlsZXNNb2RpZmllZCsrO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGDwn5eR77iPICBEZWxldGVkICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9IChhbGwgcnVsZXMgY29udmVydGVkKWApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZpbGVSZXN1bHQuY2FuRGVsZXRlICYmICFvcHRpb25zLmRlbGV0ZUNzcykge1xuICAgICAgICBsb2dnZXIuaW5mbyhg4oS577iPICAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfSBpcyBub3cgZW1wdHkgKHVzZSAtLWRlbGV0ZS1jc3MgdG8gcmVtb3ZlKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpbGVXcml0ZXIud3JpdGVGaWxlKGZpbGVQYXRoLCBmaWxlUmVzdWx0Lm5ld0NvbnRlbnQsIGZpbGVSZXN1bHQuY29udGVudCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRDbGFzc0luZm9Gcm9tUnVsZShydWxlOiBDU1NSdWxlLCBzb3VyY2VGaWxlOiBzdHJpbmcpOiBDbGFzc0luZm8ge1xuICByZXR1cm4ge1xuICAgIHV0aWxpdGllczogcnVsZS51dGlsaXRpZXMubWFwKHUgPT4gKHtcbiAgICAgIHZhbHVlOiB1LnZhbHVlLFxuICAgICAgdmFyaWFudHM6IG5vcm1hbGl6ZVZhcmlhbnRPcmRlcihbLi4udS52YXJpYW50c10pXG4gICAgfSkpLFxuICAgIHNvdXJjZUZpbGUsXG4gICAgZnVsbHlDb252ZXJ0aWJsZTogdHJ1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGluZm86IENsYXNzSW5mbywgcnVsZTogQ1NTUnVsZSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHV0aWxpdHkgb2YgcnVsZS51dGlsaXRpZXMpIHtcbiAgICBjb25zdCBleGlzdGluZyA9IGluZm8udXRpbGl0aWVzLmZpbmQodSA9PiB1LnZhbHVlID09PSB1dGlsaXR5LnZhbHVlKTtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIGZvciAoY29uc3QgdmFyaWFudCBvZiB1dGlsaXR5LnZhcmlhbnRzKSB7XG4gICAgICAgIGlmICghZXhpc3RpbmcudmFyaWFudHMuaW5jbHVkZXModmFyaWFudCkpIHtcbiAgICAgICAgICBleGlzdGluZy52YXJpYW50cy5wdXNoKHZhcmlhbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleGlzdGluZy52YXJpYW50cyA9IG5vcm1hbGl6ZVZhcmlhbnRPcmRlcihleGlzdGluZy52YXJpYW50cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZm8udXRpbGl0aWVzLnB1c2goe1xuICAgICAgICB2YWx1ZTogdXRpbGl0eS52YWx1ZSxcbiAgICAgICAgdmFyaWFudHM6IG5vcm1hbGl6ZVZhcmlhbnRPcmRlcihbLi4udXRpbGl0eS52YXJpYW50c10pXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZW1ibGVUYWlsd2luZENsYXNzZXMoaW5mbzogQ2xhc3NJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgbWVyZ2VkID0gbWVyZ2VVdGlsaXRpZXMoaW5mby51dGlsaXRpZXMpO1xuICByZXR1cm4gYXNzZW1ibGVVdGlsaXRpZXMobWVyZ2VkKS5qb2luKCcgJyk7XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VDbGFzc05hbWVSZWZlcmVuY2VzKFxuICBjb2RlOiBzdHJpbmcsIFxuICBjbGFzc01hcDogQ1NTQ2xhc3NNYXBcbik6IHsgXG4gIGNvZGU6IHN0cmluZzsgXG4gIGhhc0NoYW5nZXM6IGJvb2xlYW47IFxuICByZXBsYWNlbWVudHM6IG51bWJlciBcbn0ge1xuICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICBsZXQgcmVwbGFjZW1lbnRzID0gMDtcbiAgbGV0IG1vZGlmaWVkQ29kZSA9IGNvZGU7XG5cbiAgT2JqZWN0LmVudHJpZXMoY2xhc3NNYXApLmZvckVhY2goKFtvbGRDbGFzcywgaW5mb10pID0+IHtcbiAgICBpZiAoIWluZm8uZnVsbHlDb252ZXJ0aWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhaWx3aW5kQ2xhc3NTdHJpbmcgPSBhc3NlbWJsZVRhaWx3aW5kQ2xhc3NlcyhpbmZvKTtcbiAgICBcbiAgICBjb25zdCBwYXR0ZXJuMSA9IG5ldyBSZWdFeHAoYGNsYXNzTmFtZT1cIiR7b2xkQ2xhc3N9XCJgLCAnZycpO1xuICAgIGlmIChwYXR0ZXJuMS50ZXN0KG1vZGlmaWVkQ29kZSkpIHtcbiAgICAgIG1vZGlmaWVkQ29kZSA9IG1vZGlmaWVkQ29kZS5yZXBsYWNlKHBhdHRlcm4xLCBgY2xhc3NOYW1lPVwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIHJlcGxhY2VtZW50cysrO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlcGxhY2VkIGNsYXNzTmFtZT1cIiR7b2xkQ2xhc3N9XCIgd2l0aCBcIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdHRlcm4yID0gbmV3IFJlZ0V4cChgY2xhc3NOYW1lPVxcXFx7XCIke29sZENsYXNzfVwiXFxcXH1gLCAnZycpO1xuICAgIGlmIChwYXR0ZXJuMi50ZXN0KG1vZGlmaWVkQ29kZSkpIHtcbiAgICAgIG1vZGlmaWVkQ29kZSA9IG1vZGlmaWVkQ29kZS5yZXBsYWNlKHBhdHRlcm4yLCBgY2xhc3NOYW1lPVwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIHJlcGxhY2VtZW50cysrO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlcGxhY2VkIGNsYXNzTmFtZT17XCIke29sZENsYXNzfVwifSB3aXRoIFwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybjMgPSBuZXcgUmVnRXhwKGBjbGFzc05hbWU9XFxcXHtcXGBcXFxccyoke29sZENsYXNzfVxcXFxzKlxcYFxcXFx9YCwgJ2cnKTtcbiAgICBpZiAocGF0dGVybjMudGVzdChtb2RpZmllZENvZGUpKSB7XG4gICAgICBtb2RpZmllZENvZGUgPSBtb2RpZmllZENvZGUucmVwbGFjZShwYXR0ZXJuMywgYGNsYXNzTmFtZT1cIiR7dGFpbHdpbmRDbGFzc1N0cmluZ31cImApO1xuICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICByZXBsYWNlbWVudHMrKztcbiAgICAgIGxvZ2dlci52ZXJib3NlKGBSZXBsYWNlZCBjbGFzc05hbWU9e1xcYCR7b2xkQ2xhc3N9XFxgfSB3aXRoIFwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geyBjb2RlOiBtb2RpZmllZENvZGUsIGhhc0NoYW5nZXMsIHJlcGxhY2VtZW50cyB9O1xufSJdfQ==
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUF5REEsd0NBZ1JDO0FBelVELDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIscURBQWtEO0FBQ2xELDJDQUF3QztBQUN4QywyQ0FBcUU7QUFDckUsNkNBQTBDO0FBRTFDLDJDQUF3QztBQUN4QyxtRUFBa0U7QUFDbEUsK0RBSWtDO0FBQ2xDLHlFQUEwRTtBQUMxRSwrREFLa0M7QUFvQzNCLEtBQUssVUFBVSxjQUFjLENBQ2xDLEtBQW9CLEVBQ3BCLE9BQXlCO0lBRXpCLE1BQU0sT0FBTyxHQUFxQjtRQUNoQyxZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDMUIsYUFBYSxFQUFFLENBQUM7UUFDaEIsZUFBZSxFQUFFLENBQUM7UUFDbEIsZUFBZSxFQUFFLENBQUM7UUFDbEIsUUFBUSxFQUFFLENBQUM7S0FDWixDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsSUFBSSwrQkFBYyxDQUFDLE9BQU8sQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxTQUFTLEdBQUcsSUFBSSxxQkFBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQztJQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLHFCQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELE1BQU0sVUFBVSxHQUFHLElBQUksdUJBQVUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUU5RCxJQUFBLHlDQUFvQixHQUFFLENBQUM7SUFFdkIsTUFBTSxXQUFXLEdBQWdCLEVBQUUsQ0FBQztJQUNwQyxNQUFNLGtCQUFrQixHQUFjLEVBQUUsQ0FBQztJQUN6QyxNQUFNLGNB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SCxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFNjYW5uZWRGaWxlIH0gZnJvbSAnLi9zY2FubmVyJztcbmltcG9ydCB7IFRhaWx3aW5kTWFwcGVyIH0gZnJvbSAnLi90YWlsd2luZE1hcHBlcic7XG5pbXBvcnQgeyBKU1hQYXJzZXIgfSBmcm9tICcuL2pzeFBhcnNlcic7XG5pbXBvcnQgeyBDU1NQYXJzZXIsIENTU1J1bGUsIFV0aWxpdHlXaXRoVmFyaWFudCB9IGZyb20gJy4vY3NzUGFyc2VyJztcbmltcG9ydCB7IEZpbGVXcml0ZXIgfSBmcm9tICcuL2ZpbGVXcml0ZXInO1xuaW1wb3J0IHsgVGFpbHdpbmRDb25maWcgfSBmcm9tICcuL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL3V0aWxzL2xvZ2dlcic7XG5pbXBvcnQgeyBjbGVhckJyZWFrcG9pbnRDYWNoZSB9IGZyb20gJy4vdXRpbHMvYnJlYWtwb2ludFJlc29sdmVyJztcbmltcG9ydCB7IFxuICBhc3NlbWJsZVV0aWxpdGllcywgXG4gIG1lcmdlVXRpbGl0aWVzLFxuICBub3JtYWxpemVWYXJpYW50T3JkZXIgXG59IGZyb20gJy4vdXRpbHMvdmFyaWFudEFzc2VtYmxlcic7XG5pbXBvcnQgeyB0cmFuc2Zvcm1EZXNjZW5kYW50U2VsZWN0b3JzIH0gZnJvbSAnLi9qc3hEZXNjZW5kYW50VHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgXG4gIFV0aWxpdHlXaXRoTWV0YSwgXG4gIFJlc29sdmVkVXRpbGl0eSwgXG4gIHJlc29sdmVDb25mbGljdHMsIFxuICByZXNvbHZlZFV0aWxpdGllc1RvU3RyaW5ncyBcbn0gZnJvbSAnLi91dGlscy9jb25mbGljdFJlc29sdmVyJztcbmltcG9ydCB7IFNwZWNpZmljaXR5LCBaRVJPX1NQRUNJRklDSVRZIH0gZnJvbSAnLi91dGlscy9zcGVjaWZpY2l0eUNhbGN1bGF0b3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zZm9ybU9wdGlvbnMge1xuICBkcnlSdW46IGJvb2xlYW47XG4gIGRlbGV0ZUNzczogYm9vbGVhbjtcbiAgc2tpcEV4dGVybmFsOiBib29sZWFuO1xuICBza2lwSW5saW5lOiBib29sZWFuO1xuICBza2lwSW50ZXJuYWw6IGJvb2xlYW47XG4gIHRhaWx3aW5kQ29uZmlnOiBUYWlsd2luZENvbmZpZyB8IG51bGw7XG4gIHByb2plY3RSb290OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNmb3JtUmVzdWx0cyB7XG4gIGZpbGVzU2Nhbm5lZDogbnVtYmVyO1xuICBmaWxlc01vZGlmaWVkOiBudW1iZXI7XG4gIHN0eWxlc0NvbnZlcnRlZDogbnVtYmVyO1xuICBjbGFzc2VzUmVwbGFjZWQ6IG51bWJlcjtcbiAgd2FybmluZ3M6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIENsYXNzSW5mbyB7XG4gIHV0aWxpdGllczogVXRpbGl0eVdpdGhNZXRhW107XG4gIHNvdXJjZUZpbGU6IHN0cmluZztcbiAgZnVsbHlDb252ZXJ0aWJsZTogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIENTU0NsYXNzTWFwIHtcbiAgW2NsYXNzTmFtZTogc3RyaW5nXTogQ2xhc3NJbmZvO1xufVxuXG5pbnRlcmZhY2UgQ29sbGVjdGVkUnVsZXMge1xuICBzaW1wbGVSdWxlczogQ1NTUnVsZVtdO1xuICBkZXNjZW5kYW50UnVsZXM6IENTU1J1bGVbXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVzKFxuICBmaWxlczogU2Nhbm5lZEZpbGVbXSxcbiAgb3B0aW9uczogVHJhbnNmb3JtT3B0aW9uc1xuKTogUHJvbWlzZTxUcmFuc2Zvcm1SZXN1bHRzPiB7XG4gIGNvbnN0IHJlc3VsdHM6IFRyYW5zZm9ybVJlc3VsdHMgPSB7XG4gICAgZmlsZXNTY2FubmVkOiBmaWxlcy5sZW5ndGgsXG4gICAgZmlsZXNNb2RpZmllZDogMCxcbiAgICBzdHlsZXNDb252ZXJ0ZWQ6IDAsXG4gICAgY2xhc3Nlc1JlcGxhY2VkOiAwLFxuICAgIHdhcm5pbmdzOiAwXG4gIH07XG5cbiAgY29uc3QgbWFwcGVyID0gbmV3IFRhaWx3aW5kTWFwcGVyKG9wdGlvbnMudGFpbHdpbmRDb25maWcgfHwge30pO1xuICBjb25zdCBqc3hQYXJzZXIgPSBuZXcgSlNYUGFyc2VyKG1hcHBlcik7XG4gIGNvbnN0IHNjcmVlbnMgPSBvcHRpb25zLnRhaWx3aW5kQ29uZmlnPy50aGVtZT8uc2NyZWVucztcbiAgY29uc3QgY3NzUGFyc2VyID0gbmV3IENTU1BhcnNlcihtYXBwZXIsIHNjcmVlbnMpO1xuICBjb25zdCBmaWxlV3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoeyBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuIH0pO1xuXG4gIGNsZWFyQnJlYWtwb2ludENhY2hlKCk7XG5cbiAgY29uc3QgY3NzQ2xhc3NNYXA6IENTU0NsYXNzTWFwID0ge307XG4gIGNvbnN0IGFsbERlc2NlbmRhbnRSdWxlczogQ1NTUnVsZVtdID0gW107XG4gIGNvbnN0IGNzc0ZpbGVSZXN1bHRzOiBNYXA8c3RyaW5nLCB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIG5ld0NvbnRlbnQ6IHN0cmluZztcbiAgICBydWxlczogQ1NTUnVsZVtdO1xuICAgIGNhbkRlbGV0ZTogYm9vbGVhbjtcbiAgICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICAgIGZ1bGx5Q29udmVydGlibGU6IGJvb2xlYW47XG4gIH0+ID0gbmV3IE1hcCgpO1xuXG4gIGxvZ2dlci5pbmZvKCdcXG7wn5SNIFBoYXNlIDE6IEFuYWx5emluZyBmaWxlcy4uLicpO1xuXG4gIGlmICghb3B0aW9ucy5za2lwRXh0ZXJuYWwpIHtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnY3NzJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZS5wYXRoLCAndXRmLTgnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY3NzUGFyc2VyLnBhcnNlKGNvbnRlbnQsIGZpbGUucGF0aCk7XG5cbiAgICAgICAgY29uc3QgdG90YWxSdWxlcyA9IHJlc3VsdC5ydWxlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGx5Q29udmVydGVkUnVsZXMgPSByZXN1bHQucnVsZXMuZmlsdGVyKHIgPT4gci5mdWxseUNvbnZlcnRlZCkubGVuZ3RoO1xuICAgICAgICBjb25zdCBwYXJ0aWFsbHlDb252ZXJ0ZWRSdWxlcyA9IHJlc3VsdC5ydWxlcy5maWx0ZXIociA9PiByLnBhcnRpYWxDb252ZXJzaW9uKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZ1bGx5Q29udmVydGlibGUgPSB0b3RhbFJ1bGVzID4gMCAmJiB0b3RhbFJ1bGVzID09PSBmdWxseUNvbnZlcnRlZFJ1bGVzICYmIHBhcnRpYWxseUNvbnZlcnRlZFJ1bGVzID09PSAwO1xuXG4gICAgICAgIHJlc3VsdC5ydWxlcy5mb3JFYWNoKHJ1bGUgPT4ge1xuICAgICAgICAgIGlmIChydWxlLmlzRGVzY2VuZGFudCkge1xuICAgICAgICAgICAgaWYgKHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGFsbERlc2NlbmRhbnRSdWxlcy5wdXNoKHJ1bGUpO1xuICAgICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChydWxlLmZ1bGx5Q29udmVydGVkICYmIHJ1bGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXTtcbiAgICAgICAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICAgICAgICBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGV4aXN0aW5nLCBydWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNzc0NsYXNzTWFwW3J1bGUuY2xhc3NOYW1lXSA9IGJ1aWxkQ2xhc3NJbmZvRnJvbVJ1bGUocnVsZSwgZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuZGVjbGFyYXRpb25zLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUucGFydGlhbENvbnZlcnNpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdHMuc3R5bGVzQ29udmVydGVkICs9IHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGg7XG4gICAgICAgICAgICBsb2dnZXIudmVyYm9zZShgICBSdWxlIC4ke3J1bGUuY2xhc3NOYW1lfTogcGFydGlhbCBjb252ZXJzaW9uICgke3J1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGh9LyR7cnVsZS5kZWNsYXJhdGlvbnMubGVuZ3RofSBkZWNsYXJhdGlvbnMpYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjc3NGaWxlUmVzdWx0cy5zZXQoZmlsZS5wYXRoLCB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICBuZXdDb250ZW50OiByZXN1bHQuY3NzLFxuICAgICAgICAgIHJ1bGVzOiByZXN1bHQucnVsZXMsXG4gICAgICAgICAgY2FuRGVsZXRlOiByZXN1bHQuY2FuRGVsZXRlLFxuICAgICAgICAgIGhhc0NoYW5nZXM6IHJlc3VsdC5oYXNDaGFuZ2VzLFxuICAgICAgICAgIGZ1bGx5Q29udmVydGlibGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzdWx0cy53YXJuaW5ncyArPSByZXN1bHQud2FybmluZ3MubGVuZ3RoO1xuXG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGBBbmFseXplZCAke2ZpbGUucGF0aH06YCk7XG4gICAgICAgIGxvZ2dlci52ZXJib3NlKGAgIC0gVG90YWwgcnVsZXM6ICR7dG90YWxSdWxlc31gKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgLSBGdWxseSBjb252ZXJ0ZWQgcnVsZXM6ICR7ZnVsbHlDb252ZXJ0ZWRSdWxlc31gKTtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYCAgLSBQYXJ0aWFsbHkgY29udmVydGVkIHJ1bGVzOiAke3BhcnRpYWxseUNvbnZlcnRlZFJ1bGVzfWApO1xuICAgICAgICBsb2dnZXIudmVyYm9zZShgICAtIEZ1bGx5IGNvbnZlcnRpYmxlOiAke2Z1bGx5Q29udmVydGlibGV9YCk7XG5cbiAgICAgICAgcmVzdWx0Lndhcm5pbmdzLmZvckVhY2god2FybmluZyA9PiB7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYOKaoO+4jyAgJHtmaWxlLnBhdGh9OiAke3dhcm5pbmd9YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBhbmFseXplICR7ZmlsZS5wYXRofTpgLCBlcnJvcik7XG4gICAgICAgIHJlc3VsdHMud2FybmluZ3MrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2dnZXIuaW5mbygnXFxu4pqb77iPICBQaGFzZSAyOiBUcmFuc2Zvcm1pbmcgUmVhY3QgY29tcG9uZW50cy4uLicpO1xuXG4gIGNvbnN0IGpzeEZpbGVSZXN1bHRzOiBNYXA8c3RyaW5nLCB7XG4gICAgY29udGVudDogc3RyaW5nO1xuICAgIG5ld0NvbnRlbnQ6IHN0cmluZztcbiAgICBoYXNDaGFuZ2VzOiBib29sZWFuO1xuICB9PiA9IG5ldyBNYXAoKTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMuZmlsdGVyKGYgPT4gZi50eXBlID09PSAnanN4JykpIHtcbiAgICB0cnkge1xuICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZS5wYXRoLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsQ29udGVudCA9IGNvbnRlbnQ7XG4gICAgICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgbGV0IGZpbGVXYXJuaW5nczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgaWYgKCFvcHRpb25zLnNraXBJbmxpbmUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc3hSZXN1bHQgPSBqc3hQYXJzZXIucGFyc2UoY29udGVudCwgZmlsZS5wYXRoKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAoanN4UmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBqc3hSZXN1bHQuY29kZTtcbiAgICAgICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICAgICAgcmVzdWx0cy5zdHlsZXNDb252ZXJ0ZWQgKz0ganN4UmVzdWx0LnRyYW5zZm9ybWF0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChzdW0sIHQpID0+IHN1bSArIHQuY2xhc3Nlcy5sZW5ndGgsIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaCguLi5qc3hSZXN1bHQud2FybmluZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgRmFpbGVkIHRvIHBhcnNlIEpTWCBpbmxpbmUgc3R5bGVzIGluICR7ZmlsZS5wYXRofTogJHtlcnJvcn1gKTtcbiAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaChgSlNYIHBhcnNlIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy5za2lwSW50ZXJuYWwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpbnRlcm5hbFJlc3VsdCA9IGF3YWl0IGNzc1BhcnNlci5wYXJzZUludGVybmFsQ1NTKGNvbnRlbnQsIGZpbGUucGF0aCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKGludGVybmFsUmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBpbnRlcm5hbFJlc3VsdC5odG1sO1xuICAgICAgICAgICAgaGFzQ2hhbmdlcyA9IHRydWU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGludGVybmFsUmVzdWx0LnJ1bGVzLmZvckVhY2gocnVsZSA9PiB7XG4gICAgICAgICAgICAgIGlmIChydWxlLmlzRGVzY2VuZGFudCkge1xuICAgICAgICAgICAgICAgIGlmIChydWxlLmNvbnZlcnRlZENsYXNzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgYWxsRGVzY2VuZGFudFJ1bGVzLnB1c2gocnVsZSk7XG4gICAgICAgICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJ1bGUuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwICYmIHJ1bGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBjc3NDbGFzc01hcFtydWxlLmNsYXNzTmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICBtZXJnZVJ1bGVJbnRvQ2xhc3NJbmZvKGV4aXN0aW5nLCBydWxlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY3NzQ2xhc3NNYXBbcnVsZS5jbGFzc05hbWVdID0gYnVpbGRDbGFzc0luZm9Gcm9tUnVsZShydWxlLCBmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnN0eWxlc0NvbnZlcnRlZCArPSBydWxlLmRlY2xhcmF0aW9ucy5sZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaCguLi5pbnRlcm5hbFJlc3VsdC53YXJuaW5ncyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGxvZ2dlci53YXJuKGBGYWlsZWQgdG8gcGFyc2UgaW50ZXJuYWwgQ1NTIGluICR7ZmlsZS5wYXRofTogJHtlcnJvcn1gKTtcbiAgICAgICAgICBmaWxlV2FybmluZ3MucHVzaChgSW50ZXJuYWwgQ1NTIHBhcnNlIGVycm9yOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGpzeEZpbGVSZXN1bHRzLnNldChmaWxlLnBhdGgsIHtcbiAgICAgICAgY29udGVudDogb3JpZ2luYWxDb250ZW50LFxuICAgICAgICBuZXdDb250ZW50OiBjb250ZW50LFxuICAgICAgICBoYXNDaGFuZ2VzXG4gICAgICB9KTtcblxuICAgICAgcmVzdWx0cy53YXJuaW5ncyArPSBmaWxlV2FybmluZ3MubGVuZ3RoO1xuXG4gICAgICBmaWxlV2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYOKaoO+4jyAgJHtmaWxlLnBhdGh9OiAke3dhcm5pbmd9YCk7XG4gICAgICB9KTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzICR7ZmlsZS5wYXRofTpgLCBlcnJvcik7XG4gICAgICByZXN1bHRzLndhcm5pbmdzKys7XG4gICAgfVxuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKGNzc0NsYXNzTWFwKS5sZW5ndGggPiAwKSB7XG4gICAgbG9nZ2VyLmluZm8oJ1xcbvCflIQgUGhhc2UgMzogUmVwbGFjaW5nIGNsYXNzTmFtZSByZWZlcmVuY2VzLi4uJyk7XG5cbiAgICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgZmlsZVJlc3VsdF0gb2YganN4RmlsZVJlc3VsdHMpIHtcbiAgICAgIGxldCBjb250ZW50ID0gZmlsZVJlc3VsdC5uZXdDb250ZW50O1xuICAgICAgbGV0IGhhc0NoYW5nZXMgPSBmaWxlUmVzdWx0Lmhhc0NoYW5nZXM7XG5cbiAgICAgIGNvbnN0IHJlcGxhY2VtZW50UmVzdWx0ID0gcmVwbGFjZUNsYXNzTmFtZVJlZmVyZW5jZXMoY29udGVudCwgY3NzQ2xhc3NNYXApO1xuICAgICAgaWYgKHJlcGxhY2VtZW50UmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgICAgY29udGVudCA9IHJlcGxhY2VtZW50UmVzdWx0LmNvZGU7XG4gICAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgICByZXN1bHRzLmNsYXNzZXNSZXBsYWNlZCArPSByZXBsYWNlbWVudFJlc3VsdC5yZXBsYWNlbWVudHM7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIudmVyYm9zZShgUmVwbGFjZWQgJHtyZXBsYWNlbWVudFJlc3VsdC5yZXBsYWNlbWVudHN9IGNsYXNzIHJlZmVyZW5jZXMgaW4gJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX1gKTtcbiAgICAgIH1cblxuICAgICAganN4RmlsZVJlc3VsdHMuc2V0KGZpbGVQYXRoLCB7XG4gICAgICAgIC4uLmZpbGVSZXN1bHQsXG4gICAgICAgIG5ld0NvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGhhc0NoYW5nZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxEZXNjZW5kYW50UnVsZXMubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci5pbmZvKCdcXG7wn4yzIFBoYXNlIDMuNTogQXBwbHlpbmcgZGVzY2VuZGFudCBzZWxlY3RvciBydWxlcy4uLicpO1xuXG4gICAgZm9yIChjb25zdCBbZmlsZVBhdGgsIGZpbGVSZXN1bHRdIG9mIGpzeEZpbGVSZXN1bHRzKSB7XG4gICAgICBsZXQgY29udGVudCA9IGZpbGVSZXN1bHQubmV3Q29udGVudDtcbiAgICAgIGxldCBoYXNDaGFuZ2VzID0gZmlsZVJlc3VsdC5oYXNDaGFuZ2VzO1xuXG4gICAgICBjb25zdCBkZXNjZW5kYW50UmVzdWx0ID0gdHJhbnNmb3JtRGVzY2VuZGFudFNlbGVjdG9ycyhjb250ZW50LCBhbGxEZXNjZW5kYW50UnVsZXMpO1xuICAgICAgaWYgKGRlc2NlbmRhbnRSZXN1bHQuaGFzQ2hhbmdlcykge1xuICAgICAgICBjb250ZW50ID0gZGVzY2VuZGFudFJlc3VsdC5jb2RlO1xuICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgcmVzdWx0cy5jbGFzc2VzUmVwbGFjZWQgKz0gZGVzY2VuZGFudFJlc3VsdC50cmFuc2Zvcm1hdGlvbnM7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIudmVyYm9zZShgQXBwbGllZCAke2Rlc2NlbmRhbnRSZXN1bHQudHJhbnNmb3JtYXRpb25zfSBkZXNjZW5kYW50IHRyYW5zZm9ybWF0aW9ucyBpbiAke3BhdGguYmFzZW5hbWUoZmlsZVBhdGgpfWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVzY2VuZGFudFJlc3VsdC53YXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdHMud2FybmluZ3MgKz0gZGVzY2VuZGFudFJlc3VsdC53YXJuaW5ncy5sZW5ndGg7XG4gICAgICAgIGRlc2NlbmRhbnRSZXN1bHQud2FybmluZ3MuZm9yRWFjaCh3YXJuaW5nID0+IHtcbiAgICAgICAgICBsb2dnZXIudmVyYm9zZShg4pqg77iPICAke2ZpbGVQYXRofTogJHt3YXJuaW5nfWApO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAganN4RmlsZVJlc3VsdHMuc2V0KGZpbGVQYXRoLCB7XG4gICAgICAgIC4uLmZpbGVSZXN1bHQsXG4gICAgICAgIG5ld0NvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGhhc0NoYW5nZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2dlci5pbmZvKCdcXG7wn5K+IFBoYXNlIDQ6IFdyaXRpbmcgY2hhbmdlcy4uLicpO1xuXG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBqc3hGaWxlUmVzdWx0cykge1xuICAgIGlmIChmaWxlUmVzdWx0Lmhhc0NoYW5nZXMpIHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBmaWxlV3JpdGVyLndyaXRlRmlsZShmaWxlUGF0aCwgZmlsZVJlc3VsdC5uZXdDb250ZW50LCBmaWxlUmVzdWx0LmNvbnRlbnQpO1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFvcHRpb25zLnNraXBFeHRlcm5hbCkge1xuICAgIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBmaWxlUmVzdWx0XSBvZiBjc3NGaWxlUmVzdWx0cykge1xuICAgICAgaWYgKCFmaWxlUmVzdWx0Lmhhc0NoYW5nZXMpIGNvbnRpbnVlO1xuXG4gICAgICBpZiAoZmlsZVJlc3VsdC5jYW5EZWxldGUgJiYgb3B0aW9ucy5kZWxldGVDc3MpIHtcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpbGVXcml0ZXIuZGVsZXRlRmlsZShmaWxlUGF0aCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYPCfl5HvuI8gIERlbGV0ZWQgJHtwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKX0gKGFsbCBydWxlcyBjb252ZXJ0ZWQpYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmlsZVJlc3VsdC5jYW5EZWxldGUgJiYgIW9wdGlvbnMuZGVsZXRlQ3NzKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGDihLnvuI8gICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9IGlzIG5vdyBlbXB0eSAodXNlIC0tZGVsZXRlLWNzcyB0byByZW1vdmUpYCk7XG4gICAgICB9IGVsc2UgaWYgKGZpbGVSZXN1bHQuZnVsbHlDb252ZXJ0aWJsZSkge1xuICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgZmlsZVdyaXRlci53cml0ZUZpbGUoZmlsZVBhdGgsIGZpbGVSZXN1bHQubmV3Q29udGVudCwgZmlsZVJlc3VsdC5jb250ZW50KTtcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXN1bHRzLmZpbGVzTW9kaWZpZWQrKztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGZpbGVXcml0ZXIud3JpdGVGaWxlKGZpbGVQYXRoLCBmaWxlUmVzdWx0Lm5ld0NvbnRlbnQsIGZpbGVSZXN1bHQuY29udGVudCk7XG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgcmVzdWx0cy5maWxlc01vZGlmaWVkKys7XG4gICAgICAgICAgY29uc3QgY29udmVydGVkQ291bnQgPSBmaWxlUmVzdWx0LnJ1bGVzLmZpbHRlcihyID0+IHIuY29udmVydGVkQ2xhc3Nlcy5sZW5ndGggPiAwKS5sZW5ndGg7XG4gICAgICAgICAgY29uc3QgdG90YWxDb3VudCA9IGZpbGVSZXN1bHQucnVsZXMubGVuZ3RoO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGDwn5OdICR7cGF0aC5iYXNlbmFtZShmaWxlUGF0aCl9OiBjb252ZXJ0ZWQgJHtjb252ZXJ0ZWRDb3VudH0vJHt0b3RhbENvdW50fSBydWxlcyAodW5jb252ZXJ0ZWQgcHJvcGVydGllcyBrZXB0KWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2xhc3NJbmZvRnJvbVJ1bGUocnVsZTogQ1NTUnVsZSwgc291cmNlRmlsZTogc3RyaW5nKTogQ2xhc3NJbmZvIHtcbiAgcmV0dXJuIHtcbiAgICB1dGlsaXRpZXM6IHJ1bGUudXRpbGl0aWVzLm1hcCh1ID0+ICh7XG4gICAgICB2YWx1ZTogdS52YWx1ZSxcbiAgICAgIHZhcmlhbnRzOiBub3JtYWxpemVWYXJpYW50T3JkZXIoWy4uLnUudmFyaWFudHNdKSxcbiAgICAgIGNzc1Byb3BlcnR5OiB1LmNzc1Byb3BlcnR5LFxuICAgICAgc3BlY2lmaWNpdHk6IHUuc3BlY2lmaWNpdHksXG4gICAgICBzb3VyY2VPcmRlcjogdS5zb3VyY2VPcmRlcixcbiAgICAgIG9yaWdpbmFsU2VsZWN0b3I6IHJ1bGUuc2VsZWN0b3JcbiAgICB9KSksXG4gICAgc291cmNlRmlsZSxcbiAgICBmdWxseUNvbnZlcnRpYmxlOiB0cnVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlUnVsZUludG9DbGFzc0luZm8oaW5mbzogQ2xhc3NJbmZvLCBydWxlOiBDU1NSdWxlKTogdm9pZCB7XG4gIGZvciAoY29uc3QgdXRpbGl0eSBvZiBydWxlLnV0aWxpdGllcykge1xuICAgIGNvbnN0IHV0aWxpdHlXaXRoTWV0YTogVXRpbGl0eVdpdGhNZXRhID0ge1xuICAgICAgdmFsdWU6IHV0aWxpdHkudmFsdWUsXG4gICAgICB2YXJpYW50czogbm9ybWFsaXplVmFyaWFudE9yZGVyKFsuLi51dGlsaXR5LnZhcmlhbnRzXSksXG4gICAgICBjc3NQcm9wZXJ0eTogdXRpbGl0eS5jc3NQcm9wZXJ0eSxcbiAgICAgIHNwZWNpZmljaXR5OiB1dGlsaXR5LnNwZWNpZmljaXR5LFxuICAgICAgc291cmNlT3JkZXI6IHV0aWxpdHkuc291cmNlT3JkZXIsXG4gICAgICBvcmlnaW5hbFNlbGVjdG9yOiBydWxlLnNlbGVjdG9yXG4gICAgfTtcbiAgICBcbiAgICBpbmZvLnV0aWxpdGllcy5wdXNoKHV0aWxpdHlXaXRoTWV0YSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZW1ibGVUYWlsd2luZENsYXNzZXMoaW5mbzogQ2xhc3NJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgeyByZXNvbHZlZCB9ID0gcmVzb2x2ZUNvbmZsaWN0cyhpbmZvLnV0aWxpdGllcywgZmFsc2UpO1xuICByZXR1cm4gcmVzb2x2ZWRVdGlsaXRpZXNUb1N0cmluZ3MocmVzb2x2ZWQpLmpvaW4oJyAnKTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZVJlZmVyZW5jZXMoXG4gIGNvZGU6IHN0cmluZywgXG4gIGNsYXNzTWFwOiBDU1NDbGFzc01hcFxuKTogeyBcbiAgY29kZTogc3RyaW5nOyBcbiAgaGFzQ2hhbmdlczogYm9vbGVhbjsgXG4gIHJlcGxhY2VtZW50czogbnVtYmVyIFxufSB7XG4gIGxldCBoYXNDaGFuZ2VzID0gZmFsc2U7XG4gIGxldCByZXBsYWNlbWVudHMgPSAwO1xuICBsZXQgbW9kaWZpZWRDb2RlID0gY29kZTtcblxuICBPYmplY3QuZW50cmllcyhjbGFzc01hcCkuZm9yRWFjaCgoW29sZENsYXNzLCBpbmZvXSkgPT4ge1xuICAgIGlmICghaW5mby5mdWxseUNvbnZlcnRpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFpbHdpbmRDbGFzc1N0cmluZyA9IGFzc2VtYmxlVGFpbHdpbmRDbGFzc2VzKGluZm8pO1xuICAgIFxuICAgIGNvbnN0IHBhdHRlcm4xID0gbmV3IFJlZ0V4cChgY2xhc3NOYW1lPVwiJHtvbGRDbGFzc31cImAsICdnJyk7XG4gICAgaWYgKHBhdHRlcm4xLnRlc3QobW9kaWZpZWRDb2RlKSkge1xuICAgICAgbW9kaWZpZWRDb2RlID0gbW9kaWZpZWRDb2RlLnJlcGxhY2UocGF0dGVybjEsIGBjbGFzc05hbWU9XCIke3RhaWx3aW5kQ2xhc3NTdHJpbmd9XCJgKTtcbiAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgcmVwbGFjZW1lbnRzKys7XG4gICAgICBsb2dnZXIudmVyYm9zZShgUmVwbGFjZWQgY2xhc3NOYW1lPVwiJHtvbGRDbGFzc31cIiB3aXRoIFwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybjIgPSBuZXcgUmVnRXhwKGBjbGFzc05hbWU9XFxcXHtcIiR7b2xkQ2xhc3N9XCJcXFxcfWAsICdnJyk7XG4gICAgaWYgKHBhdHRlcm4yLnRlc3QobW9kaWZpZWRDb2RlKSkge1xuICAgICAgbW9kaWZpZWRDb2RlID0gbW9kaWZpZWRDb2RlLnJlcGxhY2UocGF0dGVybjIsIGBjbGFzc05hbWU9XCIke3RhaWx3aW5kQ2xhc3NTdHJpbmd9XCJgKTtcbiAgICAgIGhhc0NoYW5nZXMgPSB0cnVlO1xuICAgICAgcmVwbGFjZW1lbnRzKys7XG4gICAgICBsb2dnZXIudmVyYm9zZShgUmVwbGFjZWQgY2xhc3NOYW1lPXtcIiR7b2xkQ2xhc3N9XCJ9IHdpdGggXCIke3RhaWx3aW5kQ2xhc3NTdHJpbmd9XCJgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXR0ZXJuMyA9IG5ldyBSZWdFeHAoYGNsYXNzTmFtZT1cXFxce1xcYFxcXFxzKiR7b2xkQ2xhc3N9XFxcXHMqXFxgXFxcXH1gLCAnZycpO1xuICAgIGlmIChwYXR0ZXJuMy50ZXN0KG1vZGlmaWVkQ29kZSkpIHtcbiAgICAgIG1vZGlmaWVkQ29kZSA9IG1vZGlmaWVkQ29kZS5yZXBsYWNlKHBhdHRlcm4zLCBgY2xhc3NOYW1lPVwiJHt0YWlsd2luZENsYXNzU3RyaW5nfVwiYCk7XG4gICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgIHJlcGxhY2VtZW50cysrO1xuICAgICAgbG9nZ2VyLnZlcmJvc2UoYFJlcGxhY2VkIGNsYXNzTmFtZT17XFxgJHtvbGRDbGFzc31cXGB9IHdpdGggXCIke3RhaWx3aW5kQ2xhc3NTdHJpbmd9XCJgKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB7IGNvZGU6IG1vZGlmaWVkQ29kZSwgaGFzQ2hhbmdlcywgcmVwbGFjZW1lbnRzIH07XG59Il19
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Specificity } from './specificityCalculator';
|
|
2
|
+
export interface UtilityWithMeta {
|
|
3
|
+
value: string;
|
|
4
|
+
variants: string[];
|
|
5
|
+
cssProperty: string;
|
|
6
|
+
specificity: Specificity;
|
|
7
|
+
sourceOrder: number;
|
|
8
|
+
originalSelector: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ResolvedUtility {
|
|
11
|
+
value: string;
|
|
12
|
+
variants: string[];
|
|
13
|
+
cssProperty: string;
|
|
14
|
+
}
|
|
15
|
+
export interface ConflictInfo {
|
|
16
|
+
winner: UtilityWithMeta;
|
|
17
|
+
losers: UtilityWithMeta[];
|
|
18
|
+
property: string;
|
|
19
|
+
variantKey: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function groupUtilitiesByPropertyAndVariant(utilities: UtilityWithMeta[]): Map<string, Map<string, UtilityWithMeta[]>>;
|
|
22
|
+
export declare function resolveConflicts(utilities: UtilityWithMeta[], verbose?: boolean): {
|
|
23
|
+
resolved: ResolvedUtility[];
|
|
24
|
+
conflicts: ConflictInfo[];
|
|
25
|
+
};
|
|
26
|
+
export declare function resolveConflictsForElement(utilities: UtilityWithMeta[], verbose?: boolean): ResolvedUtility[];
|
|
27
|
+
export declare function mergeAndResolveUtilities(existingUtilities: UtilityWithMeta[], newUtilities: UtilityWithMeta[], verbose?: boolean): {
|
|
28
|
+
utilities: UtilityWithMeta[];
|
|
29
|
+
conflicts: ConflictInfo[];
|
|
30
|
+
};
|
|
31
|
+
export declare function buildUtilityWithMeta(value: string, variants: string[], cssProperty: string, specificity: Specificity, sourceOrder: number, originalSelector: string): UtilityWithMeta;
|
|
32
|
+
export declare function groupUtilitiesByElement(utilities: Array<{
|
|
33
|
+
utility: UtilityWithMeta;
|
|
34
|
+
elementKey: string;
|
|
35
|
+
}>): Map<string, UtilityWithMeta[]>;
|
|
36
|
+
export declare function resolveConflictsForAllElements(utilitiesByElement: Map<string, UtilityWithMeta[]>, verbose?: boolean): Map<string, ResolvedUtility[]>;
|
|
37
|
+
export declare function sortUtilitiesForOutput(utilities: ResolvedUtility[]): ResolvedUtility[];
|
|
38
|
+
export declare function resolvedUtilityToString(utility: ResolvedUtility): string;
|
|
39
|
+
export declare function resolvedUtilitiesToStrings(utilities: ResolvedUtility[]): string[];
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.groupUtilitiesByPropertyAndVariant = groupUtilitiesByPropertyAndVariant;
|
|
4
|
+
exports.resolveConflicts = resolveConflicts;
|
|
5
|
+
exports.resolveConflictsForElement = resolveConflictsForElement;
|
|
6
|
+
exports.mergeAndResolveUtilities = mergeAndResolveUtilities;
|
|
7
|
+
exports.buildUtilityWithMeta = buildUtilityWithMeta;
|
|
8
|
+
exports.groupUtilitiesByElement = groupUtilitiesByElement;
|
|
9
|
+
exports.resolveConflictsForAllElements = resolveConflictsForAllElements;
|
|
10
|
+
exports.sortUtilitiesForOutput = sortUtilitiesForOutput;
|
|
11
|
+
exports.resolvedUtilityToString = resolvedUtilityToString;
|
|
12
|
+
exports.resolvedUtilitiesToStrings = resolvedUtilitiesToStrings;
|
|
13
|
+
const logger_1 = require("./logger");
|
|
14
|
+
const specificityCalculator_1 = require("./specificityCalculator");
|
|
15
|
+
const variantAssembler_1 = require("./variantAssembler");
|
|
16
|
+
const VARIANT_SEPARATOR = '\x00';
|
|
17
|
+
function createVariantKey(variants) {
|
|
18
|
+
const normalized = (0, variantAssembler_1.normalizeVariantOrder)(variants);
|
|
19
|
+
return normalized.length > 0 ? normalized.join(':') : VARIANT_SEPARATOR;
|
|
20
|
+
}
|
|
21
|
+
function groupUtilitiesByPropertyAndVariant(utilities) {
|
|
22
|
+
const groups = new Map();
|
|
23
|
+
for (const utility of utilities) {
|
|
24
|
+
const property = utility.cssProperty;
|
|
25
|
+
const variantKey = createVariantKey(utility.variants);
|
|
26
|
+
if (!groups.has(property)) {
|
|
27
|
+
groups.set(property, new Map());
|
|
28
|
+
}
|
|
29
|
+
const propertyGroup = groups.get(property);
|
|
30
|
+
if (!propertyGroup.has(variantKey)) {
|
|
31
|
+
propertyGroup.set(variantKey, []);
|
|
32
|
+
}
|
|
33
|
+
propertyGroup.get(variantKey).push(utility);
|
|
34
|
+
}
|
|
35
|
+
return groups;
|
|
36
|
+
}
|
|
37
|
+
function resolveConflicts(utilities, verbose = false) {
|
|
38
|
+
const groups = groupUtilitiesByPropertyAndVariant(utilities);
|
|
39
|
+
const resolved = [];
|
|
40
|
+
const conflicts = [];
|
|
41
|
+
for (const [property, variantGroups] of groups) {
|
|
42
|
+
for (const [variantKey, utilitiesInGroup] of variantGroups) {
|
|
43
|
+
if (utilitiesInGroup.length === 1) {
|
|
44
|
+
const util = utilitiesInGroup[0];
|
|
45
|
+
resolved.push({
|
|
46
|
+
value: util.value,
|
|
47
|
+
variants: util.variants,
|
|
48
|
+
cssProperty: util.cssProperty
|
|
49
|
+
});
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const sorted = [...utilitiesInGroup].sort((a, b) => {
|
|
53
|
+
const specCompare = (0, specificityCalculator_1.compareSpecificity)(b.specificity, a.specificity);
|
|
54
|
+
if (specCompare !== 0)
|
|
55
|
+
return specCompare;
|
|
56
|
+
return b.sourceOrder - a.sourceOrder;
|
|
57
|
+
});
|
|
58
|
+
const winner = sorted[0];
|
|
59
|
+
const losers = sorted.slice(1);
|
|
60
|
+
resolved.push({
|
|
61
|
+
value: winner.value,
|
|
62
|
+
variants: winner.variants,
|
|
63
|
+
cssProperty: winner.cssProperty
|
|
64
|
+
});
|
|
65
|
+
if (losers.length > 0) {
|
|
66
|
+
conflicts.push({
|
|
67
|
+
winner,
|
|
68
|
+
losers,
|
|
69
|
+
property,
|
|
70
|
+
variantKey: variantKey === VARIANT_SEPARATOR ? '(base)' : variantKey
|
|
71
|
+
});
|
|
72
|
+
if (verbose) {
|
|
73
|
+
const loserNames = losers.map(l => l.value).join(', ');
|
|
74
|
+
logger_1.logger.verbose(`Conflict in ${property} (${variantKey === VARIANT_SEPARATOR ? 'base' : variantKey}):`);
|
|
75
|
+
logger_1.logger.verbose(` Winner: ${winner.value} (specificity: ${winner.specificity.id}/${winner.specificity.class}/${winner.specificity.element}, order: ${winner.sourceOrder})`);
|
|
76
|
+
logger_1.logger.verbose(` Discarded: ${loserNames}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { resolved, conflicts };
|
|
82
|
+
}
|
|
83
|
+
function resolveConflictsForElement(utilities, verbose = false) {
|
|
84
|
+
const { resolved, conflicts } = resolveConflicts(utilities, verbose);
|
|
85
|
+
return resolved;
|
|
86
|
+
}
|
|
87
|
+
function mergeAndResolveUtilities(existingUtilities, newUtilities, verbose = false) {
|
|
88
|
+
const allUtilities = [...existingUtilities, ...newUtilities];
|
|
89
|
+
const { resolved, conflicts } = resolveConflicts(allUtilities, verbose);
|
|
90
|
+
return { utilities: allUtilities, conflicts };
|
|
91
|
+
}
|
|
92
|
+
function buildUtilityWithMeta(value, variants, cssProperty, specificity, sourceOrder, originalSelector) {
|
|
93
|
+
return {
|
|
94
|
+
value,
|
|
95
|
+
variants: (0, variantAssembler_1.normalizeVariantOrder)(variants),
|
|
96
|
+
cssProperty,
|
|
97
|
+
specificity,
|
|
98
|
+
sourceOrder,
|
|
99
|
+
originalSelector
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function groupUtilitiesByElement(utilities) {
|
|
103
|
+
const groups = new Map();
|
|
104
|
+
for (const { utility, elementKey } of utilities) {
|
|
105
|
+
if (!groups.has(elementKey)) {
|
|
106
|
+
groups.set(elementKey, []);
|
|
107
|
+
}
|
|
108
|
+
groups.get(elementKey).push(utility);
|
|
109
|
+
}
|
|
110
|
+
return groups;
|
|
111
|
+
}
|
|
112
|
+
function resolveConflictsForAllElements(utilitiesByElement, verbose = false) {
|
|
113
|
+
const results = new Map();
|
|
114
|
+
for (const [elementKey, utilities] of utilitiesByElement) {
|
|
115
|
+
const resolved = resolveConflictsForElement(utilities, verbose);
|
|
116
|
+
results.set(elementKey, resolved);
|
|
117
|
+
}
|
|
118
|
+
return results;
|
|
119
|
+
}
|
|
120
|
+
function sortUtilitiesForOutput(utilities) {
|
|
121
|
+
return [...utilities].sort((a, b) => {
|
|
122
|
+
const aVariantKey = createVariantKey(a.variants);
|
|
123
|
+
const bVariantKey = createVariantKey(b.variants);
|
|
124
|
+
if (aVariantKey !== bVariantKey) {
|
|
125
|
+
return aVariantKey.localeCompare(bVariantKey);
|
|
126
|
+
}
|
|
127
|
+
return a.value.localeCompare(b.value);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
function resolvedUtilityToString(utility) {
|
|
131
|
+
if (utility.variants.length === 0) {
|
|
132
|
+
return utility.value;
|
|
133
|
+
}
|
|
134
|
+
const prefix = utility.variants.join(':');
|
|
135
|
+
return `${prefix}:${utility.value}`;
|
|
136
|
+
}
|
|
137
|
+
function resolvedUtilitiesToStrings(utilities) {
|
|
138
|
+
return sortUtilitiesForOutput(utilities).map(resolvedUtilityToString);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmxpY3RSZXNvbHZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9jb25mbGljdFJlc29sdmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0NBLGdGQXVCQztBQUVELDRDQXNEQztBQUVELGdFQU9DO0FBRUQsNERBU0M7QUFFRCxvREFnQkM7QUFFRCwwREFnQkM7QUFFRCx3RUFZQztBQUVELHdEQVdDO0FBRUQsMERBT0M7QUFFRCxnRUFFQztBQWpORCxxQ0FBa0M7QUFDbEMsbUVBQTRGO0FBRTVGLHlEQUEyRDtBQXdCM0QsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFFakMsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFrQjtJQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFBLHdDQUFxQixFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDO0FBQzFFLENBQUM7QUFFRCxTQUFnQixrQ0FBa0MsQ0FDaEQsU0FBNEI7SUFFNUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQTBDLENBQUM7SUFFakUsS0FBSyxNQUFNLE9BQU8sSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FB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QUMsQ0FBQztRQUVqRCxJQUFJLFdBQVcsS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQWdCLHVCQUF1QixDQUFDLE9BQXdCO0lBQzlELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbEMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxPQUFPLEdBQUcsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxDQUFDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsU0FBNEI7SUFDckUsT0FBTyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUN4RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgU3BlY2lmaWNpdHksIGNvbXBhcmVTcGVjaWZpY2l0eSwgWkVST19TUEVDSUZJQ0lUWSB9IGZyb20gJy4vc3BlY2lmaWNpdHlDYWxjdWxhdG9yJztcbmltcG9ydCB7IGdldFByb3BlcnR5Rm9yVXRpbGl0eSwgcHJvcGVydGllc0NvbmZsaWN0LCBnZXRDb25mbGljdEdyb3VwIH0gZnJvbSAnLi9wcm9wZXJ0eU1hcHBlcic7XG5pbXBvcnQgeyBub3JtYWxpemVWYXJpYW50T3JkZXIgfSBmcm9tICcuL3ZhcmlhbnRBc3NlbWJsZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFV0aWxpdHlXaXRoTWV0YSB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHZhcmlhbnRzOiBzdHJpbmdbXTtcbiAgY3NzUHJvcGVydHk6IHN0cmluZztcbiAgc3BlY2lmaWNpdHk6IFNwZWNpZmljaXR5O1xuICBzb3VyY2VPcmRlcjogbnVtYmVyO1xuICBvcmlnaW5hbFNlbGVjdG9yOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRVdGlsaXR5IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgdmFyaWFudHM6IHN0cmluZ1tdO1xuICBjc3NQcm9wZXJ0eTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbmZsaWN0SW5mbyB7XG4gIHdpbm5lcjogVXRpbGl0eVdpdGhNZXRhO1xuICBsb3NlcnM6IFV0aWxpdHlXaXRoTWV0YVtdO1xuICBwcm9wZXJ0eTogc3RyaW5nO1xuICB2YXJpYW50S2V5OiBzdHJpbmc7XG59XG5cbmNvbnN0IFZBUklBTlRfU0VQQVJBVE9SID0gJ1xceDAwJztcblxuZnVuY3Rpb24gY3JlYXRlVmFyaWFudEtleSh2YXJpYW50czogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplVmFyaWFudE9yZGVyKHZhcmlhbnRzKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQubGVuZ3RoID4gMCA/IG5vcm1hbGl6ZWQuam9pbignOicpIDogVkFSSUFOVF9TRVBBUkFUT1I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncm91cFV0aWxpdGllc0J5UHJvcGVydHlBbmRWYXJpYW50KFxuICB1dGlsaXRpZXM6IFV0aWxpdHlXaXRoTWV0YVtdXG4pOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBVdGlsaXR5V2l0aE1ldGFbXT4+IHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFV0aWxpdHlXaXRoTWV0YVtdPj4oKTtcbiAgXG4gIGZvciAoY29uc3QgdXRpbGl0eSBvZiB1dGlsaXRpZXMpIHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHV0aWxpdHkuY3NzUHJvcGVydHk7XG4gICAgY29uc3QgdmFyaWFudEtleSA9IGNyZWF0ZVZhcmlhbnRLZXkodXRpbGl0eS52YXJpYW50cyk7XG4gICAgXG4gICAgaWYgKCFncm91cHMuaGFzKHByb3BlcnR5KSkge1xuICAgICAgZ3JvdXBzLnNldChwcm9wZXJ0eSwgbmV3IE1hcCgpKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgcHJvcGVydHlHcm91cCA9IGdyb3Vwcy5nZXQocHJvcGVydHkpITtcbiAgICBcbiAgICBpZiAoIXByb3BlcnR5R3JvdXAuaGFzKHZhcmlhbnRLZXkpKSB7XG4gICAgICBwcm9wZXJ0eUdyb3VwLnNldCh2YXJpYW50S2V5LCBbXSk7XG4gICAgfVxuICAgIFxuICAgIHByb3BlcnR5R3JvdXAuZ2V0KHZhcmlhbnRLZXkpIS5wdXNoKHV0aWxpdHkpO1xuICB9XG4gIFxuICByZXR1cm4gZ3JvdXBzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbmZsaWN0cyhcbiAgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aE1ldGFbXSxcbiAgdmVyYm9zZSA9IGZhbHNlXG4pOiB7IHJlc29sdmVkOiBSZXNvbHZlZFV0aWxpdHlbXTsgY29uZmxpY3RzOiBDb25mbGljdEluZm9bXSB9IHtcbiAgY29uc3QgZ3JvdXBzID0gZ3JvdXBVdGlsaXRpZXNCeVByb3BlcnR5QW5kVmFyaWFudCh1dGlsaXRpZXMpO1xuICBjb25zdCByZXNvbHZlZDogUmVzb2x2ZWRVdGlsaXR5W10gPSBbXTtcbiAgY29uc3QgY29uZmxpY3RzOiBDb25mbGljdEluZm9bXSA9IFtdO1xuICBcbiAgZm9yIChjb25zdCBbcHJvcGVydHksIHZhcmlhbnRHcm91cHNdIG9mIGdyb3Vwcykge1xuICAgIGZvciAoY29uc3QgW3ZhcmlhbnRLZXksIHV0aWxpdGllc0luR3JvdXBdIG9mIHZhcmlhbnRHcm91cHMpIHtcbiAgICAgIGlmICh1dGlsaXRpZXNJbkdyb3VwLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCB1dGlsID0gdXRpbGl0aWVzSW5Hcm91cFswXTtcbiAgICAgICAgcmVzb2x2ZWQucHVzaCh7XG4gICAgICAgICAgdmFsdWU6IHV0aWwudmFsdWUsXG4gICAgICAgICAgdmFyaWFudHM6IHV0aWwudmFyaWFudHMsXG4gICAgICAgICAgY3NzUHJvcGVydHk6IHV0aWwuY3NzUHJvcGVydHlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzb3J0ZWQgPSBbLi4udXRpbGl0aWVzSW5Hcm91cF0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBzcGVjQ29tcGFyZSA9IGNvbXBhcmVTcGVjaWZpY2l0eShiLnNwZWNpZmljaXR5LCBhLnNwZWNpZmljaXR5KTtcbiAgICAgICAgaWYgKHNwZWNDb21wYXJlICE9PSAwKSByZXR1cm4gc3BlY0NvbXBhcmU7XG4gICAgICAgIHJldHVybiBiLnNvdXJjZU9yZGVyIC0gYS5zb3VyY2VPcmRlcjtcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjb25zdCB3aW5uZXIgPSBzb3J0ZWRbMF07XG4gICAgICBjb25zdCBsb3NlcnMgPSBzb3J0ZWQuc2xpY2UoMSk7XG4gICAgICBcbiAgICAgIHJlc29sdmVkLnB1c2goe1xuICAgICAgICB2YWx1ZTogd2lubmVyLnZhbHVlLFxuICAgICAgICB2YXJpYW50czogd2lubmVyLnZhcmlhbnRzLFxuICAgICAgICBjc3NQcm9wZXJ0eTogd2lubmVyLmNzc1Byb3BlcnR5XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgaWYgKGxvc2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbmZsaWN0cy5wdXNoKHtcbiAgICAgICAgICB3aW5uZXIsXG4gICAgICAgICAgbG9zZXJzLFxuICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgIHZhcmlhbnRLZXk6IHZhcmlhbnRLZXkgPT09IFZBUklBTlRfU0VQQVJBVE9SID8gJyhiYXNlKScgOiB2YXJpYW50S2V5XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaWYgKHZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zdCBsb3Nlck5hbWVzID0gbG9zZXJzLm1hcChsID0+IGwudmFsdWUpLmpvaW4oJywgJyk7XG4gICAgICAgICAgbG9nZ2VyLnZlcmJvc2UoYENvbmZsaWN0IGluICR7cHJvcGVydHl9ICgke3ZhcmlhbnRLZXkgPT09IFZBUklBTlRfU0VQQVJBVE9SID8gJ2Jhc2UnIDogdmFyaWFudEtleX0pOmApO1xuICAgICAgICAgIGxvZ2dlci52ZXJib3NlKGAgIFdpbm5lcjogJHt3aW5uZXIudmFsdWV9IChzcGVjaWZpY2l0eTogJHt3aW5uZXIuc3BlY2lmaWNpdHkuaWR9LyR7d2lubmVyLnNwZWNpZmljaXR5LmNsYXNzfS8ke3dpbm5lci5zcGVjaWZpY2l0eS5lbGVtZW50fSwgb3JkZXI6ICR7d2lubmVyLnNvdXJjZU9yZGVyfSlgKTtcbiAgICAgICAgICBsb2dnZXIudmVyYm9zZShgICBEaXNjYXJkZWQ6ICR7bG9zZXJOYW1lc31gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIHsgcmVzb2x2ZWQsIGNvbmZsaWN0cyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbmZsaWN0c0ZvckVsZW1lbnQoXG4gIHV0aWxpdGllczogVXRpbGl0eVdpdGhNZXRhW10sXG4gIHZlcmJvc2UgPSBmYWxzZVxuKTogUmVzb2x2ZWRVdGlsaXR5W10ge1xuICBjb25zdCB7IHJlc29sdmVkLCBjb25mbGljdHMgfSA9IHJlc29sdmVDb25mbGljdHModXRpbGl0aWVzLCB2ZXJib3NlKTtcbiAgXG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQW5kUmVzb2x2ZVV0aWxpdGllcyhcbiAgZXhpc3RpbmdVdGlsaXRpZXM6IFV0aWxpdHlXaXRoTWV0YVtdLFxuICBuZXdVdGlsaXRpZXM6IFV0aWxpdHlXaXRoTWV0YVtdLFxuICB2ZXJib3NlID0gZmFsc2Vcbik6IHsgdXRpbGl0aWVzOiBVdGlsaXR5V2l0aE1ldGFbXTsgY29uZmxpY3RzOiBDb25mbGljdEluZm9bXSB9IHtcbiAgY29uc3QgYWxsVXRpbGl0aWVzID0gWy4uLmV4aXN0aW5nVXRpbGl0aWVzLCAuLi5uZXdVdGlsaXRpZXNdO1xuICBjb25zdCB7IHJlc29sdmVkLCBjb25mbGljdHMgfSA9IHJlc29sdmVDb25mbGljdHMoYWxsVXRpbGl0aWVzLCB2ZXJib3NlKTtcbiAgXG4gIHJldHVybiB7IHV0aWxpdGllczogYWxsVXRpbGl0aWVzLCBjb25mbGljdHMgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVXRpbGl0eVdpdGhNZXRhKFxuICB2YWx1ZTogc3RyaW5nLFxuICB2YXJpYW50czogc3RyaW5nW10sXG4gIGNzc1Byb3BlcnR5OiBzdHJpbmcsXG4gIHNwZWNpZmljaXR5OiBTcGVjaWZpY2l0eSxcbiAgc291cmNlT3JkZXI6IG51bWJlcixcbiAgb3JpZ2luYWxTZWxlY3Rvcjogc3RyaW5nXG4pOiBVdGlsaXR5V2l0aE1ldGEge1xuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIHZhcmlhbnRzOiBub3JtYWxpemVWYXJpYW50T3JkZXIodmFyaWFudHMpLFxuICAgIGNzc1Byb3BlcnR5LFxuICAgIHNwZWNpZmljaXR5LFxuICAgIHNvdXJjZU9yZGVyLFxuICAgIG9yaWdpbmFsU2VsZWN0b3JcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwVXRpbGl0aWVzQnlFbGVtZW50KFxuICB1dGlsaXRpZXM6IEFycmF5PHtcbiAgICB1dGlsaXR5OiBVdGlsaXR5V2l0aE1ldGE7XG4gICAgZWxlbWVudEtleTogc3RyaW5nO1xuICB9PlxuKTogTWFwPHN0cmluZywgVXRpbGl0eVdpdGhNZXRhW10+IHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIFV0aWxpdHlXaXRoTWV0YVtdPigpO1xuICBcbiAgZm9yIChjb25zdCB7IHV0aWxpdHksIGVsZW1lbnRLZXkgfSBvZiB1dGlsaXRpZXMpIHtcbiAgICBpZiAoIWdyb3Vwcy5oYXMoZWxlbWVudEtleSkpIHtcbiAgICAgIGdyb3Vwcy5zZXQoZWxlbWVudEtleSwgW10pO1xuICAgIH1cbiAgICBncm91cHMuZ2V0KGVsZW1lbnRLZXkpIS5wdXNoKHV0aWxpdHkpO1xuICB9XG4gIFxuICByZXR1cm4gZ3JvdXBzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNvbmZsaWN0c0ZvckFsbEVsZW1lbnRzKFxuICB1dGlsaXRpZXNCeUVsZW1lbnQ6IE1hcDxzdHJpbmcsIFV0aWxpdHlXaXRoTWV0YVtdPixcbiAgdmVyYm9zZSA9IGZhbHNlXG4pOiBNYXA8c3RyaW5nLCBSZXNvbHZlZFV0aWxpdHlbXT4ge1xuICBjb25zdCByZXN1bHRzID0gbmV3IE1hcDxzdHJpbmcsIFJlc29sdmVkVXRpbGl0eVtdPigpO1xuICBcbiAgZm9yIChjb25zdCBbZWxlbWVudEtleSwgdXRpbGl0aWVzXSBvZiB1dGlsaXRpZXNCeUVsZW1lbnQpIHtcbiAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVDb25mbGljdHNGb3JFbGVtZW50KHV0aWxpdGllcywgdmVyYm9zZSk7XG4gICAgcmVzdWx0cy5zZXQoZWxlbWVudEtleSwgcmVzb2x2ZWQpO1xuICB9XG4gIFxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRVdGlsaXRpZXNGb3JPdXRwdXQodXRpbGl0aWVzOiBSZXNvbHZlZFV0aWxpdHlbXSk6IFJlc29sdmVkVXRpbGl0eVtdIHtcbiAgcmV0dXJuIFsuLi51dGlsaXRpZXNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICBjb25zdCBhVmFyaWFudEtleSA9IGNyZWF0ZVZhcmlhbnRLZXkoYS52YXJpYW50cyk7XG4gICAgY29uc3QgYlZhcmlhbnRLZXkgPSBjcmVhdGVWYXJpYW50S2V5KGIudmFyaWFudHMpO1xuICAgIFxuICAgIGlmIChhVmFyaWFudEtleSAhPT0gYlZhcmlhbnRLZXkpIHtcbiAgICAgIHJldHVybiBhVmFyaWFudEtleS5sb2NhbGVDb21wYXJlKGJWYXJpYW50S2V5KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlZFV0aWxpdHlUb1N0cmluZyh1dGlsaXR5OiBSZXNvbHZlZFV0aWxpdHkpOiBzdHJpbmcge1xuICBpZiAodXRpbGl0eS52YXJpYW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXRpbGl0eS52YWx1ZTtcbiAgfVxuICBcbiAgY29uc3QgcHJlZml4ID0gdXRpbGl0eS52YXJpYW50cy5qb2luKCc6Jyk7XG4gIHJldHVybiBgJHtwcmVmaXh9OiR7dXRpbGl0eS52YWx1ZX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZWRVdGlsaXRpZXNUb1N0cmluZ3ModXRpbGl0aWVzOiBSZXNvbHZlZFV0aWxpdHlbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHNvcnRVdGlsaXRpZXNGb3JPdXRwdXQodXRpbGl0aWVzKS5tYXAocmVzb2x2ZWRVdGlsaXR5VG9TdHJpbmcpO1xufSJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function getPropertyForUtility(utility: string): string;
|
|
2
|
+
export declare function isTextFontSizeUtility(utility: string): boolean;
|
|
3
|
+
export declare function isTextColorUtility(utility: string): boolean;
|
|
4
|
+
export declare function getPropertiesForUtilities(utilities: string[]): Map<string, string[]>;
|
|
5
|
+
export declare const PROPERTY_CONFLICT_GROUPS: Record<string, string[]>;
|
|
6
|
+
export declare function getConflictGroup(property: string): string | null;
|
|
7
|
+
export declare function propertiesConflict(prop1: string, prop2: string): boolean;
|