@angular/core 13.0.0-rc.0 → 13.0.0

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.
Files changed (175) hide show
  1. package/core.d.ts +224 -221
  2. package/esm2020/index.mjs +6 -5
  3. package/esm2020/src/application_module.mjs +2 -7
  4. package/esm2020/src/core_render3_private_export.mjs +2 -1
  5. package/esm2020/src/linker/component_factory_resolver.mjs +5 -5
  6. package/esm2020/src/linker/ng_module_factory.mjs +1 -1
  7. package/esm2020/src/render3/definition.mjs +2 -5
  8. package/esm2020/src/render3/di.mjs +3 -3
  9. package/esm2020/src/render3/error_code.mjs +2 -5
  10. package/esm2020/src/render3/error_details_base_url.mjs +16 -0
  11. package/esm2020/src/render3/fields.mjs +1 -2
  12. package/esm2020/src/render3/ng_module_ref.mjs +2 -5
  13. package/esm2020/src/render3/util/global_utils.mjs +2 -3
  14. package/esm2020/src/version.mjs +1 -1
  15. package/esm2020/testing/src/logger.mjs +3 -3
  16. package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
  17. package/esm2020/testing/src/test_compiler.mjs +3 -3
  18. package/fesm2015/core.mjs +26 -25
  19. package/fesm2015/core.mjs.map +1 -1
  20. package/fesm2015/testing.mjs +4 -4
  21. package/fesm2020/core.mjs +26 -25
  22. package/fesm2020/core.mjs.map +1 -1
  23. package/fesm2020/testing.mjs +4 -4
  24. package/package.json +1 -1
  25. package/schematics/migrations/router-link-empty-expression/index.js +2 -2
  26. package/schematics/migrations.json +0 -100
  27. package/schematics/utils/ng_component_template.d.ts +4 -1
  28. package/schematics/utils/ng_component_template.js +28 -14
  29. package/testing/testing.d.ts +1 -1
  30. package/schematics/migrations/abstract-control-parent/index.d.ts +0 -11
  31. package/schematics/migrations/abstract-control-parent/index.js +0 -69
  32. package/schematics/migrations/abstract-control-parent/util.d.ts +0 -14
  33. package/schematics/migrations/abstract-control-parent/util.js +0 -67
  34. package/schematics/migrations/activated-route-snapshot-fragment/index.d.ts +0 -13
  35. package/schematics/migrations/activated-route-snapshot-fragment/index.js +0 -73
  36. package/schematics/migrations/activated-route-snapshot-fragment/util.d.ts +0 -16
  37. package/schematics/migrations/activated-route-snapshot-fragment/util.js +0 -51
  38. package/schematics/migrations/can-activate-with-redirect-to/index.d.ts +0 -11
  39. package/schematics/migrations/can-activate-with-redirect-to/index.js +0 -69
  40. package/schematics/migrations/can-activate-with-redirect-to/util.d.ts +0 -11
  41. package/schematics/migrations/can-activate-with-redirect-to/util.js +0 -73
  42. package/schematics/migrations/deep-shadow-piercing-selector/index.d.ts +0 -10
  43. package/schematics/migrations/deep-shadow-piercing-selector/index.js +0 -49
  44. package/schematics/migrations/dynamic-queries/index.d.ts +0 -13
  45. package/schematics/migrations/dynamic-queries/index.js +0 -76
  46. package/schematics/migrations/dynamic-queries/util.d.ts +0 -25
  47. package/schematics/migrations/dynamic-queries/util.js +0 -84
  48. package/schematics/migrations/initial-navigation/collector.d.ts +0 -22
  49. package/schematics/migrations/initial-navigation/collector.js +0 -122
  50. package/schematics/migrations/initial-navigation/index.d.ts +0 -11
  51. package/schematics/migrations/initial-navigation/index.js +0 -83
  52. package/schematics/migrations/initial-navigation/transform.d.ts +0 -20
  53. package/schematics/migrations/initial-navigation/transform.js +0 -71
  54. package/schematics/migrations/initial-navigation/update_recorder.d.ts +0 -18
  55. package/schematics/migrations/initial-navigation/update_recorder.js +0 -20
  56. package/schematics/migrations/initial-navigation/util.d.ts +0 -12
  57. package/schematics/migrations/initial-navigation/util.js +0 -46
  58. package/schematics/migrations/missing-injectable/definition_collector.d.ts +0 -37
  59. package/schematics/migrations/missing-injectable/definition_collector.js +0 -92
  60. package/schematics/migrations/missing-injectable/index.d.ts +0 -11
  61. package/schematics/migrations/missing-injectable/index.js +0 -136
  62. package/schematics/migrations/missing-injectable/providers_evaluator.d.ts +0 -26
  63. package/schematics/migrations/missing-injectable/providers_evaluator.js +0 -71
  64. package/schematics/migrations/missing-injectable/transform.d.ts +0 -70
  65. package/schematics/migrations/missing-injectable/transform.js +0 -203
  66. package/schematics/migrations/missing-injectable/update_recorder.d.ts +0 -21
  67. package/schematics/migrations/missing-injectable/update_recorder.js +0 -20
  68. package/schematics/migrations/module-with-providers/collector.d.ts +0 -34
  69. package/schematics/migrations/module-with-providers/collector.js +0 -76
  70. package/schematics/migrations/module-with-providers/index.d.ts +0 -13
  71. package/schematics/migrations/module-with-providers/index.js +0 -107
  72. package/schematics/migrations/module-with-providers/transform.d.ts +0 -50
  73. package/schematics/migrations/module-with-providers/transform.js +0 -149
  74. package/schematics/migrations/module-with-providers/util.d.ts +0 -13
  75. package/schematics/migrations/module-with-providers/util.js +0 -43
  76. package/schematics/migrations/move-document/document_import_visitor.d.ts +0 -27
  77. package/schematics/migrations/move-document/document_import_visitor.js +0 -77
  78. package/schematics/migrations/move-document/index.d.ts +0 -11
  79. package/schematics/migrations/move-document/index.js +0 -93
  80. package/schematics/migrations/move-document/move-import.d.ts +0 -12
  81. package/schematics/migrations/move-document/move-import.js +0 -64
  82. package/schematics/migrations/native-view-encapsulation/index.d.ts +0 -11
  83. package/schematics/migrations/native-view-encapsulation/index.js +0 -63
  84. package/schematics/migrations/native-view-encapsulation/util.d.ts +0 -11
  85. package/schematics/migrations/native-view-encapsulation/util.js +0 -51
  86. package/schematics/migrations/navigation-extras-omissions/index.d.ts +0 -11
  87. package/schematics/migrations/navigation-extras-omissions/index.js +0 -72
  88. package/schematics/migrations/navigation-extras-omissions/util.d.ts +0 -11
  89. package/schematics/migrations/navigation-extras-omissions/util.js +0 -129
  90. package/schematics/migrations/relative-link-resolution/collector.d.ts +0 -22
  91. package/schematics/migrations/relative-link-resolution/collector.js +0 -98
  92. package/schematics/migrations/relative-link-resolution/index.d.ts +0 -11
  93. package/schematics/migrations/relative-link-resolution/index.js +0 -84
  94. package/schematics/migrations/relative-link-resolution/transform.d.ts +0 -22
  95. package/schematics/migrations/relative-link-resolution/transform.js +0 -68
  96. package/schematics/migrations/relative-link-resolution/update_recorder.d.ts +0 -18
  97. package/schematics/migrations/relative-link-resolution/update_recorder.js +0 -20
  98. package/schematics/migrations/relative-link-resolution/util.d.ts +0 -12
  99. package/schematics/migrations/relative-link-resolution/util.js +0 -46
  100. package/schematics/migrations/renderer-to-renderer2/helpers.d.ts +0 -25
  101. package/schematics/migrations/renderer-to-renderer2/helpers.js +0 -241
  102. package/schematics/migrations/renderer-to-renderer2/index.d.ts +0 -14
  103. package/schematics/migrations/renderer-to-renderer2/index.js +0 -138
  104. package/schematics/migrations/renderer-to-renderer2/migration.d.ts +0 -18
  105. package/schematics/migrations/renderer-to-renderer2/migration.js +0 -228
  106. package/schematics/migrations/renderer-to-renderer2/util.d.ts +0 -18
  107. package/schematics/migrations/renderer-to-renderer2/util.js +0 -86
  108. package/schematics/migrations/router-preserve-query-params/index.d.ts +0 -14
  109. package/schematics/migrations/router-preserve-query-params/index.js +0 -75
  110. package/schematics/migrations/router-preserve-query-params/util.d.ts +0 -11
  111. package/schematics/migrations/router-preserve-query-params/util.js +0 -106
  112. package/schematics/migrations/static-queries/angular/directive_inputs.d.ts +0 -11
  113. package/schematics/migrations/static-queries/angular/directive_inputs.js +0 -87
  114. package/schematics/migrations/static-queries/angular/ng_query_visitor.d.ts +0 -45
  115. package/schematics/migrations/static-queries/angular/ng_query_visitor.js +0 -130
  116. package/schematics/migrations/static-queries/angular/query-definition.d.ts +0 -37
  117. package/schematics/migrations/static-queries/angular/query-definition.js +0 -33
  118. package/schematics/migrations/static-queries/angular/super_class.d.ts +0 -15
  119. package/schematics/migrations/static-queries/angular/super_class.js +0 -35
  120. package/schematics/migrations/static-queries/index.d.ts +0 -11
  121. package/schematics/migrations/static-queries/index.js +0 -244
  122. package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.d.ts +0 -41
  123. package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.js +0 -210
  124. package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.d.ts +0 -24
  125. package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.js +0 -38
  126. package/schematics/migrations/static-queries/strategies/timing-strategy.d.ts +0 -19
  127. package/schematics/migrations/static-queries/strategies/timing-strategy.js +0 -20
  128. package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.d.ts +0 -82
  129. package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.js +0 -372
  130. package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.d.ts +0 -18
  131. package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.js +0 -55
  132. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.d.ts +0 -27
  133. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js +0 -93
  134. package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.d.ts +0 -34
  135. package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.js +0 -172
  136. package/schematics/migrations/static-queries/transform.d.ts +0 -21
  137. package/schematics/migrations/static-queries/transform.js +0 -105
  138. package/schematics/migrations/template-var-assignment/analyze_template.d.ts +0 -20
  139. package/schematics/migrations/template-var-assignment/analyze_template.js +0 -38
  140. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.d.ts +0 -28
  141. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js +0 -80
  142. package/schematics/migrations/template-var-assignment/index.d.ts +0 -11
  143. package/schematics/migrations/template-var-assignment/index.js +0 -101
  144. package/schematics/migrations/undecorated-classes-with-decorated-fields/index.d.ts +0 -14
  145. package/schematics/migrations/undecorated-classes-with-decorated-fields/index.js +0 -128
  146. package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.d.ts +0 -64
  147. package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.js +0 -302
  148. package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.d.ts +0 -19
  149. package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.js +0 -20
  150. package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.d.ts +0 -18
  151. package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.js +0 -56
  152. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.d.ts +0 -18
  153. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.js +0 -99
  154. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.d.ts +0 -37
  155. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.js +0 -118
  156. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.d.ts +0 -37
  157. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.js +0 -129
  158. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.d.ts +0 -10
  159. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.js +0 -31
  160. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.d.ts +0 -16
  161. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.js +0 -68
  162. package/schematics/migrations/undecorated-classes-with-di/index.d.ts +0 -11
  163. package/schematics/migrations/undecorated-classes-with-di/index.js +0 -226
  164. package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.d.ts +0 -38
  165. package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.js +0 -135
  166. package/schematics/migrations/undecorated-classes-with-di/transform.d.ts +0 -97
  167. package/schematics/migrations/undecorated-classes-with-di/transform.js +0 -373
  168. package/schematics/migrations/undecorated-classes-with-di/update_recorder.d.ts +0 -20
  169. package/schematics/migrations/undecorated-classes-with-di/update_recorder.js +0 -20
  170. package/schematics/migrations/wait-for-async/index.d.ts +0 -11
  171. package/schematics/migrations/wait-for-async/index.js +0 -101
  172. package/schematics/migrations/wait-for-async/util.d.ts +0 -11
  173. package/schematics/migrations/wait-for-async/util.js +0 -40
  174. package/schematics/migrations/xhr-factory/index.d.ts +0 -10
  175. package/schematics/migrations/xhr-factory/index.js +0 -107
@@ -1,226 +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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
- return new (P || (P = Promise))(function (resolve, reject) {
11
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
- step((generator = generator.apply(thisArg, _arguments || [])).next());
15
- });
16
- };
17
- var __importDefault = (this && this.__importDefault) || function (mod) {
18
- return (mod && mod.__esModule) ? mod : { "default": mod };
19
- };
20
- (function (factory) {
21
- if (typeof module === "object" && typeof module.exports === "object") {
22
- var v = factory(require, exports);
23
- if (v !== undefined) module.exports = v;
24
- }
25
- else if (typeof define === "function" && define.amd) {
26
- define("@angular/core/schematics/migrations/undecorated-classes-with-di", ["require", "exports", "@angular-devkit/schematics", "path", "typescript", "@angular/core/schematics/utils/load_esm", "@angular/core/schematics/utils/project_tsconfig_paths", "@angular/core/schematics/utils/typescript/compiler_host", "@angular/core/schematics/migrations/undecorated-classes-with-di/create_ngc_program", "@angular/core/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector", "@angular/core/schematics/migrations/undecorated-classes-with-di/transform"], factory);
27
- }
28
- })(function (require, exports) {
29
- "use strict";
30
- Object.defineProperty(exports, "__esModule", { value: true });
31
- const schematics_1 = require("@angular-devkit/schematics");
32
- const path_1 = require("path");
33
- const typescript_1 = __importDefault(require("typescript"));
34
- const load_esm_1 = require("@angular/core/schematics/utils/load_esm");
35
- const project_tsconfig_paths_1 = require("@angular/core/schematics/utils/project_tsconfig_paths");
36
- const compiler_host_1 = require("@angular/core/schematics/utils/typescript/compiler_host");
37
- const create_ngc_program_1 = require("@angular/core/schematics/migrations/undecorated-classes-with-di/create_ngc_program");
38
- const ng_declaration_collector_1 = require("@angular/core/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector");
39
- const transform_1 = require("@angular/core/schematics/migrations/undecorated-classes-with-di/transform");
40
- const MIGRATION_RERUN_MESSAGE = 'Migration can be rerun with: "ng update @angular/core ' +
41
- '--migrate-only migration-v9-undecorated-classes-with-di"';
42
- const MIGRATION_AOT_FAILURE = 'This migration uses the Angular compiler internally and ' +
43
- 'therefore projects that no longer build successfully after the update cannot run ' +
44
- 'the migration. Please ensure there are no AOT compilation errors and rerun the migration.';
45
- /** Entry point for the V9 "undecorated-classes-with-di" migration. */
46
- function default_1() {
47
- return (tree, ctx) => __awaiter(this, void 0, void 0, function* () {
48
- const { buildPaths } = yield (0, project_tsconfig_paths_1.getProjectTsConfigPaths)(tree);
49
- const basePath = process.cwd();
50
- const failures = [];
51
- let programError = false;
52
- if (!buildPaths.length) {
53
- throw new schematics_1.SchematicsException('Could not find any tsconfig file. Cannot migrate undecorated derived classes and ' +
54
- 'undecorated base classes which use DI.');
55
- }
56
- let compilerModule;
57
- try {
58
- // Load ESM `@angular/compiler` using the TypeScript dynamic import workaround.
59
- // Once TypeScript provides support for keeping the dynamic import this workaround can be
60
- // changed to a direct dynamic import.
61
- compilerModule = yield (0, load_esm_1.loadEsmModule)('@angular/compiler');
62
- }
63
- catch (e) {
64
- throw new schematics_1.SchematicsException(`Unable to load the '@angular/compiler' package. Details: ${e.message}`);
65
- }
66
- let compilerCliModule;
67
- try {
68
- // Load ESM `@angular/compiler-cli` using the TypeScript dynamic import workaround.
69
- // Once TypeScript provides support for keeping the dynamic import this workaround can be
70
- // changed to a direct dynamic import.
71
- compilerCliModule =
72
- yield (0, load_esm_1.loadEsmModule)('@angular/compiler-cli');
73
- }
74
- catch (e) {
75
- throw new schematics_1.SchematicsException(`Unable to load the '@angular/compiler-cli' package. Details: ${e.message}`);
76
- }
77
- let coreModule;
78
- try {
79
- // Load ESM `@angular/compiler-cli` using the TypeScript dynamic import workaround.
80
- // Once TypeScript provides support for keeping the dynamic import this workaround can be
81
- // changed to a direct dynamic import.
82
- coreModule = yield (0, load_esm_1.loadEsmModule)('@angular/core');
83
- }
84
- catch (e) {
85
- throw new schematics_1.SchematicsException(`Unable to load the '@angular/core' package. Details: ${e.message}`);
86
- }
87
- let compilerCliMigrationsModule;
88
- try {
89
- // Load ESM `@angular/compiler/private/migrations` using the TypeScript dynamic import
90
- // workaround. Once TypeScript provides support for keeping the dynamic import this workaround
91
- // can be changed to a direct dynamic import.
92
- compilerCliMigrationsModule = yield (0, load_esm_1.loadCompilerCliMigrationsModule)();
93
- }
94
- catch (e) {
95
- throw new schematics_1.SchematicsException(`Unable to load the '@angular/compiler-cli' package. Details: ${e.message}`);
96
- }
97
- for (const tsconfigPath of buildPaths) {
98
- const result = runUndecoratedClassesMigration(tree, tsconfigPath, basePath, ctx.logger, compilerModule, compilerCliModule, compilerCliMigrationsModule, coreModule);
99
- failures.push(...result.failures);
100
- programError = programError || !!result.programError;
101
- }
102
- if (programError) {
103
- ctx.logger.info('Could not migrate all undecorated classes that use dependency');
104
- ctx.logger.info('injection. Some project targets could not be analyzed due to');
105
- ctx.logger.info('TypeScript program failures.\n');
106
- ctx.logger.info(`${MIGRATION_RERUN_MESSAGE}\n`);
107
- if (failures.length) {
108
- ctx.logger.info('Please manually fix the following failures and re-run the');
109
- ctx.logger.info('migration once the TypeScript program failures are resolved.');
110
- failures.forEach(message => ctx.logger.warn(`⮑ ${message}`));
111
- }
112
- }
113
- else if (failures.length) {
114
- ctx.logger.info('Could not migrate all undecorated classes that use dependency');
115
- ctx.logger.info('injection. Please manually fix the following failures:');
116
- failures.forEach(message => ctx.logger.warn(`⮑ ${message}`));
117
- }
118
- });
119
- }
120
- exports.default = default_1;
121
- function runUndecoratedClassesMigration(tree, tsconfigPath, basePath, logger, compilerModule, compilerCliModule, compilerCliMigrationsModule, coreModule) {
122
- const failures = [];
123
- const programData = gracefullyCreateProgram(tree, basePath, tsconfigPath, logger, compilerCliModule);
124
- // Gracefully exit if the program could not be created.
125
- if (programData === null) {
126
- return { failures: [], programError: true };
127
- }
128
- const { program, compiler } = programData;
129
- const typeChecker = program.getTypeChecker();
130
- const declarationCollector = new ng_declaration_collector_1.NgDeclarationCollector(typeChecker, compilerCliMigrationsModule);
131
- const sourceFiles = program.getSourceFiles().filter(sourceFile => (0, compiler_host_1.canMigrateFile)(basePath, sourceFile, program));
132
- // Analyze source files by detecting all directives, components and providers.
133
- sourceFiles.forEach(sourceFile => declarationCollector.visitNode(sourceFile));
134
- const { decoratedDirectives, decoratedProviders, undecoratedDeclarations } = declarationCollector;
135
- const transform = new transform_1.UndecoratedClassesTransform(typeChecker, compiler, getUpdateRecorder, compilerModule, coreModule);
136
- const updateRecorders = new Map();
137
- // Run the migrations for decorated providers and both decorated and undecorated
138
- // directives. The transform failures are collected and converted into human-readable
139
- // failures which can be printed to the console.
140
- [...transform.migrateDecoratedDirectives(decoratedDirectives),
141
- ...transform.migrateDecoratedProviders(decoratedProviders),
142
- ...transform.migrateUndecoratedDeclarations(Array.from(undecoratedDeclarations))]
143
- .forEach(({ node, message }) => {
144
- const nodeSourceFile = node.getSourceFile();
145
- const relativeFilePath = (0, path_1.relative)(basePath, nodeSourceFile.fileName);
146
- const { line, character } = typescript_1.default.getLineAndCharacterOfPosition(node.getSourceFile(), node.getStart());
147
- failures.push(`${relativeFilePath}@${line + 1}:${character + 1}: ${message}`);
148
- });
149
- // Record the changes collected in the import manager and transformer.
150
- transform.recordChanges();
151
- // Walk through each update recorder and commit the update. We need to commit the
152
- // updates in batches per source file as there can be only one recorder per source
153
- // file in order to avoid shifted character offsets.
154
- updateRecorders.forEach(recorder => recorder.commitUpdate());
155
- return { failures };
156
- /** Gets the update recorder for the specified source file. */
157
- function getUpdateRecorder(sourceFile) {
158
- if (updateRecorders.has(sourceFile)) {
159
- return updateRecorders.get(sourceFile);
160
- }
161
- const treeRecorder = tree.beginUpdate((0, path_1.relative)(basePath, sourceFile.fileName));
162
- const recorder = {
163
- addClassComment(node, text) {
164
- treeRecorder.insertLeft(node.members.pos, `\n // ${text}\n`);
165
- },
166
- addClassDecorator(node, text) {
167
- // New imports should be inserted at the left while decorators should be inserted
168
- // at the right in order to ensure that imports are inserted before the decorator
169
- // if the start position of import and decorator is the source file start.
170
- treeRecorder.insertRight(node.getStart(), `${text}\n`);
171
- },
172
- addNewImport(start, importText) {
173
- // New imports should be inserted at the left while decorators should be inserted
174
- // at the right in order to ensure that imports are inserted before the decorator
175
- // if the start position of import and decorator is the source file start.
176
- treeRecorder.insertLeft(start, importText);
177
- },
178
- updateExistingImport(namedBindings, newNamedBindings) {
179
- treeRecorder.remove(namedBindings.getStart(), namedBindings.getWidth());
180
- treeRecorder.insertRight(namedBindings.getStart(), newNamedBindings);
181
- },
182
- commitUpdate() {
183
- tree.commitUpdate(treeRecorder);
184
- }
185
- };
186
- updateRecorders.set(sourceFile, recorder);
187
- return recorder;
188
- }
189
- }
190
- function getErrorDiagnostics(diagnostics) {
191
- return diagnostics.filter(d => d.category === typescript_1.default.DiagnosticCategory.Error);
192
- }
193
- function gracefullyCreateProgram(tree, basePath, tsconfigPath, logger, compilerCliModule) {
194
- try {
195
- const { ngcProgram, host, program, compiler } = (0, create_ngc_program_1.createNgcProgram)(compilerCliModule, (options) => (0, compiler_host_1.createMigrationCompilerHost)(tree, options, basePath), tsconfigPath);
196
- const syntacticDiagnostics = getErrorDiagnostics(ngcProgram.getTsSyntacticDiagnostics());
197
- const structuralDiagnostics = getErrorDiagnostics(ngcProgram.getNgStructuralDiagnostics());
198
- const configDiagnostics = getErrorDiagnostics([...program.getOptionsDiagnostics(), ...ngcProgram.getNgOptionDiagnostics()]);
199
- if (configDiagnostics.length) {
200
- logger.warn(`\nTypeScript project "${tsconfigPath}" has configuration errors. This could cause ` +
201
- `an incomplete migration. Please fix the following failures and rerun the migration:`);
202
- logger.error(typescript_1.default.formatDiagnostics(configDiagnostics, host));
203
- return null;
204
- }
205
- // Syntactic TypeScript errors can throw off the query analysis and therefore we want
206
- // to notify the developer that we couldn't analyze parts of the project. Developers
207
- // can just re-run the migration after fixing these failures.
208
- if (syntacticDiagnostics.length) {
209
- logger.warn(`\nTypeScript project "${tsconfigPath}" has syntactical errors which could cause ` +
210
- `an incomplete migration. Please fix the following failures and rerun the migration:`);
211
- logger.error(typescript_1.default.formatDiagnostics(syntacticDiagnostics, host));
212
- return null;
213
- }
214
- if (structuralDiagnostics.length) {
215
- throw new Error(typescript_1.default.formatDiagnostics(structuralDiagnostics, host));
216
- }
217
- return { program, compiler };
218
- }
219
- catch (e) {
220
- logger.warn(`\n${MIGRATION_AOT_FAILURE} The following project failed: ${tsconfigPath}\n`);
221
- logger.error(`${e.toString()}\n`);
222
- return null;
223
- }
224
- }
225
- });
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy91bmRlY29yYXRlZC1jbGFzc2VzLXdpdGgtZGkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFHSCwyREFBNkY7SUFHN0YsK0JBQThCO0lBQzlCLDREQUE0QjtJQUU1QixzRUFBb0Y7SUFDcEYsa0dBQTJFO0lBQzNFLDJGQUFpRztJQUVqRywySEFBc0Q7SUFDdEQsdUlBQWtFO0lBQ2xFLHlHQUF3RDtJQUd4RCxNQUFNLHVCQUF1QixHQUFHLHdEQUF3RDtRQUNwRiwwREFBMEQsQ0FBQztJQUUvRCxNQUFNLHFCQUFxQixHQUFHLDBEQUEwRDtRQUNwRixtRkFBbUY7UUFDbkYsMkZBQTJGLENBQUM7SUFFaEcsc0VBQXNFO0lBQ3RFO1FBQ0UsT0FBTyxDQUFPLElBQVUsRUFBRSxHQUFxQixFQUFFLEVBQUU7WUFDakQsTUFBTSxFQUFDLFVBQVUsRUFBQyxHQUFHLE1BQU0sSUFBQSxnREFBdUIsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUN6RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDL0IsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1lBQzlCLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQztZQUV6QixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsTUFBTSxJQUFJLGdDQUFtQixDQUN6QixtRkFBbUY7b0JBQ25GLHdDQUF3QyxDQUFDLENBQUM7YUFDL0M7WUFFRCxJQUFJLGNBQWMsQ0FBQztZQUNuQixJQUFJO2dCQUNGLCtFQUErRTtnQkFDL0UseUZBQXlGO2dCQUN6RixzQ0FBc0M7Z0JBQ3RDLGNBQWMsR0FBRyxNQUFNLElBQUEsd0JBQWEsRUFBcUMsbUJBQW1C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QUMsSUFBSSxDQUNQLHlCQUF5QixZQUFZLCtDQUErQztvQkFDcEYscUZBQXFGLENBQUMsQ0FBQztnQkFDM0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxvQkFBRSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQzVELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFFRCxxRkFBcUY7WUFDckYsb0ZBQW9GO1lBQ3BGLDZEQUE2RDtZQUM3RCxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRTtnQkFDL0IsTUFBTSxDQUFDLElBQUksQ0FDUCx5QkFBeUIsWUFBWSw2Q0FBNkM7b0JBQ2xGLHFGQUFxRixDQUFDLENBQUM7Z0JBQzNGLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLElBQUksQ0FBQzthQUNiO1lBRUQsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsb0JBQUUsQ0FBQyxpQkFBaUIsQ0FBa0IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNyRjtZQUVELE9BQU8sRUFBQyxPQUFPLEVBQUUsUUFBUSxFQUFDLENBQUM7U0FDNUI7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxxQkFBcUIsa0NBQWtDLFlBQVksSUFBSSxDQUFDLENBQUM7WUFDMUYsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtsb2dnaW5nfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQge1J1bGUsIFNjaGVtYXRpY0NvbnRleHQsIFNjaGVtYXRpY3NFeGNlcHRpb24sIFRyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB0eXBlIHtBb3RDb21waWxlcn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHR5cGUge0RpYWdub3N0aWMgYXMgTmdEaWFnbm9zdGljfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGknO1xuaW1wb3J0IHtyZWxhdGl2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7bG9hZENvbXBpbGVyQ2xpTWlncmF0aW9uc01vZHVsZSwgbG9hZEVzbU1vZHVsZX0gZnJvbSAnLi4vLi4vdXRpbHMvbG9hZF9lc20nO1xuaW1wb3J0IHtnZXRQcm9qZWN0VHNDb25maWdQYXRoc30gZnJvbSAnLi4vLi4vdXRpbHMvcHJvamVjdF90c2NvbmZpZ19wYXRocyc7XG5pbXBvcnQge2Nhbk1pZ3JhdGVGaWxlLCBjcmVhdGVNaWdyYXRpb25Db21waWxlckhvc3R9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvY29tcGlsZXJfaG9zdCc7XG5cbmltcG9ydCB7Y3JlYXRlTmdjUHJvZ3JhbX0gZnJvbSAnLi9jcmVhdGVfbmdjX3Byb2dyYW0nO1xuaW1wb3J0IHtOZ0RlY2xhcmF0aW9uQ29sbGVjdG9yfSBmcm9tICcuL25nX2RlY2xhcmF0aW9uX2NvbGxlY3Rvcic7XG5pbXBvcnQge1VuZGVjb3JhdGVkQ2xhc3Nlc1RyYW5zZm9ybX0gZnJvbSAnLi90cmFuc2Zvcm0nO1xuaW1wb3J0IHtVcGRhdGVSZWNvcmRlcn0gZnJvbSAnLi91cGRhdGVfcmVjb3JkZXInO1xuXG5jb25zdCBNSUdSQVRJT05fUkVSVU5fTUVTU0FHRSA9ICdNaWdyYXRpb24gY2FuIGJlIHJlcnVuIHdpdGg6IFwibmcgdXBkYXRlIEBhbmd1bGFyL2NvcmUgJyArXG4gICAgJy0tbWlncmF0ZS1vbmx5IG1pZ3JhdGlvbi12OS11bmRlY29yYXRlZC1jbGFzc2VzLXdpdGgtZGlcIic7XG5cbmNvbnN0IE1JR1JBVElPTl9BT1RfRkFJTFVSRSA9ICdUaGlzIG1pZ3JhdGlvbiB1c2VzIHRoZSBBbmd1bGFyIGNvbXBpbGVyIGludGVybmFsbHkgYW5kICcgK1xuICAgICd0aGVyZWZvcmUgcHJvamVjdHMgdGhhdCBubyBsb25nZXIgYnVpbGQgc3VjY2Vzc2Z1bGx5IGFmdGVyIHRoZSB1cGRhdGUgY2Fubm90IHJ1biAnICtcbiAgICAndGhlIG1pZ3JhdGlvbi4gUGxlYXNlIGVuc3VyZSB0aGVyZSBhcmUgbm8gQU9UIGNvbXBpbGF0aW9uIGVycm9ycyBhbmQgcmVydW4gdGhlIG1pZ3JhdGlvbi4nO1xuXG4vKiogRW50cnkgcG9pbnQgZm9yIHRoZSBWOSBcInVuZGVjb3JhdGVkLWNsYXNzZXMtd2l0aC1kaVwiIG1pZ3JhdGlvbi4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCk6IFJ1bGUge1xuICByZXR1cm4gYXN5bmMgKHRyZWU6IFRyZWUsIGN0eDogU2NoZW1hdGljQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IHtidWlsZFBhdGhzfSA9IGF3YWl0IGdldFByb2plY3RUc0NvbmZpZ1BhdGhzKHRyZWUpO1xuICAgIGNvbnN0IGJhc2VQYXRoID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgcHJvZ3JhbUVycm9yID0gZmFsc2U7XG5cbiAgICBpZiAoIWJ1aWxkUGF0aHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYW55IHRzY29uZmlnIGZpbGUuIENhbm5vdCBtaWdyYXRlIHVuZGVjb3JhdGVkIGRlcml2ZWQgY2xhc3NlcyBhbmQgJyArXG4gICAgICAgICAgJ3VuZGVjb3JhdGVkIGJhc2UgY2xhc3NlcyB3aGljaCB1c2UgREkuJyk7XG4gICAgfVxuXG4gICAgbGV0IGNvbXBpbGVyTW9kdWxlO1xuICAgIHRyeSB7XG4gICAgICAvLyBMb2FkIEVTTSBgQGFuZ3VsYXIvY29tcGlsZXJgIHVzaW5nIHRoZSBUeXBlU2NyaXB0IGR5bmFtaWMgaW1wb3J0IHdvcmthcm91bmQuXG4gICAgICAvLyBPbmNlIFR5cGVTY3JpcHQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2VlcGluZyB0aGUgZHluYW1pYyBpbXBvcnQgdGhpcyB3b3JrYXJvdW5kIGNhbiBiZVxuICAgICAgLy8gY2hhbmdlZCB0byBhIGRpcmVjdCBkeW5hbWljIGltcG9ydC5cbiAgICAgIGNvbXBpbGVyTW9kdWxlID0gYXdhaXQgbG9hZEVzbU1vZHVsZTx0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9jb21waWxlcicpPignQGFuZ3VsYXIvY29tcGlsZXInKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICBgVW5hYmxlIHRvIGxvYWQgdGhlICdAYW5ndWxhci9jb21waWxlcicgcGFja2FnZS4gRGV0YWlsczogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgbGV0IGNvbXBpbGVyQ2xpTW9kdWxlO1xuICAgIHRyeSB7XG4gICAgICAvLyBMb2FkIEVTTSBgQGFuZ3VsYXIvY29tcGlsZXItY2xpYCB1c2luZyB0aGUgVHlwZVNjcmlwdCBkeW5hbWljIGltcG9ydCB3b3JrYXJvdW5kLlxuICAgICAgLy8gT25jZSBUeXBlU2NyaXB0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtlZXBpbmcgdGhlIGR5bmFtaWMgaW1wb3J0IHRoaXMgd29ya2Fyb3VuZCBjYW4gYmVcbiAgICAgIC8vIGNoYW5nZWQgdG8gYSBkaXJlY3QgZHluYW1pYyBpbXBvcnQuXG4gICAgICBjb21waWxlckNsaU1vZHVsZSA9XG4gICAgICAgICAgYXdhaXQgbG9hZEVzbU1vZHVsZTx0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9jb21waWxlci1jbGknKT4oJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaScpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWF0aWNzRXhjZXB0aW9uKFxuICAgICAgICAgIGBVbmFibGUgdG8gbG9hZCB0aGUgJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaScgcGFja2FnZS4gRGV0YWlsczogJHtlLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgbGV0IGNvcmVNb2R1bGU7XG4gICAgdHJ5IHtcbiAgICAgIC8vIExvYWQgRVNNIGBAYW5ndWxhci9jb21waWxlci1jbGlgIHVzaW5nIHRoZSBUeXBlU2NyaXB0IGR5bmFtaWMgaW1wb3J0IHdvcmthcm91bmQuXG4gICAgICAvLyBPbmNlIFR5cGVTY3JpcHQgcHJvdmlkZXMgc3VwcG9ydCBmb3Iga2VlcGluZyB0aGUgZHluYW1pYyBpbXBvcnQgdGhpcyB3b3JrYXJvdW5kIGNhbiBiZVxuICAgICAgLy8gY2hhbmdlZCB0byBhIGRpcmVjdCBkeW5hbWljIGltcG9ydC5cbiAgICAgIGNvcmVNb2R1bGUgPSBhd2FpdCBsb2FkRXNtTW9kdWxlPHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvcmUnKT4oJ0Bhbmd1bGFyL2NvcmUnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICBgVW5hYmxlIHRvIGxvYWQgdGhlICdAYW5ndWxhci9jb3JlJyBwYWNrYWdlLiBEZXRhaWxzOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICBsZXQgY29tcGlsZXJDbGlNaWdyYXRpb25zTW9kdWxlO1xuICAgIHRyeSB7XG4gICAgICAvLyBMb2FkIEVTTSBgQGFuZ3VsYXIvY29tcGlsZXIvcHJpdmF0ZS9taWdyYXRpb25zYCB1c2luZyB0aGUgVHlwZVNjcmlwdCBkeW5hbWljIGltcG9ydFxuICAgICAgLy8gd29ya2Fyb3VuZC4gT25jZSBUeXBlU2NyaXB0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtlZXBpbmcgdGhlIGR5bmFtaWMgaW1wb3J0IHRoaXMgd29ya2Fyb3VuZFxuICAgICAgLy8gY2FuIGJlIGNoYW5nZWQgdG8gYSBkaXJlY3QgZHluYW1pYyBpbXBvcnQuXG4gICAgICBjb21waWxlckNsaU1pZ3JhdGlvbnNNb2R1bGUgPSBhd2FpdCBsb2FkQ29tcGlsZXJDbGlNaWdyYXRpb25zTW9kdWxlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oXG4gICAgICAgICAgYFVuYWJsZSB0byBsb2FkIHRoZSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpJyBwYWNrYWdlLiBEZXRhaWxzOiAke2UubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRzY29uZmlnUGF0aCBvZiBidWlsZFBhdGhzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBydW5VbmRlY29yYXRlZENsYXNzZXNNaWdyYXRpb24oXG4gICAgICAgICAgdHJlZSwgdHNjb25maWdQYXRoLCBiYXNlUGF0aCwgY3R4LmxvZ2dlciwgY29tcGlsZXJNb2R1bGUsIGNvbXBpbGVyQ2xpTW9kdWxlLFxuICAgICAgICAgIGNvbXBpbGVyQ2xpTWlncmF0aW9uc01vZHVsZSwgY29yZU1vZHVsZSk7XG4gICAgICBmYWlsdXJlcy5wdXNoKC4uLnJlc3VsdC5mYWlsdXJlcyk7XG4gICAgICBwcm9ncmFtRXJyb3IgPSBwcm9ncmFtRXJyb3IgfHwgISFyZXN1bHQucHJvZ3JhbUVycm9yO1xuICAgIH1cblxuICAgIGlmIChwcm9ncmFtRXJyb3IpIHtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygnQ291bGQgbm90IG1pZ3JhdGUgYWxsIHVuZGVjb3JhdGVkIGNsYXNzZXMgdGhhdCB1c2UgZGVwZW5kZW5jeScpO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKCdpbmplY3Rpb24uIFNvbWUgcHJvamVjdCB0YXJnZXRzIGNvdWxkIG5vdCBiZSBhbmFseXplZCBkdWUgdG8nKTtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygnVHlwZVNjcmlwdCBwcm9ncmFtIGZhaWx1cmVzLlxcbicpO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKGAke01JR1JBVElPTl9SRVJVTl9NRVNTQUdFfVxcbmApO1xuXG4gICAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKSB7XG4gICAgICAgIGN0eC5sb2dnZXIuaW5mbygnUGxlYXNlIG1hbnVhbGx5IGZpeCB0aGUgZm9sbG93aW5nIGZhaWx1cmVzIGFuZCByZS1ydW4gdGhlJyk7XG4gICAgICAgIGN0eC5sb2dnZXIuaW5mbygnbWlncmF0aW9uIG9uY2UgdGhlIFR5cGVTY3JpcHQgcHJvZ3JhbSBmYWlsdXJlcyBhcmUgcmVzb2x2ZWQuJyk7XG4gICAgICAgIGZhaWx1cmVzLmZvckVhY2gobWVzc2FnZSA9PiBjdHgubG9nZ2VyLndhcm4oYOKukSAgICR7bWVzc2FnZX1gKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmYWlsdXJlcy5sZW5ndGgpIHtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygnQ291bGQgbm90IG1pZ3JhdGUgYWxsIHVuZGVjb3JhdGVkIGNsYXNzZXMgdGhhdCB1c2UgZGVwZW5kZW5jeScpO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKCdpbmplY3Rpb24uIFBsZWFzZSBtYW51YWxseSBmaXggdGhlIGZvbGxvd2luZyBmYWlsdXJlczonKTtcbiAgICAgIGZhaWx1cmVzLmZvckVhY2gobWVzc2FnZSA9PiBjdHgubG9nZ2VyLndhcm4oYOKukSAgICR7bWVzc2FnZX1gKSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBydW5VbmRlY29yYXRlZENsYXNzZXNNaWdyYXRpb24oXG4gICAgdHJlZTogVHJlZSwgdHNjb25maWdQYXRoOiBzdHJpbmcsIGJhc2VQYXRoOiBzdHJpbmcsIGxvZ2dlcjogbG9nZ2luZy5Mb2dnZXJBcGksXG4gICAgY29tcGlsZXJNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvbXBpbGVyJyksXG4gICAgY29tcGlsZXJDbGlNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaScpLFxuICAgIGNvbXBpbGVyQ2xpTWlncmF0aW9uc01vZHVsZTogdHlwZW9mIGltcG9ydCgnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3ByaXZhdGUvbWlncmF0aW9ucycpLFxuICAgIGNvcmVNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvcmUnKSk6IHtmYWlsdXJlczogc3RyaW5nW10sIHByb2dyYW1FcnJvcj86IGJvb2xlYW59IHtcbiAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHByb2dyYW1EYXRhID1cbiAgICAgIGdyYWNlZnVsbHlDcmVhdGVQcm9ncmFtKHRyZWUsIGJhc2VQYXRoLCB0c2NvbmZpZ1BhdGgsIGxvZ2dlciwgY29tcGlsZXJDbGlNb2R1bGUpO1xuXG4gIC8vIEdyYWNlZnVsbHkgZXhpdCBpZiB0aGUgcHJvZ3JhbSBjb3VsZCBub3QgYmUgY3JlYXRlZC5cbiAgaWYgKHByb2dyYW1EYXRhID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHtmYWlsdXJlczogW10sIHByb2dyYW1FcnJvcjogdHJ1ZX07XG4gIH1cblxuICBjb25zdCB7cHJvZ3JhbSwgY29tcGlsZXJ9ID0gcHJvZ3JhbURhdGE7XG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuXG4gIGNvbnN0IGRlY2xhcmF0aW9uQ29sbGVjdG9yID0gbmV3IE5nRGVjbGFyYXRpb25Db2xsZWN0b3IodHlwZUNoZWNrZXIsIGNvbXBpbGVyQ2xpTWlncmF0aW9uc01vZHVsZSk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzID1cbiAgICAgIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKS5maWx0ZXIoc291cmNlRmlsZSA9PiBjYW5NaWdyYXRlRmlsZShiYXNlUGF0aCwgc291cmNlRmlsZSwgcHJvZ3JhbSkpO1xuXG4gIC8vIEFuYWx5emUgc291cmNlIGZpbGVzIGJ5IGRldGVjdGluZyBhbGwgZGlyZWN0aXZlcywgY29tcG9uZW50cyBhbmQgcHJvdmlkZXJzLlxuICBzb3VyY2VGaWxlcy5mb3JFYWNoKHNvdXJjZUZpbGUgPT4gZGVjbGFyYXRpb25Db2xsZWN0b3IudmlzaXROb2RlKHNvdXJjZUZpbGUpKTtcblxuICBjb25zdCB7ZGVjb3JhdGVkRGlyZWN0aXZlcywgZGVjb3JhdGVkUHJvdmlkZXJzLCB1bmRlY29yYXRlZERlY2xhcmF0aW9uc30gPSBkZWNsYXJhdGlvbkNvbGxlY3RvcjtcbiAgY29uc3QgdHJhbnNmb3JtID0gbmV3IFVuZGVjb3JhdGVkQ2xhc3Nlc1RyYW5zZm9ybShcbiAgICAgIHR5cGVDaGVja2VyLCBjb21waWxlciwgZ2V0VXBkYXRlUmVjb3JkZXIsIGNvbXBpbGVyTW9kdWxlLCBjb3JlTW9kdWxlKTtcbiAgY29uc3QgdXBkYXRlUmVjb3JkZXJzID0gbmV3IE1hcDx0cy5Tb3VyY2VGaWxlLCBVcGRhdGVSZWNvcmRlcj4oKTtcblxuICAvLyBSdW4gdGhlIG1pZ3JhdGlvbnMgZm9yIGRlY29yYXRlZCBwcm92aWRlcnMgYW5kIGJvdGggZGVjb3JhdGVkIGFuZCB1bmRlY29yYXRlZFxuICAvLyBkaXJlY3RpdmVzLiBUaGUgdHJhbnNmb3JtIGZhaWx1cmVzIGFyZSBjb2xsZWN0ZWQgYW5kIGNvbnZlcnRlZCBpbnRvIGh1bWFuLXJlYWRhYmxlXG4gIC8vIGZhaWx1cmVzIHdoaWNoIGNhbiBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLlxuICBbLi4udHJhbnNmb3JtLm1pZ3JhdGVEZWNvcmF0ZWREaXJlY3RpdmVzKGRlY29yYXRlZERpcmVjdGl2ZXMpLFxuICAgLi4udHJhbnNmb3JtLm1pZ3JhdGVEZWNvcmF0ZWRQcm92aWRlcnMoZGVjb3JhdGVkUHJvdmlkZXJzKSxcbiAgIC4uLnRyYW5zZm9ybS5taWdyYXRlVW5kZWNvcmF0ZWREZWNsYXJhdGlvbnMoQXJyYXkuZnJvbSh1bmRlY29yYXRlZERlY2xhcmF0aW9ucykpXVxuICAgICAgLmZvckVhY2goKHtub2RlLCBtZXNzYWdlfSkgPT4ge1xuICAgICAgICBjb25zdCBub2RlU291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICAgICAgICBjb25zdCByZWxhdGl2ZUZpbGVQYXRoID0gcmVsYXRpdmUoYmFzZVBhdGgsIG5vZGVTb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgY29uc3Qge2xpbmUsIGNoYXJhY3Rlcn0gPVxuICAgICAgICAgICAgdHMuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24obm9kZS5nZXRTb3VyY2VGaWxlKCksIG5vZGUuZ2V0U3RhcnQoKSk7XG4gICAgICAgIGZhaWx1cmVzLnB1c2goYCR7cmVsYXRpdmVGaWxlUGF0aH1AJHtsaW5lICsgMX06JHtjaGFyYWN0ZXIgKyAxfTogJHttZXNzYWdlfWApO1xuICAgICAgfSk7XG5cbiAgLy8gUmVjb3JkIHRoZSBjaGFuZ2VzIGNvbGxlY3RlZCBpbiB0aGUgaW1wb3J0IG1hbmFnZXIgYW5kIHRyYW5zZm9ybWVyLlxuICB0cmFuc2Zvcm0ucmVjb3JkQ2hhbmdlcygpO1xuXG4gIC8vIFdhbGsgdGhyb3VnaCBlYWNoIHVwZGF0ZSByZWNvcmRlciBhbmQgY29tbWl0IHRoZSB1cGRhdGUuIFdlIG5lZWQgdG8gY29tbWl0IHRoZVxuICAvLyB1cGRhdGVzIGluIGJhdGNoZXMgcGVyIHNvdXJjZSBmaWxlIGFzIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSByZWNvcmRlciBwZXIgc291cmNlXG4gIC8vIGZpbGUgaW4gb3JkZXIgdG8gYXZvaWQgc2hpZnRlZCBjaGFyYWN0ZXIgb2Zmc2V0cy5cbiAgdXBkYXRlUmVjb3JkZXJzLmZvckVhY2gocmVjb3JkZXIgPT4gcmVjb3JkZXIuY29tbWl0VXBkYXRlKCkpO1xuXG4gIHJldHVybiB7ZmFpbHVyZXN9O1xuXG4gIC8qKiBHZXRzIHRoZSB1cGRhdGUgcmVjb3JkZXIgZm9yIHRoZSBzcGVjaWZpZWQgc291cmNlIGZpbGUuICovXG4gIGZ1bmN0aW9uIGdldFVwZGF0ZVJlY29yZGVyKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiBVcGRhdGVSZWNvcmRlciB7XG4gICAgaWYgKHVwZGF0ZVJlY29yZGVycy5oYXMoc291cmNlRmlsZSkpIHtcbiAgICAgIHJldHVybiB1cGRhdGVSZWNvcmRlcnMuZ2V0KHNvdXJjZUZpbGUpITtcbiAgICB9XG4gICAgY29uc3QgdHJlZVJlY29yZGVyID0gdHJlZS5iZWdpblVwZGF0ZShyZWxhdGl2ZShiYXNlUGF0aCwgc291cmNlRmlsZS5maWxlTmFtZSkpO1xuICAgIGNvbnN0IHJlY29yZGVyOiBVcGRhdGVSZWNvcmRlciA9IHtcbiAgICAgIGFkZENsYXNzQ29tbWVudChub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uLCB0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgdHJlZVJlY29yZGVyLmluc2VydExlZnQobm9kZS5tZW1iZXJzLnBvcywgYFxcbiAgLy8gJHt0ZXh0fVxcbmApO1xuICAgICAgfSxcbiAgICAgIGFkZENsYXNzRGVjb3JhdG9yKG5vZGU6IHRzLkNsYXNzRGVjbGFyYXRpb24sIHRleHQ6IHN0cmluZykge1xuICAgICAgICAvLyBOZXcgaW1wb3J0cyBzaG91bGQgYmUgaW5zZXJ0ZWQgYXQgdGhlIGxlZnQgd2hpbGUgZGVjb3JhdG9ycyBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgICAgLy8gYXQgdGhlIHJpZ2h0IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGltcG9ydHMgYXJlIGluc2VydGVkIGJlZm9yZSB0aGUgZGVjb3JhdG9yXG4gICAgICAgIC8vIGlmIHRoZSBzdGFydCBwb3NpdGlvbiBvZiBpbXBvcnQgYW5kIGRlY29yYXRvciBpcyB0aGUgc291cmNlIGZpbGUgc3RhcnQuXG4gICAgICAgIHRyZWVSZWNvcmRlci5pbnNlcnRSaWdodChub2RlLmdldFN0YXJ0KCksIGAke3RleHR9XFxuYCk7XG4gICAgICB9LFxuICAgICAgYWRkTmV3SW1wb3J0KHN0YXJ0OiBudW1iZXIsIGltcG9ydFRleHQ6IHN0cmluZykge1xuICAgICAgICAvLyBOZXcgaW1wb3J0cyBzaG91bGQgYmUgaW5zZXJ0ZWQgYXQgdGhlIGxlZnQgd2hpbGUgZGVjb3JhdG9ycyBzaG91bGQgYmUgaW5zZXJ0ZWRcbiAgICAgICAgLy8gYXQgdGhlIHJpZ2h0IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGltcG9ydHMgYXJlIGluc2VydGVkIGJlZm9yZSB0aGUgZGVjb3JhdG9yXG4gICAgICAgIC8vIGlmIHRoZSBzdGFydCBwb3NpdGlvbiBvZiBpbXBvcnQgYW5kIGRlY29yYXRvciBpcyB0aGUgc291cmNlIGZpbGUgc3RhcnQuXG4gICAgICAgIHRyZWVSZWNvcmRlci5pbnNlcnRMZWZ0KHN0YXJ0LCBpbXBvcnRUZXh0KTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGVFeGlzdGluZ0ltcG9ydChuYW1lZEJpbmRpbmdzOiB0cy5OYW1lZEltcG9ydHMsIG5ld05hbWVkQmluZGluZ3M6IHN0cmluZykge1xuICAgICAgICB0cmVlUmVjb3JkZXIucmVtb3ZlKG5hbWVkQmluZGluZ3MuZ2V0U3RhcnQoKSwgbmFtZWRCaW5kaW5ncy5nZXRXaWR0aCgpKTtcbiAgICAgICAgdHJlZVJlY29yZGVyLmluc2VydFJpZ2h0KG5hbWVkQmluZGluZ3MuZ2V0U3RhcnQoKSwgbmV3TmFtZWRCaW5kaW5ncyk7XG4gICAgICB9LFxuICAgICAgY29tbWl0VXBkYXRlKCkge1xuICAgICAgICB0cmVlLmNvbW1pdFVwZGF0ZSh0cmVlUmVjb3JkZXIpO1xuICAgICAgfVxuICAgIH07XG4gICAgdXBkYXRlUmVjb3JkZXJzLnNldChzb3VyY2VGaWxlLCByZWNvcmRlcik7XG4gICAgcmV0dXJuIHJlY29yZGVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEVycm9yRGlhZ25vc3RpY3MoZGlhZ25vc3RpY3M6IFJlYWRvbmx5QXJyYXk8dHMuRGlhZ25vc3RpY3xOZ0RpYWdub3N0aWM+KSB7XG4gIHJldHVybiA8dHMuRGlhZ25vc3RpY1tdPmRpYWdub3N0aWNzLmZpbHRlcihkID0+IGQuY2F0ZWdvcnkgPT09IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvcik7XG59XG5cbmZ1bmN0aW9uIGdyYWNlZnVsbHlDcmVhdGVQcm9ncmFtKFxuICAgIHRyZWU6IFRyZWUsIGJhc2VQYXRoOiBzdHJpbmcsIHRzY29uZmlnUGF0aDogc3RyaW5nLCBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpLFxuICAgIGNvbXBpbGVyQ2xpTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9jb21waWxlci1jbGknKSk6XG4gICAge2NvbXBpbGVyOiBBb3RDb21waWxlciwgcHJvZ3JhbTogdHMuUHJvZ3JhbX18bnVsbCB7XG4gIHRyeSB7XG4gICAgY29uc3Qge25nY1Byb2dyYW0sIGhvc3QsIHByb2dyYW0sIGNvbXBpbGVyfSA9IGNyZWF0ZU5nY1Byb2dyYW0oXG4gICAgICAgIGNvbXBpbGVyQ2xpTW9kdWxlLCAob3B0aW9ucykgPT4gY3JlYXRlTWlncmF0aW9uQ29tcGlsZXJIb3N0KHRyZWUsIG9wdGlvbnMsIGJhc2VQYXRoKSxcbiAgICAgICAgdHNjb25maWdQYXRoKTtcbiAgICBjb25zdCBzeW50YWN0aWNEaWFnbm9zdGljcyA9IGdldEVycm9yRGlhZ25vc3RpY3MobmdjUHJvZ3JhbS5nZXRUc1N5bnRhY3RpY0RpYWdub3N0aWNzKCkpO1xuICAgIGNvbnN0IHN0cnVjdHVyYWxEaWFnbm9zdGljcyA9IGdldEVycm9yRGlhZ25vc3RpY3MobmdjUHJvZ3JhbS5nZXROZ1N0cnVjdHVyYWxEaWFnbm9zdGljcygpKTtcbiAgICBjb25zdCBjb25maWdEaWFnbm9zdGljcyA9IGdldEVycm9yRGlhZ25vc3RpY3MoXG4gICAgICAgIFsuLi5wcm9ncmFtLmdldE9wdGlvbnNEaWFnbm9zdGljcygpLCAuLi5uZ2NQcm9ncmFtLmdldE5nT3B0aW9uRGlhZ25vc3RpY3MoKV0pO1xuXG4gICAgaWYgKGNvbmZpZ0RpYWdub3N0aWNzLmxlbmd0aCkge1xuICAgICAgbG9nZ2VyLndhcm4oXG4gICAgICAgICAgYFxcblR5cGVTY3JpcHQgcHJvamVjdCBcIiR7dHNjb25maWdQYXRofVwiIGhhcyBjb25maWd1cmF0aW9uIGVycm9ycy4gVGhpcyBjb3VsZCBjYXVzZSBgICtcbiAgICAgICAgICBgYW4gaW5jb21wbGV0ZSBtaWdyYXRpb24uIFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBmYWlsdXJlcyBhbmQgcmVydW4gdGhlIG1pZ3JhdGlvbjpgKTtcbiAgICAgIGxvZ2dlci5lcnJvcih0cy5mb3JtYXREaWFnbm9zdGljcyhjb25maWdEaWFnbm9zdGljcywgaG9zdCkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gU3ludGFjdGljIFR5cGVTY3JpcHQgZXJyb3JzIGNhbiB0aHJvdyBvZmYgdGhlIHF1ZXJ5IGFuYWx5c2lzIGFuZCB0aGVyZWZvcmUgd2Ugd2FudFxuICAgIC8vIHRvIG5vdGlmeSB0aGUgZGV2ZWxvcGVyIHRoYXQgd2UgY291bGRuJ3QgYW5hbHl6ZSBwYXJ0cyBvZiB0aGUgcHJvamVjdC4gRGV2ZWxvcGVyc1xuICAgIC8vIGNhbiBqdXN0IHJlLXJ1biB0aGUgbWlncmF0aW9uIGFmdGVyIGZpeGluZyB0aGVzZSBmYWlsdXJlcy5cbiAgICBpZiAoc3ludGFjdGljRGlhZ25vc3RpY3MubGVuZ3RoKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgXFxuVHlwZVNjcmlwdCBwcm9qZWN0IFwiJHt0c2NvbmZpZ1BhdGh9XCIgaGFzIHN5bnRhY3RpY2FsIGVycm9ycyB3aGljaCBjb3VsZCBjYXVzZSBgICtcbiAgICAgICAgICBgYW4gaW5jb21wbGV0ZSBtaWdyYXRpb24uIFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBmYWlsdXJlcyBhbmQgcmVydW4gdGhlIG1pZ3JhdGlvbjpgKTtcbiAgICAgIGxvZ2dlci5lcnJvcih0cy5mb3JtYXREaWFnbm9zdGljcyhzeW50YWN0aWNEaWFnbm9zdGljcywgaG9zdCkpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHN0cnVjdHVyYWxEaWFnbm9zdGljcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcih0cy5mb3JtYXREaWFnbm9zdGljcyg8dHMuRGlhZ25vc3RpY1tdPnN0cnVjdHVyYWxEaWFnbm9zdGljcywgaG9zdCkpO1xuICAgIH1cblxuICAgIHJldHVybiB7cHJvZ3JhbSwgY29tcGlsZXJ9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLndhcm4oYFxcbiR7TUlHUkFUSU9OX0FPVF9GQUlMVVJFfSBUaGUgZm9sbG93aW5nIHByb2plY3QgZmFpbGVkOiAke3RzY29uZmlnUGF0aH1cXG5gKTtcbiAgICBsb2dnZXIuZXJyb3IoYCR7ZS50b1N0cmluZygpfVxcbmApO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
@@ -1,38 +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/undecorated-classes-with-di/ng_declaration_collector" />
9
- import ts from 'typescript';
10
- import { NgDecorator } from '../../utils/ng_decorators';
11
- /**
12
- * Visitor that walks through specified TypeScript nodes and collects all defined
13
- * directives and provider classes. Directives are separated by decorated and
14
- * undecorated directives.
15
- */
16
- export declare class NgDeclarationCollector {
17
- typeChecker: ts.TypeChecker;
18
- private compilerCliMigrationsModule;
19
- /** List of resolved directives which are decorated. */
20
- decoratedDirectives: ts.ClassDeclaration[];
21
- /** List of resolved providers which are decorated. */
22
- decoratedProviders: ts.ClassDeclaration[];
23
- /** Set of resolved Angular declarations which are not decorated. */
24
- undecoratedDeclarations: Set<ts.ClassDeclaration>;
25
- private evaluator;
26
- constructor(typeChecker: ts.TypeChecker, compilerCliMigrationsModule: typeof import('@angular/compiler-cli/private/migrations'));
27
- visitNode(node: ts.Node): void;
28
- private _visitClassDeclaration;
29
- private _visitNgModuleDecorator;
30
- }
31
- /** Checks whether the given node has the "@Directive" or "@Component" decorator set. */
32
- export declare function hasDirectiveDecorator(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker, ngDecorators?: NgDecorator[]): boolean;
33
- /** Checks whether the given node has the "@Injectable" decorator set. */
34
- export declare function hasInjectableDecorator(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker, ngDecorators?: NgDecorator[]): boolean;
35
- /** Whether the given node has an explicit decorator that describes an Angular declaration. */
36
- export declare function hasNgDeclarationDecorator(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker): boolean;
37
- /** Gets all Angular decorators of a given class declaration. */
38
- export declare function getNgClassDecorators(node: ts.ClassDeclaration, typeChecker: ts.TypeChecker): NgDecorator[];
@@ -1,135 +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/undecorated-classes-with-di/ng_declaration_collector", ["require", "exports", "typescript", "@angular/core/schematics/utils/ng_decorators", "@angular/core/schematics/utils/typescript/property_name"], factory);
18
- }
19
- })(function (require, exports) {
20
- "use strict";
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.getNgClassDecorators = exports.hasNgDeclarationDecorator = exports.hasInjectableDecorator = exports.hasDirectiveDecorator = exports.NgDeclarationCollector = void 0;
23
- const typescript_1 = __importDefault(require("typescript"));
24
- const ng_decorators_1 = require("@angular/core/schematics/utils/ng_decorators");
25
- const property_name_1 = require("@angular/core/schematics/utils/typescript/property_name");
26
- /**
27
- * Visitor that walks through specified TypeScript nodes and collects all defined
28
- * directives and provider classes. Directives are separated by decorated and
29
- * undecorated directives.
30
- */
31
- class NgDeclarationCollector {
32
- constructor(typeChecker, compilerCliMigrationsModule) {
33
- this.typeChecker = typeChecker;
34
- this.compilerCliMigrationsModule = compilerCliMigrationsModule;
35
- /** List of resolved directives which are decorated. */
36
- this.decoratedDirectives = [];
37
- /** List of resolved providers which are decorated. */
38
- this.decoratedProviders = [];
39
- /** Set of resolved Angular declarations which are not decorated. */
40
- this.undecoratedDeclarations = new Set();
41
- this.evaluator = new compilerCliMigrationsModule.PartialEvaluator(new compilerCliMigrationsModule.TypeScriptReflectionHost(typeChecker), typeChecker,
42
- /* dependencyTracker */ null);
43
- }
44
- visitNode(node) {
45
- if (typescript_1.default.isClassDeclaration(node)) {
46
- this._visitClassDeclaration(node);
47
- }
48
- typescript_1.default.forEachChild(node, n => this.visitNode(n));
49
- }
50
- _visitClassDeclaration(node) {
51
- if (!node.decorators || !node.decorators.length) {
52
- return;
53
- }
54
- const ngDecorators = (0, ng_decorators_1.getAngularDecorators)(this.typeChecker, node.decorators);
55
- const ngModuleDecorator = ngDecorators.find(({ name }) => name === 'NgModule');
56
- if (hasDirectiveDecorator(node, this.typeChecker, ngDecorators)) {
57
- this.decoratedDirectives.push(node);
58
- }
59
- else if (hasInjectableDecorator(node, this.typeChecker, ngDecorators)) {
60
- this.decoratedProviders.push(node);
61
- }
62
- else if (ngModuleDecorator) {
63
- this._visitNgModuleDecorator(ngModuleDecorator);
64
- }
65
- }
66
- _visitNgModuleDecorator(decorator) {
67
- const decoratorCall = decorator.node.expression;
68
- const metadata = decoratorCall.arguments[0];
69
- if (!metadata || !typescript_1.default.isObjectLiteralExpression(metadata)) {
70
- return;
71
- }
72
- let entryComponentsNode = null;
73
- let declarationsNode = null;
74
- metadata.properties.forEach(p => {
75
- if (!typescript_1.default.isPropertyAssignment(p)) {
76
- return;
77
- }
78
- const name = (0, property_name_1.getPropertyNameText)(p.name);
79
- if (name === 'entryComponents') {
80
- entryComponentsNode = p.initializer;
81
- }
82
- else if (name === 'declarations') {
83
- declarationsNode = p.initializer;
84
- }
85
- });
86
- const values = [];
87
- // In case the module specifies the "entryComponents" field, walk through all
88
- // resolved entry components and collect the referenced directives.
89
- if (entryComponentsNode) {
90
- values.push(this.evaluator.evaluate(entryComponentsNode));
91
- }
92
- // In case the module specifies the "declarations" field, walk through all
93
- // resolved declarations and collect the referenced directives.
94
- if (declarationsNode) {
95
- values.push(this.evaluator.evaluate(declarationsNode));
96
- }
97
- // Flatten values and analyze references
98
- for (const value of values.flat(Infinity)) {
99
- if (value instanceof this.compilerCliMigrationsModule.Reference &&
100
- typescript_1.default.isClassDeclaration(value.node) &&
101
- !hasNgDeclarationDecorator(value.node, this.typeChecker)) {
102
- this.undecoratedDeclarations.add(value.node);
103
- }
104
- }
105
- }
106
- }
107
- exports.NgDeclarationCollector = NgDeclarationCollector;
108
- /** Checks whether the given node has the "@Directive" or "@Component" decorator set. */
109
- function hasDirectiveDecorator(node, typeChecker, ngDecorators) {
110
- return (ngDecorators || getNgClassDecorators(node, typeChecker))
111
- .some(({ name }) => name === 'Directive' || name === 'Component');
112
- }
113
- exports.hasDirectiveDecorator = hasDirectiveDecorator;
114
- /** Checks whether the given node has the "@Injectable" decorator set. */
115
- function hasInjectableDecorator(node, typeChecker, ngDecorators) {
116
- return (ngDecorators || getNgClassDecorators(node, typeChecker))
117
- .some(({ name }) => name === 'Injectable');
118
- }
119
- exports.hasInjectableDecorator = hasInjectableDecorator;
120
- /** Whether the given node has an explicit decorator that describes an Angular declaration. */
121
- function hasNgDeclarationDecorator(node, typeChecker) {
122
- return getNgClassDecorators(node, typeChecker)
123
- .some(({ name }) => name === 'Component' || name === 'Directive' || name === 'Pipe');
124
- }
125
- exports.hasNgDeclarationDecorator = hasNgDeclarationDecorator;
126
- /** Gets all Angular decorators of a given class declaration. */
127
- function getNgClassDecorators(node, typeChecker) {
128
- if (!node.decorators) {
129
- return [];
130
- }
131
- return (0, ng_decorators_1.getAngularDecorators)(typeChecker, node.decorators);
132
- }
133
- exports.getNgClassDecorators = getNgClassDecorators;
134
- });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdfZGVjbGFyYXRpb25fY29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRpL25nX2RlY2xhcmF0aW9uX2NvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFSCw0REFBNEI7SUFFNUIsZ0ZBQTRFO0lBQzVFLDJGQUF5RTtJQUd6RTs7OztPQUlHO0lBQ0gsTUFBYSxzQkFBc0I7UUFZakMsWUFDVyxXQUEyQixFQUMxQiwyQkFDcUQ7WUFGdEQsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1lBQzFCLGdDQUEyQixHQUEzQiwyQkFBMkIsQ0FDMEI7WUFkakUsdURBQXVEO1lBQ3ZELHdCQUFtQixHQUEwQixFQUFFLENBQUM7WUFFaEQsc0RBQXNEO1lBQ3RELHVCQUFrQixHQUEwQixFQUFFLENBQUM7WUFFL0Msb0VBQW9FO1lBQ3BFLDRCQUF1QixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO1lBUXZELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSwyQkFBMkIsQ0FBQyxnQkFBZ0IsQ0FDN0QsSUFBSSwyQkFBMkIsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxXQUFXO1lBQ2xGLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFFRCxTQUFTLENBQUMsSUFBYTtZQUNyQixJQUFJLG9CQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztZQUVELG9CQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENB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QUEyQjtRQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsT0FBTyxJQUFBLG9DQUFvQixFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQU5ELG9EQU1DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtnZXRBbmd1bGFyRGVjb3JhdG9ycywgTmdEZWNvcmF0b3J9IGZyb20gJy4uLy4uL3V0aWxzL25nX2RlY29yYXRvcnMnO1xuaW1wb3J0IHtnZXRQcm9wZXJ0eU5hbWVUZXh0fSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L3Byb3BlcnR5X25hbWUnO1xuXG5cbi8qKlxuICogVmlzaXRvciB0aGF0IHdhbGtzIHRocm91Z2ggc3BlY2lmaWVkIFR5cGVTY3JpcHQgbm9kZXMgYW5kIGNvbGxlY3RzIGFsbCBkZWZpbmVkXG4gKiBkaXJlY3RpdmVzIGFuZCBwcm92aWRlciBjbGFzc2VzLiBEaXJlY3RpdmVzIGFyZSBzZXBhcmF0ZWQgYnkgZGVjb3JhdGVkIGFuZFxuICogdW5kZWNvcmF0ZWQgZGlyZWN0aXZlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5nRGVjbGFyYXRpb25Db2xsZWN0b3Ige1xuICAvKiogTGlzdCBvZiByZXNvbHZlZCBkaXJlY3RpdmVzIHdoaWNoIGFyZSBkZWNvcmF0ZWQuICovXG4gIGRlY29yYXRlZERpcmVjdGl2ZXM6IHRzLkNsYXNzRGVjbGFyYXRpb25bXSA9IFtdO1xuXG4gIC8qKiBMaXN0IG9mIHJlc29sdmVkIHByb3ZpZGVycyB3aGljaCBhcmUgZGVjb3JhdGVkLiAqL1xuICBkZWNvcmF0ZWRQcm92aWRlcnM6IHRzLkNsYXNzRGVjbGFyYXRpb25bXSA9IFtdO1xuXG4gIC8qKiBTZXQgb2YgcmVzb2x2ZWQgQW5ndWxhciBkZWNsYXJhdGlvbnMgd2hpY2ggYXJlIG5vdCBkZWNvcmF0ZWQuICovXG4gIHVuZGVjb3JhdGVkRGVjbGFyYXRpb25zID0gbmV3IFNldDx0cy5DbGFzc0RlY2xhcmF0aW9uPigpO1xuXG4gIHByaXZhdGUgZXZhbHVhdG9yO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHVibGljIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgICAgIHByaXZhdGUgY29tcGlsZXJDbGlNaWdyYXRpb25zTW9kdWxlOlxuICAgICAgICAgIHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9wcml2YXRlL21pZ3JhdGlvbnMnKSkge1xuICAgIHRoaXMuZXZhbHVhdG9yID0gbmV3IGNvbXBpbGVyQ2xpTWlncmF0aW9uc01vZHVsZS5QYXJ0aWFsRXZhbHVhdG9yKFxuICAgICAgICBuZXcgY29tcGlsZXJDbGlNaWdyYXRpb25zTW9kdWxlLlR5cGVTY3JpcHRSZWZsZWN0aW9uSG9zdCh0eXBlQ2hlY2tlciksIHR5cGVDaGVja2VyLFxuICAgICAgICAvKiBkZXBlbmRlbmN5VHJhY2tlciAqLyBudWxsKTtcbiAgfVxuXG4gIHZpc2l0Tm9kZShub2RlOiB0cy5Ob2RlKSB7XG4gICAgaWYgKHRzLmlzQ2xhc3NEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgdGhpcy5fdmlzaXRDbGFzc0RlY2xhcmF0aW9uKG5vZGUpO1xuICAgIH1cblxuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCBuID0+IHRoaXMudmlzaXROb2RlKG4pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Zpc2l0Q2xhc3NEZWNsYXJhdGlvbihub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKSB7XG4gICAgaWYgKCFub2RlLmRlY29yYXRvcnMgfHwgIW5vZGUuZGVjb3JhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZ0RlY29yYXRvcnMgPSBnZXRBbmd1bGFyRGVjb3JhdG9ycyh0aGlzLnR5cGVDaGVja2VyLCBub2RlLmRlY29yYXRvcnMpO1xuICAgIGNvbnN0IG5nTW9kdWxlRGVjb3JhdG9yID0gbmdEZWNvcmF0b3JzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ05nTW9kdWxlJyk7XG5cbiAgICBpZiAoaGFzRGlyZWN0aXZlRGVjb3JhdG9yKG5vZGUsIHRoaXMudHlwZUNoZWNrZXIsIG5nRGVjb3JhdG9ycykpIHtcbiAgICAgIHRoaXMuZGVjb3JhdGVkRGlyZWN0aXZlcy5wdXNoKG5vZGUpO1xuICAgIH0gZWxzZSBpZiAoaGFzSW5qZWN0YWJsZURlY29yYXRvcihub2RlLCB0aGlzLnR5cGVDaGVja2VyLCBuZ0RlY29yYXRvcnMpKSB7XG4gICAgICB0aGlzLmRlY29yYXRlZFByb3ZpZGVycy5wdXNoKG5vZGUpO1xuICAgIH0gZWxzZSBpZiAobmdNb2R1bGVEZWNvcmF0b3IpIHtcbiAgICAgIHRoaXMuX3Zpc2l0TmdNb2R1bGVEZWNvcmF0b3IobmdNb2R1bGVEZWNvcmF0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Zpc2l0TmdNb2R1bGVEZWNvcmF0b3IoZGVjb3JhdG9yOiBOZ0RlY29yYXRvcikge1xuICAgIGNvbnN0IGRlY29yYXRvckNhbGwgPSBkZWNvcmF0b3Iubm9kZS5leHByZXNzaW9uO1xuICAgIGNvbnN0IG1ldGFkYXRhID0gZGVjb3JhdG9yQ2FsbC5hcmd1bWVudHNbMF07XG5cbiAgICBpZiAoIW1ldGFkYXRhIHx8ICF0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKG1ldGFkYXRhKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlbnRyeUNvbXBvbmVudHNOb2RlOiB0cy5FeHByZXNzaW9ufG51bGwgPSBudWxsO1xuICAgIGxldCBkZWNsYXJhdGlvbnNOb2RlOiB0cy5FeHByZXNzaW9ufG51bGwgPSBudWxsO1xuXG4gICAgbWV0YWRhdGEucHJvcGVydGllcy5mb3JFYWNoKHAgPT4ge1xuICAgICAgaWYgKCF0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5hbWUgPSBnZXRQcm9wZXJ0eU5hbWVUZXh0KHAubmFtZSk7XG5cbiAgICAgIGlmIChuYW1lID09PSAnZW50cnlDb21wb25lbnRzJykge1xuICAgICAgICBlbnRyeUNvbXBvbmVudHNOb2RlID0gcC5pbml0aWFsaXplcjtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2RlY2xhcmF0aW9ucycpIHtcbiAgICAgICAgZGVjbGFyYXRpb25zTm9kZSA9IHAuaW5pdGlhbGl6ZXI7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcblxuICAgIC8vIEluIGNhc2UgdGhlIG1vZHVsZSBzcGVjaWZpZXMgdGhlIFwiZW50cnlDb21wb25lbnRzXCIgZmllbGQsIHdhbGsgdGhyb3VnaCBhbGxcbiAgICAvLyByZXNvbHZlZCBlbnRyeSBjb21wb25lbnRzIGFuZCBjb2xsZWN0IHRoZSByZWZlcmVuY2VkIGRpcmVjdGl2ZXMuXG4gICAgaWYgKGVudHJ5Q29tcG9uZW50c05vZGUpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHRoaXMuZXZhbHVhdG9yLmV2YWx1YXRlKGVudHJ5Q29tcG9uZW50c05vZGUpKTtcbiAgICB9XG5cbiAgICAvLyBJbiBjYXNlIHRoZSBtb2R1bGUgc3BlY2lmaWVzIHRoZSBcImRlY2xhcmF0aW9uc1wiIGZpZWxkLCB3YWxrIHRocm91Z2ggYWxsXG4gICAgLy8gcmVzb2x2ZWQgZGVjbGFyYXRpb25zIGFuZCBjb2xsZWN0IHRoZSByZWZlcmVuY2VkIGRpcmVjdGl2ZXMuXG4gICAgaWYgKGRlY2xhcmF0aW9uc05vZGUpIHtcbiAgICAgIHZhbHVlcy5wdXNoKHRoaXMuZXZhbHVhdG9yLmV2YWx1YXRlKGRlY2xhcmF0aW9uc05vZGUpKTtcbiAgICB9XG5cbiAgICAvLyBGbGF0dGVuIHZhbHVlcyBhbmQgYW5hbHl6ZSByZWZlcmVuY2VzXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMuZmxhdChJbmZpbml0eSkpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIHRoaXMuY29tcGlsZXJDbGlNaWdyYXRpb25zTW9kdWxlLlJlZmVyZW5jZSAmJlxuICAgICAgICAgIHRzLmlzQ2xhc3NEZWNsYXJhdGlvbih2YWx1ZS5ub2RlKSAmJlxuICAgICAgICAgICFoYXNOZ0RlY2xhcmF0aW9uRGVjb3JhdG9yKHZhbHVlLm5vZGUsIHRoaXMudHlwZUNoZWNrZXIpKSB7XG4gICAgICAgIHRoaXMudW5kZWNvcmF0ZWREZWNsYXJhdGlvbnMuYWRkKHZhbHVlLm5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgaGFzIHRoZSBcIkBEaXJlY3RpdmVcIiBvciBcIkBDb21wb25lbnRcIiBkZWNvcmF0b3Igc2V0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0RpcmVjdGl2ZURlY29yYXRvcihcbiAgICBub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIG5nRGVjb3JhdG9ycz86IE5nRGVjb3JhdG9yW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIChuZ0RlY29yYXRvcnMgfHwgZ2V0TmdDbGFzc0RlY29yYXRvcnMobm9kZSwgdHlwZUNoZWNrZXIpKVxuICAgICAgLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ0RpcmVjdGl2ZScgfHwgbmFtZSA9PT0gJ0NvbXBvbmVudCcpO1xufVxuXG5cblxuLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBub2RlIGhhcyB0aGUgXCJASW5qZWN0YWJsZVwiIGRlY29yYXRvciBzZXQuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzSW5qZWN0YWJsZURlY29yYXRvcihcbiAgICBub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIG5nRGVjb3JhdG9ycz86IE5nRGVjb3JhdG9yW10pOiBib29sZWFuIHtcbiAgcmV0dXJuIChuZ0RlY29yYXRvcnMgfHwgZ2V0TmdDbGFzc0RlY29yYXRvcnMobm9kZSwgdHlwZUNoZWNrZXIpKVxuICAgICAgLnNvbWUoKHtuYW1lfSkgPT4gbmFtZSA9PT0gJ0luamVjdGFibGUnKTtcbn1cbi8qKiBXaGV0aGVyIHRoZSBnaXZlbiBub2RlIGhhcyBhbiBleHBsaWNpdCBkZWNvcmF0b3IgdGhhdCBkZXNjcmliZXMgYW4gQW5ndWxhciBkZWNsYXJhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZ0RlY2xhcmF0aW9uRGVjb3JhdG9yKG5vZGU6IHRzLkNsYXNzRGVjbGFyYXRpb24sIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcikge1xuICByZXR1cm4gZ2V0TmdDbGFzc0RlY29yYXRvcnMobm9kZSwgdHlwZUNoZWNrZXIpXG4gICAgICAuc29tZSgoe25hbWV9KSA9PiBuYW1lID09PSAnQ29tcG9uZW50JyB8fCBuYW1lID09PSAnRGlyZWN0aXZlJyB8fCBuYW1lID09PSAnUGlwZScpO1xufVxuXG4vKiogR2V0cyBhbGwgQW5ndWxhciBkZWNvcmF0b3JzIG9mIGEgZ2l2ZW4gY2xhc3MgZGVjbGFyYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmdDbGFzc0RlY29yYXRvcnMoXG4gICAgbm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbiwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKTogTmdEZWNvcmF0b3JbXSB7XG4gIGlmICghbm9kZS5kZWNvcmF0b3JzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBnZXRBbmd1bGFyRGVjb3JhdG9ycyh0eXBlQ2hlY2tlciwgbm9kZS5kZWNvcmF0b3JzKTtcbn1cbiJdfQ==
@@ -1,97 +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/undecorated-classes-with-di/transform" />
9
- import type { AotCompiler } from '@angular/compiler';
10
- import ts from 'typescript';
11
- import { UpdateRecorder } from './update_recorder';
12
- export interface TransformFailure {
13
- node: ts.Node;
14
- message: string;
15
- }
16
- export declare class UndecoratedClassesTransform {
17
- private typeChecker;
18
- private compiler;
19
- private getUpdateRecorder;
20
- private compilerModule;
21
- private coreModule;
22
- private printer;
23
- private importManager;
24
- private decoratorRewriter;
25
- private compilerHost;
26
- private symbolResolver;
27
- private metadataResolver;
28
- /** Set of class declarations which have been decorated with "@Directive". */
29
- private decoratedDirectives;
30
- /** Set of class declarations which have been decorated with "@Injectable" */
31
- private decoratedProviders;
32
- /**
33
- * Set of class declarations which have been analyzed and need to specify
34
- * an explicit constructor.
35
- */
36
- private missingExplicitConstructorClasses;
37
- constructor(typeChecker: ts.TypeChecker, compiler: AotCompiler, getUpdateRecorder: (sf: ts.SourceFile) => UpdateRecorder, compilerModule: typeof import('@angular/compiler'), coreModule: typeof import('@angular/core'));
38
- /**
39
- * Migrates decorated directives which can potentially inherit a constructor
40
- * from an undecorated base class. All base classes until the first one
41
- * with an explicit constructor will be decorated with the abstract "@Directive()"
42
- * decorator. See case 1 in the migration plan: https://hackmd.io/@alx/S1XKqMZeS
43
- */
44
- migrateDecoratedDirectives(directives: ts.ClassDeclaration[]): TransformFailure[];
45
- /**
46
- * Migrates decorated providers which can potentially inherit a constructor
47
- * from an undecorated base class. All base classes until the first one
48
- * with an explicit constructor will be decorated with the "@Injectable()".
49
- */
50
- migrateDecoratedProviders(providers: ts.ClassDeclaration[]): TransformFailure[];
51
- private _migrateProviderBaseClass;
52
- private _migrateDirectiveBaseClass;
53
- private _migrateDecoratedClassWithInheritedCtor;
54
- /**
55
- * Adds the abstract "@Directive()" decorator to the given class in case there
56
- * is no existing directive decorator.
57
- */
58
- private _addAbstractDirectiveDecorator;
59
- /**
60
- * Adds the abstract "@Injectable()" decorator to the given class in case there
61
- * is no existing directive decorator.
62
- */
63
- private _addInjectableDecorator;
64
- /** Adds a comment for adding an explicit constructor to the given class declaration. */
65
- private _addMissingExplicitConstructorTodo;
66
- /**
67
- * Migrates undecorated directives which were referenced in NgModule declarations.
68
- * These directives inherit the metadata from a parent base class, but with Ivy
69
- * these classes need to explicitly have a decorator for locality. The migration
70
- * determines the inherited decorator and copies it to the undecorated declaration.
71
- *
72
- * Note that the migration serializes the metadata for external declarations
73
- * where the decorator is not part of the source file AST.
74
- *
75
- * See case 2 in the migration plan: https://hackmd.io/@alx/S1XKqMZeS
76
- */
77
- migrateUndecoratedDeclarations(directives: ts.ClassDeclaration[]): TransformFailure[];
78
- private _migrateDerivedDeclaration;
79
- /** Records all changes that were made in the import manager. */
80
- recordChanges(): void;
81
- /**
82
- * Constructs a TypeScript decorator node from the specified declaration metadata. Returns
83
- * null if the metadata could not be simplified/resolved.
84
- */
85
- private _constructDecoratorFromMetadata;
86
- /**
87
- * Resolves the declaration metadata of a given static symbol. The metadata
88
- * is determined by resolving metadata for the static symbol.
89
- */
90
- private _resolveDeclarationMetadata;
91
- private _getStaticSymbolOfIdentifier;
92
- /**
93
- * Disables that static symbols are resolved through summaries. Summaries
94
- * cannot be used for decorator analysis as decorators are omitted in summaries.
95
- */
96
- private _disableSummaryResolution;
97
- }