jqwidgets-ng 14.1.10 → 14.1.13
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/package.json +1 -1
- package/schematics/cdk/schematics/collection.json +17 -0
- package/schematics/cdk/schematics/index.d.ts +13 -0
- package/schematics/cdk/schematics/index.js +37 -0
- package/schematics/cdk/schematics/index.mjs +37 -0
- package/schematics/cdk/schematics/migration.json +50 -0
- package/schematics/cdk/schematics/ng-add/index.d.ts +17 -0
- package/schematics/cdk/schematics/ng-add/index.js +39 -0
- package/schematics/cdk/schematics/ng-add/index.mjs +39 -0
- package/schematics/cdk/schematics/ng-add/package-config.d.ts +12 -0
- package/schematics/cdk/schematics/ng-add/package-config.js +52 -0
- package/schematics/cdk/schematics/ng-add/package-config.mjs +52 -0
- package/schematics/cdk/schematics/ng-add/schema.d.ts +11 -0
- package/schematics/cdk/schematics/ng-add/schema.js +10 -0
- package/schematics/cdk/schematics/ng-add/schema.json +16 -0
- package/schematics/cdk/schematics/ng-add/schema.mjs +10 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.__style__.template +53 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.html.template +17 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.spec.ts.template +29 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/files/__path__/__name@dasherize@if-flat__/__name@dasherize__.component.ts.template +43 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/index.d.ts +11 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/index.js +39 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/index.mjs +39 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/schema.d.ts +10 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/schema.js +10 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/schema.json +93 -0
- package/schematics/cdk/schematics/ng-generate/drag-drop/schema.mjs +10 -0
- package/schematics/cdk/schematics/ng-update/data/attribute-selectors.d.ts +15 -0
- package/schematics/cdk/schematics/ng-update/data/attribute-selectors.js +23 -0
- package/schematics/cdk/schematics/ng-update/data/attribute-selectors.mjs +23 -0
- package/schematics/cdk/schematics/ng-update/data/class-names.d.ts +15 -0
- package/schematics/cdk/schematics/ng-update/data/class-names.js +42 -0
- package/schematics/cdk/schematics/ng-update/data/class-names.mjs +42 -0
- package/schematics/cdk/schematics/ng-update/data/constructor-checks.d.ts +15 -0
- package/schematics/cdk/schematics/ng-update/data/constructor-checks.js +74 -0
- package/schematics/cdk/schematics/ng-update/data/constructor-checks.mjs +74 -0
- package/schematics/cdk/schematics/ng-update/data/css-selectors.d.ts +27 -0
- package/schematics/cdk/schematics/ng-update/data/css-selectors.js +15 -0
- package/schematics/cdk/schematics/ng-update/data/css-selectors.mjs +15 -0
- package/schematics/cdk/schematics/ng-update/data/element-selectors.d.ts +15 -0
- package/schematics/cdk/schematics/ng-update/data/element-selectors.js +15 -0
- package/schematics/cdk/schematics/ng-update/data/element-selectors.mjs +15 -0
- package/schematics/cdk/schematics/ng-update/data/index.d.ts +17 -0
- package/schematics/cdk/schematics/ng-update/data/index.js +34 -0
- package/schematics/cdk/schematics/ng-update/data/index.mjs +34 -0
- package/schematics/cdk/schematics/ng-update/data/input-names.d.ts +22 -0
- package/schematics/cdk/schematics/ng-update/data/input-names.js +105 -0
- package/schematics/cdk/schematics/ng-update/data/input-names.mjs +105 -0
- package/schematics/cdk/schematics/ng-update/data/method-call-checks.d.ts +17 -0
- package/schematics/cdk/schematics/ng-update/data/method-call-checks.js +57 -0
- package/schematics/cdk/schematics/ng-update/data/method-call-checks.mjs +57 -0
- package/schematics/cdk/schematics/ng-update/data/output-names.d.ts +22 -0
- package/schematics/cdk/schematics/ng-update/data/output-names.js +29 -0
- package/schematics/cdk/schematics/ng-update/data/output-names.mjs +29 -0
- package/schematics/cdk/schematics/ng-update/data/property-names.d.ts +20 -0
- package/schematics/cdk/schematics/ng-update/data/property-names.js +137 -0
- package/schematics/cdk/schematics/ng-update/data/property-names.mjs +137 -0
- package/schematics/cdk/schematics/ng-update/data/symbol-removal.d.ts +17 -0
- package/schematics/cdk/schematics/ng-update/data/symbol-removal.js +12 -0
- package/schematics/cdk/schematics/ng-update/data/symbol-removal.mjs +12 -0
- package/schematics/cdk/schematics/ng-update/devkit-file-system.d.ts +30 -0
- package/schematics/cdk/schematics/ng-update/devkit-file-system.js +80 -0
- package/schematics/cdk/schematics/ng-update/devkit-file-system.mjs +80 -0
- package/schematics/cdk/schematics/ng-update/devkit-migration-rule.d.ts +24 -0
- package/schematics/cdk/schematics/ng-update/devkit-migration-rule.js +139 -0
- package/schematics/cdk/schematics/ng-update/devkit-migration-rule.mjs +139 -0
- package/schematics/cdk/schematics/ng-update/devkit-migration.d.ts +35 -0
- package/schematics/cdk/schematics/ng-update/devkit-migration.js +20 -0
- package/schematics/cdk/schematics/ng-update/devkit-migration.mjs +20 -0
- package/schematics/cdk/schematics/ng-update/find-stylesheets.d.ts +16 -0
- package/schematics/cdk/schematics/ng-update/find-stylesheets.js +42 -0
- package/schematics/cdk/schematics/ng-update/find-stylesheets.mjs +42 -0
- package/schematics/cdk/schematics/ng-update/html-parsing/angular.d.ts +15 -0
- package/schematics/cdk/schematics/ng-update/html-parsing/angular.js +52 -0
- package/schematics/cdk/schematics/ng-update/html-parsing/angular.mjs +52 -0
- package/schematics/cdk/schematics/ng-update/html-parsing/elements.d.ts +25 -0
- package/schematics/cdk/schematics/ng-update/html-parsing/elements.js +64 -0
- package/schematics/cdk/schematics/ng-update/html-parsing/elements.mjs +64 -0
- package/schematics/cdk/schematics/ng-update/index.d.ts +24 -0
- package/schematics/cdk/schematics/ng-update/index.js +66 -0
- package/schematics/cdk/schematics/ng-update/index.mjs +66 -0
- package/schematics/cdk/schematics/ng-update/migrations/attribute-selectors.d.ts +26 -0
- package/schematics/cdk/schematics/ng-update/migrations/attribute-selectors.js +71 -0
- package/schematics/cdk/schematics/ng-update/migrations/attribute-selectors.mjs +71 -0
- package/schematics/cdk/schematics/ng-update/migrations/class-inheritance.d.ts +26 -0
- package/schematics/cdk/schematics/ng-update/migrations/class-inheritance.js +58 -0
- package/schematics/cdk/schematics/ng-update/migrations/class-inheritance.mjs +58 -0
- package/schematics/cdk/schematics/ng-update/migrations/class-names.d.ts +32 -0
- package/schematics/cdk/schematics/ng-update/migrations/class-names.js +91 -0
- package/schematics/cdk/schematics/ng-update/migrations/class-names.mjs +91 -0
- package/schematics/cdk/schematics/ng-update/migrations/constructor-signature.d.ts +29 -0
- package/schematics/cdk/schematics/ng-update/migrations/constructor-signature.js +139 -0
- package/schematics/cdk/schematics/ng-update/migrations/constructor-signature.mjs +139 -0
- package/schematics/cdk/schematics/ng-update/migrations/css-selectors.d.ts +26 -0
- package/schematics/cdk/schematics/ng-update/migrations/css-selectors.js +75 -0
- package/schematics/cdk/schematics/ng-update/migrations/css-selectors.mjs +75 -0
- package/schematics/cdk/schematics/ng-update/migrations/element-selectors.d.ts +26 -0
- package/schematics/cdk/schematics/ng-update/migrations/element-selectors.js +66 -0
- package/schematics/cdk/schematics/ng-update/migrations/element-selectors.mjs +66 -0
- package/schematics/cdk/schematics/ng-update/migrations/input-names.d.ts +26 -0
- package/schematics/cdk/schematics/ng-update/migrations/input-names.js +59 -0
- package/schematics/cdk/schematics/ng-update/migrations/input-names.mjs +59 -0
- package/schematics/cdk/schematics/ng-update/migrations/method-call-arguments.d.ts +22 -0
- package/schematics/cdk/schematics/ng-update/migrations/method-call-arguments.js +62 -0
- package/schematics/cdk/schematics/ng-update/migrations/method-call-arguments.mjs +62 -0
- package/schematics/cdk/schematics/ng-update/migrations/misc-template.d.ts +18 -0
- package/schematics/cdk/schematics/ng-update/migrations/misc-template.js +38 -0
- package/schematics/cdk/schematics/ng-update/migrations/misc-template.mjs +38 -0
- package/schematics/cdk/schematics/ng-update/migrations/output-names.d.ts +22 -0
- package/schematics/cdk/schematics/ng-update/migrations/output-names.js +46 -0
- package/schematics/cdk/schematics/ng-update/migrations/output-names.mjs +46 -0
- package/schematics/cdk/schematics/ng-update/migrations/property-names.d.ts +22 -0
- package/schematics/cdk/schematics/ng-update/migrations/property-names.js +60 -0
- package/schematics/cdk/schematics/ng-update/migrations/property-names.mjs +60 -0
- package/schematics/cdk/schematics/ng-update/migrations/symbol-removal.d.ts +18 -0
- package/schematics/cdk/schematics/ng-update/migrations/symbol-removal.js +47 -0
- package/schematics/cdk/schematics/ng-update/migrations/symbol-removal.mjs +47 -0
- package/schematics/cdk/schematics/ng-update/migrations/tilde-import-v13/tilde-import-migration.d.ts +14 -0
- package/schematics/cdk/schematics/ng-update/migrations/tilde-import-v13/tilde-import-migration.js +39 -0
- package/schematics/cdk/schematics/ng-update/migrations/tilde-import-v13/tilde-import-migration.mjs +39 -0
- package/schematics/cdk/schematics/ng-update/public-api.d.ts +17 -0
- package/schematics/cdk/schematics/ng-update/public-api.js +34 -0
- package/schematics/cdk/schematics/ng-update/public-api.mjs +34 -0
- package/schematics/cdk/schematics/ng-update/typescript/base-types.d.ts +10 -0
- package/schematics/cdk/schematics/ng-update/typescript/base-types.js +24 -0
- package/schematics/cdk/schematics/ng-update/typescript/base-types.mjs +24 -0
- package/schematics/cdk/schematics/ng-update/typescript/imports.d.ts +18 -0
- package/schematics/cdk/schematics/ng-update/typescript/imports.js +54 -0
- package/schematics/cdk/schematics/ng-update/typescript/imports.mjs +54 -0
- package/schematics/cdk/schematics/ng-update/typescript/literal.d.ts +18 -0
- package/schematics/cdk/schematics/ng-update/typescript/literal.js +33 -0
- package/schematics/cdk/schematics/ng-update/typescript/literal.mjs +33 -0
- package/schematics/cdk/schematics/ng-update/typescript/module-specifiers.d.ts +16 -0
- package/schematics/cdk/schematics/ng-update/typescript/module-specifiers.js +35 -0
- package/schematics/cdk/schematics/ng-update/typescript/module-specifiers.mjs +35 -0
- package/schematics/cdk/schematics/ng-update/upgrade-data.d.ts +34 -0
- package/schematics/cdk/schematics/ng-update/upgrade-data.js +36 -0
- package/schematics/cdk/schematics/ng-update/upgrade-data.mjs +36 -0
- package/schematics/cdk/schematics/package.json +3 -0
- package/schematics/cdk/schematics/paths.d.ts +11 -0
- package/schematics/cdk/schematics/paths.js +16 -0
- package/schematics/cdk/schematics/paths.mjs +16 -0
- package/schematics/cdk/schematics/schematics.externs.js +0 -0
- package/schematics/cdk/schematics/tsconfig.json +28 -0
- package/schematics/cdk/schematics/update-tool/component-resource-collector.d.ts +43 -0
- package/schematics/cdk/schematics/update-tool/component-resource-collector.js +147 -0
- package/schematics/cdk/schematics/update-tool/component-resource-collector.mjs +147 -0
- package/schematics/cdk/schematics/update-tool/file-system.d.ts +72 -0
- package/schematics/cdk/schematics/update-tool/file-system.js +18 -0
- package/schematics/cdk/schematics/update-tool/file-system.mjs +18 -0
- package/schematics/cdk/schematics/update-tool/index.d.ts +70 -0
- package/schematics/cdk/schematics/update-tool/index.js +162 -0
- package/schematics/cdk/schematics/update-tool/index.mjs +162 -0
- package/schematics/cdk/schematics/update-tool/logger.d.ts +15 -0
- package/schematics/cdk/schematics/update-tool/logger.js +18 -0
- package/schematics/cdk/schematics/update-tool/logger.mjs +18 -0
- package/schematics/cdk/schematics/update-tool/migration.d.ts +81 -0
- package/schematics/cdk/schematics/update-tool/migration.js +67 -0
- package/schematics/cdk/schematics/update-tool/migration.mjs +67 -0
- package/schematics/cdk/schematics/update-tool/public-api.d.ts +15 -0
- package/schematics/cdk/schematics/update-tool/public-api.js +32 -0
- package/schematics/cdk/schematics/update-tool/public-api.mjs +32 -0
- package/schematics/cdk/schematics/update-tool/target-version.d.ts +23 -0
- package/schematics/cdk/schematics/update-tool/target-version.js +35 -0
- package/schematics/cdk/schematics/update-tool/target-version.mjs +35 -0
- package/schematics/cdk/schematics/update-tool/update-recorder.d.ts +13 -0
- package/schematics/cdk/schematics/update-tool/update-recorder.js +10 -0
- package/schematics/cdk/schematics/update-tool/update-recorder.mjs +10 -0
- package/schematics/cdk/schematics/update-tool/update-tool.externs.js +0 -0
- package/schematics/cdk/schematics/update-tool/utils/decorators.d.ts +22 -0
- package/schematics/cdk/schematics/update-tool/utils/decorators.js +42 -0
- package/schematics/cdk/schematics/update-tool/utils/decorators.mjs +42 -0
- package/schematics/cdk/schematics/update-tool/utils/functions.d.ts +14 -0
- package/schematics/cdk/schematics/update-tool/utils/functions.js +21 -0
- package/schematics/cdk/schematics/update-tool/utils/functions.mjs +21 -0
- package/schematics/cdk/schematics/update-tool/utils/imports.d.ts +17 -0
- package/schematics/cdk/schematics/update-tool/utils/imports.js +111 -0
- package/schematics/cdk/schematics/update-tool/utils/imports.mjs +111 -0
- package/schematics/cdk/schematics/update-tool/utils/line-mappings.d.ts +21 -0
- package/schematics/cdk/schematics/update-tool/utils/line-mappings.js +76 -0
- package/schematics/cdk/schematics/update-tool/utils/line-mappings.mjs +76 -0
- package/schematics/cdk/schematics/update-tool/utils/parse-tsconfig.d.ts +10 -0
- package/schematics/cdk/schematics/update-tool/utils/parse-tsconfig.js +19 -0
- package/schematics/cdk/schematics/update-tool/utils/parse-tsconfig.mjs +19 -0
- package/schematics/cdk/schematics/update-tool/utils/property-name.d.ts +18 -0
- package/schematics/cdk/schematics/update-tool/utils/property-name.js +28 -0
- package/schematics/cdk/schematics/update-tool/utils/property-name.mjs +28 -0
- package/schematics/cdk/schematics/update-tool/utils/virtual-host.d.ts +34 -0
- package/schematics/cdk/schematics/update-tool/utils/virtual-host.js +62 -0
- package/schematics/cdk/schematics/update-tool/utils/virtual-host.mjs +62 -0
- package/schematics/cdk/schematics/update-tool/version-changes.d.ts +32 -0
- package/schematics/cdk/schematics/update-tool/version-changes.js +39 -0
- package/schematics/cdk/schematics/update-tool/version-changes.mjs +39 -0
- package/schematics/cdk/schematics/utils/ast/ng-module-imports.d.ts +12 -0
- package/schematics/cdk/schematics/utils/ast/ng-module-imports.js +83 -0
- package/schematics/cdk/schematics/utils/ast/ng-module-imports.mjs +83 -0
- package/schematics/cdk/schematics/utils/ast.d.ts +25 -0
- package/schematics/cdk/schematics/utils/ast.js +79 -0
- package/schematics/cdk/schematics/utils/ast.mjs +79 -0
- package/schematics/cdk/schematics/utils/build-component.d.ts +20 -0
- package/schematics/cdk/schematics/utils/build-component.js +189 -0
- package/schematics/cdk/schematics/utils/build-component.mjs +189 -0
- package/schematics/cdk/schematics/utils/get-project.d.ts +13 -0
- package/schematics/cdk/schematics/utils/get-project.js +24 -0
- package/schematics/cdk/schematics/utils/get-project.mjs +24 -0
- package/schematics/cdk/schematics/utils/html-manipulation.d.ts +15 -0
- package/schematics/cdk/schematics/utils/html-manipulation.js +92 -0
- package/schematics/cdk/schematics/utils/html-manipulation.mjs +92 -0
- package/schematics/cdk/schematics/utils/index.d.ts +18 -0
- package/schematics/cdk/schematics/utils/index.js +35 -0
- package/schematics/cdk/schematics/utils/index.mjs +35 -0
- package/schematics/cdk/schematics/utils/parse5-element.d.ts +10 -0
- package/schematics/cdk/schematics/utils/parse5-element.js +31 -0
- package/schematics/cdk/schematics/utils/parse5-element.mjs +31 -0
- package/schematics/cdk/schematics/utils/project-index-file.d.ts +11 -0
- package/schematics/cdk/schematics/utils/project-index-file.js +21 -0
- package/schematics/cdk/schematics/utils/project-index-file.mjs +21 -0
- package/schematics/cdk/schematics/utils/project-main-file.d.ts +11 -0
- package/schematics/cdk/schematics/utils/project-main-file.js +23 -0
- package/schematics/cdk/schematics/utils/project-main-file.mjs +23 -0
- package/schematics/cdk/schematics/utils/project-style-file.d.ts +13 -0
- package/schematics/cdk/schematics/utils/project-style-file.js +42 -0
- package/schematics/cdk/schematics/utils/project-style-file.mjs +42 -0
- package/schematics/cdk/schematics/utils/project-targets.d.ts +18 -0
- package/schematics/cdk/schematics/utils/project-targets.js +34 -0
- package/schematics/cdk/schematics/utils/project-targets.mjs +34 -0
- package/schematics/cdk/schematics/utils/project-tsconfig-paths.d.ts +14 -0
- package/schematics/cdk/schematics/utils/project-tsconfig-paths.js +50 -0
- package/schematics/cdk/schematics/utils/project-tsconfig-paths.mjs +50 -0
- package/schematics/cdk/schematics/utils/schematic-options.d.ts +17 -0
- package/schematics/cdk/schematics/utils/schematic-options.js +58 -0
- package/schematics/cdk/schematics/utils/schematic-options.mjs +58 -0
- package/schematics/cdk/schematics/utils/vendored-ast-utils/index.d.ts +70 -0
- package/schematics/cdk/schematics/utils/vendored-ast-utils/index.js +480 -0
- package/schematics/cdk/schematics/utils/vendored-ast-utils/index.mjs +480 -0
- package/schematics/fonts/material-fonts.js +1 -1
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/setup-project.js +1 -1
- package/schematics/ng-generate/grid/index.js +1 -1
- package/schematics/ng-generate/grid/index.ts +1 -1
- package/schematics/theming/theming.js +1 -1
|
@@ -0,0 +1,139 @@
|
|
|
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.ConstructorSignatureMigration = void 0;
|
|
11
|
+
const ts = require("typescript");
|
|
12
|
+
const migration_1 = require("../../update-tool/migration");
|
|
13
|
+
const version_changes_1 = require("../../update-tool/version-changes");
|
|
14
|
+
/**
|
|
15
|
+
* List of diagnostic codes that refer to pre-emit diagnostics which indicate invalid
|
|
16
|
+
* new expression or super call signatures. See the list of diagnostics here:
|
|
17
|
+
*
|
|
18
|
+
* https://github.com/Microsoft/TypeScript/blob/master/src/compiler/diagnosticMessages.json
|
|
19
|
+
*/
|
|
20
|
+
const signatureErrorDiagnostics = [
|
|
21
|
+
// Type not assignable error diagnostic.
|
|
22
|
+
2345,
|
|
23
|
+
// Constructor argument length invalid diagnostics
|
|
24
|
+
2554, 2555, 2556, 2557,
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Migration that visits every TypeScript new expression or super call and checks if
|
|
28
|
+
* the parameter type signature is invalid and needs to be updated manually.
|
|
29
|
+
*/
|
|
30
|
+
class ConstructorSignatureMigration extends migration_1.Migration {
|
|
31
|
+
constructor() {
|
|
32
|
+
super(...arguments);
|
|
33
|
+
// Note that the data for this rule is not distinguished based on the target version because
|
|
34
|
+
// we don't keep track of the new signature and don't want to update incrementally.
|
|
35
|
+
// See: https://github.com/angular/components/pull/12970#issuecomment-418337566
|
|
36
|
+
this.data = (0, version_changes_1.getAllChanges)(this.upgradeData.constructorChecks);
|
|
37
|
+
// Only enable the migration rule if there is upgrade data.
|
|
38
|
+
this.enabled = this.data.length !== 0;
|
|
39
|
+
}
|
|
40
|
+
visitNode(node) {
|
|
41
|
+
if (ts.isSourceFile(node)) {
|
|
42
|
+
this._visitSourceFile(node);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Method that will be called for each source file of the upgrade project. In order to
|
|
47
|
+
* properly determine invalid constructor signatures, we take advantage of the pre-emit
|
|
48
|
+
* diagnostics from TypeScript.
|
|
49
|
+
*
|
|
50
|
+
* By using the diagnostics, the migration can handle type assignability. Not using
|
|
51
|
+
* diagnostics would mean that we need to use simple type equality checking which is
|
|
52
|
+
* too strict. See related issue: https://github.com/Microsoft/TypeScript/issues/9879
|
|
53
|
+
*/
|
|
54
|
+
_visitSourceFile(sourceFile) {
|
|
55
|
+
// List of classes of which the constructor signature has changed.
|
|
56
|
+
const diagnostics = ts
|
|
57
|
+
.getPreEmitDiagnostics(this.program, sourceFile)
|
|
58
|
+
.filter(diagnostic => signatureErrorDiagnostics.includes(diagnostic.code))
|
|
59
|
+
.filter(diagnostic => diagnostic.start !== undefined);
|
|
60
|
+
for (const diagnostic of diagnostics) {
|
|
61
|
+
const node = findConstructorNode(diagnostic, sourceFile);
|
|
62
|
+
if (!node) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const classType = this.typeChecker.getTypeAtLocation(node.expression);
|
|
66
|
+
const className = classType.symbol && classType.symbol.name;
|
|
67
|
+
const isNewExpression = ts.isNewExpression(node);
|
|
68
|
+
// Determine the class names of the actual construct signatures because we cannot assume that
|
|
69
|
+
// the diagnostic refers to a constructor of the actual expression. In case the constructor
|
|
70
|
+
// is inherited, we need to detect that the owner-class of the constructor is added to the
|
|
71
|
+
// constructor checks upgrade data. e.g. `class CustomCalendar extends MatCalendar {}`.
|
|
72
|
+
const signatureClassNames = classType
|
|
73
|
+
.getConstructSignatures()
|
|
74
|
+
.map(signature => getClassDeclarationOfSignature(signature))
|
|
75
|
+
.map(declaration => (declaration && declaration.name ? declaration.name.text : null))
|
|
76
|
+
.filter(Boolean);
|
|
77
|
+
// Besides checking the signature class names, we need to check the actual class name because
|
|
78
|
+
// there can be classes without an explicit constructor.
|
|
79
|
+
if (!this.data.includes(className) &&
|
|
80
|
+
!signatureClassNames.some(name => this.data.includes(name))) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const classSignatures = classType
|
|
84
|
+
.getConstructSignatures()
|
|
85
|
+
.map(signature => getParameterTypesFromSignature(signature, this.typeChecker));
|
|
86
|
+
const expressionName = isNewExpression ? `new ${className}` : 'super';
|
|
87
|
+
const signatures = classSignatures
|
|
88
|
+
.map(signature => signature.map(t => (t === null ? 'any' : this.typeChecker.typeToString(t))))
|
|
89
|
+
.map(signature => `${expressionName}(${signature.join(', ')})`)
|
|
90
|
+
.join(' or ');
|
|
91
|
+
this.createFailureAtNode(node, `Found "${className}" constructed with ` +
|
|
92
|
+
`an invalid signature. Please manually update the ${expressionName} expression to ` +
|
|
93
|
+
`match the new signature${classSignatures.length > 1 ? 's' : ''}: ${signatures}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.ConstructorSignatureMigration = ConstructorSignatureMigration;
|
|
98
|
+
/** Resolves the type for each parameter in the specified signature. */
|
|
99
|
+
function getParameterTypesFromSignature(signature, typeChecker) {
|
|
100
|
+
return signature
|
|
101
|
+
.getParameters()
|
|
102
|
+
.map(param => param.declarations ? typeChecker.getTypeAtLocation(param.declarations[0]) : null);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Walks through each node of a source file in order to find a new-expression node or super-call
|
|
106
|
+
* expression node that is captured by the specified diagnostic.
|
|
107
|
+
*/
|
|
108
|
+
function findConstructorNode(diagnostic, sourceFile) {
|
|
109
|
+
let resolvedNode = null;
|
|
110
|
+
const _visitNode = (node) => {
|
|
111
|
+
// Check whether the current node contains the diagnostic. If the node contains the diagnostic,
|
|
112
|
+
// walk deeper in order to find all constructor expression nodes.
|
|
113
|
+
if (node.getStart() <= diagnostic.start && node.getEnd() >= diagnostic.start) {
|
|
114
|
+
if (ts.isNewExpression(node) ||
|
|
115
|
+
(ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.SuperKeyword)) {
|
|
116
|
+
resolvedNode = node;
|
|
117
|
+
}
|
|
118
|
+
ts.forEachChild(node, _visitNode);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
ts.forEachChild(sourceFile, _visitNode);
|
|
122
|
+
return resolvedNode;
|
|
123
|
+
}
|
|
124
|
+
/** Determines the class declaration of the specified construct signature. */
|
|
125
|
+
function getClassDeclarationOfSignature(signature) {
|
|
126
|
+
let node = signature.getDeclaration();
|
|
127
|
+
// Handle signatures which don't have an actual declaration. This happens if a class
|
|
128
|
+
// does not have an explicitly written constructor.
|
|
129
|
+
if (!node) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
while (!ts.isSourceFile((node = node.parent))) {
|
|
133
|
+
if (ts.isClassDeclaration(node)) {
|
|
134
|
+
return node;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3Itc2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9zY2hlbWF0aWNzL25nLXVwZGF0ZS9taWdyYXRpb25zL2NvbnN0cnVjdG9yLXNpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxpQ0FBaUM7QUFDakMsMkRBQXNEO0FBQ3RELHVFQUFnRTtBQUdoRTs7Ozs7R0FLRztBQUNILE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsd0NBQXdDO0lBQ3hDLElBQUk7SUFDSixrREFBa0Q7SUFDbEQsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtDQUN2QixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBYSw2QkFBOEIsU0FBUSxxQkFBc0I7SUFBekU7O1FBQ0UsNEZBQTRGO1FBQzVGLG1GQUFtRjtRQUNuRiwrRUFBK0U7UUFDL0UsU0FBSSxHQUFHLElBQUEsK0JBQWEsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFekQsMkRBQTJEO1FBQzNELFlBQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUEwRW5DLENBQUM7SUF4RVUsU0FBUyxDQUFDLElBQWE7UUFDOUIsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLGdCQUFnQixDQUFDLFVBQXlCO1FBQ2hELGtFQUFrRTtRQUNsRSxNQUFNLFdBQVcsR0FBRyxFQUFFO2FBQ25CLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO2FBQy9DLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLHlCQUF5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O0lBQ3BGLG1EQUFtRDtJQUNuRCxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUNELE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1FBQzdDLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7TWlncmF0aW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC9taWdyYXRpb24nO1xuaW1wb3J0IHtnZXRBbGxDaGFuZ2VzfSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC92ZXJzaW9uLWNoYW5nZXMnO1xuaW1wb3J0IHtVcGdyYWRlRGF0YX0gZnJvbSAnLi4vdXBncmFkZS1kYXRhJztcblxuLyoqXG4gKiBMaXN0IG9mIGRpYWdub3N0aWMgY29kZXMgdGhhdCByZWZlciB0byBwcmUtZW1pdCBkaWFnbm9zdGljcyB3aGljaCBpbmRpY2F0ZSBpbnZhbGlkXG4gKiBuZXcgZXhwcmVzc2lvbiBvciBzdXBlciBjYWxsIHNpZ25hdHVyZXMuIFNlZSB0aGUgbGlzdCBvZiBkaWFnbm9zdGljcyBoZXJlOlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9ibG9iL21hc3Rlci9zcmMvY29tcGlsZXIvZGlhZ25vc3RpY01lc3NhZ2VzLmpzb25cbiAqL1xuY29uc3Qgc2lnbmF0dXJlRXJyb3JEaWFnbm9zdGljcyA9IFtcbiAgLy8gVHlwZSBub3QgYXNzaWduYWJsZSBlcnJvciBkaWFnbm9zdGljLlxuICAyMzQ1LFxuICAvLyBDb25zdHJ1Y3RvciBhcmd1bWVudCBsZW5ndGggaW52YWxpZCBkaWFnbm9zdGljc1xuICAyNTU0LCAyNTU1LCAyNTU2LCAyNTU3LFxuXTtcblxuLyoqXG4gKiBNaWdyYXRpb24gdGhhdCB2aXNpdHMgZXZlcnkgVHlwZVNjcmlwdCBuZXcgZXhwcmVzc2lvbiBvciBzdXBlciBjYWxsIGFuZCBjaGVja3MgaWZcbiAqIHRoZSBwYXJhbWV0ZXIgdHlwZSBzaWduYXR1cmUgaXMgaW52YWxpZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZCBtYW51YWxseS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnN0cnVjdG9yU2lnbmF0dXJlTWlncmF0aW9uIGV4dGVuZHMgTWlncmF0aW9uPFVwZ3JhZGVEYXRhPiB7XG4gIC8vIE5vdGUgdGhhdCB0aGUgZGF0YSBmb3IgdGhpcyBydWxlIGlzIG5vdCBkaXN0aW5ndWlzaGVkIGJhc2VkIG9uIHRoZSB0YXJnZXQgdmVyc2lvbiBiZWNhdXNlXG4gIC8vIHdlIGRvbid0IGtlZXAgdHJhY2sgb2YgdGhlIG5ldyBzaWduYXR1cmUgYW5kIGRvbid0IHdhbnQgdG8gdXBkYXRlIGluY3JlbWVudGFsbHkuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzEyOTcwI2lzc3VlY29tbWVudC00MTgzMzc1NjZcbiAgZGF0YSA9IGdldEFsbENoYW5nZXModGhpcy51cGdyYWRlRGF0YS5jb25zdHJ1Y3RvckNoZWNrcyk7XG5cbiAgLy8gT25seSBlbmFibGUgdGhlIG1pZ3JhdGlvbiBydWxlIGlmIHRoZXJlIGlzIHVwZ3JhZGUgZGF0YS5cbiAgZW5hYmxlZCA9IHRoaXMuZGF0YS5sZW5ndGggIT09IDA7XG5cbiAgb3ZlcnJpZGUgdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpOiB2b2lkIHtcbiAgICBpZiAodHMuaXNTb3VyY2VGaWxlKG5vZGUpKSB7XG4gICAgICB0aGlzLl92aXNpdFNvdXJjZUZpbGUobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0aGF0IHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIHNvdXJjZSBmaWxlIG9mIHRoZSB1cGdyYWRlIHByb2plY3QuIEluIG9yZGVyIHRvXG4gICAqIHByb3Blcmx5IGRldGVybWluZSBpbnZhbGlkIGNvbnN0cnVjdG9yIHNpZ25hdHVyZXMsIHdlIHRha2UgYWR2YW50YWdlIG9mIHRoZSBwcmUtZW1pdFxuICAgKiBkaWFnbm9zdGljcyBmcm9tIFR5cGVTY3JpcHQuXG4gICAqXG4gICAqIEJ5IHVzaW5nIHRoZSBkaWFnbm9zdGljcywgdGhlIG1pZ3JhdGlvbiBjYW4gaGFuZGxlIHR5cGUgYXNzaWduYWJpbGl0eS4gTm90IHVzaW5nXG4gICAqIGRpYWdub3N0aWNzIHdvdWxkIG1lYW4gdGhhdCB3ZSBuZWVkIHRvIHVzZSBzaW1wbGUgdHlwZSBlcXVhbGl0eSBjaGVja2luZyB3aGljaCBpc1xuICAgKiB0b28gc3RyaWN0LiBTZWUgcmVsYXRlZCBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy85ODc5XG4gICAqL1xuICBwcml2YXRlIF92aXNpdFNvdXJjZUZpbGUoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkge1xuICAgIC8vIExpc3Qgb2YgY2xhc3NlcyBvZiB3aGljaCB0aGUgY29uc3RydWN0b3Igc2lnbmF0dXJlIGhhcyBjaGFuZ2VkLlxuICAgIGNvbnN0IGRpYWdub3N0aWNzID0gdHNcbiAgICAgIC5nZXRQcmVFbWl0RGlhZ25vc3RpY3ModGhpcy5wcm9ncmFtLCBzb3VyY2VGaWxlKVxuICAgICAgLmZpbHRlcihkaWFnbm9zdGljID0+IHNpZ25hdHVyZUVycm9yRGlhZ25vc3RpY3MuaW5jbHVkZXMoZGlhZ25vc3RpYy5jb2RlKSlcbiAgICAgIC5maWx0ZXIoZGlhZ25vc3RpYyA9PiBkaWFnbm9zdGljLnN0YXJ0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgZm9yIChjb25zdCBkaWFnbm9zdGljIG9mIGRpYWdub3N0aWNzKSB7XG4gICAgICBjb25zdCBub2RlID0gZmluZENvbnN0cnVjdG9yTm9kZShkaWFnbm9zdGljLCBzb3VyY2VGaWxlKTtcblxuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjbGFzc1R5cGUgPSB0aGlzLnR5cGVDaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBjbGFzc1R5cGUuc3ltYm9sICYmIGNsYXNzVHlwZS5zeW1ib2wubmFtZTtcbiAgICAgIGNvbnN0IGlzTmV3RXhwcmVzc2lvbiA9IHRzLmlzTmV3RXhwcmVzc2lvbihub2RlKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjbGFzcyBuYW1lcyBvZiB0aGUgYWN0dWFsIGNvbnN0cnVjdCBzaWduYXR1cmVzIGJlY2F1c2Ugd2UgY2Fubm90IGFzc3VtZSB0aGF0XG4gICAgICAvLyB0aGUgZGlhZ25vc3RpYyByZWZlcnMgdG8gYSBjb25zdHJ1Y3RvciBvZiB0aGUgYWN0dWFsIGV4cHJlc3Npb24uIEluIGNhc2UgdGhlIGNvbnN0cnVjdG9yXG4gICAgICAvLyBpcyBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gZGV0ZWN0IHRoYXQgdGhlIG93bmVyLWNsYXNzIG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBhZGRlZCB0byB0aGVcbiAgICAgIC8vIGNvbnN0cnVjdG9yIGNoZWNrcyB1cGdyYWRlIGRhdGEuIGUuZy4gYGNsYXNzIEN1c3RvbUNhbGVuZGFyIGV4dGVuZHMgTWF0Q2FsZW5kYXIge31gLlxuICAgICAgY29uc3Qgc2lnbmF0dXJlQ2xhc3NOYW1lcyA9IGNsYXNzVHlwZVxuICAgICAgICAuZ2V0Q29uc3RydWN0U2lnbmF0dXJlcygpXG4gICAgICAgIC5tYXAoc2lnbmF0dXJlID0+IGdldENsYXNzRGVjbGFyYXRpb25PZlNpZ25hdHVyZShzaWduYXR1cmUpKVxuICAgICAgICAubWFwKGRlY2xhcmF0aW9uID0+IChkZWNsYXJhdGlvbiAmJiBkZWNsYXJhdGlvbi5uYW1lID8gZGVjbGFyYXRpb24ubmFtZS50ZXh0IDogbnVsbCkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgIC8vIEJlc2lkZXMgY2hlY2tpbmcgdGhlIHNpZ25hdHVyZSBjbGFzcyBuYW1lcywgd2UgbmVlZCB0byBjaGVjayB0aGUgYWN0dWFsIGNsYXNzIG5hbWUgYmVjYXVzZVxuICAgICAgLy8gdGhlcmUgY2FuIGJlIGNsYXNzZXMgd2l0aG91dCBhbiBleHBsaWNpdCBjb25zdHJ1Y3Rvci5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuZGF0YS5pbmNsdWRlcyhjbGFzc05hbWUpICYmXG4gICAgICAgICFzaWduYXR1cmVDbGFzc05hbWVzLnNvbWUobmFtZSA9PiB0aGlzLmRhdGEuaW5jbHVkZXMobmFtZSEpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjbGFzc1NpZ25hdHVyZXMgPSBjbGFzc1R5cGVcbiAgICAgICAgLmdldENvbnN0cnVjdFNpZ25hdHVyZXMoKVxuICAgICAgICAubWFwKHNpZ25hdHVyZSA9PiBnZXRQYXJhbWV0ZXJUeXBlc0Zyb21TaWduYXR1cmUoc2lnbmF0dXJlLCB0aGlzLnR5cGVDaGVja2VyKSk7XG5cbiAgICAgIGNvbnN0IGV4cHJlc3Npb25OYW1lID0gaXNOZXdFeHByZXNzaW9uID8gYG5ldyAke2NsYXNzTmFtZX1gIDogJ3N1cGVyJztcbiAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBjbGFzc1NpZ25hdHVyZXNcbiAgICAgICAgLm1hcChzaWduYXR1cmUgPT5cbiAgICAgICAgICBzaWduYXR1cmUubWFwKHQgPT4gKHQgPT09IG51bGwgPyAnYW55JyA6IHRoaXMudHlwZUNoZWNrZXIudHlwZVRvU3RyaW5nKHQpKSksXG4gICAgICAgIClcbiAgICAgICAgLm1hcChzaWduYXR1cmUgPT4gYCR7ZXhwcmVzc2lvbk5hbWV9KCR7c2lnbmF0dXJlLmpvaW4oJywgJyl9KWApXG4gICAgICAgIC5qb2luKCcgb3IgJyk7XG5cbiAgICAgIHRoaXMuY3JlYXRlRmFpbHVyZUF0Tm9kZShcbiAgICAgICAgbm9kZSxcbiAgICAgICAgYEZvdW5kIFwiJHtjbGFzc05hbWV9XCIgY29uc3RydWN0ZWQgd2l0aCBgICtcbiAgICAgICAgICBgYW4gaW52YWxpZCBzaWduYXR1cmUuIFBsZWFzZSBtYW51YWxseSB1cGRhdGUgdGhlICR7ZXhwcmVzc2lvbk5hbWV9IGV4cHJlc3Npb24gdG8gYCArXG4gICAgICAgICAgYG1hdGNoIHRoZSBuZXcgc2lnbmF0dXJlJHtjbGFzc1NpZ25hdHVyZXMubGVuZ3RoID4gMSA/ICdzJyA6ICcnfTogJHtzaWduYXR1cmVzfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUmVzb2x2ZXMgdGhlIHR5cGUgZm9yIGVhY2ggcGFyYW1ldGVyIGluIHRoZSBzcGVjaWZpZWQgc2lnbmF0dXJlLiAqL1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyVHlwZXNGcm9tU2lnbmF0dXJlKFxuICBzaWduYXR1cmU6IHRzLlNpZ25hdHVyZSxcbiAgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuKTogKHRzLlR5cGUgfCBudWxsKVtdIHtcbiAgcmV0dXJuIHNpZ25hdHVyZVxuICAgIC5nZXRQYXJhbWV0ZXJzKClcbiAgICAubWFwKHBhcmFtID0+XG4gICAgICBwYXJhbS5kZWNsYXJhdGlvbnMgPyB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihwYXJhbS5kZWNsYXJhdGlvbnNbMF0pIDogbnVsbCxcbiAgICApO1xufVxuXG4vKipcbiAqIFdhbGtzIHRocm91Z2ggZWFjaCBub2RlIG9mIGEgc291cmNlIGZpbGUgaW4gb3JkZXIgdG8gZmluZCBhIG5ldy1leHByZXNzaW9uIG5vZGUgb3Igc3VwZXItY2FsbFxuICogZXhwcmVzc2lvbiBub2RlIHRoYXQgaXMgY2FwdHVyZWQgYnkgdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLlxuICovXG5mdW5jdGlvbiBmaW5kQ29uc3RydWN0b3JOb2RlKFxuICBkaWFnbm9zdGljOiB0cy5EaWFnbm9zdGljLFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuKTogdHMuQ2FsbEV4cHJlc3Npb24gfCB0cy5OZXdFeHByZXNzaW9uIHwgbnVsbCB7XG4gIGxldCByZXNvbHZlZE5vZGU6IHRzLk5vZGUgfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBfdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IG5vZGUgY29udGFpbnMgdGhlIGRpYWdub3N0aWMuIElmIHRoZSBub2RlIGNvbnRhaW5zIHRoZSBkaWFnbm9zdGljLFxuICAgIC8vIHdhbGsgZGVlcGVyIGluIG9yZGVyIHRvIGZpbmQgYWxsIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gbm9kZXMuXG4gICAgaWYgKG5vZGUuZ2V0U3RhcnQoKSA8PSBkaWFnbm9zdGljLnN0YXJ0ISAmJiBub2RlLmdldEVuZCgpID49IGRpYWdub3N0aWMuc3RhcnQhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRzLmlzTmV3RXhwcmVzc2lvbihub2RlKSB8fFxuICAgICAgICAodHMuaXNDYWxsRXhwcmVzc2lvbihub2RlKSAmJiBub2RlLmV4cHJlc3Npb24ua2luZCA9PT0gdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQpXG4gICAgICApIHtcbiAgICAgICAgcmVzb2x2ZWROb2RlID0gbm9kZTtcbiAgICAgIH1cblxuICAgICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIF92aXNpdE5vZGUpO1xuICAgIH1cbiAgfTtcblxuICB0cy5mb3JFYWNoQ2hpbGQoc291cmNlRmlsZSwgX3Zpc2l0Tm9kZSk7XG5cbiAgcmV0dXJuIHJlc29sdmVkTm9kZTtcbn1cblxuLyoqIERldGVybWluZXMgdGhlIGNsYXNzIGRlY2xhcmF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgY29uc3RydWN0IHNpZ25hdHVyZS4gKi9cbmZ1bmN0aW9uIGdldENsYXNzRGVjbGFyYXRpb25PZlNpZ25hdHVyZShzaWduYXR1cmU6IHRzLlNpZ25hdHVyZSk6IHRzLkNsYXNzRGVjbGFyYXRpb24gfCBudWxsIHtcbiAgbGV0IG5vZGU6IHRzLk5vZGUgPSBzaWduYXR1cmUuZ2V0RGVjbGFyYXRpb24oKTtcbiAgLy8gSGFuZGxlIHNpZ25hdHVyZXMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBhY3R1YWwgZGVjbGFyYXRpb24uIFRoaXMgaGFwcGVucyBpZiBhIGNsYXNzXG4gIC8vIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXRseSB3cml0dGVuIGNvbnN0cnVjdG9yLlxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB3aGlsZSAoIXRzLmlzU291cmNlRmlsZSgobm9kZSA9IG5vZGUucGFyZW50KSkpIHtcbiAgICBpZiAodHMuaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
|
|
@@ -0,0 +1,139 @@
|
|
|
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.ConstructorSignatureMigration = void 0;
|
|
11
|
+
const ts = require("typescript");
|
|
12
|
+
const migration_1 = require("../../update-tool/migration");
|
|
13
|
+
const version_changes_1 = require("../../update-tool/version-changes");
|
|
14
|
+
/**
|
|
15
|
+
* List of diagnostic codes that refer to pre-emit diagnostics which indicate invalid
|
|
16
|
+
* new expression or super call signatures. See the list of diagnostics here:
|
|
17
|
+
*
|
|
18
|
+
* https://github.com/Microsoft/TypeScript/blob/master/src/compiler/diagnosticMessages.json
|
|
19
|
+
*/
|
|
20
|
+
const signatureErrorDiagnostics = [
|
|
21
|
+
// Type not assignable error diagnostic.
|
|
22
|
+
2345,
|
|
23
|
+
// Constructor argument length invalid diagnostics
|
|
24
|
+
2554, 2555, 2556, 2557,
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Migration that visits every TypeScript new expression or super call and checks if
|
|
28
|
+
* the parameter type signature is invalid and needs to be updated manually.
|
|
29
|
+
*/
|
|
30
|
+
class ConstructorSignatureMigration extends migration_1.Migration {
|
|
31
|
+
constructor() {
|
|
32
|
+
super(...arguments);
|
|
33
|
+
// Note that the data for this rule is not distinguished based on the target version because
|
|
34
|
+
// we don't keep track of the new signature and don't want to update incrementally.
|
|
35
|
+
// See: https://github.com/angular/components/pull/12970#issuecomment-418337566
|
|
36
|
+
this.data = (0, version_changes_1.getAllChanges)(this.upgradeData.constructorChecks);
|
|
37
|
+
// Only enable the migration rule if there is upgrade data.
|
|
38
|
+
this.enabled = this.data.length !== 0;
|
|
39
|
+
}
|
|
40
|
+
visitNode(node) {
|
|
41
|
+
if (ts.isSourceFile(node)) {
|
|
42
|
+
this._visitSourceFile(node);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Method that will be called for each source file of the upgrade project. In order to
|
|
47
|
+
* properly determine invalid constructor signatures, we take advantage of the pre-emit
|
|
48
|
+
* diagnostics from TypeScript.
|
|
49
|
+
*
|
|
50
|
+
* By using the diagnostics, the migration can handle type assignability. Not using
|
|
51
|
+
* diagnostics would mean that we need to use simple type equality checking which is
|
|
52
|
+
* too strict. See related issue: https://github.com/Microsoft/TypeScript/issues/9879
|
|
53
|
+
*/
|
|
54
|
+
_visitSourceFile(sourceFile) {
|
|
55
|
+
// List of classes of which the constructor signature has changed.
|
|
56
|
+
const diagnostics = ts
|
|
57
|
+
.getPreEmitDiagnostics(this.program, sourceFile)
|
|
58
|
+
.filter(diagnostic => signatureErrorDiagnostics.includes(diagnostic.code))
|
|
59
|
+
.filter(diagnostic => diagnostic.start !== undefined);
|
|
60
|
+
for (const diagnostic of diagnostics) {
|
|
61
|
+
const node = findConstructorNode(diagnostic, sourceFile);
|
|
62
|
+
if (!node) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const classType = this.typeChecker.getTypeAtLocation(node.expression);
|
|
66
|
+
const className = classType.symbol && classType.symbol.name;
|
|
67
|
+
const isNewExpression = ts.isNewExpression(node);
|
|
68
|
+
// Determine the class names of the actual construct signatures because we cannot assume that
|
|
69
|
+
// the diagnostic refers to a constructor of the actual expression. In case the constructor
|
|
70
|
+
// is inherited, we need to detect that the owner-class of the constructor is added to the
|
|
71
|
+
// constructor checks upgrade data. e.g. `class CustomCalendar extends MatCalendar {}`.
|
|
72
|
+
const signatureClassNames = classType
|
|
73
|
+
.getConstructSignatures()
|
|
74
|
+
.map(signature => getClassDeclarationOfSignature(signature))
|
|
75
|
+
.map(declaration => (declaration && declaration.name ? declaration.name.text : null))
|
|
76
|
+
.filter(Boolean);
|
|
77
|
+
// Besides checking the signature class names, we need to check the actual class name because
|
|
78
|
+
// there can be classes without an explicit constructor.
|
|
79
|
+
if (!this.data.includes(className) &&
|
|
80
|
+
!signatureClassNames.some(name => this.data.includes(name))) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const classSignatures = classType
|
|
84
|
+
.getConstructSignatures()
|
|
85
|
+
.map(signature => getParameterTypesFromSignature(signature, this.typeChecker));
|
|
86
|
+
const expressionName = isNewExpression ? `new ${className}` : 'super';
|
|
87
|
+
const signatures = classSignatures
|
|
88
|
+
.map(signature => signature.map(t => (t === null ? 'any' : this.typeChecker.typeToString(t))))
|
|
89
|
+
.map(signature => `${expressionName}(${signature.join(', ')})`)
|
|
90
|
+
.join(' or ');
|
|
91
|
+
this.createFailureAtNode(node, `Found "${className}" constructed with ` +
|
|
92
|
+
`an invalid signature. Please manually update the ${expressionName} expression to ` +
|
|
93
|
+
`match the new signature${classSignatures.length > 1 ? 's' : ''}: ${signatures}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
exports.ConstructorSignatureMigration = ConstructorSignatureMigration;
|
|
98
|
+
/** Resolves the type for each parameter in the specified signature. */
|
|
99
|
+
function getParameterTypesFromSignature(signature, typeChecker) {
|
|
100
|
+
return signature
|
|
101
|
+
.getParameters()
|
|
102
|
+
.map(param => param.declarations ? typeChecker.getTypeAtLocation(param.declarations[0]) : null);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Walks through each node of a source file in order to find a new-expression node or super-call
|
|
106
|
+
* expression node that is captured by the specified diagnostic.
|
|
107
|
+
*/
|
|
108
|
+
function findConstructorNode(diagnostic, sourceFile) {
|
|
109
|
+
let resolvedNode = null;
|
|
110
|
+
const _visitNode = (node) => {
|
|
111
|
+
// Check whether the current node contains the diagnostic. If the node contains the diagnostic,
|
|
112
|
+
// walk deeper in order to find all constructor expression nodes.
|
|
113
|
+
if (node.getStart() <= diagnostic.start && node.getEnd() >= diagnostic.start) {
|
|
114
|
+
if (ts.isNewExpression(node) ||
|
|
115
|
+
(ts.isCallExpression(node) && node.expression.kind === ts.SyntaxKind.SuperKeyword)) {
|
|
116
|
+
resolvedNode = node;
|
|
117
|
+
}
|
|
118
|
+
ts.forEachChild(node, _visitNode);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
ts.forEachChild(sourceFile, _visitNode);
|
|
122
|
+
return resolvedNode;
|
|
123
|
+
}
|
|
124
|
+
/** Determines the class declaration of the specified construct signature. */
|
|
125
|
+
function getClassDeclarationOfSignature(signature) {
|
|
126
|
+
let node = signature.getDeclaration();
|
|
127
|
+
// Handle signatures which don't have an actual declaration. This happens if a class
|
|
128
|
+
// does not have an explicitly written constructor.
|
|
129
|
+
if (!node) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
while (!ts.isSourceFile((node = node.parent))) {
|
|
133
|
+
if (ts.isClassDeclaration(node)) {
|
|
134
|
+
return node;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3Itc2lnbmF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9zY2hlbWF0aWNzL25nLXVwZGF0ZS9taWdyYXRpb25zL2NvbnN0cnVjdG9yLXNpZ25hdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxpQ0FBaUM7QUFDakMsMkRBQXNEO0FBQ3RELHVFQUFnRTtBQUdoRTs7Ozs7R0FLRztBQUNILE1BQU0seUJBQXlCLEdBQUc7SUFDaEMsd0NBQXdDO0lBQ3hDLElBQUk7SUFDSixrREFBa0Q7SUFDbEQsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtDQUN2QixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBYSw2QkFBOEIsU0FBUSxxQkFBc0I7SUFBekU7O1FBQ0UsNEZBQTRGO1FBQzVGLG1GQUFtRjtRQUNuRiwrRUFBK0U7UUFDL0UsU0FBSSxHQUFHLElBQUEsK0JBQWEsRUFBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFekQsMkRBQTJEO1FBQzNELFlBQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUEwRW5DLENBQUM7SUF4RVUsU0FBUyxDQUFDLElBQWE7UUFDOUIsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjtJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLGdCQUFnQixDQUFDLFVBQXlCO1FBQ2hELGtFQUFrRTtRQUNsRSxNQUFNLFdBQVcsR0FBRyxFQUFFO2FBQ25CLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDO2FBQy9DLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLHlCQUF5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O0lBQ3BGLG1EQUFtRDtJQUNuRCxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1QsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUNELE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO1FBQzdDLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7TWlncmF0aW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC9taWdyYXRpb24nO1xuaW1wb3J0IHtnZXRBbGxDaGFuZ2VzfSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC92ZXJzaW9uLWNoYW5nZXMnO1xuaW1wb3J0IHtVcGdyYWRlRGF0YX0gZnJvbSAnLi4vdXBncmFkZS1kYXRhJztcblxuLyoqXG4gKiBMaXN0IG9mIGRpYWdub3N0aWMgY29kZXMgdGhhdCByZWZlciB0byBwcmUtZW1pdCBkaWFnbm9zdGljcyB3aGljaCBpbmRpY2F0ZSBpbnZhbGlkXG4gKiBuZXcgZXhwcmVzc2lvbiBvciBzdXBlciBjYWxsIHNpZ25hdHVyZXMuIFNlZSB0aGUgbGlzdCBvZiBkaWFnbm9zdGljcyBoZXJlOlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9ibG9iL21hc3Rlci9zcmMvY29tcGlsZXIvZGlhZ25vc3RpY01lc3NhZ2VzLmpzb25cbiAqL1xuY29uc3Qgc2lnbmF0dXJlRXJyb3JEaWFnbm9zdGljcyA9IFtcbiAgLy8gVHlwZSBub3QgYXNzaWduYWJsZSBlcnJvciBkaWFnbm9zdGljLlxuICAyMzQ1LFxuICAvLyBDb25zdHJ1Y3RvciBhcmd1bWVudCBsZW5ndGggaW52YWxpZCBkaWFnbm9zdGljc1xuICAyNTU0LCAyNTU1LCAyNTU2LCAyNTU3LFxuXTtcblxuLyoqXG4gKiBNaWdyYXRpb24gdGhhdCB2aXNpdHMgZXZlcnkgVHlwZVNjcmlwdCBuZXcgZXhwcmVzc2lvbiBvciBzdXBlciBjYWxsIGFuZCBjaGVja3MgaWZcbiAqIHRoZSBwYXJhbWV0ZXIgdHlwZSBzaWduYXR1cmUgaXMgaW52YWxpZCBhbmQgbmVlZHMgdG8gYmUgdXBkYXRlZCBtYW51YWxseS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnN0cnVjdG9yU2lnbmF0dXJlTWlncmF0aW9uIGV4dGVuZHMgTWlncmF0aW9uPFVwZ3JhZGVEYXRhPiB7XG4gIC8vIE5vdGUgdGhhdCB0aGUgZGF0YSBmb3IgdGhpcyBydWxlIGlzIG5vdCBkaXN0aW5ndWlzaGVkIGJhc2VkIG9uIHRoZSB0YXJnZXQgdmVyc2lvbiBiZWNhdXNlXG4gIC8vIHdlIGRvbid0IGtlZXAgdHJhY2sgb2YgdGhlIG5ldyBzaWduYXR1cmUgYW5kIGRvbid0IHdhbnQgdG8gdXBkYXRlIGluY3JlbWVudGFsbHkuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzEyOTcwI2lzc3VlY29tbWVudC00MTgzMzc1NjZcbiAgZGF0YSA9IGdldEFsbENoYW5nZXModGhpcy51cGdyYWRlRGF0YS5jb25zdHJ1Y3RvckNoZWNrcyk7XG5cbiAgLy8gT25seSBlbmFibGUgdGhlIG1pZ3JhdGlvbiBydWxlIGlmIHRoZXJlIGlzIHVwZ3JhZGUgZGF0YS5cbiAgZW5hYmxlZCA9IHRoaXMuZGF0YS5sZW5ndGggIT09IDA7XG5cbiAgb3ZlcnJpZGUgdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpOiB2b2lkIHtcbiAgICBpZiAodHMuaXNTb3VyY2VGaWxlKG5vZGUpKSB7XG4gICAgICB0aGlzLl92aXNpdFNvdXJjZUZpbGUobm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0aGF0IHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIHNvdXJjZSBmaWxlIG9mIHRoZSB1cGdyYWRlIHByb2plY3QuIEluIG9yZGVyIHRvXG4gICAqIHByb3Blcmx5IGRldGVybWluZSBpbnZhbGlkIGNvbnN0cnVjdG9yIHNpZ25hdHVyZXMsIHdlIHRha2UgYWR2YW50YWdlIG9mIHRoZSBwcmUtZW1pdFxuICAgKiBkaWFnbm9zdGljcyBmcm9tIFR5cGVTY3JpcHQuXG4gICAqXG4gICAqIEJ5IHVzaW5nIHRoZSBkaWFnbm9zdGljcywgdGhlIG1pZ3JhdGlvbiBjYW4gaGFuZGxlIHR5cGUgYXNzaWduYWJpbGl0eS4gTm90IHVzaW5nXG4gICAqIGRpYWdub3N0aWNzIHdvdWxkIG1lYW4gdGhhdCB3ZSBuZWVkIHRvIHVzZSBzaW1wbGUgdHlwZSBlcXVhbGl0eSBjaGVja2luZyB3aGljaCBpc1xuICAgKiB0b28gc3RyaWN0LiBTZWUgcmVsYXRlZCBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy85ODc5XG4gICAqL1xuICBwcml2YXRlIF92aXNpdFNvdXJjZUZpbGUoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkge1xuICAgIC8vIExpc3Qgb2YgY2xhc3NlcyBvZiB3aGljaCB0aGUgY29uc3RydWN0b3Igc2lnbmF0dXJlIGhhcyBjaGFuZ2VkLlxuICAgIGNvbnN0IGRpYWdub3N0aWNzID0gdHNcbiAgICAgIC5nZXRQcmVFbWl0RGlhZ25vc3RpY3ModGhpcy5wcm9ncmFtLCBzb3VyY2VGaWxlKVxuICAgICAgLmZpbHRlcihkaWFnbm9zdGljID0+IHNpZ25hdHVyZUVycm9yRGlhZ25vc3RpY3MuaW5jbHVkZXMoZGlhZ25vc3RpYy5jb2RlKSlcbiAgICAgIC5maWx0ZXIoZGlhZ25vc3RpYyA9PiBkaWFnbm9zdGljLnN0YXJ0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgZm9yIChjb25zdCBkaWFnbm9zdGljIG9mIGRpYWdub3N0aWNzKSB7XG4gICAgICBjb25zdCBub2RlID0gZmluZENvbnN0cnVjdG9yTm9kZShkaWFnbm9zdGljLCBzb3VyY2VGaWxlKTtcblxuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjbGFzc1R5cGUgPSB0aGlzLnR5cGVDaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKG5vZGUuZXhwcmVzc2lvbik7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBjbGFzc1R5cGUuc3ltYm9sICYmIGNsYXNzVHlwZS5zeW1ib2wubmFtZTtcbiAgICAgIGNvbnN0IGlzTmV3RXhwcmVzc2lvbiA9IHRzLmlzTmV3RXhwcmVzc2lvbihub2RlKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjbGFzcyBuYW1lcyBvZiB0aGUgYWN0dWFsIGNvbnN0cnVjdCBzaWduYXR1cmVzIGJlY2F1c2Ugd2UgY2Fubm90IGFzc3VtZSB0aGF0XG4gICAgICAvLyB0aGUgZGlhZ25vc3RpYyByZWZlcnMgdG8gYSBjb25zdHJ1Y3RvciBvZiB0aGUgYWN0dWFsIGV4cHJlc3Npb24uIEluIGNhc2UgdGhlIGNvbnN0cnVjdG9yXG4gICAgICAvLyBpcyBpbmhlcml0ZWQsIHdlIG5lZWQgdG8gZGV0ZWN0IHRoYXQgdGhlIG93bmVyLWNsYXNzIG9mIHRoZSBjb25zdHJ1Y3RvciBpcyBhZGRlZCB0byB0aGVcbiAgICAgIC8vIGNvbnN0cnVjdG9yIGNoZWNrcyB1cGdyYWRlIGRhdGEuIGUuZy4gYGNsYXNzIEN1c3RvbUNhbGVuZGFyIGV4dGVuZHMgTWF0Q2FsZW5kYXIge31gLlxuICAgICAgY29uc3Qgc2lnbmF0dXJlQ2xhc3NOYW1lcyA9IGNsYXNzVHlwZVxuICAgICAgICAuZ2V0Q29uc3RydWN0U2lnbmF0dXJlcygpXG4gICAgICAgIC5tYXAoc2lnbmF0dXJlID0+IGdldENsYXNzRGVjbGFyYXRpb25PZlNpZ25hdHVyZShzaWduYXR1cmUpKVxuICAgICAgICAubWFwKGRlY2xhcmF0aW9uID0+IChkZWNsYXJhdGlvbiAmJiBkZWNsYXJhdGlvbi5uYW1lID8gZGVjbGFyYXRpb24ubmFtZS50ZXh0IDogbnVsbCkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgIC8vIEJlc2lkZXMgY2hlY2tpbmcgdGhlIHNpZ25hdHVyZSBjbGFzcyBuYW1lcywgd2UgbmVlZCB0byBjaGVjayB0aGUgYWN0dWFsIGNsYXNzIG5hbWUgYmVjYXVzZVxuICAgICAgLy8gdGhlcmUgY2FuIGJlIGNsYXNzZXMgd2l0aG91dCBhbiBleHBsaWNpdCBjb25zdHJ1Y3Rvci5cbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMuZGF0YS5pbmNsdWRlcyhjbGFzc05hbWUpICYmXG4gICAgICAgICFzaWduYXR1cmVDbGFzc05hbWVzLnNvbWUobmFtZSA9PiB0aGlzLmRhdGEuaW5jbHVkZXMobmFtZSEpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjbGFzc1NpZ25hdHVyZXMgPSBjbGFzc1R5cGVcbiAgICAgICAgLmdldENvbnN0cnVjdFNpZ25hdHVyZXMoKVxuICAgICAgICAubWFwKHNpZ25hdHVyZSA9PiBnZXRQYXJhbWV0ZXJUeXBlc0Zyb21TaWduYXR1cmUoc2lnbmF0dXJlLCB0aGlzLnR5cGVDaGVja2VyKSk7XG5cbiAgICAgIGNvbnN0IGV4cHJlc3Npb25OYW1lID0gaXNOZXdFeHByZXNzaW9uID8gYG5ldyAke2NsYXNzTmFtZX1gIDogJ3N1cGVyJztcbiAgICAgIGNvbnN0IHNpZ25hdHVyZXMgPSBjbGFzc1NpZ25hdHVyZXNcbiAgICAgICAgLm1hcChzaWduYXR1cmUgPT5cbiAgICAgICAgICBzaWduYXR1cmUubWFwKHQgPT4gKHQgPT09IG51bGwgPyAnYW55JyA6IHRoaXMudHlwZUNoZWNrZXIudHlwZVRvU3RyaW5nKHQpKSksXG4gICAgICAgIClcbiAgICAgICAgLm1hcChzaWduYXR1cmUgPT4gYCR7ZXhwcmVzc2lvbk5hbWV9KCR7c2lnbmF0dXJlLmpvaW4oJywgJyl9KWApXG4gICAgICAgIC5qb2luKCcgb3IgJyk7XG5cbiAgICAgIHRoaXMuY3JlYXRlRmFpbHVyZUF0Tm9kZShcbiAgICAgICAgbm9kZSxcbiAgICAgICAgYEZvdW5kIFwiJHtjbGFzc05hbWV9XCIgY29uc3RydWN0ZWQgd2l0aCBgICtcbiAgICAgICAgICBgYW4gaW52YWxpZCBzaWduYXR1cmUuIFBsZWFzZSBtYW51YWxseSB1cGRhdGUgdGhlICR7ZXhwcmVzc2lvbk5hbWV9IGV4cHJlc3Npb24gdG8gYCArXG4gICAgICAgICAgYG1hdGNoIHRoZSBuZXcgc2lnbmF0dXJlJHtjbGFzc1NpZ25hdHVyZXMubGVuZ3RoID4gMSA/ICdzJyA6ICcnfTogJHtzaWduYXR1cmVzfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUmVzb2x2ZXMgdGhlIHR5cGUgZm9yIGVhY2ggcGFyYW1ldGVyIGluIHRoZSBzcGVjaWZpZWQgc2lnbmF0dXJlLiAqL1xuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyVHlwZXNGcm9tU2lnbmF0dXJlKFxuICBzaWduYXR1cmU6IHRzLlNpZ25hdHVyZSxcbiAgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuKTogKHRzLlR5cGUgfCBudWxsKVtdIHtcbiAgcmV0dXJuIHNpZ25hdHVyZVxuICAgIC5nZXRQYXJhbWV0ZXJzKClcbiAgICAubWFwKHBhcmFtID0+XG4gICAgICBwYXJhbS5kZWNsYXJhdGlvbnMgPyB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihwYXJhbS5kZWNsYXJhdGlvbnNbMF0pIDogbnVsbCxcbiAgICApO1xufVxuXG4vKipcbiAqIFdhbGtzIHRocm91Z2ggZWFjaCBub2RlIG9mIGEgc291cmNlIGZpbGUgaW4gb3JkZXIgdG8gZmluZCBhIG5ldy1leHByZXNzaW9uIG5vZGUgb3Igc3VwZXItY2FsbFxuICogZXhwcmVzc2lvbiBub2RlIHRoYXQgaXMgY2FwdHVyZWQgYnkgdGhlIHNwZWNpZmllZCBkaWFnbm9zdGljLlxuICovXG5mdW5jdGlvbiBmaW5kQ29uc3RydWN0b3JOb2RlKFxuICBkaWFnbm9zdGljOiB0cy5EaWFnbm9zdGljLFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuKTogdHMuQ2FsbEV4cHJlc3Npb24gfCB0cy5OZXdFeHByZXNzaW9uIHwgbnVsbCB7XG4gIGxldCByZXNvbHZlZE5vZGU6IHRzLk5vZGUgfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBfdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBjdXJyZW50IG5vZGUgY29udGFpbnMgdGhlIGRpYWdub3N0aWMuIElmIHRoZSBub2RlIGNvbnRhaW5zIHRoZSBkaWFnbm9zdGljLFxuICAgIC8vIHdhbGsgZGVlcGVyIGluIG9yZGVyIHRvIGZpbmQgYWxsIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gbm9kZXMuXG4gICAgaWYgKG5vZGUuZ2V0U3RhcnQoKSA8PSBkaWFnbm9zdGljLnN0YXJ0ISAmJiBub2RlLmdldEVuZCgpID49IGRpYWdub3N0aWMuc3RhcnQhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRzLmlzTmV3RXhwcmVzc2lvbihub2RlKSB8fFxuICAgICAgICAodHMuaXNDYWxsRXhwcmVzc2lvbihub2RlKSAmJiBub2RlLmV4cHJlc3Npb24ua2luZCA9PT0gdHMuU3ludGF4S2luZC5TdXBlcktleXdvcmQpXG4gICAgICApIHtcbiAgICAgICAgcmVzb2x2ZWROb2RlID0gbm9kZTtcbiAgICAgIH1cblxuICAgICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIF92aXNpdE5vZGUpO1xuICAgIH1cbiAgfTtcblxuICB0cy5mb3JFYWNoQ2hpbGQoc291cmNlRmlsZSwgX3Zpc2l0Tm9kZSk7XG5cbiAgcmV0dXJuIHJlc29sdmVkTm9kZTtcbn1cblxuLyoqIERldGVybWluZXMgdGhlIGNsYXNzIGRlY2xhcmF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgY29uc3RydWN0IHNpZ25hdHVyZS4gKi9cbmZ1bmN0aW9uIGdldENsYXNzRGVjbGFyYXRpb25PZlNpZ25hdHVyZShzaWduYXR1cmU6IHRzLlNpZ25hdHVyZSk6IHRzLkNsYXNzRGVjbGFyYXRpb24gfCBudWxsIHtcbiAgbGV0IG5vZGU6IHRzLk5vZGUgPSBzaWduYXR1cmUuZ2V0RGVjbGFyYXRpb24oKTtcbiAgLy8gSGFuZGxlIHNpZ25hdHVyZXMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBhY3R1YWwgZGVjbGFyYXRpb24uIFRoaXMgaGFwcGVucyBpZiBhIGNsYXNzXG4gIC8vIGRvZXMgbm90IGhhdmUgYW4gZXhwbGljaXRseSB3cml0dGVuIGNvbnN0cnVjdG9yLlxuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB3aGlsZSAoIXRzLmlzU291cmNlRmlsZSgobm9kZSA9IG5vZGUucGFyZW50KSkpIHtcbiAgICBpZiAodHMuaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import * as ts from 'typescript';
|
|
9
|
+
import { ResolvedResource } from '../../update-tool/component-resource-collector';
|
|
10
|
+
import { Migration } from '../../update-tool/migration';
|
|
11
|
+
import { CssSelectorUpgradeData } from '../data/css-selectors';
|
|
12
|
+
import { UpgradeData } from '../upgrade-data';
|
|
13
|
+
/**
|
|
14
|
+
* Migration that walks through every string literal, template and stylesheet in
|
|
15
|
+
* order to migrate outdated CSS selectors to the new selector.
|
|
16
|
+
*/
|
|
17
|
+
export declare class CssSelectorsMigration extends Migration<UpgradeData> {
|
|
18
|
+
/** Change data that upgrades to the specified target version. */
|
|
19
|
+
data: CssSelectorUpgradeData[];
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
visitNode(node: ts.Node): void;
|
|
22
|
+
visitTemplate(template: ResolvedResource): void;
|
|
23
|
+
visitStylesheet(stylesheet: ResolvedResource): void;
|
|
24
|
+
private _visitStringLiteralLike;
|
|
25
|
+
private _replaceSelector;
|
|
26
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
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.CssSelectorsMigration = void 0;
|
|
11
|
+
const ts = require("typescript");
|
|
12
|
+
const migration_1 = require("../../update-tool/migration");
|
|
13
|
+
const literal_1 = require("../typescript/literal");
|
|
14
|
+
const upgrade_data_1 = require("../upgrade-data");
|
|
15
|
+
/**
|
|
16
|
+
* Migration that walks through every string literal, template and stylesheet in
|
|
17
|
+
* order to migrate outdated CSS selectors to the new selector.
|
|
18
|
+
*/
|
|
19
|
+
class CssSelectorsMigration extends migration_1.Migration {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
/** Change data that upgrades to the specified target version. */
|
|
23
|
+
this.data = (0, upgrade_data_1.getVersionUpgradeData)(this, 'cssSelectors');
|
|
24
|
+
// Only enable the migration rule if there is upgrade data.
|
|
25
|
+
this.enabled = this.data.length !== 0;
|
|
26
|
+
}
|
|
27
|
+
visitNode(node) {
|
|
28
|
+
if (ts.isStringLiteralLike(node)) {
|
|
29
|
+
this._visitStringLiteralLike(node);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
visitTemplate(template) {
|
|
33
|
+
this.data.forEach(data => {
|
|
34
|
+
if (data.replaceIn && !data.replaceIn.html) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
(0, literal_1.findAllSubstringIndices)(template.content, data.replace)
|
|
38
|
+
.map(offset => template.start + offset)
|
|
39
|
+
.forEach(start => this._replaceSelector(template.filePath, start, data));
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
visitStylesheet(stylesheet) {
|
|
43
|
+
this.data.forEach(data => {
|
|
44
|
+
if (data.replaceIn && !data.replaceIn.stylesheet) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
(0, literal_1.findAllSubstringIndices)(stylesheet.content, data.replace)
|
|
48
|
+
.map(offset => stylesheet.start + offset)
|
|
49
|
+
.forEach(start => this._replaceSelector(stylesheet.filePath, start, data));
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
_visitStringLiteralLike(node) {
|
|
53
|
+
if (node.parent && node.parent.kind !== ts.SyntaxKind.CallExpression) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const textContent = node.getText();
|
|
57
|
+
const filePath = this.fileSystem.resolve(node.getSourceFile().fileName);
|
|
58
|
+
this.data.forEach(data => {
|
|
59
|
+
if (data.replaceIn && !data.replaceIn.tsStringLiterals) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
(0, literal_1.findAllSubstringIndices)(textContent, data.replace)
|
|
63
|
+
.map(offset => node.getStart() + offset)
|
|
64
|
+
.forEach(start => this._replaceSelector(filePath, start, data));
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
_replaceSelector(filePath, start, data) {
|
|
68
|
+
this.fileSystem
|
|
69
|
+
.edit(filePath)
|
|
70
|
+
.remove(start, data.replace.length)
|
|
71
|
+
.insertRight(start, data.replaceWith);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.CssSelectorsMigration = CssSelectorsMigration;
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLXNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy9uZy11cGRhdGUvbWlncmF0aW9ucy9jc3Mtc2VsZWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVILGlDQUFpQztBQUdqQywyREFBc0Q7QUFFdEQsbURBQThEO0FBQzlELGtEQUFtRTtBQUVuRTs7O0dBR0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHFCQUFzQjtJQUFqRTs7UUFDRSxpRUFBaUU7UUFDakUsU0FBSSxHQUE2QixJQUFBLG9DQUFxQixFQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUU3RSwyREFBMkQ7UUFDM0QsWUFBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQXlEbkMsQ0FBQztJQXZEVSxTQUFTLENBQUMsSUFBYTtRQUM5QixJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRVEsYUFBYSxDQUFDLFFBQTBCO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUMxQyxPQUFPO2FBQ1I7WUFFRCxJQUFBLGlDQUF1QixFQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDcEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7aUJBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLGVBQWUsQ0FBQyxVQUE0QjtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRTtnQkFDaEQsT0FBTzthQUNSO1lBRUQsSUFBQSxpQ0FBdUIsRUFBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ3RELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2lCQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxJQUEwQjtRQUN4RCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7WUFDcEUsT0FBTztTQUNSO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFO2dCQUN0RCxPQUFPO2FBQ1I7WUFFRCxJQUFBLGlDQUF1QixFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUMvQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDO2lCQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQXVCLEVBQUUsS0FBYSxFQUFFLElBQTRCO1FBQzNGLElBQUksQ0FBQyxVQUFVO2FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNkLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7YUFDbEMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBOURELHNEQThEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7V29ya3NwYWNlUGF0aH0gZnJvbSAnLi4vLi4vdXBkYXRlLXRvb2wvZmlsZS1zeXN0ZW0nO1xuaW1wb3J0IHtSZXNvbHZlZFJlc291cmNlfSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC9jb21wb25lbnQtcmVzb3VyY2UtY29sbGVjdG9yJztcbmltcG9ydCB7TWlncmF0aW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC9taWdyYXRpb24nO1xuaW1wb3J0IHtDc3NTZWxlY3RvclVwZ3JhZGVEYXRhfSBmcm9tICcuLi9kYXRhL2Nzcy1zZWxlY3RvcnMnO1xuaW1wb3J0IHtmaW5kQWxsU3Vic3RyaW5nSW5kaWNlc30gZnJvbSAnLi4vdHlwZXNjcmlwdC9saXRlcmFsJztcbmltcG9ydCB7Z2V0VmVyc2lvblVwZ3JhZGVEYXRhLCBVcGdyYWRlRGF0YX0gZnJvbSAnLi4vdXBncmFkZS1kYXRhJztcblxuLyoqXG4gKiBNaWdyYXRpb24gdGhhdCB3YWxrcyB0aHJvdWdoIGV2ZXJ5IHN0cmluZyBsaXRlcmFsLCB0ZW1wbGF0ZSBhbmQgc3R5bGVzaGVldCBpblxuICogb3JkZXIgdG8gbWlncmF0ZSBvdXRkYXRlZCBDU1Mgc2VsZWN0b3JzIHRvIHRoZSBuZXcgc2VsZWN0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBDc3NTZWxlY3RvcnNNaWdyYXRpb24gZXh0ZW5kcyBNaWdyYXRpb248VXBncmFkZURhdGE+IHtcbiAgLyoqIENoYW5nZSBkYXRhIHRoYXQgdXBncmFkZXMgdG8gdGhlIHNwZWNpZmllZCB0YXJnZXQgdmVyc2lvbi4gKi9cbiAgZGF0YTogQ3NzU2VsZWN0b3JVcGdyYWRlRGF0YVtdID0gZ2V0VmVyc2lvblVwZ3JhZGVEYXRhKHRoaXMsICdjc3NTZWxlY3RvcnMnKTtcblxuICAvLyBPbmx5IGVuYWJsZSB0aGUgbWlncmF0aW9uIHJ1bGUgaWYgdGhlcmUgaXMgdXBncmFkZSBkYXRhLlxuICBlbmFibGVkID0gdGhpcy5kYXRhLmxlbmd0aCAhPT0gMDtcblxuICBvdmVycmlkZSB2aXNpdE5vZGUobm9kZTogdHMuTm9kZSk6IHZvaWQge1xuICAgIGlmICh0cy5pc1N0cmluZ0xpdGVyYWxMaWtlKG5vZGUpKSB7XG4gICAgICB0aGlzLl92aXNpdFN0cmluZ0xpdGVyYWxMaWtlKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0VGVtcGxhdGUodGVtcGxhdGU6IFJlc29sdmVkUmVzb3VyY2UpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgIGlmIChkYXRhLnJlcGxhY2VJbiAmJiAhZGF0YS5yZXBsYWNlSW4uaHRtbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZpbmRBbGxTdWJzdHJpbmdJbmRpY2VzKHRlbXBsYXRlLmNvbnRlbnQsIGRhdGEucmVwbGFjZSlcbiAgICAgICAgLm1hcChvZmZzZXQgPT4gdGVtcGxhdGUuc3RhcnQgKyBvZmZzZXQpXG4gICAgICAgIC5mb3JFYWNoKHN0YXJ0ID0+IHRoaXMuX3JlcGxhY2VTZWxlY3Rvcih0ZW1wbGF0ZS5maWxlUGF0aCwgc3RhcnQsIGRhdGEpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0U3R5bGVzaGVldChzdHlsZXNoZWV0OiBSZXNvbHZlZFJlc291cmNlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICBpZiAoZGF0YS5yZXBsYWNlSW4gJiYgIWRhdGEucmVwbGFjZUluLnN0eWxlc2hlZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaW5kQWxsU3Vic3RyaW5nSW5kaWNlcyhzdHlsZXNoZWV0LmNvbnRlbnQsIGRhdGEucmVwbGFjZSlcbiAgICAgICAgLm1hcChvZmZzZXQgPT4gc3R5bGVzaGVldC5zdGFydCArIG9mZnNldClcbiAgICAgICAgLmZvckVhY2goc3RhcnQgPT4gdGhpcy5fcmVwbGFjZVNlbGVjdG9yKHN0eWxlc2hlZXQuZmlsZVBhdGgsIHN0YXJ0LCBkYXRhKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF92aXNpdFN0cmluZ0xpdGVyYWxMaWtlKG5vZGU6IHRzLlN0cmluZ0xpdGVyYWxMaWtlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50ICYmIG5vZGUucGFyZW50LmtpbmQgIT09IHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IG5vZGUuZ2V0VGV4dCgpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5maWxlU3lzdGVtLnJlc29sdmUobm9kZS5nZXRTb3VyY2VGaWxlKCkuZmlsZU5hbWUpO1xuXG4gICAgdGhpcy5kYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICBpZiAoZGF0YS5yZXBsYWNlSW4gJiYgIWRhdGEucmVwbGFjZUluLnRzU3RyaW5nTGl0ZXJhbHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaW5kQWxsU3Vic3RyaW5nSW5kaWNlcyh0ZXh0Q29udGVudCwgZGF0YS5yZXBsYWNlKVxuICAgICAgICAubWFwKG9mZnNldCA9PiBub2RlLmdldFN0YXJ0KCkgKyBvZmZzZXQpXG4gICAgICAgIC5mb3JFYWNoKHN0YXJ0ID0+IHRoaXMuX3JlcGxhY2VTZWxlY3RvcihmaWxlUGF0aCwgc3RhcnQsIGRhdGEpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcGxhY2VTZWxlY3RvcihmaWxlUGF0aDogV29ya3NwYWNlUGF0aCwgc3RhcnQ6IG51bWJlciwgZGF0YTogQ3NzU2VsZWN0b3JVcGdyYWRlRGF0YSkge1xuICAgIHRoaXMuZmlsZVN5c3RlbVxuICAgICAgLmVkaXQoZmlsZVBhdGgpXG4gICAgICAucmVtb3ZlKHN0YXJ0LCBkYXRhLnJlcGxhY2UubGVuZ3RoKVxuICAgICAgLmluc2VydFJpZ2h0KHN0YXJ0LCBkYXRhLnJlcGxhY2VXaXRoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,75 @@
|
|
|
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.CssSelectorsMigration = void 0;
|
|
11
|
+
const ts = require("typescript");
|
|
12
|
+
const migration_1 = require("../../update-tool/migration");
|
|
13
|
+
const literal_1 = require("../typescript/literal");
|
|
14
|
+
const upgrade_data_1 = require("../upgrade-data");
|
|
15
|
+
/**
|
|
16
|
+
* Migration that walks through every string literal, template and stylesheet in
|
|
17
|
+
* order to migrate outdated CSS selectors to the new selector.
|
|
18
|
+
*/
|
|
19
|
+
class CssSelectorsMigration extends migration_1.Migration {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
/** Change data that upgrades to the specified target version. */
|
|
23
|
+
this.data = (0, upgrade_data_1.getVersionUpgradeData)(this, 'cssSelectors');
|
|
24
|
+
// Only enable the migration rule if there is upgrade data.
|
|
25
|
+
this.enabled = this.data.length !== 0;
|
|
26
|
+
}
|
|
27
|
+
visitNode(node) {
|
|
28
|
+
if (ts.isStringLiteralLike(node)) {
|
|
29
|
+
this._visitStringLiteralLike(node);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
visitTemplate(template) {
|
|
33
|
+
this.data.forEach(data => {
|
|
34
|
+
if (data.replaceIn && !data.replaceIn.html) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
(0, literal_1.findAllSubstringIndices)(template.content, data.replace)
|
|
38
|
+
.map(offset => template.start + offset)
|
|
39
|
+
.forEach(start => this._replaceSelector(template.filePath, start, data));
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
visitStylesheet(stylesheet) {
|
|
43
|
+
this.data.forEach(data => {
|
|
44
|
+
if (data.replaceIn && !data.replaceIn.stylesheet) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
(0, literal_1.findAllSubstringIndices)(stylesheet.content, data.replace)
|
|
48
|
+
.map(offset => stylesheet.start + offset)
|
|
49
|
+
.forEach(start => this._replaceSelector(stylesheet.filePath, start, data));
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
_visitStringLiteralLike(node) {
|
|
53
|
+
if (node.parent && node.parent.kind !== ts.SyntaxKind.CallExpression) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const textContent = node.getText();
|
|
57
|
+
const filePath = this.fileSystem.resolve(node.getSourceFile().fileName);
|
|
58
|
+
this.data.forEach(data => {
|
|
59
|
+
if (data.replaceIn && !data.replaceIn.tsStringLiterals) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
(0, literal_1.findAllSubstringIndices)(textContent, data.replace)
|
|
63
|
+
.map(offset => node.getStart() + offset)
|
|
64
|
+
.forEach(start => this._replaceSelector(filePath, start, data));
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
_replaceSelector(filePath, start, data) {
|
|
68
|
+
this.fileSystem
|
|
69
|
+
.edit(filePath)
|
|
70
|
+
.remove(start, data.replace.length)
|
|
71
|
+
.insertRight(start, data.replaceWith);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.CssSelectorsMigration = CssSelectorsMigration;
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLXNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy9uZy11cGRhdGUvbWlncmF0aW9ucy9jc3Mtc2VsZWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVILGlDQUFpQztBQUdqQywyREFBc0Q7QUFFdEQsbURBQThEO0FBQzlELGtEQUFtRTtBQUVuRTs7O0dBR0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHFCQUFzQjtJQUFqRTs7UUFDRSxpRUFBaUU7UUFDakUsU0FBSSxHQUE2QixJQUFBLG9DQUFxQixFQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUU3RSwyREFBMkQ7UUFDM0QsWUFBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQXlEbkMsQ0FBQztJQXZEVSxTQUFTLENBQUMsSUFBYTtRQUM5QixJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRVEsYUFBYSxDQUFDLFFBQTBCO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFO2dCQUMxQyxPQUFPO2FBQ1I7WUFFRCxJQUFBLGlDQUF1QixFQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQztpQkFDcEQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7aUJBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVRLGVBQWUsQ0FBQyxVQUE0QjtRQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRTtnQkFDaEQsT0FBTzthQUNSO1lBRUQsSUFBQSxpQ0FBdUIsRUFBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7aUJBQ3RELEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO2lCQUN4QyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxJQUEwQjtRQUN4RCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7WUFDcEUsT0FBTztTQUNSO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFO2dCQUN0RCxPQUFPO2FBQ1I7WUFFRCxJQUFBLGlDQUF1QixFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUMvQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDO2lCQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQXVCLEVBQUUsS0FBYSxFQUFFLElBQTRCO1FBQzNGLElBQUksQ0FBQyxVQUFVO2FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNkLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7YUFDbEMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBOURELHNEQThEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7V29ya3NwYWNlUGF0aH0gZnJvbSAnLi4vLi4vdXBkYXRlLXRvb2wvZmlsZS1zeXN0ZW0nO1xuaW1wb3J0IHtSZXNvbHZlZFJlc291cmNlfSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC9jb21wb25lbnQtcmVzb3VyY2UtY29sbGVjdG9yJztcbmltcG9ydCB7TWlncmF0aW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC9taWdyYXRpb24nO1xuaW1wb3J0IHtDc3NTZWxlY3RvclVwZ3JhZGVEYXRhfSBmcm9tICcuLi9kYXRhL2Nzcy1zZWxlY3RvcnMnO1xuaW1wb3J0IHtmaW5kQWxsU3Vic3RyaW5nSW5kaWNlc30gZnJvbSAnLi4vdHlwZXNjcmlwdC9saXRlcmFsJztcbmltcG9ydCB7Z2V0VmVyc2lvblVwZ3JhZGVEYXRhLCBVcGdyYWRlRGF0YX0gZnJvbSAnLi4vdXBncmFkZS1kYXRhJztcblxuLyoqXG4gKiBNaWdyYXRpb24gdGhhdCB3YWxrcyB0aHJvdWdoIGV2ZXJ5IHN0cmluZyBsaXRlcmFsLCB0ZW1wbGF0ZSBhbmQgc3R5bGVzaGVldCBpblxuICogb3JkZXIgdG8gbWlncmF0ZSBvdXRkYXRlZCBDU1Mgc2VsZWN0b3JzIHRvIHRoZSBuZXcgc2VsZWN0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBDc3NTZWxlY3RvcnNNaWdyYXRpb24gZXh0ZW5kcyBNaWdyYXRpb248VXBncmFkZURhdGE+IHtcbiAgLyoqIENoYW5nZSBkYXRhIHRoYXQgdXBncmFkZXMgdG8gdGhlIHNwZWNpZmllZCB0YXJnZXQgdmVyc2lvbi4gKi9cbiAgZGF0YTogQ3NzU2VsZWN0b3JVcGdyYWRlRGF0YVtdID0gZ2V0VmVyc2lvblVwZ3JhZGVEYXRhKHRoaXMsICdjc3NTZWxlY3RvcnMnKTtcblxuICAvLyBPbmx5IGVuYWJsZSB0aGUgbWlncmF0aW9uIHJ1bGUgaWYgdGhlcmUgaXMgdXBncmFkZSBkYXRhLlxuICBlbmFibGVkID0gdGhpcy5kYXRhLmxlbmd0aCAhPT0gMDtcblxuICBvdmVycmlkZSB2aXNpdE5vZGUobm9kZTogdHMuTm9kZSk6IHZvaWQge1xuICAgIGlmICh0cy5pc1N0cmluZ0xpdGVyYWxMaWtlKG5vZGUpKSB7XG4gICAgICB0aGlzLl92aXNpdFN0cmluZ0xpdGVyYWxMaWtlKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0VGVtcGxhdGUodGVtcGxhdGU6IFJlc29sdmVkUmVzb3VyY2UpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgIGlmIChkYXRhLnJlcGxhY2VJbiAmJiAhZGF0YS5yZXBsYWNlSW4uaHRtbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZpbmRBbGxTdWJzdHJpbmdJbmRpY2VzKHRlbXBsYXRlLmNvbnRlbnQsIGRhdGEucmVwbGFjZSlcbiAgICAgICAgLm1hcChvZmZzZXQgPT4gdGVtcGxhdGUuc3RhcnQgKyBvZmZzZXQpXG4gICAgICAgIC5mb3JFYWNoKHN0YXJ0ID0+IHRoaXMuX3JlcGxhY2VTZWxlY3Rvcih0ZW1wbGF0ZS5maWxlUGF0aCwgc3RhcnQsIGRhdGEpKTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0U3R5bGVzaGVldChzdHlsZXNoZWV0OiBSZXNvbHZlZFJlc291cmNlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICBpZiAoZGF0YS5yZXBsYWNlSW4gJiYgIWRhdGEucmVwbGFjZUluLnN0eWxlc2hlZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaW5kQWxsU3Vic3RyaW5nSW5kaWNlcyhzdHlsZXNoZWV0LmNvbnRlbnQsIGRhdGEucmVwbGFjZSlcbiAgICAgICAgLm1hcChvZmZzZXQgPT4gc3R5bGVzaGVldC5zdGFydCArIG9mZnNldClcbiAgICAgICAgLmZvckVhY2goc3RhcnQgPT4gdGhpcy5fcmVwbGFjZVNlbGVjdG9yKHN0eWxlc2hlZXQuZmlsZVBhdGgsIHN0YXJ0LCBkYXRhKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF92aXNpdFN0cmluZ0xpdGVyYWxMaWtlKG5vZGU6IHRzLlN0cmluZ0xpdGVyYWxMaWtlKSB7XG4gICAgaWYgKG5vZGUucGFyZW50ICYmIG5vZGUucGFyZW50LmtpbmQgIT09IHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IG5vZGUuZ2V0VGV4dCgpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5maWxlU3lzdGVtLnJlc29sdmUobm9kZS5nZXRTb3VyY2VGaWxlKCkuZmlsZU5hbWUpO1xuXG4gICAgdGhpcy5kYXRhLmZvckVhY2goZGF0YSA9PiB7XG4gICAgICBpZiAoZGF0YS5yZXBsYWNlSW4gJiYgIWRhdGEucmVwbGFjZUluLnRzU3RyaW5nTGl0ZXJhbHMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaW5kQWxsU3Vic3RyaW5nSW5kaWNlcyh0ZXh0Q29udGVudCwgZGF0YS5yZXBsYWNlKVxuICAgICAgICAubWFwKG9mZnNldCA9PiBub2RlLmdldFN0YXJ0KCkgKyBvZmZzZXQpXG4gICAgICAgIC5mb3JFYWNoKHN0YXJ0ID0+IHRoaXMuX3JlcGxhY2VTZWxlY3RvcihmaWxlUGF0aCwgc3RhcnQsIGRhdGEpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcGxhY2VTZWxlY3RvcihmaWxlUGF0aDogV29ya3NwYWNlUGF0aCwgc3RhcnQ6IG51bWJlciwgZGF0YTogQ3NzU2VsZWN0b3JVcGdyYWRlRGF0YSkge1xuICAgIHRoaXMuZmlsZVN5c3RlbVxuICAgICAgLmVkaXQoZmlsZVBhdGgpXG4gICAgICAucmVtb3ZlKHN0YXJ0LCBkYXRhLnJlcGxhY2UubGVuZ3RoKVxuICAgICAgLmluc2VydFJpZ2h0KHN0YXJ0LCBkYXRhLnJlcGxhY2VXaXRoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import * as ts from 'typescript';
|
|
9
|
+
import { ResolvedResource } from '../../update-tool/component-resource-collector';
|
|
10
|
+
import { Migration } from '../../update-tool/migration';
|
|
11
|
+
import { ElementSelectorUpgradeData } from '../data/element-selectors';
|
|
12
|
+
import { UpgradeData } from '../upgrade-data';
|
|
13
|
+
/**
|
|
14
|
+
* Migration that walks through every string literal, template and stylesheet in order
|
|
15
|
+
* to migrate outdated element selectors to the new one.
|
|
16
|
+
*/
|
|
17
|
+
export declare class ElementSelectorsMigration extends Migration<UpgradeData> {
|
|
18
|
+
/** Change data that upgrades to the specified target version. */
|
|
19
|
+
data: ElementSelectorUpgradeData[];
|
|
20
|
+
enabled: boolean;
|
|
21
|
+
visitNode(node: ts.Node): void;
|
|
22
|
+
visitTemplate(template: ResolvedResource): void;
|
|
23
|
+
visitStylesheet(stylesheet: ResolvedResource): void;
|
|
24
|
+
private _visitStringLiteralLike;
|
|
25
|
+
private _replaceSelector;
|
|
26
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
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.ElementSelectorsMigration = void 0;
|
|
11
|
+
const ts = require("typescript");
|
|
12
|
+
const migration_1 = require("../../update-tool/migration");
|
|
13
|
+
const literal_1 = require("../typescript/literal");
|
|
14
|
+
const upgrade_data_1 = require("../upgrade-data");
|
|
15
|
+
/**
|
|
16
|
+
* Migration that walks through every string literal, template and stylesheet in order
|
|
17
|
+
* to migrate outdated element selectors to the new one.
|
|
18
|
+
*/
|
|
19
|
+
class ElementSelectorsMigration extends migration_1.Migration {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
/** Change data that upgrades to the specified target version. */
|
|
23
|
+
this.data = (0, upgrade_data_1.getVersionUpgradeData)(this, 'elementSelectors');
|
|
24
|
+
// Only enable the migration rule if there is upgrade data.
|
|
25
|
+
this.enabled = this.data.length !== 0;
|
|
26
|
+
}
|
|
27
|
+
visitNode(node) {
|
|
28
|
+
if (ts.isStringLiteralLike(node)) {
|
|
29
|
+
this._visitStringLiteralLike(node);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
visitTemplate(template) {
|
|
33
|
+
this.data.forEach(selector => {
|
|
34
|
+
(0, literal_1.findAllSubstringIndices)(template.content, selector.replace)
|
|
35
|
+
.map(offset => template.start + offset)
|
|
36
|
+
.forEach(start => this._replaceSelector(template.filePath, start, selector));
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
visitStylesheet(stylesheet) {
|
|
40
|
+
this.data.forEach(selector => {
|
|
41
|
+
(0, literal_1.findAllSubstringIndices)(stylesheet.content, selector.replace)
|
|
42
|
+
.map(offset => stylesheet.start + offset)
|
|
43
|
+
.forEach(start => this._replaceSelector(stylesheet.filePath, start, selector));
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
_visitStringLiteralLike(node) {
|
|
47
|
+
if (node.parent && node.parent.kind !== ts.SyntaxKind.CallExpression) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const textContent = node.getText();
|
|
51
|
+
const filePath = this.fileSystem.resolve(node.getSourceFile().fileName);
|
|
52
|
+
this.data.forEach(selector => {
|
|
53
|
+
(0, literal_1.findAllSubstringIndices)(textContent, selector.replace)
|
|
54
|
+
.map(offset => node.getStart() + offset)
|
|
55
|
+
.forEach(start => this._replaceSelector(filePath, start, selector));
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
_replaceSelector(filePath, start, data) {
|
|
59
|
+
this.fileSystem
|
|
60
|
+
.edit(filePath)
|
|
61
|
+
.remove(start, data.replace.length)
|
|
62
|
+
.insertRight(start, data.replaceWith);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.ElementSelectorsMigration = ElementSelectorsMigration;
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1zZWxlY3RvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvbmctdXBkYXRlL21pZ3JhdGlvbnMvZWxlbWVudC1zZWxlY3RvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBRUgsaUNBQWlDO0FBR2pDLDJEQUFzRDtBQUV0RCxtREFBOEQ7QUFDOUQsa0RBQW1FO0FBRW5FOzs7R0FHRztBQUNILE1BQWEseUJBQTBCLFNBQVEscUJBQXNCO0lBQXJFOztRQUNFLGlFQUFpRTtRQUNqRSxTQUFJLEdBQUcsSUFBQSxvQ0FBcUIsRUFBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUV2RCwyREFBMkQ7UUFDM0QsWUFBTyxHQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQWlENUMsQ0FBQztJQS9DVSxTQUFTLENBQUMsSUFBYTtRQUM5QixJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRVEsYUFBYSxDQUFDLFFBQTBCO1FBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLElBQUEsaUNBQXVCLEVBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDO2lCQUN4RCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztpQkFDdEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVEsZUFBZSxDQUFDLFVBQTRCO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLElBQUEsaUNBQXVCLEVBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDO2lCQUMxRCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztpQkFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsSUFBMEI7UUFDeEQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO1lBQ3BFLE9BQU87U0FDUjtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDM0IsSUFBQSxpQ0FBdUIsRUFBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQztpQkFDbkQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQztpQkFDdkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FDdEIsUUFBdUIsRUFDdkIsS0FBYSxFQUNiLElBQWdDO1FBRWhDLElBQUksQ0FBQyxVQUFVO2FBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUNkLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7YUFDbEMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGO0FBdERELDhEQXNEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7UmVzb2x2ZWRSZXNvdXJjZX0gZnJvbSAnLi4vLi4vdXBkYXRlLXRvb2wvY29tcG9uZW50LXJlc291cmNlLWNvbGxlY3Rvcic7XG5pbXBvcnQge1dvcmtzcGFjZVBhdGh9IGZyb20gJy4uLy4uL3VwZGF0ZS10b29sL2ZpbGUtc3lzdGVtJztcbmltcG9ydCB7TWlncmF0aW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC9taWdyYXRpb24nO1xuaW1wb3J0IHtFbGVtZW50U2VsZWN0b3JVcGdyYWRlRGF0YX0gZnJvbSAnLi4vZGF0YS9lbGVtZW50LXNlbGVjdG9ycyc7XG5pbXBvcnQge2ZpbmRBbGxTdWJzdHJpbmdJbmRpY2VzfSBmcm9tICcuLi90eXBlc2NyaXB0L2xpdGVyYWwnO1xuaW1wb3J0IHtnZXRWZXJzaW9uVXBncmFkZURhdGEsIFVwZ3JhZGVEYXRhfSBmcm9tICcuLi91cGdyYWRlLWRhdGEnO1xuXG4vKipcbiAqIE1pZ3JhdGlvbiB0aGF0IHdhbGtzIHRocm91Z2ggZXZlcnkgc3RyaW5nIGxpdGVyYWwsIHRlbXBsYXRlIGFuZCBzdHlsZXNoZWV0IGluIG9yZGVyXG4gKiB0byBtaWdyYXRlIG91dGRhdGVkIGVsZW1lbnQgc2VsZWN0b3JzIHRvIHRoZSBuZXcgb25lLlxuICovXG5leHBvcnQgY2xhc3MgRWxlbWVudFNlbGVjdG9yc01pZ3JhdGlvbiBleHRlbmRzIE1pZ3JhdGlvbjxVcGdyYWRlRGF0YT4ge1xuICAvKiogQ2hhbmdlIGRhdGEgdGhhdCB1cGdyYWRlcyB0byB0aGUgc3BlY2lmaWVkIHRhcmdldCB2ZXJzaW9uLiAqL1xuICBkYXRhID0gZ2V0VmVyc2lvblVwZ3JhZGVEYXRhKHRoaXMsICdlbGVtZW50U2VsZWN0b3JzJyk7XG5cbiAgLy8gT25seSBlbmFibGUgdGhlIG1pZ3JhdGlvbiBydWxlIGlmIHRoZXJlIGlzIHVwZ3JhZGUgZGF0YS5cbiAgZW5hYmxlZDogYm9vbGVhbiA9IHRoaXMuZGF0YS5sZW5ndGggIT09IDA7XG5cbiAgb3ZlcnJpZGUgdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpOiB2b2lkIHtcbiAgICBpZiAodHMuaXNTdHJpbmdMaXRlcmFsTGlrZShub2RlKSkge1xuICAgICAgdGhpcy5fdmlzaXRTdHJpbmdMaXRlcmFsTGlrZShub2RlKTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdFRlbXBsYXRlKHRlbXBsYXRlOiBSZXNvbHZlZFJlc291cmNlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhLmZvckVhY2goc2VsZWN0b3IgPT4ge1xuICAgICAgZmluZEFsbFN1YnN0cmluZ0luZGljZXModGVtcGxhdGUuY29udGVudCwgc2VsZWN0b3IucmVwbGFjZSlcbiAgICAgICAgLm1hcChvZmZzZXQgPT4gdGVtcGxhdGUuc3RhcnQgKyBvZmZzZXQpXG4gICAgICAgIC5mb3JFYWNoKHN0YXJ0ID0+IHRoaXMuX3JlcGxhY2VTZWxlY3Rvcih0ZW1wbGF0ZS5maWxlUGF0aCwgc3RhcnQsIHNlbGVjdG9yKSk7XG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdFN0eWxlc2hlZXQoc3R5bGVzaGVldDogUmVzb2x2ZWRSZXNvdXJjZSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgIGZpbmRBbGxTdWJzdHJpbmdJbmRpY2VzKHN0eWxlc2hlZXQuY29udGVudCwgc2VsZWN0b3IucmVwbGFjZSlcbiAgICAgICAgLm1hcChvZmZzZXQgPT4gc3R5bGVzaGVldC5zdGFydCArIG9mZnNldClcbiAgICAgICAgLmZvckVhY2goc3RhcnQgPT4gdGhpcy5fcmVwbGFjZVNlbGVjdG9yKHN0eWxlc2hlZXQuZmlsZVBhdGgsIHN0YXJ0LCBzZWxlY3RvcikpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzaXRTdHJpbmdMaXRlcmFsTGlrZShub2RlOiB0cy5TdHJpbmdMaXRlcmFsTGlrZSkge1xuICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC5raW5kICE9PSB0cy5TeW50YXhLaW5kLkNhbGxFeHByZXNzaW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSBub2RlLmdldFRleHQoKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHRoaXMuZmlsZVN5c3RlbS5yZXNvbHZlKG5vZGUuZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lKTtcblxuICAgIHRoaXMuZGF0YS5mb3JFYWNoKHNlbGVjdG9yID0+IHtcbiAgICAgIGZpbmRBbGxTdWJzdHJpbmdJbmRpY2VzKHRleHRDb250ZW50LCBzZWxlY3Rvci5yZXBsYWNlKVxuICAgICAgICAubWFwKG9mZnNldCA9PiBub2RlLmdldFN0YXJ0KCkgKyBvZmZzZXQpXG4gICAgICAgIC5mb3JFYWNoKHN0YXJ0ID0+IHRoaXMuX3JlcGxhY2VTZWxlY3RvcihmaWxlUGF0aCwgc3RhcnQsIHNlbGVjdG9yKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZXBsYWNlU2VsZWN0b3IoXG4gICAgZmlsZVBhdGg6IFdvcmtzcGFjZVBhdGgsXG4gICAgc3RhcnQ6IG51bWJlcixcbiAgICBkYXRhOiBFbGVtZW50U2VsZWN0b3JVcGdyYWRlRGF0YSxcbiAgKSB7XG4gICAgdGhpcy5maWxlU3lzdGVtXG4gICAgICAuZWRpdChmaWxlUGF0aClcbiAgICAgIC5yZW1vdmUoc3RhcnQsIGRhdGEucmVwbGFjZS5sZW5ndGgpXG4gICAgICAuaW5zZXJ0UmlnaHQoc3RhcnQsIGRhdGEucmVwbGFjZVdpdGgpO1xuICB9XG59XG4iXX0=
|