@angular/cdk
Version:
Angular Material Component Development Kit
104 lines • 15.9 kB
JavaScript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define("@angular/cdk/schematics/ng-update/upgrade-rules/index", ["require", "exports", "@angular-devkit/schematics/tasks", "@angular/cdk/schematics/update-tool", "@angular/cdk/schematics/utils/project-tsconfig-paths", "@angular/cdk/schematics/ng-update/upgrade-rules/attribute-selectors-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/class-inheritance-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/class-names-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/constructor-signature-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/css-selectors-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/element-selectors-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/input-names-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/method-call-arguments-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/misc-template-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/output-names-rule", "@angular/cdk/schematics/ng-update/upgrade-rules/property-names-rule"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tasks_1 = require("@angular-devkit/schematics/tasks");
const update_tool_1 = require("@angular/cdk/schematics/update-tool");
const project_tsconfig_paths_1 = require("@angular/cdk/schematics/utils/project-tsconfig-paths");
const attribute_selectors_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/attribute-selectors-rule");
const class_inheritance_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/class-inheritance-rule");
const class_names_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/class-names-rule");
const constructor_signature_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/constructor-signature-rule");
const css_selectors_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/css-selectors-rule");
const element_selectors_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/element-selectors-rule");
const input_names_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/input-names-rule");
const method_call_arguments_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/method-call-arguments-rule");
const misc_template_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/misc-template-rule");
const output_names_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/output-names-rule");
const property_names_rule_1 = require("@angular/cdk/schematics/ng-update/upgrade-rules/property-names-rule");
/** List of migration rules which run for the CDK update. */
exports.cdkMigrationRules = [
attribute_selectors_rule_1.AttributeSelectorsRule,
class_inheritance_rule_1.ClassInheritanceRule,
class_names_rule_1.ClassNamesRule,
constructor_signature_rule_1.ConstructorSignatureRule,
css_selectors_rule_1.CssSelectorsRule,
element_selectors_rule_1.ElementSelectorsRule,
input_names_rule_1.InputNamesRule,
method_call_arguments_rule_1.MethodCallArgumentsRule,
misc_template_rule_1.MiscTemplateRule,
output_names_rule_1.OutputNamesRule,
property_names_rule_1.PropertyNamesRule,
];
/**
* Creates a Angular schematic rule that runs the upgrade for the
* specified target version.
*/
function createUpgradeRule(targetVersion, extraRules, upgradeData, onMigrationCompleteFn) {
return (tree, context) => __awaiter(this, void 0, void 0, function* () {
const logger = context.logger;
const { buildPaths, testPaths } = project_tsconfig_paths_1.getProjectTsConfigPaths(tree);
if (!buildPaths.length && !testPaths.length) {
// We don't want to throw here because it would mean that other migrations in the
// pipeline don't run either. Rather print an error message.
logger.error('Could not find any TypeScript project in the CLI workspace configuration.');
return;
}
// Keep track of all project source files which have been checked/migrated. This is
// necessary because multiple TypeScript projects can contain the same source file and
// we don't want to check these again, as this would result in duplicated failure messages.
const analyzedFiles = new Set();
const rules = [...exports.cdkMigrationRules, ...extraRules];
let hasRuleFailures = false;
const runMigration = (tsconfigPath, isTestTarget) => {
const result = update_tool_1.runMigrationRules(tree, context.logger, tsconfigPath, isTestTarget, targetVersion, rules, upgradeData, analyzedFiles);
hasRuleFailures = hasRuleFailures || result.hasFailures;
};
buildPaths.forEach(p => runMigration(p, false));
testPaths.forEach(p => runMigration(p, true));
let runPackageManager = false;
// Run the global post migration static members for all migration rules.
rules.forEach(rule => {
const actionResult = rule.globalPostMigration(tree, context);
if (actionResult) {
runPackageManager = runPackageManager || actionResult.runPackageManager;
}
});
// If a rule requested the package manager to run, we run it as an
// asynchronous post migration task. We cannot run it synchronously,
// as file changes from the current migration task are not applied to
// the file system yet.
if (runPackageManager) {
context.addTask(new tasks_1.NodePackageInstallTask({ quiet: false }));
}
if (onMigrationCompleteFn) {
onMigrationCompleteFn(context, targetVersion, hasRuleFailures);
}
});
}
exports.createUpgradeRule = createUpgradeRule;
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvbmctdXBkYXRlL3VwZ3JhZGUtcnVsZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFHSCw0REFBd0U7SUFFeEUscUVBQXVFO0lBRXZFLGlHQUEyRTtJQUczRSx1SEFBa0U7SUFDbEUsbUhBQThEO0lBQzlELHVHQUFrRDtJQUNsRCwySEFBc0U7SUFDdEUsMkdBQXNEO0lBQ3RELG1IQUE4RDtJQUM5RCx1R0FBa0Q7SUFDbEQsMkhBQXFFO0lBQ3JFLDJHQUFzRDtJQUN0RCx5R0FBb0Q7SUFDcEQsNkdBQXdEO0lBR3hELDREQUE0RDtJQUMvQyxRQUFBLGlCQUFpQixHQUF5QztRQUNyRSxpREFBc0I7UUFDdEIsNkNBQW9CO1FBQ3BCLGlDQUFjO1FBQ2QscURBQXdCO1FBQ3hCLHFDQUFnQjtRQUNoQiw2Q0FBb0I7UUFDcEIsaUNBQWM7UUFDZCxvREFBdUI7UUFDdkIscUNBQWdCO1FBQ2hCLG1DQUFlO1FBQ2YsdUNBQWlCO0tBQ2xCLENBQUM7SUFPRjs7O09BR0c7SUFDSCxTQUFnQixpQkFBaUIsQ0FDN0IsYUFBNEIsRUFBRSxVQUFtQyxFQUFFLFdBQTRCLEVBQy9GLHFCQUF1QztRQUN6QyxPQUFPLENBQU8sSUFBVSxFQUFFLE9BQXlCLEVBQUUsRUFBRTtZQUNyRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQzlCLE1BQU0sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLEdBQUcsZ0RBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUMzQyxpRkFBaUY7Z0JBQ2pGLDREQUE0RDtnQkFDNUQsTUFBTSxDQUFDLEtBQUssQ0FBQywyRUFBMkUsQ0FBQyxDQUFDO2dCQUMxRixPQUFPO2FBQ1I7WUFFRCxtRkFBbUY7WUFDbkYsc0ZBQXNGO1lBQ3RGLDJGQUEyRjtZQUMzRixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyx5QkFBaUIsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztZQUU1QixNQUFNLFlBQVksR0FBRyxDQUFDLFlBQW9CLEVBQUUsWUFBcUIsRUFBRSxFQUFFO2dCQUNuRSxNQUFNLE1BQU0sR0FBRywrQkFBaUIsQ0FDNUIsSUFBSSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQy9ELEtBQUssRUFBRSxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBRXZDLGVBQWUsR0FBRyxlQUFlLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUMxRCxDQUFDLENBQUM7WUFFRixVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFOUMsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7WUFFOUIsd0VBQXdFO1lBQ3hFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25CLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdELElBQUksWUFBWSxFQUFFO29CQUNoQixpQkFBaUIsR0FBRyxpQkFBaUIsSUFBSSxZQUFZLENBQUMsaUJBQWlCLENBQUM7aUJBQ3pFO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxrRUFBa0U7WUFDbEUsb0VBQW9FO1lBQ3BFLHFFQUFxRTtZQUNyRSx1QkFBdUI7WUFDdkIsSUFBSSxpQkFBaUIsRUFBRTtnQkFDckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLDhCQUFzQixDQUFDLEVBQUMsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQzthQUM3RDtZQUVELElBQUkscUJBQXFCLEVBQUU7Z0JBQ3pCLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDaEU7UUFDSCxDQUFDLENBQUEsQ0FBQztJQUNKLENBQUM7SUF0REQsOENBc0RDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UnVsZSwgU2NoZW1hdGljQ29udGV4dCwgVHJlZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuaW1wb3J0IHtOb2RlUGFja2FnZUluc3RhbGxUYXNrfSBmcm9tICdAYW5ndWxhci1kZXZraXQvc2NoZW1hdGljcy90YXNrcyc7XG5cbmltcG9ydCB7TWlncmF0aW9uUnVsZVR5cGUsIHJ1bk1pZ3JhdGlvblJ1bGVzfSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbCc7XG5pbXBvcnQge1RhcmdldFZlcnNpb259IGZyb20gJy4uLy4uL3VwZGF0ZS10b29sL3RhcmdldC12ZXJzaW9uJztcbmltcG9ydCB7Z2V0UHJvamVjdFRzQ29uZmlnUGF0aHN9IGZyb20gJy4uLy4uL3V0aWxzL3Byb2plY3QtdHNjb25maWctcGF0aHMnO1xuaW1wb3J0IHtSdWxlVXBncmFkZURhdGF9IGZyb20gJy4uL3VwZ3JhZGUtZGF0YSc7XG5cbmltcG9ydCB7QXR0cmlidXRlU2VsZWN0b3JzUnVsZX0gZnJvbSAnLi9hdHRyaWJ1dGUtc2VsZWN0b3JzLXJ1bGUnO1xuaW1wb3J0IHtDbGFzc0luaGVyaXRhbmNlUnVsZX0gZnJvbSAnLi9jbGFzcy1pbmhlcml0YW5jZS1ydWxlJztcbmltcG9ydCB7Q2xhc3NOYW1lc1J1bGV9IGZyb20gJy4vY2xhc3MtbmFtZXMtcnVsZSc7XG5pbXBvcnQge0NvbnN0cnVjdG9yU2lnbmF0dXJlUnVsZX0gZnJvbSAnLi9jb25zdHJ1Y3Rvci1zaWduYXR1cmUtcnVsZSc7XG5pbXBvcnQge0Nzc1NlbGVjdG9yc1J1bGV9IGZyb20gJy4vY3NzLXNlbGVjdG9ycy1ydWxlJztcbmltcG9ydCB7RWxlbWVudFNlbGVjdG9yc1J1bGV9IGZyb20gJy4vZWxlbWVudC1zZWxlY3RvcnMtcnVsZSc7XG5pbXBvcnQge0lucHV0TmFtZXNSdWxlfSBmcm9tICcuL2lucHV0LW5hbWVzLXJ1bGUnO1xuaW1wb3J0IHtNZXRob2RDYWxsQXJndW1lbnRzUnVsZX0gZnJvbSAnLi9tZXRob2QtY2FsbC1hcmd1bWVudHMtcnVsZSc7XG5pbXBvcnQge01pc2NUZW1wbGF0ZVJ1bGV9IGZyb20gJy4vbWlzYy10ZW1wbGF0ZS1ydWxlJztcbmltcG9ydCB7T3V0cHV0TmFtZXNSdWxlfSBmcm9tICcuL291dHB1dC1uYW1lcy1ydWxlJztcbmltcG9ydCB7UHJvcGVydHlOYW1lc1J1bGV9IGZyb20gJy4vcHJvcGVydHktbmFtZXMtcnVsZSc7XG5cblxuLyoqIExpc3Qgb2YgbWlncmF0aW9uIHJ1bGVzIHdoaWNoIHJ1biBmb3IgdGhlIENESyB1cGRhdGUuICovXG5leHBvcnQgY29uc3QgY2RrTWlncmF0aW9uUnVsZXM6IE1pZ3JhdGlvblJ1bGVUeXBlPFJ1bGVVcGdyYWRlRGF0YT5bXSA9IFtcbiAgQXR0cmlidXRlU2VsZWN0b3JzUnVsZSxcbiAgQ2xhc3NJbmhlcml0YW5jZVJ1bGUsXG4gIENsYXNzTmFtZXNSdWxlLFxuICBDb25zdHJ1Y3RvclNpZ25hdHVyZVJ1bGUsXG4gIENzc1NlbGVjdG9yc1J1bGUsXG4gIEVsZW1lbnRTZWxlY3RvcnNSdWxlLFxuICBJbnB1dE5hbWVzUnVsZSxcbiAgTWV0aG9kQ2FsbEFyZ3VtZW50c1J1bGUsXG4gIE1pc2NUZW1wbGF0ZVJ1bGUsXG4gIE91dHB1dE5hbWVzUnVsZSxcbiAgUHJvcGVydHlOYW1lc1J1bGUsXG5dO1xuXG50eXBlIE51bGxhYmxlTWlncmF0aW9uUnVsZSA9IE1pZ3JhdGlvblJ1bGVUeXBlPFJ1bGVVcGdyYWRlRGF0YXxudWxsPjtcblxudHlwZSBQb3N0TWlncmF0aW9uRm4gPSAoY29udGV4dDogU2NoZW1hdGljQ29udGV4dCwgdGFyZ2V0VmVyc2lvbjogVGFyZ2V0VmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ZhaWx1cmU6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhIEFuZ3VsYXIgc2NoZW1hdGljIHJ1bGUgdGhhdCBydW5zIHRoZSB1cGdyYWRlIGZvciB0aGVcbiAqIHNwZWNpZmllZCB0YXJnZXQgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVwZ3JhZGVSdWxlKFxuICAgIHRhcmdldFZlcnNpb246IFRhcmdldFZlcnNpb24sIGV4dHJhUnVsZXM6IE51bGxhYmxlTWlncmF0aW9uUnVsZVtdLCB1cGdyYWRlRGF0YTogUnVsZVVwZ3JhZGVEYXRhLFxuICAgIG9uTWlncmF0aW9uQ29tcGxldGVGbj86IFBvc3RNaWdyYXRpb25Gbik6IFJ1bGUge1xuICByZXR1cm4gYXN5bmMgKHRyZWU6IFRyZWUsIGNvbnRleHQ6IFNjaGVtYXRpY0NvbnRleHQpID0+IHtcbiAgICBjb25zdCBsb2dnZXIgPSBjb250ZXh0LmxvZ2dlcjtcbiAgICBjb25zdCB7YnVpbGRQYXRocywgdGVzdFBhdGhzfSA9IGdldFByb2plY3RUc0NvbmZpZ1BhdGhzKHRyZWUpO1xuXG4gICAgaWYgKCFidWlsZFBhdGhzLmxlbmd0aCAmJiAhdGVzdFBhdGhzLmxlbmd0aCkge1xuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byB0aHJvdyBoZXJlIGJlY2F1c2UgaXQgd291bGQgbWVhbiB0aGF0IG90aGVyIG1pZ3JhdGlvbnMgaW4gdGhlXG4gICAgICAvLyBwaXBlbGluZSBkb24ndCBydW4gZWl0aGVyLiBSYXRoZXIgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgIGxvZ2dlci5lcnJvcignQ291bGQgbm90IGZpbmQgYW55IFR5cGVTY3JpcHQgcHJvamVjdCBpbiB0aGUgQ0xJIHdvcmtzcGFjZSBjb25maWd1cmF0aW9uLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEtlZXAgdHJhY2sgb2YgYWxsIHByb2plY3Qgc291cmNlIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBjaGVja2VkL21pZ3JhdGVkLiBUaGlzIGlzXG4gICAgLy8gbmVjZXNzYXJ5IGJlY2F1c2UgbXVsdGlwbGUgVHlwZVNjcmlwdCBwcm9qZWN0cyBjYW4gY29udGFpbiB0aGUgc2FtZSBzb3VyY2UgZmlsZSBhbmRcbiAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGNoZWNrIHRoZXNlIGFnYWluLCBhcyB0aGlzIHdvdWxkIHJlc3VsdCBpbiBkdXBsaWNhdGVkIGZhaWx1cmUgbWVzc2FnZXMuXG4gICAgY29uc3QgYW5hbHl6ZWRGaWxlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHJ1bGVzID0gWy4uLmNka01pZ3JhdGlvblJ1bGVzLCAuLi5leHRyYVJ1bGVzXTtcbiAgICBsZXQgaGFzUnVsZUZhaWx1cmVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBydW5NaWdyYXRpb24gPSAodHNjb25maWdQYXRoOiBzdHJpbmcsIGlzVGVzdFRhcmdldDogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcnVuTWlncmF0aW9uUnVsZXMoXG4gICAgICAgICAgdHJlZSwgY29udGV4dC5sb2dnZXIsIHRzY29uZmlnUGF0aCwgaXNUZXN0VGFyZ2V0LCB0YXJnZXRWZXJzaW9uLFxuICAgICAgICAgIHJ1bGVzLCB1cGdyYWRlRGF0YSwgYW5hbHl6ZWRGaWxlcyk7XG5cbiAgICAgIGhhc1J1bGVGYWlsdXJlcyA9IGhhc1J1bGVGYWlsdXJlcyB8fCByZXN1bHQuaGFzRmFpbHVyZXM7XG4gICAgfTtcblxuICAgIGJ1aWxkUGF0aHMuZm9yRWFjaChwID0+IHJ1bk1pZ3JhdGlvbihwLCBmYWxzZSkpO1xuICAgIHRlc3RQYXRocy5mb3JFYWNoKHAgPT4gcnVuTWlncmF0aW9uKHAsIHRydWUpKTtcblxuICAgIGxldCBydW5QYWNrYWdlTWFuYWdlciA9IGZhbHNlO1xuXG4gICAgLy8gUnVuIHRoZSBnbG9iYWwgcG9zdCBtaWdyYXRpb24gc3RhdGljIG1lbWJlcnMgZm9yIGFsbCBtaWdyYXRpb24gcnVsZXMuXG4gICAgcnVsZXMuZm9yRWFjaChydWxlID0+IHtcbiAgICAgIGNvbnN0IGFjdGlvblJlc3VsdCA9IHJ1bGUuZ2xvYmFsUG9zdE1pZ3JhdGlvbih0cmVlLCBjb250ZXh0KTtcbiAgICAgIGlmIChhY3Rpb25SZXN1bHQpIHtcbiAgICAgICAgcnVuUGFja2FnZU1hbmFnZXIgPSBydW5QYWNrYWdlTWFuYWdlciB8fCBhY3Rpb25SZXN1bHQucnVuUGFja2FnZU1hbmFnZXI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBJZiBhIHJ1bGUgcmVxdWVzdGVkIHRoZSBwYWNrYWdlIG1hbmFnZXIgdG8gcnVuLCB3ZSBydW4gaXQgYXMgYW5cbiAgICAvLyBhc3luY2hyb25vdXMgcG9zdCBtaWdyYXRpb24gdGFzay4gV2UgY2Fubm90IHJ1biBpdCBzeW5jaHJvbm91c2x5LFxuICAgIC8vIGFzIGZpbGUgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IG1pZ3JhdGlvbiB0YXNrIGFyZSBub3QgYXBwbGllZCB0b1xuICAgIC8vIHRoZSBmaWxlIHN5c3RlbSB5ZXQuXG4gICAgaWYgKHJ1blBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgICBjb250ZXh0LmFkZFRhc2sobmV3IE5vZGVQYWNrYWdlSW5zdGFsbFRhc2soe3F1aWV0OiBmYWxzZX0pKTtcbiAgICB9XG5cbiAgICBpZiAob25NaWdyYXRpb25Db21wbGV0ZUZuKSB7XG4gICAgICBvbk1pZ3JhdGlvbkNvbXBsZXRlRm4oY29udGV4dCwgdGFyZ2V0VmVyc2lvbiwgaGFzUnVsZUZhaWx1cmVzKTtcbiAgICB9XG4gIH07XG59XG4iXX0=