jqwidgets-ng 14.1.10 → 14.1.11
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/ng-add/index.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,147 @@
|
|
|
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.ComponentResourceCollector = void 0;
|
|
11
|
+
const path_1 = require("path");
|
|
12
|
+
const ts = require("typescript");
|
|
13
|
+
const decorators_1 = require("./utils/decorators");
|
|
14
|
+
const functions_1 = require("./utils/functions");
|
|
15
|
+
const line_mappings_1 = require("./utils/line-mappings");
|
|
16
|
+
const property_name_1 = require("./utils/property-name");
|
|
17
|
+
/**
|
|
18
|
+
* Collector that can be used to find Angular templates and stylesheets referenced within
|
|
19
|
+
* given TypeScript source files (inline or external referenced files)
|
|
20
|
+
*/
|
|
21
|
+
class ComponentResourceCollector {
|
|
22
|
+
constructor(typeChecker, _fileSystem) {
|
|
23
|
+
this.typeChecker = typeChecker;
|
|
24
|
+
this._fileSystem = _fileSystem;
|
|
25
|
+
this.resolvedTemplates = [];
|
|
26
|
+
this.resolvedStylesheets = [];
|
|
27
|
+
}
|
|
28
|
+
visitNode(node) {
|
|
29
|
+
if (node.kind === ts.SyntaxKind.ClassDeclaration) {
|
|
30
|
+
this._visitClassDeclaration(node);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
_visitClassDeclaration(node) {
|
|
34
|
+
if (!node.decorators || !node.decorators.length) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const ngDecorators = (0, decorators_1.getAngularDecorators)(this.typeChecker, node.decorators);
|
|
38
|
+
const componentDecorator = ngDecorators.find(dec => dec.name === 'Component');
|
|
39
|
+
// In case no "@Component" decorator could be found on the current class, skip.
|
|
40
|
+
if (!componentDecorator) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const decoratorCall = componentDecorator.node.expression;
|
|
44
|
+
// In case the component decorator call is not valid, skip this class declaration.
|
|
45
|
+
if (decoratorCall.arguments.length !== 1) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const componentMetadata = (0, functions_1.unwrapExpression)(decoratorCall.arguments[0]);
|
|
49
|
+
// Ensure that the component metadata is an object literal expression.
|
|
50
|
+
if (!ts.isObjectLiteralExpression(componentMetadata)) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const sourceFile = node.getSourceFile();
|
|
54
|
+
const filePath = this._fileSystem.resolve(sourceFile.fileName);
|
|
55
|
+
const sourceFileDirPath = (0, path_1.dirname)(sourceFile.fileName);
|
|
56
|
+
// Walk through all component metadata properties and determine the referenced
|
|
57
|
+
// HTML templates (either external or inline)
|
|
58
|
+
componentMetadata.properties.forEach(property => {
|
|
59
|
+
if (!ts.isPropertyAssignment(property)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const propertyName = (0, property_name_1.getPropertyNameText)(property.name);
|
|
63
|
+
if (propertyName === 'styles' && ts.isArrayLiteralExpression(property.initializer)) {
|
|
64
|
+
property.initializer.elements.forEach(el => {
|
|
65
|
+
if (ts.isStringLiteralLike(el)) {
|
|
66
|
+
// Need to add an offset of one to the start because the template quotes are
|
|
67
|
+
// not part of the template content.
|
|
68
|
+
const templateStartIdx = el.getStart() + 1;
|
|
69
|
+
this.resolvedStylesheets.push({
|
|
70
|
+
filePath,
|
|
71
|
+
container: node,
|
|
72
|
+
content: el.text,
|
|
73
|
+
inline: true,
|
|
74
|
+
start: templateStartIdx,
|
|
75
|
+
getCharacterAndLineOfPosition: pos => ts.getLineAndCharacterOfPosition(sourceFile, pos + templateStartIdx),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// In case there is an inline template specified, ensure that the value is statically
|
|
81
|
+
// analyzable by checking if the initializer is a string literal-like node.
|
|
82
|
+
if (propertyName === 'template' && ts.isStringLiteralLike(property.initializer)) {
|
|
83
|
+
// Need to add an offset of one to the start because the template quotes are
|
|
84
|
+
// not part of the template content.
|
|
85
|
+
const templateStartIdx = property.initializer.getStart() + 1;
|
|
86
|
+
this.resolvedTemplates.push({
|
|
87
|
+
filePath,
|
|
88
|
+
container: node,
|
|
89
|
+
content: property.initializer.text,
|
|
90
|
+
inline: true,
|
|
91
|
+
start: templateStartIdx,
|
|
92
|
+
getCharacterAndLineOfPosition: pos => ts.getLineAndCharacterOfPosition(sourceFile, pos + templateStartIdx),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (propertyName === 'styleUrls' && ts.isArrayLiteralExpression(property.initializer)) {
|
|
96
|
+
property.initializer.elements.forEach(el => {
|
|
97
|
+
if (ts.isStringLiteralLike(el)) {
|
|
98
|
+
const stylesheetPath = this._fileSystem.resolve(sourceFileDirPath, el.text);
|
|
99
|
+
const stylesheet = this.resolveExternalStylesheet(stylesheetPath, node);
|
|
100
|
+
if (stylesheet) {
|
|
101
|
+
this.resolvedStylesheets.push(stylesheet);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (propertyName === 'templateUrl' && ts.isStringLiteralLike(property.initializer)) {
|
|
107
|
+
const templateUrl = property.initializer.text;
|
|
108
|
+
const templatePath = this._fileSystem.resolve(sourceFileDirPath, templateUrl);
|
|
109
|
+
// In case the template does not exist in the file system, skip this
|
|
110
|
+
// external template.
|
|
111
|
+
if (!this._fileSystem.fileExists(templatePath)) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const fileContent = this._fileSystem.read(templatePath);
|
|
115
|
+
if (fileContent) {
|
|
116
|
+
const lineStartsMap = (0, line_mappings_1.computeLineStartsMap)(fileContent);
|
|
117
|
+
this.resolvedTemplates.push({
|
|
118
|
+
filePath: templatePath,
|
|
119
|
+
container: node,
|
|
120
|
+
content: fileContent,
|
|
121
|
+
inline: false,
|
|
122
|
+
start: 0,
|
|
123
|
+
getCharacterAndLineOfPosition: p => (0, line_mappings_1.getLineAndCharacterFromPosition)(lineStartsMap, p),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/** Resolves an external stylesheet by reading its content and computing line mappings. */
|
|
130
|
+
resolveExternalStylesheet(filePath, container) {
|
|
131
|
+
const fileContent = this._fileSystem.read(filePath);
|
|
132
|
+
if (!fileContent) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
const lineStartsMap = (0, line_mappings_1.computeLineStartsMap)(fileContent);
|
|
136
|
+
return {
|
|
137
|
+
filePath: filePath,
|
|
138
|
+
container: container,
|
|
139
|
+
content: fileContent,
|
|
140
|
+
inline: false,
|
|
141
|
+
start: 0,
|
|
142
|
+
getCharacterAndLineOfPosition: pos => (0, line_mappings_1.getLineAndCharacterFromPosition)(lineStartsMap, pos),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.ComponentResourceCollector = ComponentResourceCollector;
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXJlc291cmNlLWNvbGxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy91cGRhdGUtdG9vbC9jb21wb25lbnQtcmVzb3VyY2UtY29sbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVILCtCQUE2QjtBQUM3QixpQ0FBaUM7QUFFakMsbURBQXdEO0FBQ3hELGlEQUFtRDtBQUNuRCx5REFJK0I7QUFDL0IseURBQTBEO0FBcUIxRDs7O0dBR0c7QUFDSCxNQUFhLDBCQUEwQjtJQUlyQyxZQUFtQixXQUEyQixFQUFVLFdBQXVCO1FBQTVELGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBSC9FLHNCQUFpQixHQUF1QixFQUFFLENBQUM7UUFDM0Msd0JBQW1CLEdBQXVCLEVBQUUsQ0FBQztJQUVxQyxDQUFDO0lBRW5GLFNBQVMsQ0FBQyxJQUFhO1FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFO1lBQ2hELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUEyQixDQUFDLENBQUM7U0FDMUQ7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBeUI7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUMvQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFBLGlDQUFvQixFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENB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QUMsQ0FBQztvQkFFeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQzt3QkFDMUIsUUFBUSxFQUFFLFlBQVk7d0JBQ3RCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLE9BQU8sRUFBRSxXQUFXO3dCQUNwQixNQUFNLEVBQUUsS0FBSzt3QkFDYixLQUFLLEVBQUUsQ0FBQzt3QkFDUiw2QkFBNkIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUEsK0NBQStCLEVBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztxQkFDdEYsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwRkFBMEY7SUFDMUYseUJBQXlCLENBQ3ZCLFFBQXVCLEVBQ3ZCLFNBQXFDO1FBRXJDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sYUFBYSxHQUFHLElBQUEsb0NBQW9CLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEQsT0FBTztZQUNMLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLENBQUM7WUFDUiw2QkFBNkIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUEsK0NBQStCLEVBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQztTQUMxRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdkpELGdFQXVKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2Rpcm5hbWV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge0ZpbGVTeXN0ZW0sIFdvcmtzcGFjZVBhdGh9IGZyb20gJy4vZmlsZS1zeXN0ZW0nO1xuaW1wb3J0IHtnZXRBbmd1bGFyRGVjb3JhdG9yc30gZnJvbSAnLi91dGlscy9kZWNvcmF0b3JzJztcbmltcG9ydCB7dW53cmFwRXhwcmVzc2lvbn0gZnJvbSAnLi91dGlscy9mdW5jdGlvbnMnO1xuaW1wb3J0IHtcbiAgY29tcHV0ZUxpbmVTdGFydHNNYXAsXG4gIGdldExpbmVBbmRDaGFyYWN0ZXJGcm9tUG9zaXRpb24sXG4gIExpbmVBbmRDaGFyYWN0ZXIsXG59IGZyb20gJy4vdXRpbHMvbGluZS1tYXBwaW5ncyc7XG5pbXBvcnQge2dldFByb3BlcnR5TmFtZVRleHR9IGZyb20gJy4vdXRpbHMvcHJvcGVydHktbmFtZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRSZXNvdXJjZSB7XG4gIC8qKiBDbGFzcyBkZWNsYXJhdGlvbiB0aGF0IGNvbnRhaW5zIHRoaXMgcmVzb3VyY2UuICovXG4gIGNvbnRhaW5lcjogdHMuQ2xhc3NEZWNsYXJhdGlvbiB8IG51bGw7XG4gIC8qKiBGaWxlIGNvbnRlbnQgb2YgdGhlIGdpdmVuIHRlbXBsYXRlLiAqL1xuICBjb250ZW50OiBzdHJpbmc7XG4gIC8qKiBTdGFydCBvZmZzZXQgb2YgdGhlIHJlc291cmNlIGNvbnRlbnQgKGUuZy4gaW4gdGhlIGlubGluZSBzb3VyY2UgZmlsZSkgKi9cbiAgc3RhcnQ6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIGdpdmVuIHJlc291cmNlIGlzIGlubGluZSBvciBub3QuICovXG4gIGlubGluZTogYm9vbGVhbjtcbiAgLyoqIFBhdGggdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHJlc291cmNlLiAqL1xuICBmaWxlUGF0aDogV29ya3NwYWNlUGF0aDtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGNoYXJhY3RlciBhbmQgbGluZSBvZiBhIGdpdmVuIHBvc2l0aW9uIGluZGV4IGluIHRoZSByZXNvdXJjZS5cbiAgICogSWYgdGhlIHJlc291cmNlIGlzIGRlY2xhcmVkIGlubGluZSB3aXRoaW4gYSBUeXBlU2NyaXB0IHNvdXJjZSBmaWxlLCB0aGUgbGluZSBhbmRcbiAgICogY2hhcmFjdGVyIGFyZSBiYXNlZCBvbiB0aGUgZnVsbCBzb3VyY2UgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IChwb3M6IG51bWJlcikgPT4gTGluZUFuZENoYXJhY3Rlcjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBmaW5kIEFuZ3VsYXIgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cyByZWZlcmVuY2VkIHdpdGhpblxuICogZ2l2ZW4gVHlwZVNjcmlwdCBzb3VyY2UgZmlsZXMgKGlubGluZSBvciBleHRlcm5hbCByZWZlcmVuY2VkIGZpbGVzKVxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50UmVzb3VyY2VDb2xsZWN0b3Ige1xuICByZXNvbHZlZFRlbXBsYXRlczogUmVzb2x2ZWRSZXNvdXJjZVtdID0gW107XG4gIHJlc29sdmVkU3R5bGVzaGVldHM6IFJlc29sdmVkUmVzb3VyY2VbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIHByaXZhdGUgX2ZpbGVTeXN0ZW06IEZpbGVTeXN0ZW0pIHt9XG5cbiAgdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpIHtcbiAgICBpZiAobm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb24pIHtcbiAgICAgIHRoaXMuX3Zpc2l0Q2xhc3NEZWNsYXJhdGlvbihub2RlIGFzIHRzLkNsYXNzRGVjbGFyYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Zpc2l0Q2xhc3NEZWNsYXJhdGlvbihub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKSB7XG4gICAgaWYgKCFub2RlLmRlY29yYXRvcnMgfHwgIW5vZGUuZGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZ0RlY29yYXRvcnMgPSBnZXRBbmd1bGFyRGVjb3JhdG9ycyh0aGlzLnR5cGVDaGVja2VyLCBub2RlLmRlY29yYXRvcnMpO1xuICAgIGNvbnN0IGNvbXBvbmVudERlY29yYXRvciA9IG5nRGVjb3JhdG9ycy5maW5kKGRlYyA9PiBkZWMubmFtZSA9PT0gJ0NvbXBvbmVudCcpO1xuXG4gICAgLy8gSW4gY2FzZSBubyBcIkBDb21wb25lbnRcIiBkZWNvcmF0b3IgY291bGQgYmUgZm91bmQgb24gdGhlIGN1cnJlbnQgY2xhc3MsIHNraXAuXG4gICAgaWYgKCFjb21wb25lbnREZWNvcmF0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvcmF0b3JDYWxsID0gY29tcG9uZW50RGVjb3JhdG9yLm5vZGUuZXhwcmVzc2lvbjtcblxuICAgIC8vIEluIGNhc2UgdGhlIGNvbXBvbmVudCBkZWNvcmF0b3IgY2FsbCBpcyBub3QgdmFsaWQsIHNraXAgdGhpcyBjbGFzcyBkZWNsYXJhdGlvbi5cbiAgICBpZiAoZGVjb3JhdG9yQ2FsbC5hcmd1bWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50TWV0YWRhdGEgPSB1bndyYXBFeHByZXNzaW9uKGRlY29yYXRvckNhbGwuYXJndW1lbnRzWzBdKTtcblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBjb21wb25lbnQgbWV0YWRhdGEgaXMgYW4gb2JqZWN0IGxpdGVyYWwgZXhwcmVzc2lvbi5cbiAgICBpZiAoIXRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24oY29tcG9uZW50TWV0YWRhdGEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5fZmlsZVN5c3RlbS5yZXNvbHZlKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgIGNvbnN0IHNvdXJjZUZpbGVEaXJQYXRoID0gZGlybmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcblxuICAgIC8vIFdhbGsgdGhyb3VnaCBhbGwgY29tcG9uZW50IG1ldGFkYXRhIHByb3BlcnRpZXMgYW5kIGRldGVybWluZSB0aGUgcmVmZXJlbmNlZFxuICAgIC8vIEhUTUwgdGVtcGxhdGVzIChlaXRoZXIgZXh0ZXJuYWwgb3IgaW5saW5lKVxuICAgIGNvbXBvbmVudE1ldGFkYXRhLnByb3BlcnRpZXMuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICBpZiAoIXRzLmlzUHJvcGVydHlBc3NpZ25tZW50KHByb3BlcnR5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGdldFByb3BlcnR5TmFtZVRleHQocHJvcGVydHkubmFtZSk7XG5cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdzdHlsZXMnICYmIHRzLmlzQXJyYXlMaXRlcmFsRXhwcmVzc2lvbihwcm9wZXJ0eS5pbml0aWFsaXplcikpIHtcbiAgICAgICAgcHJvcGVydHkuaW5pdGlhbGl6ZXIuZWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgaWYgKHRzLmlzU3RyaW5nTGl0ZXJhbExpa2UoZWwpKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGFkZCBhbiBvZmZzZXQgb2Ygb25lIHRvIHRoZSBzdGFydCBiZWNhdXNlIHRoZSB0ZW1wbGF0ZSBxdW90ZXMgYXJlXG4gICAgICAgICAgICAvLyBub3QgcGFydCBvZiB0aGUgdGVtcGxhdGUgY29udGVudC5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlU3RhcnRJZHggPSBlbC5nZXRTdGFydCgpICsgMTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZWRTdHlsZXNoZWV0cy5wdXNoKHtcbiAgICAgICAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgICAgICAgIGNvbnRhaW5lcjogbm9kZSxcbiAgICAgICAgICAgICAgY29udGVudDogZWwudGV4dCxcbiAgICAgICAgICAgICAgaW5saW5lOiB0cnVlLFxuICAgICAgICAgICAgICBzdGFydDogdGVtcGxhdGVTdGFydElkeCxcbiAgICAgICAgICAgICAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IHBvcyA9PlxuICAgICAgICAgICAgICAgIHRzLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKHNvdXJjZUZpbGUsIHBvcyArIHRlbXBsYXRlU3RhcnRJZHgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSW4gY2FzZSB0aGVyZSBpcyBhbiBpbmxpbmUgdGVtcGxhdGUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgaXMgc3RhdGljYWxseVxuICAgICAgLy8gYW5hbHl6YWJsZSBieSBjaGVja2luZyBpZiB0aGUgaW5pdGlhbGl6ZXIgaXMgYSBzdHJpbmcgbGl0ZXJhbC1saWtlIG5vZGUuXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAndGVtcGxhdGUnICYmIHRzLmlzU3RyaW5nTGl0ZXJhbExpa2UocHJvcGVydHkuaW5pdGlhbGl6ZXIpKSB7XG4gICAgICAgIC8vIE5lZWQgdG8gYWRkIGFuIG9mZnNldCBvZiBvbmUgdG8gdGhlIHN0YXJ0IGJlY2F1c2UgdGhlIHRlbXBsYXRlIHF1b3RlcyBhcmVcbiAgICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHRlbXBsYXRlIGNvbnRlbnQuXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlU3RhcnRJZHggPSBwcm9wZXJ0eS5pbml0aWFsaXplci5nZXRTdGFydCgpICsgMTtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFRlbXBsYXRlcy5wdXNoKHtcbiAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICBjb250YWluZXI6IG5vZGUsXG4gICAgICAgICAgY29udGVudDogcHJvcGVydHkuaW5pdGlhbGl6ZXIudGV4dCxcbiAgICAgICAgICBpbmxpbmU6IHRydWUsXG4gICAgICAgICAgc3RhcnQ6IHRlbXBsYXRlU3RhcnRJZHgsXG4gICAgICAgICAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IHBvcyA9PlxuICAgICAgICAgICAgdHMuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oc291cmNlRmlsZSwgcG9zICsgdGVtcGxhdGVTdGFydElkeCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnc3R5bGVVcmxzJyAmJiB0cy5pc0FycmF5TGl0ZXJhbEV4cHJlc3Npb24ocHJvcGVydHkuaW5pdGlhbGl6ZXIpKSB7XG4gICAgICAgIHByb3BlcnR5LmluaXRpYWxpemVyLmVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgIGlmICh0cy5pc1N0cmluZ0xpdGVyYWxMaWtlKGVsKSkge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldFBhdGggPSB0aGlzLl9maWxlU3lzdGVtLnJlc29sdmUoc291cmNlRmlsZURpclBhdGgsIGVsLnRleHQpO1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldCA9IHRoaXMucmVzb2x2ZUV4dGVybmFsU3R5bGVzaGVldChzdHlsZXNoZWV0UGF0aCwgbm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzb2x2ZWRTdHlsZXNoZWV0cy5wdXNoKHN0eWxlc2hlZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICd0ZW1wbGF0ZVVybCcgJiYgdHMuaXNTdHJpbmdMaXRlcmFsTGlrZShwcm9wZXJ0eS5pbml0aWFsaXplcikpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVVcmwgPSBwcm9wZXJ0eS5pbml0aWFsaXplci50ZXh0O1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSB0aGlzLl9maWxlU3lzdGVtLnJlc29sdmUoc291cmNlRmlsZURpclBhdGgsIHRlbXBsYXRlVXJsKTtcblxuICAgICAgICAvLyBJbiBjYXNlIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZmlsZSBzeXN0ZW0sIHNraXAgdGhpc1xuICAgICAgICAvLyBleHRlcm5hbCB0ZW1wbGF0ZS5cbiAgICAgICAgaWYgKCF0aGlzLl9maWxlU3lzdGVtLmZpbGVFeGlzdHModGVtcGxhdGVQYXRoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gdGhpcy5fZmlsZVN5c3RlbS5yZWFkKHRlbXBsYXRlUGF0aCk7XG5cbiAgICAgICAgaWYgKGZpbGVDb250ZW50KSB7XG4gICAgICAgICAgY29uc3QgbGluZVN0YXJ0c01hcCA9IGNvbXB1dGVMaW5lU3RhcnRzTWFwKGZpbGVDb250ZW50KTtcblxuICAgICAgICAgIHRoaXMucmVzb2x2ZWRUZW1wbGF0ZXMucHVzaCh7XG4gICAgICAgICAgICBmaWxlUGF0aDogdGVtcGxhdGVQYXRoLFxuICAgICAgICAgICAgY29udGFpbmVyOiBub2RlLFxuICAgICAgICAgICAgY29udGVudDogZmlsZUNvbnRlbnQsXG4gICAgICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgICAgICBnZXRDaGFyYWN0ZXJBbmRMaW5lT2ZQb3NpdGlvbjogcCA9PiBnZXRMaW5lQW5kQ2hhcmFjdGVyRnJvbVBvc2l0aW9uKGxpbmVTdGFydHNNYXAsIHApLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVzb2x2ZXMgYW4gZXh0ZXJuYWwgc3R5bGVzaGVldCBieSByZWFkaW5nIGl0cyBjb250ZW50IGFuZCBjb21wdXRpbmcgbGluZSBtYXBwaW5ncy4gKi9cbiAgcmVzb2x2ZUV4dGVybmFsU3R5bGVzaGVldChcbiAgICBmaWxlUGF0aDogV29ya3NwYWNlUGF0aCxcbiAgICBjb250YWluZXI6IHRzLkNsYXNzRGVjbGFyYXRpb24gfCBudWxsLFxuICApOiBSZXNvbHZlZFJlc291cmNlIHwgbnVsbCB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSB0aGlzLl9maWxlU3lzdGVtLnJlYWQoZmlsZVBhdGgpO1xuXG4gICAgaWYgKCFmaWxlQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZVN0YXJ0c01hcCA9IGNvbXB1dGVMaW5lU3RhcnRzTWFwKGZpbGVDb250ZW50KTtcblxuICAgIHJldHVybiB7XG4gICAgICBmaWxlUGF0aDogZmlsZVBhdGgsXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIGNvbnRlbnQ6IGZpbGVDb250ZW50LFxuICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgIHN0YXJ0OiAwLFxuICAgICAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IHBvcyA9PiBnZXRMaW5lQW5kQ2hhcmFjdGVyRnJvbVBvc2l0aW9uKGxpbmVTdGFydHNNYXAsIHBvcyksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,147 @@
|
|
|
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.ComponentResourceCollector = void 0;
|
|
11
|
+
const path_1 = require("path");
|
|
12
|
+
const ts = require("typescript");
|
|
13
|
+
const decorators_1 = require("./utils/decorators");
|
|
14
|
+
const functions_1 = require("./utils/functions");
|
|
15
|
+
const line_mappings_1 = require("./utils/line-mappings");
|
|
16
|
+
const property_name_1 = require("./utils/property-name");
|
|
17
|
+
/**
|
|
18
|
+
* Collector that can be used to find Angular templates and stylesheets referenced within
|
|
19
|
+
* given TypeScript source files (inline or external referenced files)
|
|
20
|
+
*/
|
|
21
|
+
class ComponentResourceCollector {
|
|
22
|
+
constructor(typeChecker, _fileSystem) {
|
|
23
|
+
this.typeChecker = typeChecker;
|
|
24
|
+
this._fileSystem = _fileSystem;
|
|
25
|
+
this.resolvedTemplates = [];
|
|
26
|
+
this.resolvedStylesheets = [];
|
|
27
|
+
}
|
|
28
|
+
visitNode(node) {
|
|
29
|
+
if (node.kind === ts.SyntaxKind.ClassDeclaration) {
|
|
30
|
+
this._visitClassDeclaration(node);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
_visitClassDeclaration(node) {
|
|
34
|
+
if (!node.decorators || !node.decorators.length) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const ngDecorators = (0, decorators_1.getAngularDecorators)(this.typeChecker, node.decorators);
|
|
38
|
+
const componentDecorator = ngDecorators.find(dec => dec.name === 'Component');
|
|
39
|
+
// In case no "@Component" decorator could be found on the current class, skip.
|
|
40
|
+
if (!componentDecorator) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const decoratorCall = componentDecorator.node.expression;
|
|
44
|
+
// In case the component decorator call is not valid, skip this class declaration.
|
|
45
|
+
if (decoratorCall.arguments.length !== 1) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const componentMetadata = (0, functions_1.unwrapExpression)(decoratorCall.arguments[0]);
|
|
49
|
+
// Ensure that the component metadata is an object literal expression.
|
|
50
|
+
if (!ts.isObjectLiteralExpression(componentMetadata)) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
const sourceFile = node.getSourceFile();
|
|
54
|
+
const filePath = this._fileSystem.resolve(sourceFile.fileName);
|
|
55
|
+
const sourceFileDirPath = (0, path_1.dirname)(sourceFile.fileName);
|
|
56
|
+
// Walk through all component metadata properties and determine the referenced
|
|
57
|
+
// HTML templates (either external or inline)
|
|
58
|
+
componentMetadata.properties.forEach(property => {
|
|
59
|
+
if (!ts.isPropertyAssignment(property)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const propertyName = (0, property_name_1.getPropertyNameText)(property.name);
|
|
63
|
+
if (propertyName === 'styles' && ts.isArrayLiteralExpression(property.initializer)) {
|
|
64
|
+
property.initializer.elements.forEach(el => {
|
|
65
|
+
if (ts.isStringLiteralLike(el)) {
|
|
66
|
+
// Need to add an offset of one to the start because the template quotes are
|
|
67
|
+
// not part of the template content.
|
|
68
|
+
const templateStartIdx = el.getStart() + 1;
|
|
69
|
+
this.resolvedStylesheets.push({
|
|
70
|
+
filePath,
|
|
71
|
+
container: node,
|
|
72
|
+
content: el.text,
|
|
73
|
+
inline: true,
|
|
74
|
+
start: templateStartIdx,
|
|
75
|
+
getCharacterAndLineOfPosition: pos => ts.getLineAndCharacterOfPosition(sourceFile, pos + templateStartIdx),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
// In case there is an inline template specified, ensure that the value is statically
|
|
81
|
+
// analyzable by checking if the initializer is a string literal-like node.
|
|
82
|
+
if (propertyName === 'template' && ts.isStringLiteralLike(property.initializer)) {
|
|
83
|
+
// Need to add an offset of one to the start because the template quotes are
|
|
84
|
+
// not part of the template content.
|
|
85
|
+
const templateStartIdx = property.initializer.getStart() + 1;
|
|
86
|
+
this.resolvedTemplates.push({
|
|
87
|
+
filePath,
|
|
88
|
+
container: node,
|
|
89
|
+
content: property.initializer.text,
|
|
90
|
+
inline: true,
|
|
91
|
+
start: templateStartIdx,
|
|
92
|
+
getCharacterAndLineOfPosition: pos => ts.getLineAndCharacterOfPosition(sourceFile, pos + templateStartIdx),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (propertyName === 'styleUrls' && ts.isArrayLiteralExpression(property.initializer)) {
|
|
96
|
+
property.initializer.elements.forEach(el => {
|
|
97
|
+
if (ts.isStringLiteralLike(el)) {
|
|
98
|
+
const stylesheetPath = this._fileSystem.resolve(sourceFileDirPath, el.text);
|
|
99
|
+
const stylesheet = this.resolveExternalStylesheet(stylesheetPath, node);
|
|
100
|
+
if (stylesheet) {
|
|
101
|
+
this.resolvedStylesheets.push(stylesheet);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (propertyName === 'templateUrl' && ts.isStringLiteralLike(property.initializer)) {
|
|
107
|
+
const templateUrl = property.initializer.text;
|
|
108
|
+
const templatePath = this._fileSystem.resolve(sourceFileDirPath, templateUrl);
|
|
109
|
+
// In case the template does not exist in the file system, skip this
|
|
110
|
+
// external template.
|
|
111
|
+
if (!this._fileSystem.fileExists(templatePath)) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
const fileContent = this._fileSystem.read(templatePath);
|
|
115
|
+
if (fileContent) {
|
|
116
|
+
const lineStartsMap = (0, line_mappings_1.computeLineStartsMap)(fileContent);
|
|
117
|
+
this.resolvedTemplates.push({
|
|
118
|
+
filePath: templatePath,
|
|
119
|
+
container: node,
|
|
120
|
+
content: fileContent,
|
|
121
|
+
inline: false,
|
|
122
|
+
start: 0,
|
|
123
|
+
getCharacterAndLineOfPosition: p => (0, line_mappings_1.getLineAndCharacterFromPosition)(lineStartsMap, p),
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/** Resolves an external stylesheet by reading its content and computing line mappings. */
|
|
130
|
+
resolveExternalStylesheet(filePath, container) {
|
|
131
|
+
const fileContent = this._fileSystem.read(filePath);
|
|
132
|
+
if (!fileContent) {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
const lineStartsMap = (0, line_mappings_1.computeLineStartsMap)(fileContent);
|
|
136
|
+
return {
|
|
137
|
+
filePath: filePath,
|
|
138
|
+
container: container,
|
|
139
|
+
content: fileContent,
|
|
140
|
+
inline: false,
|
|
141
|
+
start: 0,
|
|
142
|
+
getCharacterAndLineOfPosition: pos => (0, line_mappings_1.getLineAndCharacterFromPosition)(lineStartsMap, pos),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.ComponentResourceCollector = ComponentResourceCollector;
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LXJlc291cmNlLWNvbGxlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy91cGRhdGUtdG9vbC9jb21wb25lbnQtcmVzb3VyY2UtY29sbGVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7OztBQUVILCtCQUE2QjtBQUM3QixpQ0FBaUM7QUFFakMsbURBQXdEO0FBQ3hELGlEQUFtRDtBQUNuRCx5REFJK0I7QUFDL0IseURBQTBEO0FBcUIxRDs7O0dBR0c7QUFDSCxNQUFhLDBCQUEwQjtJQUlyQyxZQUFtQixXQUEyQixFQUFVLFdBQXVCO1FBQTVELGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBSC9FLHNCQUFpQixHQUF1QixFQUFFLENBQUM7UUFDM0Msd0JBQW1CLEdBQXVCLEVBQUUsQ0FBQztJQUVxQyxDQUFDO0lBRW5GLFNBQVMsQ0FBQyxJQUFhO1FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFO1lBQ2hELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUEyQixDQUFDLENBQUM7U0FDMUQ7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsSUFBeUI7UUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUMvQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFBLGlDQUFvQixFQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENB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QUMsQ0FBQztvQkFFeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQzt3QkFDMUIsUUFBUSxFQUFFLFlBQVk7d0JBQ3RCLFNBQVMsRUFBRSxJQUFJO3dCQUNmLE9BQU8sRUFBRSxXQUFXO3dCQUNwQixNQUFNLEVBQUUsS0FBSzt3QkFDYixLQUFLLEVBQUUsQ0FBQzt3QkFDUiw2QkFBNkIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUEsK0NBQStCLEVBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztxQkFDdEYsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwwRkFBMEY7SUFDMUYseUJBQXlCLENBQ3ZCLFFBQXVCLEVBQ3ZCLFNBQXFDO1FBRXJDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sYUFBYSxHQUFHLElBQUEsb0NBQW9CLEVBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEQsT0FBTztZQUNMLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLE9BQU8sRUFBRSxXQUFXO1lBQ3BCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsS0FBSyxFQUFFLENBQUM7WUFDUiw2QkFBNkIsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUEsK0NBQStCLEVBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQztTQUMxRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdkpELGdFQXVKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2Rpcm5hbWV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge0ZpbGVTeXN0ZW0sIFdvcmtzcGFjZVBhdGh9IGZyb20gJy4vZmlsZS1zeXN0ZW0nO1xuaW1wb3J0IHtnZXRBbmd1bGFyRGVjb3JhdG9yc30gZnJvbSAnLi91dGlscy9kZWNvcmF0b3JzJztcbmltcG9ydCB7dW53cmFwRXhwcmVzc2lvbn0gZnJvbSAnLi91dGlscy9mdW5jdGlvbnMnO1xuaW1wb3J0IHtcbiAgY29tcHV0ZUxpbmVTdGFydHNNYXAsXG4gIGdldExpbmVBbmRDaGFyYWN0ZXJGcm9tUG9zaXRpb24sXG4gIExpbmVBbmRDaGFyYWN0ZXIsXG59IGZyb20gJy4vdXRpbHMvbGluZS1tYXBwaW5ncyc7XG5pbXBvcnQge2dldFByb3BlcnR5TmFtZVRleHR9IGZyb20gJy4vdXRpbHMvcHJvcGVydHktbmFtZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRSZXNvdXJjZSB7XG4gIC8qKiBDbGFzcyBkZWNsYXJhdGlvbiB0aGF0IGNvbnRhaW5zIHRoaXMgcmVzb3VyY2UuICovXG4gIGNvbnRhaW5lcjogdHMuQ2xhc3NEZWNsYXJhdGlvbiB8IG51bGw7XG4gIC8qKiBGaWxlIGNvbnRlbnQgb2YgdGhlIGdpdmVuIHRlbXBsYXRlLiAqL1xuICBjb250ZW50OiBzdHJpbmc7XG4gIC8qKiBTdGFydCBvZmZzZXQgb2YgdGhlIHJlc291cmNlIGNvbnRlbnQgKGUuZy4gaW4gdGhlIGlubGluZSBzb3VyY2UgZmlsZSkgKi9cbiAgc3RhcnQ6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIGdpdmVuIHJlc291cmNlIGlzIGlubGluZSBvciBub3QuICovXG4gIGlubGluZTogYm9vbGVhbjtcbiAgLyoqIFBhdGggdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGlzIHJlc291cmNlLiAqL1xuICBmaWxlUGF0aDogV29ya3NwYWNlUGF0aDtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGNoYXJhY3RlciBhbmQgbGluZSBvZiBhIGdpdmVuIHBvc2l0aW9uIGluZGV4IGluIHRoZSByZXNvdXJjZS5cbiAgICogSWYgdGhlIHJlc291cmNlIGlzIGRlY2xhcmVkIGlubGluZSB3aXRoaW4gYSBUeXBlU2NyaXB0IHNvdXJjZSBmaWxlLCB0aGUgbGluZSBhbmRcbiAgICogY2hhcmFjdGVyIGFyZSBiYXNlZCBvbiB0aGUgZnVsbCBzb3VyY2UgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IChwb3M6IG51bWJlcikgPT4gTGluZUFuZENoYXJhY3Rlcjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byBmaW5kIEFuZ3VsYXIgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cyByZWZlcmVuY2VkIHdpdGhpblxuICogZ2l2ZW4gVHlwZVNjcmlwdCBzb3VyY2UgZmlsZXMgKGlubGluZSBvciBleHRlcm5hbCByZWZlcmVuY2VkIGZpbGVzKVxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50UmVzb3VyY2VDb2xsZWN0b3Ige1xuICByZXNvbHZlZFRlbXBsYXRlczogUmVzb2x2ZWRSZXNvdXJjZVtdID0gW107XG4gIHJlc29sdmVkU3R5bGVzaGVldHM6IFJlc29sdmVkUmVzb3VyY2VbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIHByaXZhdGUgX2ZpbGVTeXN0ZW06IEZpbGVTeXN0ZW0pIHt9XG5cbiAgdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpIHtcbiAgICBpZiAobm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb24pIHtcbiAgICAgIHRoaXMuX3Zpc2l0Q2xhc3NEZWNsYXJhdGlvbihub2RlIGFzIHRzLkNsYXNzRGVjbGFyYXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Zpc2l0Q2xhc3NEZWNsYXJhdGlvbihub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKSB7XG4gICAgaWYgKCFub2RlLmRlY29yYXRvcnMgfHwgIW5vZGUuZGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZ0RlY29yYXRvcnMgPSBnZXRBbmd1bGFyRGVjb3JhdG9ycyh0aGlzLnR5cGVDaGVja2VyLCBub2RlLmRlY29yYXRvcnMpO1xuICAgIGNvbnN0IGNvbXBvbmVudERlY29yYXRvciA9IG5nRGVjb3JhdG9ycy5maW5kKGRlYyA9PiBkZWMubmFtZSA9PT0gJ0NvbXBvbmVudCcpO1xuXG4gICAgLy8gSW4gY2FzZSBubyBcIkBDb21wb25lbnRcIiBkZWNvcmF0b3IgY291bGQgYmUgZm91bmQgb24gdGhlIGN1cnJlbnQgY2xhc3MsIHNraXAuXG4gICAgaWYgKCFjb21wb25lbnREZWNvcmF0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvcmF0b3JDYWxsID0gY29tcG9uZW50RGVjb3JhdG9yLm5vZGUuZXhwcmVzc2lvbjtcblxuICAgIC8vIEluIGNhc2UgdGhlIGNvbXBvbmVudCBkZWNvcmF0b3IgY2FsbCBpcyBub3QgdmFsaWQsIHNraXAgdGhpcyBjbGFzcyBkZWNsYXJhdGlvbi5cbiAgICBpZiAoZGVjb3JhdG9yQ2FsbC5hcmd1bWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50TWV0YWRhdGEgPSB1bndyYXBFeHByZXNzaW9uKGRlY29yYXRvckNhbGwuYXJndW1lbnRzWzBdKTtcblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBjb21wb25lbnQgbWV0YWRhdGEgaXMgYW4gb2JqZWN0IGxpdGVyYWwgZXhwcmVzc2lvbi5cbiAgICBpZiAoIXRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24oY29tcG9uZW50TWV0YWRhdGEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gdGhpcy5fZmlsZVN5c3RlbS5yZXNvbHZlKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgIGNvbnN0IHNvdXJjZUZpbGVEaXJQYXRoID0gZGlybmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcblxuICAgIC8vIFdhbGsgdGhyb3VnaCBhbGwgY29tcG9uZW50IG1ldGFkYXRhIHByb3BlcnRpZXMgYW5kIGRldGVybWluZSB0aGUgcmVmZXJlbmNlZFxuICAgIC8vIEhUTUwgdGVtcGxhdGVzIChlaXRoZXIgZXh0ZXJuYWwgb3IgaW5saW5lKVxuICAgIGNvbXBvbmVudE1ldGFkYXRhLnByb3BlcnRpZXMuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICBpZiAoIXRzLmlzUHJvcGVydHlBc3NpZ25tZW50KHByb3BlcnR5KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IGdldFByb3BlcnR5TmFtZVRleHQocHJvcGVydHkubmFtZSk7XG5cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICdzdHlsZXMnICYmIHRzLmlzQXJyYXlMaXRlcmFsRXhwcmVzc2lvbihwcm9wZXJ0eS5pbml0aWFsaXplcikpIHtcbiAgICAgICAgcHJvcGVydHkuaW5pdGlhbGl6ZXIuZWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgaWYgKHRzLmlzU3RyaW5nTGl0ZXJhbExpa2UoZWwpKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGFkZCBhbiBvZmZzZXQgb2Ygb25lIHRvIHRoZSBzdGFydCBiZWNhdXNlIHRoZSB0ZW1wbGF0ZSBxdW90ZXMgYXJlXG4gICAgICAgICAgICAvLyBub3QgcGFydCBvZiB0aGUgdGVtcGxhdGUgY29udGVudC5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlU3RhcnRJZHggPSBlbC5nZXRTdGFydCgpICsgMTtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZWRTdHlsZXNoZWV0cy5wdXNoKHtcbiAgICAgICAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgICAgICAgIGNvbnRhaW5lcjogbm9kZSxcbiAgICAgICAgICAgICAgY29udGVudDogZWwudGV4dCxcbiAgICAgICAgICAgICAgaW5saW5lOiB0cnVlLFxuICAgICAgICAgICAgICBzdGFydDogdGVtcGxhdGVTdGFydElkeCxcbiAgICAgICAgICAgICAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IHBvcyA9PlxuICAgICAgICAgICAgICAgIHRzLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKHNvdXJjZUZpbGUsIHBvcyArIHRlbXBsYXRlU3RhcnRJZHgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSW4gY2FzZSB0aGVyZSBpcyBhbiBpbmxpbmUgdGVtcGxhdGUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgaXMgc3RhdGljYWxseVxuICAgICAgLy8gYW5hbHl6YWJsZSBieSBjaGVja2luZyBpZiB0aGUgaW5pdGlhbGl6ZXIgaXMgYSBzdHJpbmcgbGl0ZXJhbC1saWtlIG5vZGUuXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAndGVtcGxhdGUnICYmIHRzLmlzU3RyaW5nTGl0ZXJhbExpa2UocHJvcGVydHkuaW5pdGlhbGl6ZXIpKSB7XG4gICAgICAgIC8vIE5lZWQgdG8gYWRkIGFuIG9mZnNldCBvZiBvbmUgdG8gdGhlIHN0YXJ0IGJlY2F1c2UgdGhlIHRlbXBsYXRlIHF1b3RlcyBhcmVcbiAgICAgICAgLy8gbm90IHBhcnQgb2YgdGhlIHRlbXBsYXRlIGNvbnRlbnQuXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlU3RhcnRJZHggPSBwcm9wZXJ0eS5pbml0aWFsaXplci5nZXRTdGFydCgpICsgMTtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFRlbXBsYXRlcy5wdXNoKHtcbiAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICBjb250YWluZXI6IG5vZGUsXG4gICAgICAgICAgY29udGVudDogcHJvcGVydHkuaW5pdGlhbGl6ZXIudGV4dCxcbiAgICAgICAgICBpbmxpbmU6IHRydWUsXG4gICAgICAgICAgc3RhcnQ6IHRlbXBsYXRlU3RhcnRJZHgsXG4gICAgICAgICAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IHBvcyA9PlxuICAgICAgICAgICAgdHMuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oc291cmNlRmlsZSwgcG9zICsgdGVtcGxhdGVTdGFydElkeCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydHlOYW1lID09PSAnc3R5bGVVcmxzJyAmJiB0cy5pc0FycmF5TGl0ZXJhbEV4cHJlc3Npb24ocHJvcGVydHkuaW5pdGlhbGl6ZXIpKSB7XG4gICAgICAgIHByb3BlcnR5LmluaXRpYWxpemVyLmVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgIGlmICh0cy5pc1N0cmluZ0xpdGVyYWxMaWtlKGVsKSkge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldFBhdGggPSB0aGlzLl9maWxlU3lzdGVtLnJlc29sdmUoc291cmNlRmlsZURpclBhdGgsIGVsLnRleHQpO1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldCA9IHRoaXMucmVzb2x2ZUV4dGVybmFsU3R5bGVzaGVldChzdHlsZXNoZWV0UGF0aCwgbm9kZSk7XG5cbiAgICAgICAgICAgIGlmIChzdHlsZXNoZWV0KSB7XG4gICAgICAgICAgICAgIHRoaXMucmVzb2x2ZWRTdHlsZXNoZWV0cy5wdXNoKHN0eWxlc2hlZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICd0ZW1wbGF0ZVVybCcgJiYgdHMuaXNTdHJpbmdMaXRlcmFsTGlrZShwcm9wZXJ0eS5pbml0aWFsaXplcikpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVVcmwgPSBwcm9wZXJ0eS5pbml0aWFsaXplci50ZXh0O1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSB0aGlzLl9maWxlU3lzdGVtLnJlc29sdmUoc291cmNlRmlsZURpclBhdGgsIHRlbXBsYXRlVXJsKTtcblxuICAgICAgICAvLyBJbiBjYXNlIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZmlsZSBzeXN0ZW0sIHNraXAgdGhpc1xuICAgICAgICAvLyBleHRlcm5hbCB0ZW1wbGF0ZS5cbiAgICAgICAgaWYgKCF0aGlzLl9maWxlU3lzdGVtLmZpbGVFeGlzdHModGVtcGxhdGVQYXRoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVDb250ZW50ID0gdGhpcy5fZmlsZVN5c3RlbS5yZWFkKHRlbXBsYXRlUGF0aCk7XG5cbiAgICAgICAgaWYgKGZpbGVDb250ZW50KSB7XG4gICAgICAgICAgY29uc3QgbGluZVN0YXJ0c01hcCA9IGNvbXB1dGVMaW5lU3RhcnRzTWFwKGZpbGVDb250ZW50KTtcblxuICAgICAgICAgIHRoaXMucmVzb2x2ZWRUZW1wbGF0ZXMucHVzaCh7XG4gICAgICAgICAgICBmaWxlUGF0aDogdGVtcGxhdGVQYXRoLFxuICAgICAgICAgICAgY29udGFpbmVyOiBub2RlLFxuICAgICAgICAgICAgY29udGVudDogZmlsZUNvbnRlbnQsXG4gICAgICAgICAgICBpbmxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgICAgICBnZXRDaGFyYWN0ZXJBbmRMaW5lT2ZQb3NpdGlvbjogcCA9PiBnZXRMaW5lQW5kQ2hhcmFjdGVyRnJvbVBvc2l0aW9uKGxpbmVTdGFydHNNYXAsIHApLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVzb2x2ZXMgYW4gZXh0ZXJuYWwgc3R5bGVzaGVldCBieSByZWFkaW5nIGl0cyBjb250ZW50IGFuZCBjb21wdXRpbmcgbGluZSBtYXBwaW5ncy4gKi9cbiAgcmVzb2x2ZUV4dGVybmFsU3R5bGVzaGVldChcbiAgICBmaWxlUGF0aDogV29ya3NwYWNlUGF0aCxcbiAgICBjb250YWluZXI6IHRzLkNsYXNzRGVjbGFyYXRpb24gfCBudWxsLFxuICApOiBSZXNvbHZlZFJlc291cmNlIHwgbnVsbCB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSB0aGlzLl9maWxlU3lzdGVtLnJlYWQoZmlsZVBhdGgpO1xuXG4gICAgaWYgKCFmaWxlQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgbGluZVN0YXJ0c01hcCA9IGNvbXB1dGVMaW5lU3RhcnRzTWFwKGZpbGVDb250ZW50KTtcblxuICAgIHJldHVybiB7XG4gICAgICBmaWxlUGF0aDogZmlsZVBhdGgsXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIGNvbnRlbnQ6IGZpbGVDb250ZW50LFxuICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgIHN0YXJ0OiAwLFxuICAgICAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IHBvcyA9PiBnZXRMaW5lQW5kQ2hhcmFjdGVyRnJvbVBvc2l0aW9uKGxpbmVTdGFydHNNYXAsIHBvcyksXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,72 @@
|
|
|
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 { UpdateRecorder } from './update-recorder';
|
|
9
|
+
/**
|
|
10
|
+
* A workspace path semantically is equivalent to the `Path` type provided by the
|
|
11
|
+
* Angular devkit. Paths denoted with such a type are guaranteed to be representing
|
|
12
|
+
* paths of a given virtual file system. This means that the root of a path can be
|
|
13
|
+
* different, and does not necessarily need to match the root in the real file system.
|
|
14
|
+
*
|
|
15
|
+
* For example: Consider we have a project in `/home/<..>/my-project`. Then a path
|
|
16
|
+
* like `/package.json` could actually refer to the `package.json` file in `my-project`.
|
|
17
|
+
* Note that in the real file system this would not match though.
|
|
18
|
+
*
|
|
19
|
+
* One wonder why another type has been declared for such paths, when there already
|
|
20
|
+
* is the `Path` type provided by the devkit. We do this for a couple of reasons:
|
|
21
|
+
*
|
|
22
|
+
* 1. The update-tool cannot have a dependency on the Angular devkit as that one
|
|
23
|
+
* is not synced into g3. We want to be able to run migrations in g3 if needed.
|
|
24
|
+
*/
|
|
25
|
+
export declare type WorkspacePath = string & {
|
|
26
|
+
__PRIVATE_DEVKIT_PATH: void;
|
|
27
|
+
};
|
|
28
|
+
/** Interface that describes a directory. */
|
|
29
|
+
export interface DirectoryEntry {
|
|
30
|
+
/** List of directories inside the directory. */
|
|
31
|
+
directories: string[];
|
|
32
|
+
/** List of files inside the directory. */
|
|
33
|
+
files: string[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Abstraction of the file system that migrations can use to record and apply
|
|
37
|
+
* changes. This is necessary to support virtual file systems as used in the CLI devkit.
|
|
38
|
+
*/
|
|
39
|
+
export declare abstract class FileSystem {
|
|
40
|
+
/** Checks whether the given file exists. */
|
|
41
|
+
abstract fileExists(path: WorkspacePath): boolean;
|
|
42
|
+
/** Checks whether the given directory exists. */
|
|
43
|
+
abstract directoryExists(path: WorkspacePath): boolean;
|
|
44
|
+
/** Gets the contents of the given file. */
|
|
45
|
+
abstract read(filePath: WorkspacePath): string | null;
|
|
46
|
+
/** Reads the given directory to retrieve children. */
|
|
47
|
+
abstract readDirectory(dirPath: WorkspacePath): DirectoryEntry;
|
|
48
|
+
/**
|
|
49
|
+
* Creates an update recorder for the given file. Edits can be recorded and
|
|
50
|
+
* committed in batches. Changes are not applied automatically because otherwise
|
|
51
|
+
* migrations would need to re-read files, or account for shifted file contents.
|
|
52
|
+
*/
|
|
53
|
+
abstract edit(filePath: WorkspacePath): UpdateRecorder;
|
|
54
|
+
/** Applies all changes which have been recorded in update recorders. */
|
|
55
|
+
abstract commitEdits(): void;
|
|
56
|
+
/** Creates a new file with the given content. */
|
|
57
|
+
abstract create(filePath: WorkspacePath, content: string): void;
|
|
58
|
+
/** Overwrites an existing file with the given content. */
|
|
59
|
+
abstract overwrite(filePath: WorkspacePath, content: string): void;
|
|
60
|
+
/** Deletes the given file. */
|
|
61
|
+
abstract delete(filePath: WorkspacePath): void;
|
|
62
|
+
/**
|
|
63
|
+
* Resolves given paths to a resolved path in the file system. For example, the devkit
|
|
64
|
+
* tree considers the actual workspace directory as file system root.
|
|
65
|
+
*
|
|
66
|
+
* Follows the same semantics as the native path `resolve` method. i.e. segments
|
|
67
|
+
* are processed in reverse. The last segment is considered the target and the
|
|
68
|
+
* function will iterate from the target through other segments until it finds an
|
|
69
|
+
* absolute path segment.
|
|
70
|
+
*/
|
|
71
|
+
abstract resolve(...segments: string[]): WorkspacePath;
|
|
72
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
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.FileSystem = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* Abstraction of the file system that migrations can use to record and apply
|
|
13
|
+
* changes. This is necessary to support virtual file systems as used in the CLI devkit.
|
|
14
|
+
*/
|
|
15
|
+
class FileSystem {
|
|
16
|
+
}
|
|
17
|
+
exports.FileSystem = FileSystem;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zeXN0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvdXBkYXRlLXRvb2wvZmlsZS1zeXN0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBa0NIOzs7R0FHRztBQUNILE1BQXNCLFVBQVU7Q0FpQy9CO0FBakNELGdDQWlDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1VwZGF0ZVJlY29yZGVyfSBmcm9tICcuL3VwZGF0ZS1yZWNvcmRlcic7XG5cbi8qKlxuICogQSB3b3Jrc3BhY2UgcGF0aCBzZW1hbnRpY2FsbHkgaXMgZXF1aXZhbGVudCB0byB0aGUgYFBhdGhgIHR5cGUgcHJvdmlkZWQgYnkgdGhlXG4gKiBBbmd1bGFyIGRldmtpdC4gUGF0aHMgZGVub3RlZCB3aXRoIHN1Y2ggYSB0eXBlIGFyZSBndWFyYW50ZWVkIHRvIGJlIHJlcHJlc2VudGluZ1xuICogcGF0aHMgb2YgYSBnaXZlbiB2aXJ0dWFsIGZpbGUgc3lzdGVtLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHJvb3Qgb2YgYSBwYXRoIGNhbiBiZVxuICogZGlmZmVyZW50LCBhbmQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbmVlZCB0byBtYXRjaCB0aGUgcm9vdCBpbiB0aGUgcmVhbCBmaWxlIHN5c3RlbS5cbiAqXG4gKiBGb3IgZXhhbXBsZTogQ29uc2lkZXIgd2UgaGF2ZSBhIHByb2plY3QgaW4gYC9ob21lLzwuLj4vbXktcHJvamVjdGAuIFRoZW4gYSBwYXRoXG4gKiBsaWtlIGAvcGFja2FnZS5qc29uYCBjb3VsZCBhY3R1YWxseSByZWZlciB0byB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSBpbiBgbXktcHJvamVjdGAuXG4gKiBOb3RlIHRoYXQgaW4gdGhlIHJlYWwgZmlsZSBzeXN0ZW0gdGhpcyB3b3VsZCBub3QgbWF0Y2ggdGhvdWdoLlxuICpcbiAqIE9uZSB3b25kZXIgd2h5IGFub3RoZXIgdHlwZSBoYXMgYmVlbiBkZWNsYXJlZCBmb3Igc3VjaCBwYXRocywgd2hlbiB0aGVyZSBhbHJlYWR5XG4gKiBpcyB0aGUgYFBhdGhgIHR5cGUgcHJvdmlkZWQgYnkgdGhlIGRldmtpdC4gV2UgZG8gdGhpcyBmb3IgYSBjb3VwbGUgb2YgcmVhc29uczpcbiAqXG4gKiAgIDEuIFRoZSB1cGRhdGUtdG9vbCBjYW5ub3QgaGF2ZSBhIGRlcGVuZGVuY3kgb24gdGhlIEFuZ3VsYXIgZGV2a2l0IGFzIHRoYXQgb25lXG4gKiAgICAgIGlzIG5vdCBzeW5jZWQgaW50byBnMy4gV2Ugd2FudCB0byBiZSBhYmxlIHRvIHJ1biBtaWdyYXRpb25zIGluIGczIGlmIG5lZWRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlUGF0aCA9IHN0cmluZyAmIHtcbiAgLy8gQnJhbmQgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIGRldmtpdCBwYXRocyBzbyB0aGF0IGV4aXN0aW5nIHBhdGhcbiAgLy8gdXRpbGl0aWVzIGZyb20gdGhlIEFuZ3VsYXIgZGV2a2l0IGNhbiBiZSBjb252ZW5pZW50bHkgdXNlZC5cbiAgX19QUklWQVRFX0RFVktJVF9QQVRIOiB2b2lkO1xufTtcblxuLyoqIEludGVyZmFjZSB0aGF0IGRlc2NyaWJlcyBhIGRpcmVjdG9yeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5RW50cnkge1xuICAvKiogTGlzdCBvZiBkaXJlY3RvcmllcyBpbnNpZGUgdGhlIGRpcmVjdG9yeS4gKi9cbiAgZGlyZWN0b3JpZXM6IHN0cmluZ1tdO1xuICAvKiogTGlzdCBvZiBmaWxlcyBpbnNpZGUgdGhlIGRpcmVjdG9yeS4gKi9cbiAgZmlsZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEFic3RyYWN0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbSB0aGF0IG1pZ3JhdGlvbnMgY2FuIHVzZSB0byByZWNvcmQgYW5kIGFwcGx5XG4gKiBjaGFuZ2VzLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IHZpcnR1YWwgZmlsZSBzeXN0ZW1zIGFzIHVzZWQgaW4gdGhlIENMSSBkZXZraXQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWxlU3lzdGVtIHtcbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGV4aXN0cy4gKi9cbiAgYWJzdHJhY3QgZmlsZUV4aXN0cyhwYXRoOiBXb3Jrc3BhY2VQYXRoKTogYm9vbGVhbjtcbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3RzLiAqL1xuICBhYnN0cmFjdCBkaXJlY3RvcnlFeGlzdHMocGF0aDogV29ya3NwYWNlUGF0aCk6IGJvb2xlYW47XG4gIC8qKiBHZXRzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gZmlsZS4gKi9cbiAgYWJzdHJhY3QgcmVhZChmaWxlUGF0aDogV29ya3NwYWNlUGF0aCk6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBSZWFkcyB0aGUgZ2l2ZW4gZGlyZWN0b3J5IHRvIHJldHJpZXZlIGNoaWxkcmVuLiAqL1xuICBhYnN0cmFjdCByZWFkRGlyZWN0b3J5KGRpclBhdGg6IFdvcmtzcGFjZVBhdGgpOiBEaXJlY3RvcnlFbnRyeTtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gdXBkYXRlIHJlY29yZGVyIGZvciB0aGUgZ2l2ZW4gZmlsZS4gRWRpdHMgY2FuIGJlIHJlY29yZGVkIGFuZFxuICAgKiBjb21taXR0ZWQgaW4gYmF0Y2hlcy4gQ2hhbmdlcyBhcmUgbm90IGFwcGxpZWQgYXV0b21hdGljYWxseSBiZWNhdXNlIG90aGVyd2lzZVxuICAgKiBtaWdyYXRpb25zIHdvdWxkIG5lZWQgdG8gcmUtcmVhZCBmaWxlcywgb3IgYWNjb3VudCBmb3Igc2hpZnRlZCBmaWxlIGNvbnRlbnRzLlxuICAgKi9cbiAgYWJzdHJhY3QgZWRpdChmaWxlUGF0aDogV29ya3NwYWNlUGF0aCk6IFVwZGF0ZVJlY29yZGVyO1xuICAvKiogQXBwbGllcyBhbGwgY2hhbmdlcyB3aGljaCBoYXZlIGJlZW4gcmVjb3JkZWQgaW4gdXBkYXRlIHJlY29yZGVycy4gKi9cbiAgYWJzdHJhY3QgY29tbWl0RWRpdHMoKTogdm9pZDtcbiAgLyoqIENyZWF0ZXMgYSBuZXcgZmlsZSB3aXRoIHRoZSBnaXZlbiBjb250ZW50LiAqL1xuICBhYnN0cmFjdCBjcmVhdGUoZmlsZVBhdGg6IFdvcmtzcGFjZVBhdGgsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBPdmVyd3JpdGVzIGFuIGV4aXN0aW5nIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gY29udGVudC4gKi9cbiAgYWJzdHJhY3Qgb3ZlcndyaXRlKGZpbGVQYXRoOiBXb3Jrc3BhY2VQYXRoLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkO1xuICAvKiogRGVsZXRlcyB0aGUgZ2l2ZW4gZmlsZS4gKi9cbiAgYWJzdHJhY3QgZGVsZXRlKGZpbGVQYXRoOiBXb3Jrc3BhY2VQYXRoKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlc29sdmVzIGdpdmVuIHBhdGhzIHRvIGEgcmVzb2x2ZWQgcGF0aCBpbiB0aGUgZmlsZSBzeXN0ZW0uIEZvciBleGFtcGxlLCB0aGUgZGV2a2l0XG4gICAqIHRyZWUgY29uc2lkZXJzIHRoZSBhY3R1YWwgd29ya3NwYWNlIGRpcmVjdG9yeSBhcyBmaWxlIHN5c3RlbSByb290LlxuICAgKlxuICAgKiBGb2xsb3dzIHRoZSBzYW1lIHNlbWFudGljcyBhcyB0aGUgbmF0aXZlIHBhdGggYHJlc29sdmVgIG1ldGhvZC4gaS5lLiBzZWdtZW50c1xuICAgKiBhcmUgcHJvY2Vzc2VkIGluIHJldmVyc2UuIFRoZSBsYXN0IHNlZ21lbnQgaXMgY29uc2lkZXJlZCB0aGUgdGFyZ2V0IGFuZCB0aGVcbiAgICogZnVuY3Rpb24gd2lsbCBpdGVyYXRlIGZyb20gdGhlIHRhcmdldCB0aHJvdWdoIG90aGVyIHNlZ21lbnRzIHVudGlsIGl0IGZpbmRzIGFuXG4gICAqIGFic29sdXRlIHBhdGggc2VnbWVudC5cbiAgICovXG4gIGFic3RyYWN0IHJlc29sdmUoLi4uc2VnbWVudHM6IHN0cmluZ1tdKTogV29ya3NwYWNlUGF0aDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
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.FileSystem = void 0;
|
|
11
|
+
/**
|
|
12
|
+
* Abstraction of the file system that migrations can use to record and apply
|
|
13
|
+
* changes. This is necessary to support virtual file systems as used in the CLI devkit.
|
|
14
|
+
*/
|
|
15
|
+
class FileSystem {
|
|
16
|
+
}
|
|
17
|
+
exports.FileSystem = FileSystem;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1zeXN0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvdXBkYXRlLXRvb2wvZmlsZS1zeXN0ZW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBa0NIOzs7R0FHRztBQUNILE1BQXNCLFVBQVU7Q0FpQy9CO0FBakNELGdDQWlDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1VwZGF0ZVJlY29yZGVyfSBmcm9tICcuL3VwZGF0ZS1yZWNvcmRlcic7XG5cbi8qKlxuICogQSB3b3Jrc3BhY2UgcGF0aCBzZW1hbnRpY2FsbHkgaXMgZXF1aXZhbGVudCB0byB0aGUgYFBhdGhgIHR5cGUgcHJvdmlkZWQgYnkgdGhlXG4gKiBBbmd1bGFyIGRldmtpdC4gUGF0aHMgZGVub3RlZCB3aXRoIHN1Y2ggYSB0eXBlIGFyZSBndWFyYW50ZWVkIHRvIGJlIHJlcHJlc2VudGluZ1xuICogcGF0aHMgb2YgYSBnaXZlbiB2aXJ0dWFsIGZpbGUgc3lzdGVtLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHJvb3Qgb2YgYSBwYXRoIGNhbiBiZVxuICogZGlmZmVyZW50LCBhbmQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbmVlZCB0byBtYXRjaCB0aGUgcm9vdCBpbiB0aGUgcmVhbCBmaWxlIHN5c3RlbS5cbiAqXG4gKiBGb3IgZXhhbXBsZTogQ29uc2lkZXIgd2UgaGF2ZSBhIHByb2plY3QgaW4gYC9ob21lLzwuLj4vbXktcHJvamVjdGAuIFRoZW4gYSBwYXRoXG4gKiBsaWtlIGAvcGFja2FnZS5qc29uYCBjb3VsZCBhY3R1YWxseSByZWZlciB0byB0aGUgYHBhY2thZ2UuanNvbmAgZmlsZSBpbiBgbXktcHJvamVjdGAuXG4gKiBOb3RlIHRoYXQgaW4gdGhlIHJlYWwgZmlsZSBzeXN0ZW0gdGhpcyB3b3VsZCBub3QgbWF0Y2ggdGhvdWdoLlxuICpcbiAqIE9uZSB3b25kZXIgd2h5IGFub3RoZXIgdHlwZSBoYXMgYmVlbiBkZWNsYXJlZCBmb3Igc3VjaCBwYXRocywgd2hlbiB0aGVyZSBhbHJlYWR5XG4gKiBpcyB0aGUgYFBhdGhgIHR5cGUgcHJvdmlkZWQgYnkgdGhlIGRldmtpdC4gV2UgZG8gdGhpcyBmb3IgYSBjb3VwbGUgb2YgcmVhc29uczpcbiAqXG4gKiAgIDEuIFRoZSB1cGRhdGUtdG9vbCBjYW5ub3QgaGF2ZSBhIGRlcGVuZGVuY3kgb24gdGhlIEFuZ3VsYXIgZGV2a2l0IGFzIHRoYXQgb25lXG4gKiAgICAgIGlzIG5vdCBzeW5jZWQgaW50byBnMy4gV2Ugd2FudCB0byBiZSBhYmxlIHRvIHJ1biBtaWdyYXRpb25zIGluIGczIGlmIG5lZWRlZC5cbiAqL1xuZXhwb3J0IHR5cGUgV29ya3NwYWNlUGF0aCA9IHN0cmluZyAmIHtcbiAgLy8gQnJhbmQgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIGRldmtpdCBwYXRocyBzbyB0aGF0IGV4aXN0aW5nIHBhdGhcbiAgLy8gdXRpbGl0aWVzIGZyb20gdGhlIEFuZ3VsYXIgZGV2a2l0IGNhbiBiZSBjb252ZW5pZW50bHkgdXNlZC5cbiAgX19QUklWQVRFX0RFVktJVF9QQVRIOiB2b2lkO1xufTtcblxuLyoqIEludGVyZmFjZSB0aGF0IGRlc2NyaWJlcyBhIGRpcmVjdG9yeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0b3J5RW50cnkge1xuICAvKiogTGlzdCBvZiBkaXJlY3RvcmllcyBpbnNpZGUgdGhlIGRpcmVjdG9yeS4gKi9cbiAgZGlyZWN0b3JpZXM6IHN0cmluZ1tdO1xuICAvKiogTGlzdCBvZiBmaWxlcyBpbnNpZGUgdGhlIGRpcmVjdG9yeS4gKi9cbiAgZmlsZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEFic3RyYWN0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbSB0aGF0IG1pZ3JhdGlvbnMgY2FuIHVzZSB0byByZWNvcmQgYW5kIGFwcGx5XG4gKiBjaGFuZ2VzLiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBzdXBwb3J0IHZpcnR1YWwgZmlsZSBzeXN0ZW1zIGFzIHVzZWQgaW4gdGhlIENMSSBkZXZraXQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaWxlU3lzdGVtIHtcbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBmaWxlIGV4aXN0cy4gKi9cbiAgYWJzdHJhY3QgZmlsZUV4aXN0cyhwYXRoOiBXb3Jrc3BhY2VQYXRoKTogYm9vbGVhbjtcbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBkaXJlY3RvcnkgZXhpc3RzLiAqL1xuICBhYnN0cmFjdCBkaXJlY3RvcnlFeGlzdHMocGF0aDogV29ya3NwYWNlUGF0aCk6IGJvb2xlYW47XG4gIC8qKiBHZXRzIHRoZSBjb250ZW50cyBvZiB0aGUgZ2l2ZW4gZmlsZS4gKi9cbiAgYWJzdHJhY3QgcmVhZChmaWxlUGF0aDogV29ya3NwYWNlUGF0aCk6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBSZWFkcyB0aGUgZ2l2ZW4gZGlyZWN0b3J5IHRvIHJldHJpZXZlIGNoaWxkcmVuLiAqL1xuICBhYnN0cmFjdCByZWFkRGlyZWN0b3J5KGRpclBhdGg6IFdvcmtzcGFjZVBhdGgpOiBEaXJlY3RvcnlFbnRyeTtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gdXBkYXRlIHJlY29yZGVyIGZvciB0aGUgZ2l2ZW4gZmlsZS4gRWRpdHMgY2FuIGJlIHJlY29yZGVkIGFuZFxuICAgKiBjb21taXR0ZWQgaW4gYmF0Y2hlcy4gQ2hhbmdlcyBhcmUgbm90IGFwcGxpZWQgYXV0b21hdGljYWxseSBiZWNhdXNlIG90aGVyd2lzZVxuICAgKiBtaWdyYXRpb25zIHdvdWxkIG5lZWQgdG8gcmUtcmVhZCBmaWxlcywgb3IgYWNjb3VudCBmb3Igc2hpZnRlZCBmaWxlIGNvbnRlbnRzLlxuICAgKi9cbiAgYWJzdHJhY3QgZWRpdChmaWxlUGF0aDogV29ya3NwYWNlUGF0aCk6IFVwZGF0ZVJlY29yZGVyO1xuICAvKiogQXBwbGllcyBhbGwgY2hhbmdlcyB3aGljaCBoYXZlIGJlZW4gcmVjb3JkZWQgaW4gdXBkYXRlIHJlY29yZGVycy4gKi9cbiAgYWJzdHJhY3QgY29tbWl0RWRpdHMoKTogdm9pZDtcbiAgLyoqIENyZWF0ZXMgYSBuZXcgZmlsZSB3aXRoIHRoZSBnaXZlbiBjb250ZW50LiAqL1xuICBhYnN0cmFjdCBjcmVhdGUoZmlsZVBhdGg6IFdvcmtzcGFjZVBhdGgsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQ7XG4gIC8qKiBPdmVyd3JpdGVzIGFuIGV4aXN0aW5nIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gY29udGVudC4gKi9cbiAgYWJzdHJhY3Qgb3ZlcndyaXRlKGZpbGVQYXRoOiBXb3Jrc3BhY2VQYXRoLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkO1xuICAvKiogRGVsZXRlcyB0aGUgZ2l2ZW4gZmlsZS4gKi9cbiAgYWJzdHJhY3QgZGVsZXRlKGZpbGVQYXRoOiBXb3Jrc3BhY2VQYXRoKTogdm9pZDtcbiAgLyoqXG4gICAqIFJlc29sdmVzIGdpdmVuIHBhdGhzIHRvIGEgcmVzb2x2ZWQgcGF0aCBpbiB0aGUgZmlsZSBzeXN0ZW0uIEZvciBleGFtcGxlLCB0aGUgZGV2a2l0XG4gICAqIHRyZWUgY29uc2lkZXJzIHRoZSBhY3R1YWwgd29ya3NwYWNlIGRpcmVjdG9yeSBhcyBmaWxlIHN5c3RlbSByb290LlxuICAgKlxuICAgKiBGb2xsb3dzIHRoZSBzYW1lIHNlbWFudGljcyBhcyB0aGUgbmF0aXZlIHBhdGggYHJlc29sdmVgIG1ldGhvZC4gaS5lLiBzZWdtZW50c1xuICAgKiBhcmUgcHJvY2Vzc2VkIGluIHJldmVyc2UuIFRoZSBsYXN0IHNlZ21lbnQgaXMgY29uc2lkZXJlZCB0aGUgdGFyZ2V0IGFuZCB0aGVcbiAgICogZnVuY3Rpb24gd2lsbCBpdGVyYXRlIGZyb20gdGhlIHRhcmdldCB0aHJvdWdoIG90aGVyIHNlZ21lbnRzIHVudGlsIGl0IGZpbmRzIGFuXG4gICAqIGFic29sdXRlIHBhdGggc2VnbWVudC5cbiAgICovXG4gIGFic3RyYWN0IHJlc29sdmUoLi4uc2VnbWVudHM6IHN0cmluZ1tdKTogV29ya3NwYWNlUGF0aDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,70 @@
|
|
|
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 { FileSystem, WorkspacePath } from './file-system';
|
|
10
|
+
import { UpdateLogger } from './logger';
|
|
11
|
+
import { MigrationCtor } from './migration';
|
|
12
|
+
import { TargetVersion } from './target-version';
|
|
13
|
+
/**
|
|
14
|
+
* An update project that can be run against individual migrations. An update project
|
|
15
|
+
* accepts a TypeScript program and a context that is provided to all migrations. The
|
|
16
|
+
* context is usually not used by migrations, but in some cases migrations rely on
|
|
17
|
+
* specifics from the tool that performs the update (e.g. the Angular CLI). In those cases,
|
|
18
|
+
* the context can provide the necessary specifics to the migrations in a type-safe way.
|
|
19
|
+
*/
|
|
20
|
+
export declare class UpdateProject<Context> {
|
|
21
|
+
/** Context provided to all migrations. */
|
|
22
|
+
private _context;
|
|
23
|
+
/** TypeScript program using workspace paths. */
|
|
24
|
+
private _program;
|
|
25
|
+
/** File system used for reading, writing and editing files. */
|
|
26
|
+
private _fileSystem;
|
|
27
|
+
/**
|
|
28
|
+
* Set of analyzed files. Used for avoiding multiple migration runs if
|
|
29
|
+
* files overlap between targets.
|
|
30
|
+
*/
|
|
31
|
+
private _analyzedFiles;
|
|
32
|
+
/** Logger used for printing messages. */
|
|
33
|
+
private _logger;
|
|
34
|
+
private readonly _typeChecker;
|
|
35
|
+
constructor(
|
|
36
|
+
/** Context provided to all migrations. */
|
|
37
|
+
_context: Context,
|
|
38
|
+
/** TypeScript program using workspace paths. */
|
|
39
|
+
_program: ts.Program,
|
|
40
|
+
/** File system used for reading, writing and editing files. */
|
|
41
|
+
_fileSystem: FileSystem,
|
|
42
|
+
/**
|
|
43
|
+
* Set of analyzed files. Used for avoiding multiple migration runs if
|
|
44
|
+
* files overlap between targets.
|
|
45
|
+
*/
|
|
46
|
+
_analyzedFiles?: Set<WorkspacePath>,
|
|
47
|
+
/** Logger used for printing messages. */
|
|
48
|
+
_logger?: UpdateLogger);
|
|
49
|
+
/**
|
|
50
|
+
* Migrates the project to the specified target version.
|
|
51
|
+
* @param migrationTypes Migrations that should be run.
|
|
52
|
+
* @param target Version the project should be updated to.
|
|
53
|
+
* @param data Upgrade data that is passed to all migration rules.
|
|
54
|
+
* @param additionalStylesheetPaths Additional stylesheets that should be migrated, if not
|
|
55
|
+
* referenced in an Angular component. This is helpful for global stylesheets in a project.
|
|
56
|
+
*/
|
|
57
|
+
migrate<Data>(migrationTypes: MigrationCtor<Data, Context>[], target: TargetVersion, data: Data, additionalStylesheetPaths?: string[]): {
|
|
58
|
+
hasFailures: boolean;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Creates instances of the given migrations with the specified target
|
|
62
|
+
* version and data.
|
|
63
|
+
*/
|
|
64
|
+
private _createMigrations;
|
|
65
|
+
/**
|
|
66
|
+
* Creates a program form the specified tsconfig and patches the host
|
|
67
|
+
* to read files and directories through the given file system.
|
|
68
|
+
*/
|
|
69
|
+
static createProgramFromTsconfig(tsconfigPath: WorkspacePath, fs: FileSystem): ts.Program;
|
|
70
|
+
}
|