@angular/core 13.0.0-rc.1 → 13.0.1
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/core.d.ts +224 -221
- package/esm2020/index.mjs +6 -5
- package/esm2020/src/application_module.mjs +2 -7
- package/esm2020/src/core_render3_private_export.mjs +2 -1
- package/esm2020/src/debug/debug_node.mjs +2 -3
- package/esm2020/src/linker/component_factory_resolver.mjs +5 -5
- package/esm2020/src/linker/ng_module_factory.mjs +1 -1
- package/esm2020/src/metadata/view.mjs +3 -1
- package/esm2020/src/render3/definition.mjs +2 -7
- package/esm2020/src/render3/di.mjs +3 -3
- package/esm2020/src/render3/di_setup.mjs +1 -1
- package/esm2020/src/render3/error_code.mjs +2 -5
- package/esm2020/src/render3/error_details_base_url.mjs +16 -0
- package/esm2020/src/render3/fields.mjs +1 -2
- package/esm2020/src/render3/instructions/lview_debug.mjs +36 -13
- package/esm2020/src/render3/instructions/shared.mjs +3 -5
- package/esm2020/src/render3/ng_module_ref.mjs +2 -5
- package/esm2020/src/render3/util/view_traversal_utils.mjs +1 -1
- package/esm2020/src/version.mjs +1 -1
- package/esm2020/testing/src/logger.mjs +3 -3
- package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
- package/esm2020/testing/src/test_compiler.mjs +3 -3
- package/fesm2015/core.mjs +103 -78
- package/fesm2015/core.mjs.map +1 -1
- package/fesm2015/testing.mjs +4 -4
- package/fesm2020/core.mjs +103 -78
- package/fesm2020/core.mjs.map +1 -1
- package/fesm2020/testing.mjs +4 -4
- package/package.json +1 -1
- package/schematics/migrations/router-link-empty-expression/index.js +2 -2
- package/schematics/migrations.json +0 -100
- package/schematics/utils/ng_component_template.d.ts +4 -1
- package/schematics/utils/ng_component_template.js +28 -14
- package/testing/testing.d.ts +1 -1
- package/schematics/migrations/abstract-control-parent/index.d.ts +0 -11
- package/schematics/migrations/abstract-control-parent/index.js +0 -69
- package/schematics/migrations/abstract-control-parent/util.d.ts +0 -14
- package/schematics/migrations/abstract-control-parent/util.js +0 -67
- package/schematics/migrations/activated-route-snapshot-fragment/index.d.ts +0 -13
- package/schematics/migrations/activated-route-snapshot-fragment/index.js +0 -73
- package/schematics/migrations/activated-route-snapshot-fragment/util.d.ts +0 -16
- package/schematics/migrations/activated-route-snapshot-fragment/util.js +0 -51
- package/schematics/migrations/can-activate-with-redirect-to/index.d.ts +0 -11
- package/schematics/migrations/can-activate-with-redirect-to/index.js +0 -69
- package/schematics/migrations/can-activate-with-redirect-to/util.d.ts +0 -11
- package/schematics/migrations/can-activate-with-redirect-to/util.js +0 -73
- package/schematics/migrations/deep-shadow-piercing-selector/index.d.ts +0 -10
- package/schematics/migrations/deep-shadow-piercing-selector/index.js +0 -49
- package/schematics/migrations/dynamic-queries/index.d.ts +0 -13
- package/schematics/migrations/dynamic-queries/index.js +0 -76
- package/schematics/migrations/dynamic-queries/util.d.ts +0 -25
- package/schematics/migrations/dynamic-queries/util.js +0 -84
- package/schematics/migrations/initial-navigation/collector.d.ts +0 -22
- package/schematics/migrations/initial-navigation/collector.js +0 -122
- package/schematics/migrations/initial-navigation/index.d.ts +0 -11
- package/schematics/migrations/initial-navigation/index.js +0 -83
- package/schematics/migrations/initial-navigation/transform.d.ts +0 -20
- package/schematics/migrations/initial-navigation/transform.js +0 -71
- package/schematics/migrations/initial-navigation/update_recorder.d.ts +0 -18
- package/schematics/migrations/initial-navigation/update_recorder.js +0 -20
- package/schematics/migrations/initial-navigation/util.d.ts +0 -12
- package/schematics/migrations/initial-navigation/util.js +0 -46
- package/schematics/migrations/missing-injectable/definition_collector.d.ts +0 -37
- package/schematics/migrations/missing-injectable/definition_collector.js +0 -92
- package/schematics/migrations/missing-injectable/index.d.ts +0 -11
- package/schematics/migrations/missing-injectable/index.js +0 -136
- package/schematics/migrations/missing-injectable/providers_evaluator.d.ts +0 -26
- package/schematics/migrations/missing-injectable/providers_evaluator.js +0 -71
- package/schematics/migrations/missing-injectable/transform.d.ts +0 -70
- package/schematics/migrations/missing-injectable/transform.js +0 -203
- package/schematics/migrations/missing-injectable/update_recorder.d.ts +0 -21
- package/schematics/migrations/missing-injectable/update_recorder.js +0 -20
- package/schematics/migrations/module-with-providers/collector.d.ts +0 -34
- package/schematics/migrations/module-with-providers/collector.js +0 -76
- package/schematics/migrations/module-with-providers/index.d.ts +0 -13
- package/schematics/migrations/module-with-providers/index.js +0 -107
- package/schematics/migrations/module-with-providers/transform.d.ts +0 -50
- package/schematics/migrations/module-with-providers/transform.js +0 -149
- package/schematics/migrations/module-with-providers/util.d.ts +0 -13
- package/schematics/migrations/module-with-providers/util.js +0 -43
- package/schematics/migrations/move-document/document_import_visitor.d.ts +0 -27
- package/schematics/migrations/move-document/document_import_visitor.js +0 -77
- package/schematics/migrations/move-document/index.d.ts +0 -11
- package/schematics/migrations/move-document/index.js +0 -93
- package/schematics/migrations/move-document/move-import.d.ts +0 -12
- package/schematics/migrations/move-document/move-import.js +0 -64
- package/schematics/migrations/native-view-encapsulation/index.d.ts +0 -11
- package/schematics/migrations/native-view-encapsulation/index.js +0 -63
- package/schematics/migrations/native-view-encapsulation/util.d.ts +0 -11
- package/schematics/migrations/native-view-encapsulation/util.js +0 -51
- package/schematics/migrations/navigation-extras-omissions/index.d.ts +0 -11
- package/schematics/migrations/navigation-extras-omissions/index.js +0 -72
- package/schematics/migrations/navigation-extras-omissions/util.d.ts +0 -11
- package/schematics/migrations/navigation-extras-omissions/util.js +0 -129
- package/schematics/migrations/relative-link-resolution/collector.d.ts +0 -22
- package/schematics/migrations/relative-link-resolution/collector.js +0 -98
- package/schematics/migrations/relative-link-resolution/index.d.ts +0 -11
- package/schematics/migrations/relative-link-resolution/index.js +0 -84
- package/schematics/migrations/relative-link-resolution/transform.d.ts +0 -22
- package/schematics/migrations/relative-link-resolution/transform.js +0 -68
- package/schematics/migrations/relative-link-resolution/update_recorder.d.ts +0 -18
- package/schematics/migrations/relative-link-resolution/update_recorder.js +0 -20
- package/schematics/migrations/relative-link-resolution/util.d.ts +0 -12
- package/schematics/migrations/relative-link-resolution/util.js +0 -46
- package/schematics/migrations/renderer-to-renderer2/helpers.d.ts +0 -25
- package/schematics/migrations/renderer-to-renderer2/helpers.js +0 -241
- package/schematics/migrations/renderer-to-renderer2/index.d.ts +0 -14
- package/schematics/migrations/renderer-to-renderer2/index.js +0 -138
- package/schematics/migrations/renderer-to-renderer2/migration.d.ts +0 -18
- package/schematics/migrations/renderer-to-renderer2/migration.js +0 -228
- package/schematics/migrations/renderer-to-renderer2/util.d.ts +0 -18
- package/schematics/migrations/renderer-to-renderer2/util.js +0 -86
- package/schematics/migrations/router-preserve-query-params/index.d.ts +0 -14
- package/schematics/migrations/router-preserve-query-params/index.js +0 -75
- package/schematics/migrations/router-preserve-query-params/util.d.ts +0 -11
- package/schematics/migrations/router-preserve-query-params/util.js +0 -106
- package/schematics/migrations/static-queries/angular/directive_inputs.d.ts +0 -11
- package/schematics/migrations/static-queries/angular/directive_inputs.js +0 -87
- package/schematics/migrations/static-queries/angular/ng_query_visitor.d.ts +0 -45
- package/schematics/migrations/static-queries/angular/ng_query_visitor.js +0 -130
- package/schematics/migrations/static-queries/angular/query-definition.d.ts +0 -37
- package/schematics/migrations/static-queries/angular/query-definition.js +0 -33
- package/schematics/migrations/static-queries/angular/super_class.d.ts +0 -15
- package/schematics/migrations/static-queries/angular/super_class.js +0 -35
- package/schematics/migrations/static-queries/index.d.ts +0 -11
- package/schematics/migrations/static-queries/index.js +0 -244
- package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.d.ts +0 -41
- package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.js +0 -210
- package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.d.ts +0 -24
- package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.js +0 -38
- package/schematics/migrations/static-queries/strategies/timing-strategy.d.ts +0 -19
- package/schematics/migrations/static-queries/strategies/timing-strategy.js +0 -20
- package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.d.ts +0 -82
- package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.js +0 -372
- package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.d.ts +0 -18
- package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.js +0 -55
- package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.d.ts +0 -27
- package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js +0 -93
- package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.d.ts +0 -34
- package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.js +0 -172
- package/schematics/migrations/static-queries/transform.d.ts +0 -21
- package/schematics/migrations/static-queries/transform.js +0 -105
- package/schematics/migrations/template-var-assignment/analyze_template.d.ts +0 -20
- package/schematics/migrations/template-var-assignment/analyze_template.js +0 -38
- package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.d.ts +0 -28
- package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js +0 -80
- package/schematics/migrations/template-var-assignment/index.d.ts +0 -11
- package/schematics/migrations/template-var-assignment/index.js +0 -101
- package/schematics/migrations/undecorated-classes-with-decorated-fields/index.d.ts +0 -14
- package/schematics/migrations/undecorated-classes-with-decorated-fields/index.js +0 -128
- package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.d.ts +0 -64
- package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.js +0 -302
- package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.d.ts +0 -19
- package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.js +0 -20
- package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.d.ts +0 -18
- package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.js +0 -56
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.d.ts +0 -18
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.js +0 -99
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.d.ts +0 -37
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.js +0 -118
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.d.ts +0 -37
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.js +0 -129
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.d.ts +0 -10
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.js +0 -31
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.d.ts +0 -16
- package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.js +0 -68
- package/schematics/migrations/undecorated-classes-with-di/index.d.ts +0 -11
- package/schematics/migrations/undecorated-classes-with-di/index.js +0 -226
- package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.d.ts +0 -38
- package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.js +0 -135
- package/schematics/migrations/undecorated-classes-with-di/transform.d.ts +0 -97
- package/schematics/migrations/undecorated-classes-with-di/transform.js +0 -373
- package/schematics/migrations/undecorated-classes-with-di/update_recorder.d.ts +0 -20
- package/schematics/migrations/undecorated-classes-with-di/update_recorder.js +0 -20
- package/schematics/migrations/wait-for-async/index.d.ts +0 -11
- package/schematics/migrations/wait-for-async/index.js +0 -101
- package/schematics/migrations/wait-for-async/util.d.ts +0 -11
- package/schematics/migrations/wait-for-async/util.js +0 -40
- package/schematics/migrations/xhr-factory/index.d.ts +0 -10
- package/schematics/migrations/xhr-factory/index.js +0 -107
package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
(function (factory) {
|
|
12
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
13
|
-
var v = factory(require, exports);
|
|
14
|
-
if (v !== undefined) module.exports = v;
|
|
15
|
-
}
|
|
16
|
-
else if (typeof define === "function" && define.amd) {
|
|
17
|
-
define("@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context", ["require", "exports", "typescript", "@angular/core/schematics/utils/typescript/functions", "@angular/core/schematics/utils/typescript/nodes", "@angular/core/schematics/utils/typescript/property_name", "@angular/core/schematics/migrations/static-queries/angular/super_class"], factory);
|
|
18
|
-
}
|
|
19
|
-
})(function (require, exports) {
|
|
20
|
-
"use strict";
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.updateSuperClassAbstractMembersContext = void 0;
|
|
23
|
-
const typescript_1 = __importDefault(require("typescript"));
|
|
24
|
-
const functions_1 = require("@angular/core/schematics/utils/typescript/functions");
|
|
25
|
-
const nodes_1 = require("@angular/core/schematics/utils/typescript/nodes");
|
|
26
|
-
const property_name_1 = require("@angular/core/schematics/utils/typescript/property_name");
|
|
27
|
-
const super_class_1 = require("@angular/core/schematics/migrations/static-queries/angular/super_class");
|
|
28
|
-
/**
|
|
29
|
-
* Updates the specified function context to map abstract super-class class members
|
|
30
|
-
* to their implementation TypeScript nodes. This allows us to run the declaration visitor
|
|
31
|
-
* for the super class with the context of the "baseClass" (e.g. with implemented abstract
|
|
32
|
-
* class members)
|
|
33
|
-
*/
|
|
34
|
-
function updateSuperClassAbstractMembersContext(baseClass, context, classMetadataMap) {
|
|
35
|
-
(0, super_class_1.getSuperClassDeclarations)(baseClass, classMetadataMap).forEach(superClassDecl => {
|
|
36
|
-
superClassDecl.members.forEach(superClassMember => {
|
|
37
|
-
if (!superClassMember.name || !(0, nodes_1.hasModifier)(superClassMember, typescript_1.default.SyntaxKind.AbstractKeyword)) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
// Find the matching implementation of the abstract declaration from the super class.
|
|
41
|
-
const baseClassImpl = baseClass.members.find(baseClassMethod => !!baseClassMethod.name &&
|
|
42
|
-
(0, property_name_1.getPropertyNameText)(baseClassMethod.name) ===
|
|
43
|
-
(0, property_name_1.getPropertyNameText)(superClassMember.name));
|
|
44
|
-
if (!baseClassImpl || !(0, functions_1.isFunctionLikeDeclaration)(baseClassImpl) || !baseClassImpl.body) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (!context.has(superClassMember)) {
|
|
48
|
-
context.set(superClassMember, baseClassImpl);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
exports.updateSuperClassAbstractMembersContext = updateSuperClassAbstractMembersContext;
|
|
54
|
-
});
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VwZXJfY2xhc3NfY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3N0YXRpYy1xdWVyaWVzL3N0cmF0ZWdpZXMvdXNhZ2Vfc3RyYXRlZ3kvc3VwZXJfY2xhc3NfY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFSCw0REFBNEI7SUFFNUIsbUZBQWlGO0lBQ2pGLDJFQUErRDtJQUMvRCwyRkFBK0U7SUFFL0Usd0dBQW9FO0lBS3BFOzs7OztPQUtHO0lBQ0gsU0FBZ0Isc0NBQXNDLENBQ2xELFNBQThCLEVBQUUsT0FBd0IsRUFBRSxnQkFBa0M7UUFDOUYsSUFBQSx1Q0FBeUIsRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDOUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLElBQUEsbUJBQVcsRUFBQyxnQkFBZ0IsRUFBRSxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRTtvQkFDM0YsT0FBTztpQkFDUjtnQkFFRCxxRkFBcUY7Z0JBQ3JGLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN4QyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSTtvQkFDckMsSUFBQSxtQ0FBbUIsRUFBQyxlQUFlLENBQUMsSUFBSSxDQUFDO3dCQUNyQyxJQUFBLG1DQUFtQixFQUFDLGdCQUFnQixDQUFDLElBQUssQ0FBQyxDQUFDLENBQUM7Z0JBRXpELElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFBLHFDQUF5QixFQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtvQkFDdEYsT0FBTztpQkFDUjtnQkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO29CQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxDQUFDO2lCQUM5QztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBdkJELHdGQXVCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7aXNGdW5jdGlvbkxpa2VEZWNsYXJhdGlvbn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtoYXNNb2RpZmllcn0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9ub2Rlcyc7XG5pbXBvcnQge2dldFByb3BlcnR5TmFtZVRleHR9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvcHJvcGVydHlfbmFtZSc7XG5pbXBvcnQge0NsYXNzTWV0YWRhdGFNYXB9IGZyb20gJy4uLy4uL2FuZ3VsYXIvbmdfcXVlcnlfdmlzaXRvcic7XG5pbXBvcnQge2dldFN1cGVyQ2xhc3NEZWNsYXJhdGlvbnN9IGZyb20gJy4uLy4uL2FuZ3VsYXIvc3VwZXJfY2xhc3MnO1xuXG5pbXBvcnQge0Z1bmN0aW9uQ29udGV4dH0gZnJvbSAnLi9kZWNsYXJhdGlvbl91c2FnZV92aXNpdG9yJztcblxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBjb250ZXh0IHRvIG1hcCBhYnN0cmFjdCBzdXBlci1jbGFzcyBjbGFzcyBtZW1iZXJzXG4gKiB0byB0aGVpciBpbXBsZW1lbnRhdGlvbiBUeXBlU2NyaXB0IG5vZGVzLiBUaGlzIGFsbG93cyB1cyB0byBydW4gdGhlIGRlY2xhcmF0aW9uIHZpc2l0b3JcbiAqIGZvciB0aGUgc3VwZXIgY2xhc3Mgd2l0aCB0aGUgY29udGV4dCBvZiB0aGUgXCJiYXNlQ2xhc3NcIiAoZS5nLiB3aXRoIGltcGxlbWVudGVkIGFic3RyYWN0XG4gKiBjbGFzcyBtZW1iZXJzKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlU3VwZXJDbGFzc0Fic3RyYWN0TWVtYmVyc0NvbnRleHQoXG4gICAgYmFzZUNsYXNzOiB0cy5DbGFzc0RlY2xhcmF0aW9uLCBjb250ZXh0OiBGdW5jdGlvbkNvbnRleHQsIGNsYXNzTWV0YWRhdGFNYXA6IENsYXNzTWV0YWRhdGFNYXApIHtcbiAgZ2V0U3VwZXJDbGFzc0RlY2xhcmF0aW9ucyhiYXNlQ2xhc3MsIGNsYXNzTWV0YWRhdGFNYXApLmZvckVhY2goc3VwZXJDbGFzc0RlY2wgPT4ge1xuICAgIHN1cGVyQ2xhc3NEZWNsLm1lbWJlcnMuZm9yRWFjaChzdXBlckNsYXNzTWVtYmVyID0+IHtcbiAgICAgIGlmICghc3VwZXJDbGFzc01lbWJlci5uYW1lIHx8ICFoYXNNb2RpZmllcihzdXBlckNsYXNzTWVtYmVyLCB0cy5TeW50YXhLaW5kLkFic3RyYWN0S2V5d29yZCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBtYXRjaGluZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYWJzdHJhY3QgZGVjbGFyYXRpb24gZnJvbSB0aGUgc3VwZXIgY2xhc3MuXG4gICAgICBjb25zdCBiYXNlQ2xhc3NJbXBsID0gYmFzZUNsYXNzLm1lbWJlcnMuZmluZChcbiAgICAgICAgICBiYXNlQ2xhc3NNZXRob2QgPT4gISFiYXNlQ2xhc3NNZXRob2QubmFtZSAmJlxuICAgICAgICAgICAgICBnZXRQcm9wZXJ0eU5hbWVUZXh0KGJhc2VDbGFzc01ldGhvZC5uYW1lKSA9PT1cbiAgICAgICAgICAgICAgICAgIGdldFByb3BlcnR5TmFtZVRleHQoc3VwZXJDbGFzc01lbWJlci5uYW1lISkpO1xuXG4gICAgICBpZiAoIWJhc2VDbGFzc0ltcGwgfHwgIWlzRnVuY3Rpb25MaWtlRGVjbGFyYXRpb24oYmFzZUNsYXNzSW1wbCkgfHwgIWJhc2VDbGFzc0ltcGwuYm9keSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghY29udGV4dC5oYXMoc3VwZXJDbGFzc01lbWJlcikpIHtcbiAgICAgICAgY29udGV4dC5zZXQoc3VwZXJDbGFzc01lbWJlciwgYmFzZUNsYXNzSW1wbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
|
package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
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
|
-
/// <amd-module name="@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor" />
|
|
9
|
-
import type { TmplAstBoundAttribute, TmplAstBoundEvent, TmplAstBoundText, TmplAstElement, TmplAstNode, TmplAstTemplate } from '@angular/compiler';
|
|
10
|
-
import { TemplateAstVisitor } from '../../../../utils/template_ast_visitor';
|
|
11
|
-
/**
|
|
12
|
-
* AST visitor that traverses the Render3 HTML AST in order to check if the given
|
|
13
|
-
* query property is accessed statically in the template.
|
|
14
|
-
*/
|
|
15
|
-
export declare class TemplateUsageVisitor extends TemplateAstVisitor {
|
|
16
|
-
queryPropertyName: string;
|
|
17
|
-
private hasQueryTemplateReference;
|
|
18
|
-
private expressionAstVisitor;
|
|
19
|
-
constructor(queryPropertyName: string, compilerModule: typeof import('@angular/compiler'));
|
|
20
|
-
/** Checks whether the given query is statically accessed within the specified HTML nodes. */
|
|
21
|
-
isQueryUsedStatically(htmlNodes: TmplAstNode[]): boolean;
|
|
22
|
-
visitElement(element: TmplAstElement): void;
|
|
23
|
-
visitTemplate(template: TmplAstTemplate): void;
|
|
24
|
-
visitBoundAttribute(attribute: TmplAstBoundAttribute): void;
|
|
25
|
-
visitBoundText(text: TmplAstBoundText): void;
|
|
26
|
-
visitBoundEvent(node: TmplAstBoundEvent): void;
|
|
27
|
-
}
|
package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
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
|
-
(function (factory) {
|
|
9
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
10
|
-
var v = factory(require, exports);
|
|
11
|
-
if (v !== undefined) module.exports = v;
|
|
12
|
-
}
|
|
13
|
-
else if (typeof define === "function" && define.amd) {
|
|
14
|
-
define("@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor", ["require", "exports", "@angular/core/schematics/utils/template_ast_visitor"], factory);
|
|
15
|
-
}
|
|
16
|
-
})(function (require, exports) {
|
|
17
|
-
"use strict";
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.TemplateUsageVisitor = void 0;
|
|
20
|
-
const template_ast_visitor_1 = require("@angular/core/schematics/utils/template_ast_visitor");
|
|
21
|
-
/**
|
|
22
|
-
* AST visitor that traverses the Render3 HTML AST in order to check if the given
|
|
23
|
-
* query property is accessed statically in the template.
|
|
24
|
-
*/
|
|
25
|
-
class TemplateUsageVisitor extends template_ast_visitor_1.TemplateAstVisitor {
|
|
26
|
-
constructor(queryPropertyName, compilerModule) {
|
|
27
|
-
super(compilerModule);
|
|
28
|
-
this.queryPropertyName = queryPropertyName;
|
|
29
|
-
this.hasQueryTemplateReference = false;
|
|
30
|
-
// AST visitor that checks if the given expression contains property reads that
|
|
31
|
-
// refer to the specified query property name.
|
|
32
|
-
// This class must be defined within the template visitor due to the need to extend from a class
|
|
33
|
-
// value found within `@angular/compiler` which is dynamically imported and provided to the
|
|
34
|
-
// visitor.
|
|
35
|
-
this.expressionAstVisitor = new (class extends compilerModule.RecursiveAstVisitor {
|
|
36
|
-
constructor() {
|
|
37
|
-
super(...arguments);
|
|
38
|
-
this.hasQueryPropertyRead = false;
|
|
39
|
-
}
|
|
40
|
-
visitPropertyRead(node, span) {
|
|
41
|
-
// The receiver of the property read needs to be "implicit" as queries are accessed
|
|
42
|
-
// from the component instance and not from other objects.
|
|
43
|
-
if (node.receiver instanceof compilerModule.ImplicitReceiver &&
|
|
44
|
-
node.name === queryPropertyName) {
|
|
45
|
-
this.hasQueryPropertyRead = true;
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
super.visitPropertyRead(node, span);
|
|
49
|
-
}
|
|
50
|
-
})();
|
|
51
|
-
}
|
|
52
|
-
/** Checks whether the given query is statically accessed within the specified HTML nodes. */
|
|
53
|
-
isQueryUsedStatically(htmlNodes) {
|
|
54
|
-
this.hasQueryTemplateReference = false;
|
|
55
|
-
this.expressionAstVisitor.hasQueryPropertyRead = false;
|
|
56
|
-
// Visit all AST nodes and check if the query property is used statically.
|
|
57
|
-
this.visitAll(htmlNodes);
|
|
58
|
-
return !this.hasQueryTemplateReference && this.expressionAstVisitor.hasQueryPropertyRead;
|
|
59
|
-
}
|
|
60
|
-
visitElement(element) {
|
|
61
|
-
// In case there is a template references variable that matches the query property
|
|
62
|
-
// name, we can finish this visitor as such a template variable can be used in the
|
|
63
|
-
// entire template and the query therefore can't be accessed from the template.
|
|
64
|
-
if (element.references.some(r => r.name === this.queryPropertyName)) {
|
|
65
|
-
this.hasQueryTemplateReference = true;
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
this.visitAll(element.attributes);
|
|
69
|
-
this.visitAll(element.inputs);
|
|
70
|
-
this.visitAll(element.outputs);
|
|
71
|
-
this.visitAll(element.children);
|
|
72
|
-
}
|
|
73
|
-
visitTemplate(template) {
|
|
74
|
-
this.visitAll(template.attributes);
|
|
75
|
-
this.visitAll(template.inputs);
|
|
76
|
-
this.visitAll(template.outputs);
|
|
77
|
-
// We don't want to visit any children of the template as these never can't
|
|
78
|
-
// access a query statically. The templates can be rendered in the ngAfterViewInit"
|
|
79
|
-
// lifecycle hook at the earliest.
|
|
80
|
-
}
|
|
81
|
-
visitBoundAttribute(attribute) {
|
|
82
|
-
attribute.value.visit(this.expressionAstVisitor, attribute.sourceSpan);
|
|
83
|
-
}
|
|
84
|
-
visitBoundText(text) {
|
|
85
|
-
text.value.visit(this.expressionAstVisitor, text.sourceSpan);
|
|
86
|
-
}
|
|
87
|
-
visitBoundEvent(node) {
|
|
88
|
-
node.handler.visit(this.expressionAstVisitor, node.handlerSpan);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
exports.TemplateUsageVisitor = TemplateUsageVisitor;
|
|
92
|
-
});
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVfdXNhZ2VfdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3N0YXRpYy1xdWVyaWVzL3N0cmF0ZWdpZXMvdXNhZ2Vfc3RyYXRlZ3kvdGVtcGxhdGVfdXNhZ2VfdmlzaXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFHSCw4RkFBMEU7SUFFMUU7OztPQUdHO0lBQ0gsTUFBYSxvQkFBcUIsU0FBUSx5Q0FBa0I7UUFJMUQsWUFDVyxpQkFBeUIsRUFBRSxjQUFrRDtZQUN0RixLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFEYixzQkFBaUIsR0FBakIsaUJBQWlCLENBQVE7WUFKNUIsOEJBQXlCLEdBQUcsS0FBSyxDQUFDO1lBT3hDLCtFQUErRTtZQUMvRSw4Q0FBOEM7WUFDOUMsZ0dBQWdHO1lBQ2hHLDJGQUEyRjtZQUMzRixXQUFXO1lBQ1gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFNLFNBQVEsY0FBYyxDQUFDLG1CQUFtQjtnQkFBaEQ7O29CQUMvQix5QkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBYy9CLENBQUM7Z0JBWFUsaUJBQWlCLENBQUMsSUFBa0IsRUFBRSxJQUFxQjtvQkFDbEUsbUZBQW1GO29CQUNuRiwwREFBMEQ7b0JBQzFELElBQUksSUFBSSxDQUFDLFFBQVEsWUFBWSxjQUFjLENBQUMsZ0JBQWdCO3dCQUN4RCxJQUFJLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFO3dCQUNuQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO3dCQUNqQyxPQUFPO3FCQUNSO29CQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7YUFDRixDQUFDLEVBQUUsQ0FBQztRQUNQLENBQUM7UUFFRCw2RkFBNkY7UUFDN0YscUJBQXFCLENBQUMsU0FBd0I7WUFDNUMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztZQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBRXZELDBFQUEwRTtZQUMxRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXpCLE9BQU8sQ0FBQyxJQUFJLENBQUMseUJBQXlCLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDO1FBQzNGLENBQUM7UUFFUSxZQUFZLENBQUMsT0FBdUI7WUFDM0Msa0ZBQWtGO1lBQ2xGLGtGQUFrRjtZQUNsRiwrRUFBK0U7WUFDL0UsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7Z0JBQ3RDLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFUSxhQUFhLENBQUMsUUFBeUI7WUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFaEMsMkVBQTJFO1lBQzNFLG1GQUFtRjtZQUNuRixrQ0FBa0M7UUFDcEMsQ0FBQztRQUVRLG1CQUFtQixDQUFDLFNBQWdDO1lBQzNELFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVRLGNBQWMsQ0FBQyxJQUFzQjtZQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFUSxlQUFlLENBQUMsSUFBdUI7WUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRSxDQUFDO0tBQ0Y7SUE5RUQsb0RBOEVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB0eXBlIHtQYXJzZVNvdXJjZVNwYW4sIFByb3BlcnR5UmVhZCwgVG1wbEFzdEJvdW5kQXR0cmlidXRlLCBUbXBsQXN0Qm91bmRFdmVudCwgVG1wbEFzdEJvdW5kVGV4dCwgVG1wbEFzdEVsZW1lbnQsIFRtcGxBc3ROb2RlLCBUbXBsQXN0VGVtcGxhdGV9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7VGVtcGxhdGVBc3RWaXNpdG9yfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy90ZW1wbGF0ZV9hc3RfdmlzaXRvcic7XG5cbi8qKlxuICogQVNUIHZpc2l0b3IgdGhhdCB0cmF2ZXJzZXMgdGhlIFJlbmRlcjMgSFRNTCBBU1QgaW4gb3JkZXIgdG8gY2hlY2sgaWYgdGhlIGdpdmVuXG4gKiBxdWVyeSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBzdGF0aWNhbGx5IGluIHRoZSB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlVXNhZ2VWaXNpdG9yIGV4dGVuZHMgVGVtcGxhdGVBc3RWaXNpdG9yIHtcbiAgcHJpdmF0ZSBoYXNRdWVyeVRlbXBsYXRlUmVmZXJlbmNlID0gZmFsc2U7XG4gIHByaXZhdGUgZXhwcmVzc2lvbkFzdFZpc2l0b3I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwdWJsaWMgcXVlcnlQcm9wZXJ0eU5hbWU6IHN0cmluZywgY29tcGlsZXJNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvbXBpbGVyJykpIHtcbiAgICBzdXBlcihjb21waWxlck1vZHVsZSk7XG5cbiAgICAvLyBBU1QgdmlzaXRvciB0aGF0IGNoZWNrcyBpZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBjb250YWlucyBwcm9wZXJ0eSByZWFkcyB0aGF0XG4gICAgLy8gcmVmZXIgdG8gdGhlIHNwZWNpZmllZCBxdWVyeSBwcm9wZXJ0eSBuYW1lLlxuICAgIC8vIFRoaXMgY2xhc3MgbXVzdCBiZSBkZWZpbmVkIHdpdGhpbiB0aGUgdGVtcGxhdGUgdmlzaXRvciBkdWUgdG8gdGhlIG5lZWQgdG8gZXh0ZW5kIGZyb20gYSBjbGFzc1xuICAgIC8vIHZhbHVlIGZvdW5kIHdpdGhpbiBgQGFuZ3VsYXIvY29tcGlsZXJgIHdoaWNoIGlzIGR5bmFtaWNhbGx5IGltcG9ydGVkIGFuZCBwcm92aWRlZCB0byB0aGVcbiAgICAvLyB2aXNpdG9yLlxuICAgIHRoaXMuZXhwcmVzc2lvbkFzdFZpc2l0b3IgPSBuZXcgKGNsYXNzIGV4dGVuZHMgY29tcGlsZXJNb2R1bGUuUmVjdXJzaXZlQXN0VmlzaXRvciB7XG4gICAgICBoYXNRdWVyeVByb3BlcnR5UmVhZCA9IGZhbHNlO1xuXG5cbiAgICAgIG92ZXJyaWRlIHZpc2l0UHJvcGVydHlSZWFkKG5vZGU6IFByb3BlcnR5UmVhZCwgc3BhbjogUGFyc2VTb3VyY2VTcGFuKTogYW55IHtcbiAgICAgICAgLy8gVGhlIHJlY2VpdmVyIG9mIHRoZSBwcm9wZXJ0eSByZWFkIG5lZWRzIHRvIGJlIFwiaW1wbGljaXRcIiBhcyBxdWVyaWVzIGFyZSBhY2Nlc3NlZFxuICAgICAgICAvLyBmcm9tIHRoZSBjb21wb25lbnQgaW5zdGFuY2UgYW5kIG5vdCBmcm9tIG90aGVyIG9iamVjdHMuXG4gICAgICAgIGlmIChub2RlLnJlY2VpdmVyIGluc3RhbmNlb2YgY29tcGlsZXJNb2R1bGUuSW1wbGljaXRSZWNlaXZlciAmJlxuICAgICAgICAgICAgbm9kZS5uYW1lID09PSBxdWVyeVByb3BlcnR5TmFtZSkge1xuICAgICAgICAgIHRoaXMuaGFzUXVlcnlQcm9wZXJ0eVJlYWQgPSB0cnVlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLnZpc2l0UHJvcGVydHlSZWFkKG5vZGUsIHNwYW4pO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICAvKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIHF1ZXJ5IGlzIHN0YXRpY2FsbHkgYWNjZXNzZWQgd2l0aGluIHRoZSBzcGVjaWZpZWQgSFRNTCBub2Rlcy4gKi9cbiAgaXNRdWVyeVVzZWRTdGF0aWNhbGx5KGh0bWxOb2RlczogVG1wbEFzdE5vZGVbXSk6IGJvb2xlYW4ge1xuICAgIHRoaXMuaGFzUXVlcnlUZW1wbGF0ZVJlZmVyZW5jZSA9IGZhbHNlO1xuICAgIHRoaXMuZXhwcmVzc2lvbkFzdFZpc2l0b3IuaGFzUXVlcnlQcm9wZXJ0eVJlYWQgPSBmYWxzZTtcblxuICAgIC8vIFZpc2l0IGFsbCBBU1Qgbm9kZXMgYW5kIGNoZWNrIGlmIHRoZSBxdWVyeSBwcm9wZXJ0eSBpcyB1c2VkIHN0YXRpY2FsbHkuXG4gICAgdGhpcy52aXNpdEFsbChodG1sTm9kZXMpO1xuXG4gICAgcmV0dXJuICF0aGlzLmhhc1F1ZXJ5VGVtcGxhdGVSZWZlcmVuY2UgJiYgdGhpcy5leHByZXNzaW9uQXN0VmlzaXRvci5oYXNRdWVyeVByb3BlcnR5UmVhZDtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0RWxlbWVudChlbGVtZW50OiBUbXBsQXN0RWxlbWVudCk6IHZvaWQge1xuICAgIC8vIEluIGNhc2UgdGhlcmUgaXMgYSB0ZW1wbGF0ZSByZWZlcmVuY2VzIHZhcmlhYmxlIHRoYXQgbWF0Y2hlcyB0aGUgcXVlcnkgcHJvcGVydHlcbiAgICAvLyBuYW1lLCB3ZSBjYW4gZmluaXNoIHRoaXMgdmlzaXRvciBhcyBzdWNoIGEgdGVtcGxhdGUgdmFyaWFibGUgY2FuIGJlIHVzZWQgaW4gdGhlXG4gICAgLy8gZW50aXJlIHRlbXBsYXRlIGFuZCB0aGUgcXVlcnkgdGhlcmVmb3JlIGNhbid0IGJlIGFjY2Vzc2VkIGZyb20gdGhlIHRlbXBsYXRlLlxuICAgIGlmIChlbGVtZW50LnJlZmVyZW5jZXMuc29tZShyID0+IHIubmFtZSA9PT0gdGhpcy5xdWVyeVByb3BlcnR5TmFtZSkpIHtcbiAgICAgIHRoaXMuaGFzUXVlcnlUZW1wbGF0ZVJlZmVyZW5jZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LmF0dHJpYnV0ZXMpO1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5pbnB1dHMpO1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5vdXRwdXRzKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuY2hpbGRyZW4pO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaXRUZW1wbGF0ZSh0ZW1wbGF0ZTogVG1wbEFzdFRlbXBsYXRlKTogdm9pZCB7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS5hdHRyaWJ1dGVzKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLmlucHV0cyk7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS5vdXRwdXRzKTtcblxuICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gdmlzaXQgYW55IGNoaWxkcmVuIG9mIHRoZSB0ZW1wbGF0ZSBhcyB0aGVzZSBuZXZlciBjYW4ndFxuICAgIC8vIGFjY2VzcyBhIHF1ZXJ5IHN0YXRpY2FsbHkuIFRoZSB0ZW1wbGF0ZXMgY2FuIGJlIHJlbmRlcmVkIGluIHRoZSBuZ0FmdGVyVmlld0luaXRcIlxuICAgIC8vIGxpZmVjeWNsZSBob29rIGF0IHRoZSBlYXJsaWVzdC5cbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0Qm91bmRBdHRyaWJ1dGUoYXR0cmlidXRlOiBUbXBsQXN0Qm91bmRBdHRyaWJ1dGUpIHtcbiAgICBhdHRyaWJ1dGUudmFsdWUudmlzaXQodGhpcy5leHByZXNzaW9uQXN0VmlzaXRvciwgYXR0cmlidXRlLnNvdXJjZVNwYW4pO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaXRCb3VuZFRleHQodGV4dDogVG1wbEFzdEJvdW5kVGV4dCkge1xuICAgIHRleHQudmFsdWUudmlzaXQodGhpcy5leHByZXNzaW9uQXN0VmlzaXRvciwgdGV4dC5zb3VyY2VTcGFuKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHZpc2l0Qm91bmRFdmVudChub2RlOiBUbXBsQXN0Qm91bmRFdmVudCkge1xuICAgIG5vZGUuaGFuZGxlci52aXNpdCh0aGlzLmV4cHJlc3Npb25Bc3RWaXNpdG9yLCBub2RlLmhhbmRsZXJTcGFuKTtcbiAgfVxufVxuIl19
|
|
@@ -1,34 +0,0 @@
|
|
|
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
|
-
/// <amd-module name="@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy" />
|
|
9
|
-
import ts from 'typescript';
|
|
10
|
-
import { ClassMetadataMap } from '../../angular/ng_query_visitor';
|
|
11
|
-
import { NgQueryDefinition } from '../../angular/query-definition';
|
|
12
|
-
import { TimingResult, TimingStrategy } from '../timing-strategy';
|
|
13
|
-
/**
|
|
14
|
-
* Query timing strategy that determines the timing of a given query by inspecting how
|
|
15
|
-
* the query is accessed within the project's TypeScript source files. Read more about
|
|
16
|
-
* this strategy here: https://hackmd.io/s/Hymvc2OKE
|
|
17
|
-
*/
|
|
18
|
-
export declare class QueryUsageStrategy implements TimingStrategy {
|
|
19
|
-
private classMetadata;
|
|
20
|
-
private typeChecker;
|
|
21
|
-
private compilerModule;
|
|
22
|
-
constructor(classMetadata: ClassMetadataMap, typeChecker: ts.TypeChecker, compilerModule: typeof import('@angular/compiler'));
|
|
23
|
-
setup(): void;
|
|
24
|
-
/**
|
|
25
|
-
* Analyzes the usage of the given query and determines the query timing based
|
|
26
|
-
* on the current usage of the query.
|
|
27
|
-
*/
|
|
28
|
-
detectTiming(query: NgQueryDefinition): TimingResult;
|
|
29
|
-
/**
|
|
30
|
-
* Checks whether a given query is used statically within the given class, its super
|
|
31
|
-
* class or derived classes.
|
|
32
|
-
*/
|
|
33
|
-
private analyzeQueryUsage;
|
|
34
|
-
}
|
|
@@ -1,172 +0,0 @@
|
|
|
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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
(function (factory) {
|
|
12
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
13
|
-
var v = factory(require, exports);
|
|
14
|
-
if (v !== undefined) module.exports = v;
|
|
15
|
-
}
|
|
16
|
-
else if (typeof define === "function" && define.amd) {
|
|
17
|
-
define("@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy", ["require", "exports", "typescript", "@angular/core/schematics/utils/parse_html", "@angular/core/schematics/utils/typescript/property_name", "@angular/core/schematics/migrations/static-queries/angular/query-definition", "@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor", "@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context", "@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor"], factory);
|
|
18
|
-
}
|
|
19
|
-
})(function (require, exports) {
|
|
20
|
-
"use strict";
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.QueryUsageStrategy = void 0;
|
|
23
|
-
const typescript_1 = __importDefault(require("typescript"));
|
|
24
|
-
const parse_html_1 = require("@angular/core/schematics/utils/parse_html");
|
|
25
|
-
const property_name_1 = require("@angular/core/schematics/utils/typescript/property_name");
|
|
26
|
-
const query_definition_1 = require("@angular/core/schematics/migrations/static-queries/angular/query-definition");
|
|
27
|
-
const declaration_usage_visitor_1 = require("@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor");
|
|
28
|
-
const super_class_context_1 = require("@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context");
|
|
29
|
-
const template_usage_visitor_1 = require("@angular/core/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor");
|
|
30
|
-
/**
|
|
31
|
-
* Object that maps a given type of query to a list of lifecycle hooks that
|
|
32
|
-
* could be used to access such a query statically.
|
|
33
|
-
*/
|
|
34
|
-
const STATIC_QUERY_LIFECYCLE_HOOKS = {
|
|
35
|
-
[query_definition_1.QueryType.ViewChild]: ['ngOnChanges', 'ngOnInit', 'ngDoCheck', 'ngAfterContentInit', 'ngAfterContentChecked'],
|
|
36
|
-
[query_definition_1.QueryType.ContentChild]: ['ngOnChanges', 'ngOnInit', 'ngDoCheck'],
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Query timing strategy that determines the timing of a given query by inspecting how
|
|
40
|
-
* the query is accessed within the project's TypeScript source files. Read more about
|
|
41
|
-
* this strategy here: https://hackmd.io/s/Hymvc2OKE
|
|
42
|
-
*/
|
|
43
|
-
class QueryUsageStrategy {
|
|
44
|
-
constructor(classMetadata, typeChecker, compilerModule) {
|
|
45
|
-
this.classMetadata = classMetadata;
|
|
46
|
-
this.typeChecker = typeChecker;
|
|
47
|
-
this.compilerModule = compilerModule;
|
|
48
|
-
}
|
|
49
|
-
setup() { }
|
|
50
|
-
/**
|
|
51
|
-
* Analyzes the usage of the given query and determines the query timing based
|
|
52
|
-
* on the current usage of the query.
|
|
53
|
-
*/
|
|
54
|
-
detectTiming(query) {
|
|
55
|
-
if (query.property === null) {
|
|
56
|
-
return { timing: null, message: 'Queries defined on accessors cannot be analyzed.' };
|
|
57
|
-
}
|
|
58
|
-
const usage = this.analyzeQueryUsage(query.container, query, []);
|
|
59
|
-
if (usage === declaration_usage_visitor_1.ResolvedUsage.AMBIGUOUS) {
|
|
60
|
-
return {
|
|
61
|
-
timing: query_definition_1.QueryTiming.STATIC,
|
|
62
|
-
message: 'Query timing is ambiguous. Please check if the query can be marked as dynamic.'
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
else if (usage === declaration_usage_visitor_1.ResolvedUsage.SYNCHRONOUS) {
|
|
66
|
-
return { timing: query_definition_1.QueryTiming.STATIC };
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
return { timing: query_definition_1.QueryTiming.DYNAMIC };
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Checks whether a given query is used statically within the given class, its super
|
|
74
|
-
* class or derived classes.
|
|
75
|
-
*/
|
|
76
|
-
analyzeQueryUsage(classDecl, query, knownInputNames, functionCtx = new Map(), visitInheritedClasses = true) {
|
|
77
|
-
const usageVisitor = new declaration_usage_visitor_1.DeclarationUsageVisitor(query.property, this.typeChecker, functionCtx);
|
|
78
|
-
const classMetadata = this.classMetadata.get(classDecl);
|
|
79
|
-
let usage = declaration_usage_visitor_1.ResolvedUsage.ASYNCHRONOUS;
|
|
80
|
-
// In case there is metadata for the current class, we collect all resolved Angular input
|
|
81
|
-
// names and add them to the list of known inputs that need to be checked for usages of
|
|
82
|
-
// the current query. e.g. queries used in an @Input() *setter* are always static.
|
|
83
|
-
if (classMetadata) {
|
|
84
|
-
knownInputNames.push(...classMetadata.ngInputNames);
|
|
85
|
-
}
|
|
86
|
-
// Array of TypeScript nodes which can contain usages of the given query in
|
|
87
|
-
// order to access it statically.
|
|
88
|
-
const possibleStaticQueryNodes = filterQueryClassMemberNodes(classDecl, query, knownInputNames);
|
|
89
|
-
// In case nodes that can possibly access a query statically have been found, check
|
|
90
|
-
// if the query declaration is synchronously used within any of these nodes.
|
|
91
|
-
if (possibleStaticQueryNodes.length) {
|
|
92
|
-
possibleStaticQueryNodes.forEach(n => usage = combineResolvedUsage(usage, usageVisitor.getResolvedNodeUsage(n)));
|
|
93
|
-
}
|
|
94
|
-
if (!classMetadata) {
|
|
95
|
-
return usage;
|
|
96
|
-
}
|
|
97
|
-
// In case there is a component template for the current class, we check if the
|
|
98
|
-
// template statically accesses the current query. In case that's true, the query
|
|
99
|
-
// can be marked as static.
|
|
100
|
-
if (classMetadata.template && (0, property_name_1.hasPropertyNameText)(query.property.name)) {
|
|
101
|
-
const template = classMetadata.template;
|
|
102
|
-
const parsedHtml = (0, parse_html_1.parseHtmlGracefully)(template.content, template.filePath, this.compilerModule);
|
|
103
|
-
const htmlVisitor = new template_usage_visitor_1.TemplateUsageVisitor(query.property.name.text, this.compilerModule);
|
|
104
|
-
if (parsedHtml && htmlVisitor.isQueryUsedStatically(parsedHtml)) {
|
|
105
|
-
return declaration_usage_visitor_1.ResolvedUsage.SYNCHRONOUS;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
// In case derived classes should also be analyzed, we determine the classes that derive
|
|
109
|
-
// from the current class and check if these have input setters or lifecycle hooks that
|
|
110
|
-
// use the query statically.
|
|
111
|
-
if (visitInheritedClasses) {
|
|
112
|
-
classMetadata.derivedClasses.forEach(derivedClass => {
|
|
113
|
-
usage = combineResolvedUsage(usage, this.analyzeQueryUsage(derivedClass, query, knownInputNames));
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
// In case the current class has a super class, we determine declared abstract function-like
|
|
117
|
-
// declarations in the super-class that are implemented in the current class. The super class
|
|
118
|
-
// will then be analyzed with the abstract declarations mapped to the implemented TypeScript
|
|
119
|
-
// nodes. This allows us to handle queries which are used in super classes through derived
|
|
120
|
-
// abstract method declarations.
|
|
121
|
-
if (classMetadata.superClass) {
|
|
122
|
-
const superClassDecl = classMetadata.superClass;
|
|
123
|
-
// Update the function context to map abstract declaration nodes to their implementation
|
|
124
|
-
// node in the base class. This ensures that the declaration usage visitor can analyze
|
|
125
|
-
// abstract class member declarations.
|
|
126
|
-
(0, super_class_context_1.updateSuperClassAbstractMembersContext)(classDecl, functionCtx, this.classMetadata);
|
|
127
|
-
usage = combineResolvedUsage(usage, this.analyzeQueryUsage(superClassDecl, query, [], functionCtx, false));
|
|
128
|
-
}
|
|
129
|
-
return usage;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
exports.QueryUsageStrategy = QueryUsageStrategy;
|
|
133
|
-
/**
|
|
134
|
-
* Combines two resolved usages based on a fixed priority. "Synchronous" takes
|
|
135
|
-
* precedence over "Ambiguous" whereas ambiguous takes precedence over "Asynchronous".
|
|
136
|
-
*/
|
|
137
|
-
function combineResolvedUsage(base, target) {
|
|
138
|
-
if (base === declaration_usage_visitor_1.ResolvedUsage.SYNCHRONOUS) {
|
|
139
|
-
return base;
|
|
140
|
-
}
|
|
141
|
-
else if (target !== declaration_usage_visitor_1.ResolvedUsage.ASYNCHRONOUS) {
|
|
142
|
-
return target;
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
return declaration_usage_visitor_1.ResolvedUsage.ASYNCHRONOUS;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Filters all class members from the class declaration that can access the
|
|
150
|
-
* given query statically (e.g. ngOnInit lifecycle hook or @Input setters)
|
|
151
|
-
*/
|
|
152
|
-
function filterQueryClassMemberNodes(classDecl, query, knownInputNames) {
|
|
153
|
-
// Returns an array of TypeScript nodes which can contain usages of the given query
|
|
154
|
-
// in order to access it statically. e.g.
|
|
155
|
-
// (1) queries used in the "ngOnInit" lifecycle hook are static.
|
|
156
|
-
// (2) inputs with setters can access queries statically.
|
|
157
|
-
return classDecl.members
|
|
158
|
-
.filter((m) => {
|
|
159
|
-
if (typescript_1.default.isMethodDeclaration(m) && m.body && (0, property_name_1.hasPropertyNameText)(m.name) &&
|
|
160
|
-
STATIC_QUERY_LIFECYCLE_HOOKS[query.type].indexOf(m.name.text) !== -1) {
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
else if (knownInputNames && typescript_1.default.isSetAccessor(m) && m.body &&
|
|
164
|
-
(0, property_name_1.hasPropertyNameText)(m.name) && knownInputNames.indexOf(m.name.text) !== -1) {
|
|
165
|
-
return true;
|
|
166
|
-
}
|
|
167
|
-
return false;
|
|
168
|
-
})
|
|
169
|
-
.map(member => member.body);
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNhZ2Vfc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy9zdGF0aWMtcXVlcmllcy9zdHJhdGVnaWVzL3VzYWdlX3N0cmF0ZWd5L3VzYWdlX3N0cmF0ZWd5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDREQUE0QjtJQUU1QiwwRUFBaUU7SUFDakUsMkZBQStFO0lBRS9FLGtIQUF5RjtJQUd6RixzSkFBb0c7SUFDcEcsMElBQTZFO0lBQzdFLGdKQUE4RDtJQUc5RDs7O09BR0c7SUFDSCxNQUFNLDRCQUE0QixHQUFHO1FBQ25DLENBQUMsNEJBQVMsQ0FBQyxTQUFTLENBQUMsRUFDakIsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSx1QkFBdUIsQ0FBQztRQUMzRixDQUFDLDRCQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQztLQUNuRSxDQUFDO0lBRUY7Ozs7T0FJRztJQUNILE1BQWEsa0JBQWtCO1FBQzdCLFlBQ1ksYUFBK0IsRUFBVSxXQUEyQixFQUNwRSxjQUFrRDtZQURsRCxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7WUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7WUFDcEUsbUJBQWMsR0FBZCxjQUFjLENBQW9DO1FBQUcsQ0FBQztRQUVsRSxLQUFLLEtBQUksQ0FBQztRQUVWOzs7V0FHRztRQUNILFlBQVksQ0FBQyxLQUF3QjtZQUNuQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssSUFBSSxFQUFFO2dCQUMzQixPQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsa0RBQWtELEVBQUMsQ0FBQzthQUNwRjtZQUVELE1BQU0sS0FBSyxHQUFH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O1lBQ3ZELElBQUksb0JBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUEsbUNBQW1CLEVBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbEUsNEJBQTRCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN4RSxPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNLElBQ0gsZUFBZSxJQUFJLG9CQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJO2dCQUNoRCxJQUFBLG1DQUFtQixFQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQzlFLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQzthQUNULEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFLLENBQUMsQ0FBQztJQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtwYXJzZUh0bWxHcmFjZWZ1bGx5fSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9wYXJzZV9odG1sJztcbmltcG9ydCB7aGFzUHJvcGVydHlOYW1lVGV4dH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9wcm9wZXJ0eV9uYW1lJztcbmltcG9ydCB7Q2xhc3NNZXRhZGF0YU1hcH0gZnJvbSAnLi4vLi4vYW5ndWxhci9uZ19xdWVyeV92aXNpdG9yJztcbmltcG9ydCB7TmdRdWVyeURlZmluaXRpb24sIFF1ZXJ5VGltaW5nLCBRdWVyeVR5cGV9IGZyb20gJy4uLy4uL2FuZ3VsYXIvcXVlcnktZGVmaW5pdGlvbic7XG5pbXBvcnQge1RpbWluZ1Jlc3VsdCwgVGltaW5nU3RyYXRlZ3l9IGZyb20gJy4uL3RpbWluZy1zdHJhdGVneSc7XG5cbmltcG9ydCB7RGVjbGFyYXRpb25Vc2FnZVZpc2l0b3IsIEZ1bmN0aW9uQ29udGV4dCwgUmVzb2x2ZWRVc2FnZX0gZnJvbSAnLi9kZWNsYXJhdGlvbl91c2FnZV92aXNpdG9yJztcbmltcG9ydCB7dXBkYXRlU3VwZXJDbGFzc0Fic3RyYWN0TWVtYmVyc0NvbnRleHR9IGZyb20gJy4vc3VwZXJfY2xhc3NfY29udGV4dCc7XG5pbXBvcnQge1RlbXBsYXRlVXNhZ2VWaXNpdG9yfSBmcm9tICcuL3RlbXBsYXRlX3VzYWdlX3Zpc2l0b3InO1xuXG5cbi8qKlxuICogT2JqZWN0IHRoYXQgbWFwcyBhIGdpdmVuIHR5cGUgb2YgcXVlcnkgdG8gYSBsaXN0IG9mIGxpZmVjeWNsZSBob29rcyB0aGF0XG4gKiBjb3VsZCBiZSB1c2VkIHRvIGFjY2VzcyBzdWNoIGEgcXVlcnkgc3RhdGljYWxseS5cbiAqL1xuY29uc3QgU1RBVElDX1FVRVJZX0xJRkVDWUNMRV9IT09LUyA9IHtcbiAgW1F1ZXJ5VHlwZS5WaWV3Q2hpbGRdOlxuICAgICAgWyduZ09uQ2hhbmdlcycsICduZ09uSW5pdCcsICduZ0RvQ2hlY2snLCAnbmdBZnRlckNvbnRlbnRJbml0JywgJ25nQWZ0ZXJDb250ZW50Q2hlY2tlZCddLFxuICBbUXVlcnlUeXBlLkNvbnRlbnRDaGlsZF06IFsnbmdPbkNoYW5nZXMnLCAnbmdPbkluaXQnLCAnbmdEb0NoZWNrJ10sXG59O1xuXG4vKipcbiAqIFF1ZXJ5IHRpbWluZyBzdHJhdGVneSB0aGF0IGRldGVybWluZXMgdGhlIHRpbWluZyBvZiBhIGdpdmVuIHF1ZXJ5IGJ5IGluc3BlY3RpbmcgaG93XG4gKiB0aGUgcXVlcnkgaXMgYWNjZXNzZWQgd2l0aGluIHRoZSBwcm9qZWN0J3MgVHlwZVNjcmlwdCBzb3VyY2UgZmlsZXMuIFJlYWQgbW9yZSBhYm91dFxuICogdGhpcyBzdHJhdGVneSBoZXJlOiBodHRwczovL2hhY2ttZC5pby9zL0h5bXZjMk9LRVxuICovXG5leHBvcnQgY2xhc3MgUXVlcnlVc2FnZVN0cmF0ZWd5IGltcGxlbWVudHMgVGltaW5nU3RyYXRlZ3kge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgY2xhc3NNZXRhZGF0YTogQ2xhc3NNZXRhZGF0YU1hcCwgcHJpdmF0ZSB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgICBwcml2YXRlIGNvbXBpbGVyTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9jb21waWxlcicpKSB7fVxuXG4gIHNldHVwKCkge31cblxuICAvKipcbiAgICogQW5hbHl6ZXMgdGhlIHVzYWdlIG9mIHRoZSBnaXZlbiBxdWVyeSBhbmQgZGV0ZXJtaW5lcyB0aGUgcXVlcnkgdGltaW5nIGJhc2VkXG4gICAqIG9uIHRoZSBjdXJyZW50IHVzYWdlIG9mIHRoZSBxdWVyeS5cbiAgICovXG4gIGRldGVjdFRpbWluZyhxdWVyeTogTmdRdWVyeURlZmluaXRpb24pOiBUaW1pbmdSZXN1bHQge1xuICAgIGlmIChxdWVyeS5wcm9wZXJ0eSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt0aW1pbmc6IG51bGwsIG1lc3NhZ2U6ICdRdWVyaWVzIGRlZmluZWQgb24gYWNjZXNzb3JzIGNhbm5vdCBiZSBhbmFseXplZC4nfTtcbiAgICB9XG5cbiAgICBjb25zdCB1c2FnZSA9IHRoaXMuYW5hbHl6ZVF1ZXJ5VXNhZ2UocXVlcnkuY29udGFpbmVyLCBxdWVyeSwgW10pO1xuXG4gICAgaWYgKHVzYWdlID09PSBSZXNvbHZlZFVzYWdlLkFNQklHVU9VUykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGltaW5nOiBRdWVyeVRpbWluZy5TVEFUSUMsXG4gICAgICAgIG1lc3NhZ2U6ICdRdWVyeSB0aW1pbmcgaXMgYW1iaWd1b3VzLiBQbGVhc2UgY2hlY2sgaWYgdGhlIHF1ZXJ5IGNhbiBiZSBtYXJrZWQgYXMgZHluYW1pYy4nXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodXNhZ2UgPT09IFJlc29sdmVkVXNhZ2UuU1lOQ0hST05PVVMpIHtcbiAgICAgIHJldHVybiB7dGltaW5nOiBRdWVyeVRpbWluZy5TVEFUSUN9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge3RpbWluZzogUXVlcnlUaW1pbmcuRFlOQU1JQ307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgZ2l2ZW4gcXVlcnkgaXMgdXNlZCBzdGF0aWNhbGx5IHdpdGhpbiB0aGUgZ2l2ZW4gY2xhc3MsIGl0cyBzdXBlclxuICAgKiBjbGFzcyBvciBkZXJpdmVkIGNsYXNzZXMuXG4gICAqL1xuICBwcml2YXRlIGFuYWx5emVRdWVyeVVzYWdlKFxuICAgICAgY2xhc3NEZWNsOiB0cy5DbGFzc0RlY2xhcmF0aW9uLCBxdWVyeTogTmdRdWVyeURlZmluaXRpb24sIGtub3duSW5wdXROYW1lczogc3RyaW5nW10sXG4gICAgICBmdW5jdGlvbkN0eDogRnVuY3Rpb25Db250ZXh0ID0gbmV3IE1hcCgpLCB2aXNpdEluaGVyaXRlZENsYXNzZXMgPSB0cnVlKTogUmVzb2x2ZWRVc2FnZSB7XG4gICAgY29uc3QgdXNhZ2VWaXNpdG9yID1cbiAgICAgICAgbmV3IERlY2xhcmF0aW9uVXNhZ2VWaXNpdG9yKHF1ZXJ5LnByb3BlcnR5ISwgdGhpcy50eXBlQ2hlY2tlciwgZnVuY3Rpb25DdHgpO1xuICAgIGNvbnN0IGNsYXNzTWV0YWRhdGEgPSB0aGlzLmNsYXNzTWV0YWRhdGEuZ2V0KGNsYXNzRGVjbCk7XG4gICAgbGV0IHVzYWdlOiBSZXNvbHZlZFVzYWdlID0gUmVzb2x2ZWRVc2FnZS5BU1lOQ0hST05PVVM7XG5cbiAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIG1ldGFkYXRhIGZvciB0aGUgY3VycmVudCBjbGFzcywgd2UgY29sbGVjdCBhbGwgcmVzb2x2ZWQgQW5ndWxhciBpbnB1dFxuICAgIC8vIG5hbWVzIGFuZCBhZGQgdGhlbSB0byB0aGUgbGlzdCBvZiBrbm93biBpbnB1dHMgdGhhdCBuZWVkIHRvIGJlIGNoZWNrZWQgZm9yIHVzYWdlcyBvZlxuICAgIC8vIHRoZSBjdXJyZW50IHF1ZXJ5LiBlLmcuIHF1ZXJpZXMgdXNlZCBpbiBhbiBASW5wdXQoKSAqc2V0dGVyKiBhcmUgYWx3YXlzIHN0YXRpYy5cbiAgICBpZiAoY2xhc3NNZXRhZGF0YSkge1xuICAgICAga25vd25JbnB1dE5hbWVzLnB1c2goLi4uY2xhc3NNZXRhZGF0YS5uZ0lucHV0TmFtZXMpO1xuICAgIH1cblxuICAgIC8vIEFycmF5IG9mIFR5cGVTY3JpcHQgbm9kZXMgd2hpY2ggY2FuIGNvbnRhaW4gdXNhZ2VzIG9mIHRoZSBnaXZlbiBxdWVyeSBpblxuICAgIC8vIG9yZGVyIHRvIGFjY2VzcyBpdCBzdGF0aWNhbGx5LlxuICAgIGNvbnN0IHBvc3NpYmxlU3RhdGljUXVlcnlOb2RlcyA9IGZpbHRlclF1ZXJ5Q2xhc3NNZW1iZXJOb2RlcyhjbGFzc0RlY2wsIHF1ZXJ5LCBrbm93bklucHV0TmFtZXMpO1xuXG4gICAgLy8gSW4gY2FzZSBub2RlcyB0aGF0IGNhbiBwb3NzaWJseSBhY2Nlc3MgYSBxdWVyeSBzdGF0aWNhbGx5IGhhdmUgYmVlbiBmb3VuZCwgY2hlY2tcbiAgICAvLyBpZiB0aGUgcXVlcnkgZGVjbGFyYXRpb24gaXMgc3luY2hyb25vdXNseSB1c2VkIHdpdGhpbiBhbnkgb2YgdGhlc2Ugbm9kZXMuXG4gICAgaWYgKHBvc3NpYmxlU3RhdGljUXVlcnlOb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHBvc3NpYmxlU3RhdGljUXVlcnlOb2Rlcy5mb3JFYWNoKFxuICAgICAgICAgIG4gPT4gdXNhZ2UgPSBjb21iaW5lUmVzb2x2ZWRVc2FnZSh1c2FnZSwgdXNhZ2VWaXNpdG9yLmdldFJlc29sdmVkTm9kZVVzYWdlKG4pKSk7XG4gICAgfVxuXG4gICAgaWYgKCFjbGFzc01ldGFkYXRhKSB7XG4gICAgICByZXR1cm4gdXNhZ2U7XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSB0aGVyZSBpcyBhIGNvbXBvbmVudCB0ZW1wbGF0ZSBmb3IgdGhlIGN1cnJlbnQgY2xhc3MsIHdlIGNoZWNrIGlmIHRoZVxuICAgIC8vIHRlbXBsYXRlIHN0YXRpY2FsbHkgYWNjZXNzZXMgdGhlIGN1cnJlbnQgcXVlcnkuIEluIGNhc2UgdGhhdCdzIHRydWUsIHRoZSBxdWVyeVxuICAgIC8vIGNhbiBiZSBtYXJrZWQgYXMgc3RhdGljLlxuICAgIGlmIChjbGFzc01ldGFkYXRhLnRlbXBsYXRlICYmIGhhc1Byb3BlcnR5TmFtZVRleHQocXVlcnkucHJvcGVydHkhLm5hbWUpKSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGNsYXNzTWV0YWRhdGEudGVtcGxhdGU7XG4gICAgICBjb25zdCBwYXJzZWRIdG1sID1cbiAgICAgICAgICBwYXJzZUh0bWxHcmFjZWZ1bGx5KHRlbXBsYXRlLmNvbnRlbnQsIHRlbXBsYXRlLmZpbGVQYXRoLCB0aGlzLmNvbXBpbGVyTW9kdWxlKTtcbiAgICAgIGNvbnN0IGh0bWxWaXNpdG9yID0gbmV3IFRlbXBsYXRlVXNhZ2VWaXNpdG9yKHF1ZXJ5LnByb3BlcnR5IS5uYW1lLnRleHQsIHRoaXMuY29tcGlsZXJNb2R1bGUpO1xuXG4gICAgICBpZiAocGFyc2VkSHRtbCAmJiBodG1sVmlzaXRvci5pc1F1ZXJ5VXNlZFN0YXRpY2FsbHkocGFyc2VkSHRtbCkpIHtcbiAgICAgICAgcmV0dXJuIFJlc29sdmVkVXNhZ2UuU1lOQ0hST05PVVM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSBkZXJpdmVkIGNsYXNzZXMgc2hvdWxkIGFsc28gYmUgYW5hbHl6ZWQsIHdlIGRldGVybWluZSB0aGUgY2xhc3NlcyB0aGF0IGRlcml2ZVxuICAgIC8vIGZyb20gdGhlIGN1cnJlbnQgY2xhc3MgYW5kIGNoZWNrIGlmIHRoZXNlIGhhdmUgaW5wdXQgc2V0dGVycyBvciBsaWZlY3ljbGUgaG9va3MgdGhhdFxuICAgIC8vIHVzZSB0aGUgcXVlcnkgc3RhdGljYWxseS5cbiAgICBpZiAodmlzaXRJbmhlcml0ZWRDbGFzc2VzKSB7XG4gICAgICBjbGFzc01ldGFkYXRhLmRlcml2ZWRDbGFzc2VzLmZvckVhY2goZGVyaXZlZENsYXNzID0+IHtcbiAgICAgICAgdXNhZ2UgPSBjb21iaW5lUmVzb2x2ZWRVc2FnZShcbiAgICAgICAgICAgIHVzYWdlLCB0aGlzLmFuYWx5emVRdWVyeVVzYWdlKGRlcml2ZWRDbGFzcywgcXVlcnksIGtub3duSW5wdXROYW1lcykpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSB0aGUgY3VycmVudCBjbGFzcyBoYXMgYSBzdXBlciBjbGFzcywgd2UgZGV0ZXJtaW5lIGRlY2xhcmVkIGFic3RyYWN0IGZ1bmN0aW9uLWxpa2VcbiAgICAvLyBkZWNsYXJhdGlvbnMgaW4gdGhlIHN1cGVyLWNsYXNzIHRoYXQgYXJlIGltcGxlbWVudGVkIGluIHRoZSBjdXJyZW50IGNsYXNzLiBUaGUgc3VwZXIgY2xhc3NcbiAgICAvLyB3aWxsIHRoZW4gYmUgYW5hbHl6ZWQgd2l0aCB0aGUgYWJzdHJhY3QgZGVjbGFyYXRpb25zIG1hcHBlZCB0byB0aGUgaW1wbGVtZW50ZWQgVHlwZVNjcmlwdFxuICAgIC8vIG5vZGVzLiBUaGlzIGFsbG93cyB1cyB0byBoYW5kbGUgcXVlcmllcyB3aGljaCBhcmUgdXNlZCBpbiBzdXBlciBjbGFzc2VzIHRocm91Z2ggZGVyaXZlZFxuICAgIC8vIGFic3RyYWN0IG1ldGhvZCBkZWNsYXJhdGlvbnMuXG4gICAgaWYgKGNsYXNzTWV0YWRhdGEuc3VwZXJDbGFzcykge1xuICAgICAgY29uc3Qgc3VwZXJDbGFzc0RlY2wgPSBjbGFzc01ldGFkYXRhLnN1cGVyQ2xhc3M7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgZnVuY3Rpb24gY29udGV4dCB0byBtYXAgYWJzdHJhY3QgZGVjbGFyYXRpb24gbm9kZXMgdG8gdGhlaXIgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIG5vZGUgaW4gdGhlIGJhc2UgY2xhc3MuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBkZWNsYXJhdGlvbiB1c2FnZSB2aXNpdG9yIGNhbiBhbmFseXplXG4gICAgICAvLyBhYnN0cmFjdCBjbGFzcyBtZW1iZXIgZGVjbGFyYXRpb25zLlxuICAgICAgdXBkYXRlU3VwZXJDbGFzc0Fic3RyYWN0TWVtYmVyc0NvbnRleHQoY2xhc3NEZWNsLCBmdW5jdGlvbkN0eCwgdGhpcy5jbGFzc01ldGFkYXRhKTtcblxuICAgICAgdXNhZ2UgPSBjb21iaW5lUmVzb2x2ZWRVc2FnZShcbiAgICAgICAgICB1c2FnZSwgdGhpcy5hbmFseXplUXVlcnlVc2FnZShzdXBlckNsYXNzRGVjbCwgcXVlcnksIFtdLCBmdW5jdGlvbkN0eCwgZmFsc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXNhZ2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21iaW5lcyB0d28gcmVzb2x2ZWQgdXNhZ2VzIGJhc2VkIG9uIGEgZml4ZWQgcHJpb3JpdHkuIFwiU3luY2hyb25vdXNcIiB0YWtlc1xuICogcHJlY2VkZW5jZSBvdmVyIFwiQW1iaWd1b3VzXCIgd2hlcmVhcyBhbWJpZ3VvdXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIFwiQXN5bmNocm9ub3VzXCIuXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVSZXNvbHZlZFVzYWdlKGJhc2U6IFJlc29sdmVkVXNhZ2UsIHRhcmdldDogUmVzb2x2ZWRVc2FnZSk6IFJlc29sdmVkVXNhZ2Uge1xuICBpZiAoYmFzZSA9PT0gUmVzb2x2ZWRVc2FnZS5TWU5DSFJPTk9VUykge1xuICAgIHJldHVybiBiYXNlO1xuICB9IGVsc2UgaWYgKHRhcmdldCAhPT0gUmVzb2x2ZWRVc2FnZS5BU1lOQ0hST05PVVMpIHtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBSZXNvbHZlZFVzYWdlLkFTWU5DSFJPTk9VUztcbiAgfVxufVxuXG4vKipcbiAqIEZpbHRlcnMgYWxsIGNsYXNzIG1lbWJlcnMgZnJvbSB0aGUgY2xhc3MgZGVjbGFyYXRpb24gdGhhdCBjYW4gYWNjZXNzIHRoZVxuICogZ2l2ZW4gcXVlcnkgc3RhdGljYWxseSAoZS5nLiBuZ09uSW5pdCBsaWZlY3ljbGUgaG9vayBvciBASW5wdXQgc2V0dGVycylcbiAqL1xuZnVuY3Rpb24gZmlsdGVyUXVlcnlDbGFzc01lbWJlck5vZGVzKFxuICAgIGNsYXNzRGVjbDogdHMuQ2xhc3NEZWNsYXJhdGlvbiwgcXVlcnk6IE5nUXVlcnlEZWZpbml0aW9uLFxuICAgIGtub3duSW5wdXROYW1lczogc3RyaW5nW10pOiB0cy5CbG9ja1tdIHtcbiAgLy8gUmV0dXJucyBhbiBhcnJheSBvZiBUeXBlU2NyaXB0IG5vZGVzIHdoaWNoIGNhbiBjb250YWluIHVzYWdlcyBvZiB0aGUgZ2l2ZW4gcXVlcnlcbiAgLy8gaW4gb3JkZXIgdG8gYWNjZXNzIGl0IHN0YXRpY2FsbHkuIGUuZy5cbiAgLy8gICgxKSBxdWVyaWVzIHVzZWQgaW4gdGhlIFwibmdPbkluaXRcIiBsaWZlY3ljbGUgaG9vayBhcmUgc3RhdGljLlxuICAvLyAgKDIpIGlucHV0cyB3aXRoIHNldHRlcnMgY2FuIGFjY2VzcyBxdWVyaWVzIHN0YXRpY2FsbHkuXG4gIHJldHVybiBjbGFzc0RlY2wubWVtYmVyc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgICAobSk6XG4gICAgICAgICAgICAgIG0gaXModHMuU2V0QWNjZXNzb3JEZWNsYXJhdGlvbiB8IHRzLk1ldGhvZERlY2xhcmF0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRzLmlzTWV0aG9kRGVjbGFyYXRpb24obSkgJiYgbS5ib2R5ICYmIGhhc1Byb3BlcnR5TmFtZVRleHQobS5uYW1lKSAmJlxuICAgICAgICAgICAgICAgICAgICBTVEFUSUNfUVVFUllfTElGRUNZQ0xFX0hPT0tTW3F1ZXJ5LnR5cGVdLmluZGV4T2YobS5uYW1lLnRleHQpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAga25vd25JbnB1dE5hbWVzICYmIHRzLmlzU2V0QWNjZXNzb3IobSkgJiYgbS5ib2R5ICYmXG4gICAgICAgICAgICAgICAgICAgIGhhc1Byb3BlcnR5TmFtZVRleHQobS5uYW1lKSAmJiBrbm93bklucHV0TmFtZXMuaW5kZXhPZihtLm5hbWUudGV4dCkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgLm1hcChtZW1iZXIgPT4gbWVtYmVyLmJvZHkhKTtcbn1cbiJdfQ==
|
|
@@ -1,21 +0,0 @@
|
|
|
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
|
-
/// <amd-module name="@angular/core/schematics/migrations/static-queries/transform" />
|
|
9
|
-
import ts from 'typescript';
|
|
10
|
-
import { NgQueryDefinition, QueryTiming } from './angular/query-definition';
|
|
11
|
-
export declare type TransformedQueryResult = null | {
|
|
12
|
-
/** Transformed call expression. */
|
|
13
|
-
node: ts.CallExpression;
|
|
14
|
-
/** Failure message which is set when the query could not be transformed successfully. */
|
|
15
|
-
failureMessage: string | null;
|
|
16
|
-
};
|
|
17
|
-
/**
|
|
18
|
-
* Transforms the given query decorator by explicitly specifying the timing based on the
|
|
19
|
-
* determined timing. The updated decorator call expression node will be returned.
|
|
20
|
-
*/
|
|
21
|
-
export declare function getTransformedQueryCallExpr(query: NgQueryDefinition, timing: QueryTiming | null, createTodo: boolean): TransformedQueryResult;
|
|
@@ -1,105 +0,0 @@
|
|
|
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
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
(function (factory) {
|
|
12
|
-
if (typeof module === "object" && typeof module.exports === "object") {
|
|
13
|
-
var v = factory(require, exports);
|
|
14
|
-
if (v !== undefined) module.exports = v;
|
|
15
|
-
}
|
|
16
|
-
else if (typeof define === "function" && define.amd) {
|
|
17
|
-
define("@angular/core/schematics/migrations/static-queries/transform", ["require", "exports", "typescript", "@angular/core/schematics/utils/typescript/property_name", "@angular/core/schematics/migrations/static-queries/angular/query-definition"], factory);
|
|
18
|
-
}
|
|
19
|
-
})(function (require, exports) {
|
|
20
|
-
"use strict";
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.getTransformedQueryCallExpr = void 0;
|
|
23
|
-
const typescript_1 = __importDefault(require("typescript"));
|
|
24
|
-
const property_name_1 = require("@angular/core/schematics/utils/typescript/property_name");
|
|
25
|
-
const query_definition_1 = require("@angular/core/schematics/migrations/static-queries/angular/query-definition");
|
|
26
|
-
const TODO_SPECIFY_COMMENT = 'TODO: add static flag';
|
|
27
|
-
const TODO_CHECK_COMMENT = 'TODO: check static flag';
|
|
28
|
-
/**
|
|
29
|
-
* Transforms the given query decorator by explicitly specifying the timing based on the
|
|
30
|
-
* determined timing. The updated decorator call expression node will be returned.
|
|
31
|
-
*/
|
|
32
|
-
function getTransformedQueryCallExpr(query, timing, createTodo) {
|
|
33
|
-
const queryExpr = query.decorator.node.expression;
|
|
34
|
-
const queryArguments = queryExpr.arguments;
|
|
35
|
-
const queryPropertyAssignments = timing === null ?
|
|
36
|
-
[] :
|
|
37
|
-
[typescript_1.default.createPropertyAssignment('static', timing === query_definition_1.QueryTiming.STATIC ? typescript_1.default.createTrue() : typescript_1.default.createFalse())];
|
|
38
|
-
// If the query decorator is already called with two arguments, we need to
|
|
39
|
-
// keep the existing options untouched and just add the new property if possible.
|
|
40
|
-
if (queryArguments.length === 2) {
|
|
41
|
-
const existingOptions = queryArguments[1];
|
|
42
|
-
const existingOptionsText = existingOptions.getFullText();
|
|
43
|
-
const hasTodoComment = existingOptionsText.includes(TODO_SPECIFY_COMMENT) ||
|
|
44
|
-
existingOptionsText.includes(TODO_CHECK_COMMENT);
|
|
45
|
-
let newOptionsNode;
|
|
46
|
-
let failureMessage = null;
|
|
47
|
-
if (typescript_1.default.isObjectLiteralExpression(existingOptions)) {
|
|
48
|
-
// In case the options already contains a property for the "static" flag,
|
|
49
|
-
// we just skip this query and leave it untouched.
|
|
50
|
-
if (existingOptions.properties.some(p => !!p.name && (0, property_name_1.getPropertyNameText)(p.name) === 'static')) {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
newOptionsNode = typescript_1.default.updateObjectLiteral(existingOptions, existingOptions.properties.concat(queryPropertyAssignments));
|
|
54
|
-
// In case we want to add a todo and the options do not have the todo
|
|
55
|
-
// yet, we add the query timing todo as synthetic multi-line comment.
|
|
56
|
-
if (createTodo && !hasTodoComment) {
|
|
57
|
-
addQueryTimingTodoToNode(newOptionsNode, timing === null);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
// In case the options query parameter is not an object literal expression, and
|
|
62
|
-
// we want to set the query timing, we just preserve the existing query parameter.
|
|
63
|
-
newOptionsNode = existingOptions;
|
|
64
|
-
// We always want to add a TODO in case the query options cannot be updated.
|
|
65
|
-
if (!hasTodoComment) {
|
|
66
|
-
addQueryTimingTodoToNode(existingOptions, true);
|
|
67
|
-
}
|
|
68
|
-
// If there is a new explicit timing that has been determined for the given query,
|
|
69
|
-
// we create a transformation failure message that shows developers that they need
|
|
70
|
-
// to set the query timing manually to the determined query timing.
|
|
71
|
-
if (timing !== null) {
|
|
72
|
-
failureMessage = 'Cannot update query to set explicit timing. Please manually ' +
|
|
73
|
-
`set the query timing to: "{static: ${(timing === query_definition_1.QueryTiming.STATIC).toString()}}"`;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return {
|
|
77
|
-
failureMessage,
|
|
78
|
-
node: typescript_1.default.updateCall(queryExpr, queryExpr.expression, queryExpr.typeArguments, [queryArguments[0], newOptionsNode])
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
const optionsNode = typescript_1.default.createObjectLiteral(queryPropertyAssignments);
|
|
82
|
-
if (createTodo) {
|
|
83
|
-
addQueryTimingTodoToNode(optionsNode, timing === null);
|
|
84
|
-
}
|
|
85
|
-
return {
|
|
86
|
-
failureMessage: null,
|
|
87
|
-
node: typescript_1.default.updateCall(queryExpr, queryExpr.expression, queryExpr.typeArguments, [queryArguments[0], optionsNode])
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
|
-
exports.getTransformedQueryCallExpr = getTransformedQueryCallExpr;
|
|
91
|
-
/**
|
|
92
|
-
* Adds a to-do to the given TypeScript node which reminds developers to specify
|
|
93
|
-
* an explicit query timing or to double-check the updated timing.
|
|
94
|
-
*/
|
|
95
|
-
function addQueryTimingTodoToNode(node, addSpecifyTimingTodo) {
|
|
96
|
-
typescript_1.default.setSyntheticLeadingComments(node, [{
|
|
97
|
-
pos: -1,
|
|
98
|
-
end: -1,
|
|
99
|
-
hasTrailingNewLine: false,
|
|
100
|
-
kind: typescript_1.default.SyntaxKind.MultiLineCommentTrivia,
|
|
101
|
-
text: ` ${addSpecifyTimingTodo ? TODO_SPECIFY_COMMENT : TODO_CHECK_COMMENT} `
|
|
102
|
-
}]);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvc3RhdGljLXF1ZXJpZXMvdHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDREQUE0QjtJQUM1QiwyRkFBeUU7SUFDekUsa0hBQTBFO0lBUzFFLE1BQU0sb0JBQW9CLEdBQUcsdUJBQXVCLENBQUM7SUFDckQsTUFBTSxrQkFBa0IsR0FBRyx5QkFBeUIsQ0FBQztJQUVyRDs7O09BR0c7SUFDSCxTQUFnQiwyQkFBMkIsQ0FDdkMsS0FBd0IsRUFBRSxNQUF3QixFQUNsRCxVQUFtQjtRQUNyQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUMzQyxNQUFNLHdCQUF3QixHQUFHLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztZQUM5QyxFQUFFLENBQUMsQ0FBQztZQUNKLENBQUMsb0JBQUUsQ0FBQyx3QkFBd0IsQ0FDeEIsUUFBUSxFQUFFLE1BQU0sS0FBSyw4QkFBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdkYsMEVBQTBFO1FBQzFFLGlGQUFpRjtRQUNqRixJQUFJLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQy9CLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxNQUFNLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxRCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUM7Z0JBQ3JFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3JELElBQUksY0FBNkIsQ0FBQztZQUNsQyxJQUFJLGNBQWMsR0FBZ0IsSUFBSSxDQUFDO1lBRXZDLElBQUksb0JBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDakQseUVBQXlFO2dCQUN6RSxrREFBa0Q7Z0JBQ2xELElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQzNCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBQSxtQ0FBbUIsRUFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxDQUFDLEVBQUU7b0JBQ2xFLE9BQU8sSUFBSSxDQUFDO2lCQUNiO2dCQUVELGNBQWMsR0FBRyxvQkFBRSxDQUFDLG1CQUFtQixDQUNuQyxlQUFlLEVBQUUsZUFBZSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO2dCQUVsRixxRUFBcUU7Z0JBQ3JFLHFFQUFxRTtnQkFDckUsSUFBSSxVQUFVLElBQUksQ0FBQyxjQUFjLEVBQUU7b0JBQ2pDLHdCQUF3QixDQUFDLGNBQWMsRUFBRSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7aUJBQzNEO2FBQ0Y7aUJBQU07Z0JBQ0wsK0VBQStFO2dCQUMvRSxrRkFBa0Y7Z0JBQ2xGLGNBQWMsR0FBRyxlQUFlLENBQUM7Z0JBQ2pDLDRFQUE0RTtnQkFDNUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDbkIsd0JBQXdCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNqRDtnQkFDRCxrRkFBa0Y7Z0JBQ2xGLGtGQUFrRjtnQkFDbEYsbUVBQW1FO2dCQUNuRSxJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7b0JBQ25CLGNBQWMsR0FBRyw4REFBOEQ7d0JBQzNFLHNDQUFzQyxDQUFDLE1BQU0sS0FBSyw4QkFBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM7aUJBQzFGO2FBQ0Y7WUFFRCxPQUFPO2dCQUNMLGNBQWM7Z0JBQ2QsSUFBSSxFQUFFLG9CQUFFLENBQUMsVUFBVSxDQUNmLFNBQVMsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxhQUFhLEVBQ3hELENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLGNBQWUsQ0FBQyxDQUFDO2FBQzFDLENBQUM7U0FDSDtRQUVELE1BQU0sV0FBVyxHQUFHLG9CQUFFLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUVyRSxJQUFJLFVBQVUsRUFBRTtZQUNkLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7U0FDeEQ7UUFFRCxPQUFPO1lBQ0wsY0FBYyxFQUFFLElBQUk7WUFDcEIsSUFBSSxFQUFFLG9CQUFFLENBQUMsVUFBVSxDQUNmLFNBQVMsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDaEcsQ0FBQztJQUNKLENBQUM7SUF4RUQsa0VBd0VDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyx3QkFBd0IsQ0FBQyxJQUFhLEVBQUUsb0JBQTZCO1FBQzVFLG9CQUFFLENBQUMsMkJBQTJCLENBQzFCLElBQUksRUFBRSxDQUFDO2dCQUNMLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ1AsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDUCxrQkFBa0IsRUFBRSxLQUFLO2dCQUN6QixJQUFJLEVBQUUsb0JBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCO2dCQUMxQyxJQUFJLEVBQUUsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixHQUFHO2FBQzlFLENBQUMsQ0FBQyxDQUFDO0lBQ1YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge2dldFByb3BlcnR5TmFtZVRleHR9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvcHJvcGVydHlfbmFtZSc7XG5pbXBvcnQge05nUXVlcnlEZWZpbml0aW9uLCBRdWVyeVRpbWluZ30gZnJvbSAnLi9hbmd1bGFyL3F1ZXJ5LWRlZmluaXRpb24nO1xuXG5leHBvcnQgdHlwZSBUcmFuc2Zvcm1lZFF1ZXJ5UmVzdWx0ID0gbnVsbHx7XG4gIC8qKiBUcmFuc2Zvcm1lZCBjYWxsIGV4cHJlc3Npb24uICovXG4gIG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uO1xuICAvKiogRmFpbHVyZSBtZXNzYWdlIHdoaWNoIGlzIHNldCB3aGVuIHRoZSBxdWVyeSBjb3VsZCBub3QgYmUgdHJhbnNmb3JtZWQgc3VjY2Vzc2Z1bGx5LiAqL1xuICBmYWlsdXJlTWVzc2FnZTogc3RyaW5nfG51bGw7XG59O1xuXG5jb25zdCBUT0RPX1NQRUNJRllfQ09NTUVOVCA9ICdUT0RPOiBhZGQgc3RhdGljIGZsYWcnO1xuY29uc3QgVE9ET19DSEVDS19DT01NRU5UID0gJ1RPRE86IGNoZWNrIHN0YXRpYyBmbGFnJztcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIHRoZSBnaXZlbiBxdWVyeSBkZWNvcmF0b3IgYnkgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSB0aW1pbmcgYmFzZWQgb24gdGhlXG4gKiBkZXRlcm1pbmVkIHRpbWluZy4gVGhlIHVwZGF0ZWQgZGVjb3JhdG9yIGNhbGwgZXhwcmVzc2lvbiBub2RlIHdpbGwgYmUgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUcmFuc2Zvcm1lZFF1ZXJ5Q2FsbEV4cHIoXG4gICAgcXVlcnk6IE5nUXVlcnlEZWZpbml0aW9uLCB0aW1pbmc6IFF1ZXJ5VGltaW5nfG51bGwsXG4gICAgY3JlYXRlVG9kbzogYm9vbGVhbik6IFRyYW5zZm9ybWVkUXVlcnlSZXN1bHQge1xuICBjb25zdCBxdWVyeUV4cHIgPSBxdWVyeS5kZWNvcmF0b3Iubm9kZS5leHByZXNzaW9uO1xuICBjb25zdCBxdWVyeUFyZ3VtZW50cyA9IHF1ZXJ5RXhwci5hcmd1bWVudHM7XG4gIGNvbnN0IHF1ZXJ5UHJvcGVydHlBc3NpZ25tZW50cyA9IHRpbWluZyA9PT0gbnVsbCA/XG4gICAgICBbXSA6XG4gICAgICBbdHMuY3JlYXRlUHJvcGVydHlBc3NpZ25tZW50KFxuICAgICAgICAgICdzdGF0aWMnLCB0aW1pbmcgPT09IFF1ZXJ5VGltaW5nLlNUQVRJQyA/IHRzLmNyZWF0ZVRydWUoKSA6IHRzLmNyZWF0ZUZhbHNlKCkpXTtcblxuICAvLyBJZiB0aGUgcXVlcnkgZGVjb3JhdG9yIGlzIGFscmVhZHkgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50cywgd2UgbmVlZCB0b1xuICAvLyBrZWVwIHRoZSBleGlzdGluZyBvcHRpb25zIHVudG91Y2hlZCBhbmQganVzdCBhZGQgdGhlIG5ldyBwcm9wZXJ0eSBpZiBwb3NzaWJsZS5cbiAgaWYgKHF1ZXJ5QXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9ucyA9IHF1ZXJ5QXJndW1lbnRzWzFdO1xuICAgIGNvbnN0IGV4aXN0aW5nT3B0aW9uc1RleHQgPSBleGlzdGluZ09wdGlvbnMuZ2V0RnVsbFRleHQoKTtcbiAgICBjb25zdCBoYXNUb2RvQ29tbWVudCA9IGV4aXN0aW5nT3B0aW9uc1RleHQuaW5jbHVkZXMoVE9ET19TUEVDSUZZX0NPTU1FTlQpIHx8XG4gICAgICAgIGV4aXN0aW5nT3B0aW9uc1RleHQuaW5jbHVkZXMoVE9ET19DSEVDS19DT01NRU5UKTtcbiAgICBsZXQgbmV3T3B0aW9uc05vZGU6IHRzLkV4cHJlc3Npb247XG4gICAgbGV0IGZhaWx1cmVNZXNzYWdlOiBzdHJpbmd8bnVsbCA9IG51bGw7XG5cbiAgICBpZiAodHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihleGlzdGluZ09wdGlvbnMpKSB7XG4gICAgICAvLyBJbiBjYXNlIHRoZSBvcHRpb25zIGFscmVhZHkgY29udGFpbnMgYSBwcm9wZXJ0eSBmb3IgdGhlIFwic3RhdGljXCIgZmxhZyxcbiAgICAgIC8vIHdlIGp1c3Qgc2tpcCB0aGlzIHF1ZXJ5IGFuZCBsZWF2ZSBpdCB1bnRvdWNoZWQuXG4gICAgICBpZiAoZXhpc3RpbmdPcHRpb25zLnByb3BlcnRpZXMuc29tZShcbiAgICAgICAgICAgICAgcCA9PiAhIXAubmFtZSAmJiBnZXRQcm9wZXJ0eU5hbWVUZXh0KHAubmFtZSkgPT09ICdzdGF0aWMnKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbmV3T3B0aW9uc05vZGUgPSB0cy51cGRhdGVPYmplY3RMaXRlcmFsKFxuICAgICAgICAgIGV4aXN0aW5nT3B0aW9ucywgZXhpc3RpbmdPcHRpb25zLnByb3BlcnRpZXMuY29uY2F0KHF1ZXJ5UHJvcGVydHlBc3NpZ25tZW50cykpO1xuXG4gICAgICAvLyBJbiBjYXNlIHdlIHdhbnQgdG8gYWRkIGEgdG9kbyBhbmQgdGhlIG9wdGlvbnMgZG8gbm90IGhhdmUgdGhlIHRvZG9cbiAgICAgIC8vIHlldCwgd2UgYWRkIHRoZSBxdWVyeSB0aW1pbmcgdG9kbyBhcyBzeW50aGV0aWMgbXVsdGktbGluZSBjb21tZW50LlxuICAgICAgaWYgKGNyZWF0ZVRvZG8gJiYgIWhhc1RvZG9Db21tZW50KSB7XG4gICAgICAgIGFkZFF1ZXJ5VGltaW5nVG9kb1RvTm9kZShuZXdPcHRpb25zTm9kZSwgdGltaW5nID09PSBudWxsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gY2FzZSB0aGUgb3B0aW9ucyBxdWVyeSBwYXJhbWV0ZXIgaXMgbm90IGFuIG9iamVjdCBsaXRlcmFsIGV4cHJlc3Npb24sIGFuZFxuICAgICAgLy8gd2Ugd2FudCB0byBzZXQgdGhlIHF1ZXJ5IHRpbWluZywgd2UganVzdCBwcmVzZXJ2ZSB0aGUgZXhpc3RpbmcgcXVlcnkgcGFyYW1ldGVyLlxuICAgICAgbmV3T3B0aW9uc05vZGUgPSBleGlzdGluZ09wdGlvbnM7XG4gICAgICAvLyBXZSBhbHdheXMgd2FudCB0byBhZGQgYSBUT0RPIGluIGNhc2UgdGhlIHF1ZXJ5IG9wdGlvbnMgY2Fubm90IGJlIHVwZGF0ZWQuXG4gICAgICBpZiAoIWhhc1RvZG9Db21tZW50KSB7XG4gICAgICAgIGFkZFF1ZXJ5VGltaW5nVG9kb1RvTm9kZShleGlzdGluZ09wdGlvbnMsIHRydWUpO1xuICAgICAgfVxuICAgICAgLy8gSWYgdGhlcmUgaXMgYSBuZXcgZXhwbGljaXQgdGltaW5nIHRoYXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCBmb3IgdGhlIGdpdmVuIHF1ZXJ5LFxuICAgICAgLy8gd2UgY3JlYXRlIGEgdHJhbnNmb3JtYXRpb24gZmFpbHVyZSBtZXNzYWdlIHRoYXQgc2hvd3MgZGV2ZWxvcGVycyB0aGF0IHRoZXkgbmVlZFxuICAgICAgLy8gdG8gc2V0IHRoZSBxdWVyeSB0aW1pbmcgbWFudWFsbHkgdG8gdGhlIGRldGVybWluZWQgcXVlcnkgdGltaW5nLlxuICAgICAgaWYgKHRpbWluZyAhPT0gbnVsbCkge1xuICAgICAgICBmYWlsdXJlTWVzc2FnZSA9ICdDYW5ub3QgdXBkYXRlIHF1ZXJ5IHRvIHNldCBleHBsaWNpdCB0aW1pbmcuIFBsZWFzZSBtYW51YWxseSAnICtcbiAgICAgICAgICAgIGBzZXQgdGhlIHF1ZXJ5IHRpbWluZyB0bzogXCJ7c3RhdGljOiAkeyh0aW1pbmcgPT09IFF1ZXJ5VGltaW5nLlNUQVRJQykudG9TdHJpbmcoKX19XCJgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmYWlsdXJlTWVzc2FnZSxcbiAgICAgIG5vZGU6IHRzLnVwZGF0ZUNhbGwoXG4gICAgICAgICAgcXVlcnlFeHByLCBxdWVyeUV4cHIuZXhwcmVzc2lvbiwgcXVlcnlFeHByLnR5cGVBcmd1bWVudHMsXG4gICAgICAgICAgW3F1ZXJ5QXJndW1lbnRzWzBdLCBuZXdPcHRpb25zTm9kZSFdKVxuICAgIH07XG4gIH1cblxuICBjb25zdCBvcHRpb25zTm9kZSA9IHRzLmNyZWF0ZU9iamVjdExpdGVyYWwocXVlcnlQcm9wZXJ0eUFzc2lnbm1lbnRzKTtcblxuICBpZiAoY3JlYXRlVG9kbykge1xuICAgIGFkZFF1ZXJ5VGltaW5nVG9kb1RvTm9kZShvcHRpb25zTm9kZSwgdGltaW5nID09PSBudWxsKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZmFpbHVyZU1lc3NhZ2U6IG51bGwsXG4gICAgbm9kZTogdHMudXBkYXRlQ2FsbChcbiAgICAgICAgcXVlcnlFeHByLCBxdWVyeUV4cHIuZXhwcmVzc2lvbiwgcXVlcnlFeHByLnR5cGVBcmd1bWVudHMsIFtxdWVyeUFyZ3VtZW50c1swXSwgb3B0aW9uc05vZGVdKVxuICB9O1xufVxuXG4vKipcbiAqIEFkZHMgYSB0by1kbyB0byB0aGUgZ2l2ZW4gVHlwZVNjcmlwdCBub2RlIHdoaWNoIHJlbWluZHMgZGV2ZWxvcGVycyB0byBzcGVjaWZ5XG4gKiBhbiBleHBsaWNpdCBxdWVyeSB0aW1pbmcgb3IgdG8gZG91YmxlLWNoZWNrIHRoZSB1cGRhdGVkIHRpbWluZy5cbiAqL1xuZnVuY3Rpb24gYWRkUXVlcnlUaW1pbmdUb2RvVG9Ob2RlKG5vZGU6IHRzLk5vZGUsIGFkZFNwZWNpZnlUaW1pbmdUb2RvOiBib29sZWFuKSB7XG4gIHRzLnNldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhcbiAgICAgIG5vZGUsIFt7XG4gICAgICAgIHBvczogLTEsXG4gICAgICAgIGVuZDogLTEsXG4gICAgICAgIGhhc1RyYWlsaW5nTmV3TGluZTogZmFsc2UsXG4gICAgICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICAgICAgdGV4dDogYCAke2FkZFNwZWNpZnlUaW1pbmdUb2RvID8gVE9ET19TUEVDSUZZX0NPTU1FTlQgOiBUT0RPX0NIRUNLX0NPTU1FTlR9IGBcbiAgICAgIH1dKTtcbn1cbiJdfQ==
|
|
@@ -1,20 +0,0 @@
|
|
|
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
|
-
/// <amd-module name="@angular/core/schematics/migrations/template-var-assignment/analyze_template" />
|
|
9
|
-
import type { PropertyWrite } from '@angular/compiler';
|
|
10
|
-
import { ResolvedTemplate } from '../../utils/ng_component_template';
|
|
11
|
-
export interface TemplateVariableAssignment {
|
|
12
|
-
node: PropertyWrite;
|
|
13
|
-
start: number;
|
|
14
|
-
end: number;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Analyzes a given resolved template by looking for property assignments to local
|
|
18
|
-
* template variables within bound events.
|
|
19
|
-
*/
|
|
20
|
-
export declare function analyzeResolvedTemplate(template: ResolvedTemplate, compilerModule: typeof import('@angular/compiler')): TemplateVariableAssignment[] | null;
|