@angular/cdk 12.0.0 → 12.0.4
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/a11y/_index.scss +9 -7
- package/a11y/focus-trap/focus-trap.d.ts +6 -2
- package/a11y/index.metadata.json +1 -1
- package/bundles/cdk-a11y.umd.js +7 -8
- package/bundles/cdk-a11y.umd.js.map +1 -1
- package/bundles/cdk-platform.umd.js +19 -0
- package/bundles/cdk-platform.umd.js.map +1 -1
- package/bundles/cdk-scrolling.umd.js +1 -0
- package/bundles/cdk-scrolling.umd.js.map +1 -1
- package/bundles/cdk-testing.umd.js +7 -0
- package/bundles/cdk-testing.umd.js.map +1 -1
- package/bundles/cdk.umd.js +1 -1
- package/bundles/cdk.umd.js.map +1 -1
- package/esm2015/a11y/focus-trap/focus-trap.js +9 -9
- package/esm2015/platform/features/shadow-dom.js +19 -1
- package/esm2015/scrolling/viewport-ruler.js +2 -1
- package/esm2015/testing/change-detection.js +8 -1
- package/esm2015/version.js +1 -1
- package/fesm2015/a11y.js +8 -9
- package/fesm2015/a11y.js.map +1 -1
- package/fesm2015/cdk.js +1 -1
- package/fesm2015/cdk.js.map +1 -1
- package/fesm2015/platform.js +19 -1
- package/fesm2015/platform.js.map +1 -1
- package/fesm2015/scrolling.js +1 -0
- package/fesm2015/scrolling.js.map +1 -1
- package/fesm2015/testing.js +7 -0
- package/fesm2015/testing.js.map +1 -1
- package/overlay/_index.scss +1 -1
- package/package.json +1 -1
- package/platform/features/shadow-dom.d.ts +5 -0
- package/platform/index.metadata.json +1 -1
- package/schematics/index.mjs +33 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +39 -0
- package/schematics/ng-add/package-config.mjs +47 -0
- package/schematics/ng-add/schema.mjs +10 -0
- package/schematics/ng-generate/drag-drop/index.mjs +39 -0
- package/schematics/ng-generate/drag-drop/schema.mjs +10 -0
- package/schematics/ng-update/data/attribute-selectors.mjs +21 -0
- package/schematics/ng-update/data/class-names.mjs +40 -0
- package/schematics/ng-update/data/constructor-checks.mjs +66 -0
- package/schematics/ng-update/data/css-selectors.mjs +15 -0
- package/schematics/ng-update/data/element-selectors.mjs +15 -0
- package/schematics/ng-update/data/index.mjs +29 -0
- package/schematics/ng-update/data/input-names.mjs +81 -0
- package/schematics/ng-update/data/method-call-checks.mjs +43 -0
- package/schematics/ng-update/data/output-names.mjs +27 -0
- package/schematics/ng-update/data/property-names.mjs +129 -0
- package/schematics/ng-update/devkit-file-system.mjs +81 -0
- package/schematics/ng-update/devkit-migration-rule.mjs +136 -0
- package/schematics/ng-update/devkit-migration.mjs +20 -0
- package/schematics/ng-update/find-stylesheets.mjs +42 -0
- package/schematics/ng-update/html-parsing/angular.mjs +52 -0
- package/schematics/ng-update/html-parsing/elements.mjs +62 -0
- package/schematics/ng-update/index.mjs +59 -0
- package/schematics/ng-update/migrations/attribute-selectors.mjs +67 -0
- package/schematics/ng-update/migrations/class-inheritance.mjs +58 -0
- package/schematics/ng-update/migrations/class-names.mjs +90 -0
- package/schematics/ng-update/migrations/constructor-signature.js +4 -3
- package/schematics/ng-update/migrations/constructor-signature.mjs +136 -0
- package/schematics/ng-update/migrations/css-selectors.mjs +74 -0
- package/schematics/ng-update/migrations/element-selectors.mjs +65 -0
- package/schematics/ng-update/migrations/input-names.mjs +60 -0
- package/schematics/ng-update/migrations/method-call-arguments.mjs +61 -0
- package/schematics/ng-update/migrations/misc-template.mjs +38 -0
- package/schematics/ng-update/migrations/output-names.mjs +47 -0
- package/schematics/ng-update/migrations/property-names.mjs +59 -0
- package/schematics/ng-update/public-api.mjs +30 -0
- package/schematics/ng-update/typescript/base-types.mjs +24 -0
- package/schematics/ng-update/typescript/imports.mjs +54 -0
- package/schematics/ng-update/typescript/literal.mjs +33 -0
- package/schematics/ng-update/typescript/module-specifiers.mjs +35 -0
- package/schematics/ng-update/upgrade-data.mjs +35 -0
- package/schematics/paths.mjs +16 -0
- package/schematics/schematics.externs.js +0 -0
- package/schematics/update-tool/component-resource-collector.mjs +147 -0
- package/schematics/update-tool/file-system.mjs +18 -0
- package/schematics/update-tool/index.mjs +158 -0
- package/schematics/update-tool/logger.mjs +18 -0
- package/schematics/update-tool/migration.mjs +67 -0
- package/schematics/update-tool/public-api.mjs +28 -0
- package/schematics/update-tool/target-version.mjs +34 -0
- package/schematics/update-tool/update-recorder.mjs +10 -0
- package/schematics/update-tool/update-tool.externs.js +0 -0
- package/schematics/update-tool/utils/decorators.mjs +38 -0
- package/schematics/update-tool/utils/functions.mjs +21 -0
- package/schematics/update-tool/utils/imports.mjs +111 -0
- package/schematics/update-tool/utils/line-mappings.mjs +76 -0
- package/schematics/update-tool/utils/parse-tsconfig.mjs +19 -0
- package/schematics/update-tool/utils/property-name.mjs +28 -0
- package/schematics/update-tool/utils/virtual-host.mjs +62 -0
- package/schematics/update-tool/version-changes.mjs +39 -0
- package/schematics/utils/ast/ng-module-imports.mjs +81 -0
- package/schematics/utils/ast.mjs +79 -0
- package/schematics/utils/build-component.mjs +193 -0
- package/schematics/utils/get-project.mjs +24 -0
- package/schematics/utils/html-manipulation.mjs +89 -0
- package/schematics/utils/index.mjs +31 -0
- package/schematics/utils/parse5-element.mjs +32 -0
- package/schematics/utils/project-index-file.mjs +21 -0
- package/schematics/utils/project-main-file.mjs +23 -0
- package/schematics/utils/project-style-file.mjs +44 -0
- package/schematics/utils/project-targets.mjs +34 -0
- package/schematics/utils/project-tsconfig-paths.mjs +50 -0
- package/schematics/utils/schematic-options.mjs +55 -0
- package/schematics/utils/vendored-ast-utils/index.mjs +480 -0
- package/scrolling/viewport-ruler.d.ts +1 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
13
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
14
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
15
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.getWorkspaceConfigGracefully = exports.getTargetTsconfigPath = void 0;
|
|
20
|
+
const core_1 = require("@angular-devkit/core");
|
|
21
|
+
const reader_1 = require("@angular-devkit/core/src/workspace/json/reader");
|
|
22
|
+
/** Name of the default Angular CLI workspace configuration files. */
|
|
23
|
+
const defaultWorkspaceConfigPaths = ['/angular.json', '/.angular.json'];
|
|
24
|
+
/** Gets the tsconfig path from the given target within the specified project. */
|
|
25
|
+
function getTargetTsconfigPath(project, targetName) {
|
|
26
|
+
var _a, _b, _c;
|
|
27
|
+
const tsconfig = (_c = (_b = (_a = project.targets) === null || _a === void 0 ? void 0 : _a.get(targetName)) === null || _b === void 0 ? void 0 : _b.options) === null || _c === void 0 ? void 0 : _c.tsConfig;
|
|
28
|
+
return tsconfig ? core_1.normalize(tsconfig) : null;
|
|
29
|
+
}
|
|
30
|
+
exports.getTargetTsconfigPath = getTargetTsconfigPath;
|
|
31
|
+
/** Resolve the workspace configuration of the specified tree gracefully. */
|
|
32
|
+
function getWorkspaceConfigGracefully(tree) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const path = defaultWorkspaceConfigPaths.find(filePath => tree.exists(filePath));
|
|
35
|
+
const configBuffer = tree.read(path);
|
|
36
|
+
if (!path || !configBuffer) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
return yield reader_1.readJsonWorkspace(path, {
|
|
41
|
+
readFile: (filePath) => __awaiter(this, void 0, void 0, function* () { return tree.read(filePath).toString(); })
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
exports.getWorkspaceConfigGracefully = getWorkspaceConfigGracefully;
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC10c2NvbmZpZy1wYXRocy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy91dGlscy9wcm9qZWN0LXRzY29uZmlnLXBhdGhzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztBQUVILCtDQUErQztBQU0vQywyRUFBaUY7QUFJakYscUVBQXFFO0FBQ3JFLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUV4RSxpRkFBaUY7QUFDakYsU0FBZ0IscUJBQXFCLENBQUMsT0FBMEIsRUFDMUIsVUFBa0I7O0lBQ3RELE1BQU0sUUFBUSxHQUFHLE1BQUEsTUFBQSxNQUFBLE9BQU8sQ0FBQyxPQUFPLDBDQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsMENBQUUsT0FBTywwQ0FBRSxRQUFRLENBQUM7SUFDckUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLGdCQUFTLENBQUMsUUFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDekQsQ0FBQztBQUpELHNEQUlDO0FBRUQsNEVBQTRFO0FBQzVFLFNBQXNCLDRCQUE0QixDQUFDLElBQVU7O1FBQzNELE1BQU0sSUFBSSxHQUFHLDJCQUEyQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNqRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELElBQUk7WUFDRixPQUFPLE1BQU0sMEJBQWlCLENBQUMsSUFBSSxFQUFFO2dCQUNuQyxRQUFRLEVBQUUsQ0FBTSxRQUFRLEVBQUMsRUFBRSxnREFBQyxPQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFFLENBQUMsUUFBUSxFQUFFLENBQUEsR0FBQTthQUMzQyxDQUFDLENBQUM7U0FDckI7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0NBQUE7QUFmRCxvRUFlQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge25vcm1hbGl6ZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0IHtcbiAgUHJvamVjdERlZmluaXRpb24sXG4gIFdvcmtzcGFjZURlZmluaXRpb24sXG4gIFdvcmtzcGFjZUhvc3QsXG59IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlL3NyYy93b3Jrc3BhY2UnO1xuaW1wb3J0IHtyZWFkSnNvbldvcmtzcGFjZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUvc3JjL3dvcmtzcGFjZS9qc29uL3JlYWRlcic7XG5pbXBvcnQge1RyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7V29ya3NwYWNlUGF0aH0gZnJvbSAnLi4vdXBkYXRlLXRvb2wvZmlsZS1zeXN0ZW0nO1xuXG4vKiogTmFtZSBvZiB0aGUgZGVmYXVsdCBBbmd1bGFyIENMSSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbiBmaWxlcy4gKi9cbmNvbnN0IGRlZmF1bHRXb3Jrc3BhY2VDb25maWdQYXRocyA9IFsnL2FuZ3VsYXIuanNvbicsICcvLmFuZ3VsYXIuanNvbiddO1xuXG4vKiogR2V0cyB0aGUgdHNjb25maWcgcGF0aCBmcm9tIHRoZSBnaXZlbiB0YXJnZXQgd2l0aGluIHRoZSBzcGVjaWZpZWQgcHJvamVjdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXJnZXRUc2NvbmZpZ1BhdGgocHJvamVjdDogUHJvamVjdERlZmluaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHN0cmluZyk6IFdvcmtzcGFjZVBhdGh8bnVsbCB7XG4gIGNvbnN0IHRzY29uZmlnID0gcHJvamVjdC50YXJnZXRzPy5nZXQodGFyZ2V0TmFtZSk/Lm9wdGlvbnM/LnRzQ29uZmlnO1xuICByZXR1cm4gdHNjb25maWcgPyBub3JtYWxpemUodHNjb25maWcgYXMgc3RyaW5nKSA6IG51bGw7XG59XG5cbi8qKiBSZXNvbHZlIHRoZSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbiBvZiB0aGUgc3BlY2lmaWVkIHRyZWUgZ3JhY2VmdWxseS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VDb25maWdHcmFjZWZ1bGx5KHRyZWU6IFRyZWUpOiBQcm9taXNlPFdvcmtzcGFjZURlZmluaXRpb258bnVsbD4ge1xuICBjb25zdCBwYXRoID0gZGVmYXVsdFdvcmtzcGFjZUNvbmZpZ1BhdGhzLmZpbmQoZmlsZVBhdGggPT4gdHJlZS5leGlzdHMoZmlsZVBhdGgpKTtcbiAgY29uc3QgY29uZmlnQnVmZmVyID0gdHJlZS5yZWFkKHBhdGghKTtcblxuICBpZiAoIXBhdGggfHwgIWNvbmZpZ0J1ZmZlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmVhZEpzb25Xb3Jrc3BhY2UocGF0aCwge1xuICAgICAgcmVhZEZpbGU6IGFzeW5jIGZpbGVQYXRoID0+IHRyZWUucmVhZChmaWxlUGF0aCkhLnRvU3RyaW5nKClcbiAgICB9IGFzIFdvcmtzcGFjZUhvc3QpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.io/license
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.getDefaultComponentOptions = void 0;
|
|
11
|
+
const core_1 = require("@angular-devkit/core");
|
|
12
|
+
/**
|
|
13
|
+
* Returns the default options for the `@schematics/angular:component` schematic which would
|
|
14
|
+
* have been specified at project initialization (ng new or ng init).
|
|
15
|
+
*
|
|
16
|
+
* This is necessary because the Angular CLI only exposes the default values for the "--style",
|
|
17
|
+
* "--inlineStyle", "--skipTests" and "--inlineTemplate" options to the "component" schematic.
|
|
18
|
+
*/
|
|
19
|
+
function getDefaultComponentOptions(project) {
|
|
20
|
+
// Note: Not all options which are available when running "ng new" will be stored in the
|
|
21
|
+
// workspace config. List of options which will be available in the configuration:
|
|
22
|
+
// angular/angular-cli/blob/master/packages/schematics/angular/application/index.ts#L109-L131
|
|
23
|
+
let skipTests = getDefaultComponentOption(project, ['skipTests'], null);
|
|
24
|
+
// In case "skipTests" is not set explicitly, also look for the "spec" option. The "spec"
|
|
25
|
+
// option has been deprecated but can be still used in older Angular CLI projects.
|
|
26
|
+
// See: https://github.com/angular/angular-cli/commit/a12a4e02a4689b5bdbc6e740c0d9865afb55671a
|
|
27
|
+
if (skipTests === null) {
|
|
28
|
+
skipTests = !getDefaultComponentOption(project, ['spec'], true);
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
style: getDefaultComponentOption(project, ['style', 'styleext'], 'css'),
|
|
32
|
+
inlineStyle: getDefaultComponentOption(project, ['inlineStyle'], false),
|
|
33
|
+
inlineTemplate: getDefaultComponentOption(project, ['inlineTemplate'], false),
|
|
34
|
+
skipTests: skipTests,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
exports.getDefaultComponentOptions = getDefaultComponentOptions;
|
|
38
|
+
/**
|
|
39
|
+
* Gets the default value for the specified option. The default options will be determined
|
|
40
|
+
* by looking at the stored schematic options for `@schematics/angular:component` in the
|
|
41
|
+
* CLI workspace configuration.
|
|
42
|
+
*/
|
|
43
|
+
function getDefaultComponentOption(project, optionNames, fallbackValue) {
|
|
44
|
+
const schematicOptions = core_1.isJsonObject(project.extensions.schematics || null) ?
|
|
45
|
+
project.extensions.schematics : null;
|
|
46
|
+
const defaultSchematic = schematicOptions ?
|
|
47
|
+
schematicOptions['@schematics/angular:component'] : null;
|
|
48
|
+
for (const optionName of optionNames) {
|
|
49
|
+
if (defaultSchematic && defaultSchematic[optionName] != null) {
|
|
50
|
+
return defaultSchematic[optionName];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return fallbackValue;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hdGljLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvdXRpbHMvc2NoZW1hdGljLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBR0gsK0NBQThEO0FBRTlEOzs7Ozs7R0FNRztBQUNILFNBQWdCLDBCQUEwQixDQUFDLE9BQTBCO0lBQ25FLHdGQUF3RjtJQUN4RixrRkFBa0Y7SUFDbEYsNkZBQTZGO0lBQzdGLElBQUksU0FBUyxHQUFHLHlCQUF5QixDQUFlLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXRGLHlGQUF5RjtJQUN6RixrRkFBa0Y7SUFDbEYsOEZBQThGO0lBQzlGLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtRQUN0QixTQUFTLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNqRTtJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUseUJBQXlCLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUN2RSxXQUFXLEVBQUUseUJBQXlCLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ3ZFLGNBQWMsRUFBRSx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUM3RSxTQUFTLEVBQUUsU0FBUztLQUNyQixDQUFDO0FBQ0osQ0FBQztBQW5CRCxnRUFtQkM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBSSxPQUEwQixFQUFFLFdBQXFCLEVBQ2pELGFBQWdCO0lBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsbUJBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBd0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3ZELE1BQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztRQUN2QyxnQkFBZ0IsQ0FBQywrQkFBK0IsQ0FBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRWxGLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1FBQ3BDLElBQUksZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQzVELE9BQU8sZ0JBQWdCLENBQUMsVUFBVSxDQUFpQixDQUFDO1NBQ3JEO0tBQ0Y7SUFFRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UHJvamVjdERlZmluaXRpb259IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlL3NyYy93b3Jrc3BhY2UnO1xuaW1wb3J0IHtpc0pzb25PYmplY3QsIEpzb25PYmplY3R9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9jb3JlJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIHRoZSBgQHNjaGVtYXRpY3MvYW5ndWxhcjpjb21wb25lbnRgIHNjaGVtYXRpYyB3aGljaCB3b3VsZFxuICogaGF2ZSBiZWVuIHNwZWNpZmllZCBhdCBwcm9qZWN0IGluaXRpYWxpemF0aW9uIChuZyBuZXcgb3IgbmcgaW5pdCkuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgQW5ndWxhciBDTEkgb25seSBleHBvc2VzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFwiLS1zdHlsZVwiLFxuICogXCItLWlubGluZVN0eWxlXCIsIFwiLS1za2lwVGVzdHNcIiBhbmQgXCItLWlubGluZVRlbXBsYXRlXCIgb3B0aW9ucyB0byB0aGUgXCJjb21wb25lbnRcIiBzY2hlbWF0aWMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0Q29tcG9uZW50T3B0aW9ucyhwcm9qZWN0OiBQcm9qZWN0RGVmaW5pdGlvbikge1xuICAvLyBOb3RlOiBOb3QgYWxsIG9wdGlvbnMgd2hpY2ggYXJlIGF2YWlsYWJsZSB3aGVuIHJ1bm5pbmcgXCJuZyBuZXdcIiB3aWxsIGJlIHN0b3JlZCBpbiB0aGVcbiAgLy8gd29ya3NwYWNlIGNvbmZpZy4gTGlzdCBvZiBvcHRpb25zIHdoaWNoIHdpbGwgYmUgYXZhaWxhYmxlIGluIHRoZSBjb25maWd1cmF0aW9uOlxuICAvLyBhbmd1bGFyL2FuZ3VsYXItY2xpL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL3NjaGVtYXRpY3MvYW5ndWxhci9hcHBsaWNhdGlvbi9pbmRleC50cyNMMTA5LUwxMzFcbiAgbGV0IHNraXBUZXN0cyA9IGdldERlZmF1bHRDb21wb25lbnRPcHRpb248Ym9vbGVhbnxudWxsPihwcm9qZWN0LCBbJ3NraXBUZXN0cyddLCBudWxsKTtcblxuICAvLyBJbiBjYXNlIFwic2tpcFRlc3RzXCIgaXMgbm90IHNldCBleHBsaWNpdGx5LCBhbHNvIGxvb2sgZm9yIHRoZSBcInNwZWNcIiBvcHRpb24uIFRoZSBcInNwZWNcIlxuICAvLyBvcHRpb24gaGFzIGJlZW4gZGVwcmVjYXRlZCBidXQgY2FuIGJlIHN0aWxsIHVzZWQgaW4gb2xkZXIgQW5ndWxhciBDTEkgcHJvamVjdHMuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci1jbGkvY29tbWl0L2ExMmE0ZTAyYTQ2ODliNWJkYmM2ZTc0MGMwZDk4NjVhZmI1NTY3MWFcbiAgaWYgKHNraXBUZXN0cyA9PT0gbnVsbCkge1xuICAgIHNraXBUZXN0cyA9ICFnZXREZWZhdWx0Q29tcG9uZW50T3B0aW9uKHByb2plY3QsIFsnc3BlYyddLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3R5bGU6IGdldERlZmF1bHRDb21wb25lbnRPcHRpb24ocHJvamVjdCwgWydzdHlsZScsICdzdHlsZWV4dCddLCAnY3NzJyksXG4gICAgaW5saW5lU3R5bGU6IGdldERlZmF1bHRDb21wb25lbnRPcHRpb24ocHJvamVjdCwgWydpbmxpbmVTdHlsZSddLCBmYWxzZSksXG4gICAgaW5saW5lVGVtcGxhdGU6IGdldERlZmF1bHRDb21wb25lbnRPcHRpb24ocHJvamVjdCwgWydpbmxpbmVUZW1wbGF0ZSddLCBmYWxzZSksXG4gICAgc2tpcFRlc3RzOiBza2lwVGVzdHMsXG4gIH07XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBvcHRpb24uIFRoZSBkZWZhdWx0IG9wdGlvbnMgd2lsbCBiZSBkZXRlcm1pbmVkXG4gKiBieSBsb29raW5nIGF0IHRoZSBzdG9yZWQgc2NoZW1hdGljIG9wdGlvbnMgZm9yIGBAc2NoZW1hdGljcy9hbmd1bGFyOmNvbXBvbmVudGAgaW4gdGhlXG4gKiBDTEkgd29ya3NwYWNlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRDb21wb25lbnRPcHRpb248VD4ocHJvamVjdDogUHJvamVjdERlZmluaXRpb24sIG9wdGlvbk5hbWVzOiBzdHJpbmdbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tWYWx1ZTogVCk6IFQge1xuICBjb25zdCBzY2hlbWF0aWNPcHRpb25zID0gaXNKc29uT2JqZWN0KHByb2plY3QuZXh0ZW5zaW9ucy5zY2hlbWF0aWNzIHx8IG51bGwpID9cbiAgICAgIHByb2plY3QuZXh0ZW5zaW9ucy5zY2hlbWF0aWNzIGFzIEpzb25PYmplY3QgOiBudWxsO1xuICBjb25zdCBkZWZhdWx0U2NoZW1hdGljID0gc2NoZW1hdGljT3B0aW9ucyA/XG4gICAgICBzY2hlbWF0aWNPcHRpb25zWydAc2NoZW1hdGljcy9hbmd1bGFyOmNvbXBvbmVudCddIGFzIEpzb25PYmplY3QgfCBudWxsIDogbnVsbDtcblxuICBmb3IgKGNvbnN0IG9wdGlvbk5hbWUgb2Ygb3B0aW9uTmFtZXMpIHtcbiAgICBpZiAoZGVmYXVsdFNjaGVtYXRpYyAmJiBkZWZhdWx0U2NoZW1hdGljW29wdGlvbk5hbWVdICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0U2NoZW1hdGljW29wdGlvbk5hbWVdIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsbGJhY2tWYWx1ZTtcbn1cbiJdfQ==
|