@angular/core 12.2.0-next.1 → 12.2.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 (162) hide show
  1. package/bundles/core-testing.umd.js +15 -4
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core.umd.js +94 -77
  4. package/bundles/core.umd.js.map +1 -1
  5. package/core.d.ts +12 -12
  6. package/core.metadata.json +1 -1
  7. package/esm2015/src/application_init.js +5 -5
  8. package/esm2015/src/application_ref.js +6 -2
  9. package/esm2015/src/change_detection/differs/iterable_differs.js +1 -1
  10. package/esm2015/src/compiler/compiler_facade.js +31 -8
  11. package/esm2015/src/compiler/compiler_facade_interface.js +1 -1
  12. package/esm2015/src/di/jit/injectable.js +4 -3
  13. package/esm2015/src/di/r3_injector.js +5 -2
  14. package/esm2015/src/error_handler.js +4 -8
  15. package/esm2015/src/errors.js +2 -2
  16. package/esm2015/src/event_emitter.js +1 -1
  17. package/esm2015/src/i18n/locale_en.js +4 -38
  18. package/esm2015/src/linker/component_factory_resolver.js +1 -1
  19. package/esm2015/src/linker/template_ref.js +1 -1
  20. package/esm2015/src/linker/view_container_ref.js +1 -1
  21. package/esm2015/src/metadata/di.js +1 -1
  22. package/esm2015/src/render3/component_ref.js +1 -1
  23. package/esm2015/src/render3/definition.js +1 -1
  24. package/esm2015/src/render3/instructions/shared.js +2 -1
  25. package/esm2015/src/render3/jit/directive.js +6 -5
  26. package/esm2015/src/render3/jit/module.js +7 -4
  27. package/esm2015/src/render3/jit/partial.js +27 -9
  28. package/esm2015/src/render3/jit/pipe.js +5 -3
  29. package/esm2015/src/render3/ng_module_ref.js +1 -1
  30. package/esm2015/src/render3/view_ref.js +1 -1
  31. package/esm2015/src/sanitization/bypass.js +1 -1
  32. package/esm2015/src/version.js +1 -1
  33. package/esm2015/src/view/entrypoint.js +1 -1
  34. package/esm2015/src/view/refs.js +1 -1
  35. package/esm2015/testing/src/ng_zone_mock.js +1 -1
  36. package/esm2015/testing/src/r3_test_bed_compiler.js +4 -1
  37. package/esm2015/testing/src/resolvers.js +1 -1
  38. package/esm2015/testing/src/test_bed.js +12 -4
  39. package/fesm2015/core.js +95 -78
  40. package/fesm2015/core.js.map +1 -1
  41. package/fesm2015/testing.js +15 -4
  42. package/fesm2015/testing.js.map +1 -1
  43. package/package.json +2 -2
  44. package/schematics/migrations/missing-injectable/providers_evaluator.js +1 -1
  45. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js +1 -1
  46. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js +1 -1
  47. package/schematics/migrations.json +1 -1
  48. package/src/r3_symbols.d.ts +2 -3
  49. package/testing/testing.d.ts +2 -1
  50. package/testing/testing.metadata.json +1 -1
  51. package/testing.d.ts +1 -1
  52. package/schematics/migrations/abstract-control-parent/abstract-control-parent.externs.js +0 -0
  53. package/schematics/migrations/abstract-control-parent/index.mjs +0 -47
  54. package/schematics/migrations/abstract-control-parent/util.mjs +0 -50
  55. package/schematics/migrations/activated-route-snapshot-fragment/activated-route-snapshot-fragment.externs.js +0 -0
  56. package/schematics/migrations/activated-route-snapshot-fragment/index.mjs +0 -48
  57. package/schematics/migrations/activated-route-snapshot-fragment/util.mjs +0 -33
  58. package/schematics/migrations/can-activate-with-redirect-to/can-activate-with-redirect-to.externs.js +0 -0
  59. package/schematics/migrations/can-activate-with-redirect-to/index.mjs +0 -44
  60. package/schematics/migrations/can-activate-with-redirect-to/util.mjs +0 -55
  61. package/schematics/migrations/deep-shadow-piercing-selector/deep-shadow-piercing-selector.externs.js +0 -0
  62. package/schematics/migrations/deep-shadow-piercing-selector/index.mjs +0 -36
  63. package/schematics/migrations/dynamic-queries/dynamic-queries.externs.js +0 -0
  64. package/schematics/migrations/dynamic-queries/index.mjs +0 -51
  65. package/schematics/migrations/dynamic-queries/util.mjs +0 -65
  66. package/schematics/migrations/initial-navigation/collector.mjs +0 -105
  67. package/schematics/migrations/initial-navigation/index.mjs +0 -61
  68. package/schematics/migrations/initial-navigation/initial-navigation.externs.js +0 -0
  69. package/schematics/migrations/initial-navigation/transform.mjs +0 -54
  70. package/schematics/migrations/initial-navigation/update_recorder.mjs +0 -9
  71. package/schematics/migrations/initial-navigation/util.mjs +0 -28
  72. package/schematics/migrations/missing-injectable/definition_collector.mjs +0 -75
  73. package/schematics/migrations/missing-injectable/index.mjs +0 -100
  74. package/schematics/migrations/missing-injectable/missing-injectable.externs.js +0 -0
  75. package/schematics/migrations/missing-injectable/providers_evaluator.mjs +0 -50
  76. package/schematics/migrations/missing-injectable/transform.mjs +0 -187
  77. package/schematics/migrations/missing-injectable/update_recorder.mjs +0 -9
  78. package/schematics/migrations/module-with-providers/collector.mjs +0 -59
  79. package/schematics/migrations/module-with-providers/index.mjs +0 -71
  80. package/schematics/migrations/module-with-providers/module-with-providers.externs.js +0 -0
  81. package/schematics/migrations/module-with-providers/transform.mjs +0 -134
  82. package/schematics/migrations/module-with-providers/util.mjs +0 -25
  83. package/schematics/migrations/move-document/document_import_visitor.mjs +0 -60
  84. package/schematics/migrations/move-document/index.mjs +0 -71
  85. package/schematics/migrations/move-document/move-document.externs.js +0 -0
  86. package/schematics/migrations/move-document/move-import.mjs +0 -45
  87. package/schematics/migrations/native-view-encapsulation/index.mjs +0 -41
  88. package/schematics/migrations/native-view-encapsulation/native-view-encapsulation.externs.js +0 -0
  89. package/schematics/migrations/native-view-encapsulation/util.mjs +0 -34
  90. package/schematics/migrations/navigation-extras-omissions/index.mjs +0 -47
  91. package/schematics/migrations/navigation-extras-omissions/navigation-extras-omissions.externs.js +0 -0
  92. package/schematics/migrations/navigation-extras-omissions/util.mjs +0 -111
  93. package/schematics/migrations/relative-link-resolution/collector.mjs +0 -81
  94. package/schematics/migrations/relative-link-resolution/index.mjs +0 -62
  95. package/schematics/migrations/relative-link-resolution/relative-link-resolution.externs.js +0 -0
  96. package/schematics/migrations/relative-link-resolution/transform.mjs +0 -51
  97. package/schematics/migrations/relative-link-resolution/update_recorder.mjs +0 -9
  98. package/schematics/migrations/relative-link-resolution/util.mjs +0 -28
  99. package/schematics/migrations/renderer-to-renderer2/helpers.mjs +0 -224
  100. package/schematics/migrations/renderer-to-renderer2/index.mjs +0 -113
  101. package/schematics/migrations/renderer-to-renderer2/migration.mjs +0 -211
  102. package/schematics/migrations/renderer-to-renderer2/renderer-to-renderer2.externs.js +0 -0
  103. package/schematics/migrations/renderer-to-renderer2/util.mjs +0 -69
  104. package/schematics/migrations/router-preserve-query-params/index.mjs +0 -50
  105. package/schematics/migrations/router-preserve-query-params/router-preserve-query-params.externs.js +0 -0
  106. package/schematics/migrations/router-preserve-query-params/util.mjs +0 -88
  107. package/schematics/migrations/static-queries/angular/directive_inputs.mjs +0 -70
  108. package/schematics/migrations/static-queries/angular/ng_query_visitor.mjs +0 -113
  109. package/schematics/migrations/static-queries/angular/query-definition.mjs +0 -20
  110. package/schematics/migrations/static-queries/angular/super_class.mjs +0 -21
  111. package/schematics/migrations/static-queries/index.mjs +0 -206
  112. package/schematics/migrations/static-queries/static-queries.externs.js +0 -0
  113. package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.mjs +0 -200
  114. package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.mjs +0 -24
  115. package/schematics/migrations/static-queries/strategies/timing-strategy.mjs +0 -9
  116. package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.mjs +0 -355
  117. package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.mjs +0 -38
  118. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.mjs +0 -80
  119. package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.mjs +0 -154
  120. package/schematics/migrations/static-queries/transform.mjs +0 -88
  121. package/schematics/migrations/template-var-assignment/analyze_template.mjs +0 -25
  122. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.mjs +0 -65
  123. package/schematics/migrations/template-var-assignment/index.mjs +0 -68
  124. package/schematics/migrations/template-var-assignment/template-var-assignment.externs.js +0 -0
  125. package/schematics/migrations/undecorated-classes-with-decorated-fields/index.mjs +0 -92
  126. package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.mjs +0 -286
  127. package/schematics/migrations/undecorated-classes-with-decorated-fields/undecorated-classes-with-decorated-fields.externs.js +0 -0
  128. package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.mjs +0 -9
  129. package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.mjs +0 -43
  130. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.mjs +0 -82
  131. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.mjs +0 -102
  132. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.mjs +0 -111
  133. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.mjs +0 -17
  134. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.mjs +0 -51
  135. package/schematics/migrations/undecorated-classes-with-di/index.mjs +0 -162
  136. package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.mjs +0 -124
  137. package/schematics/migrations/undecorated-classes-with-di/transform.mjs +0 -356
  138. package/schematics/migrations/undecorated-classes-with-di/undecorated-classes-with-di.externs.js +0 -0
  139. package/schematics/migrations/undecorated-classes-with-di/update_recorder.mjs +0 -9
  140. package/schematics/migrations/wait-for-async/index.mjs +0 -76
  141. package/schematics/migrations/wait-for-async/util.mjs +0 -23
  142. package/schematics/migrations/wait-for-async/wait-for-async.externs.js +0 -0
  143. package/schematics/migrations/xhr-factory/index.mjs +0 -91
  144. package/schematics/migrations/xhr-factory/xhr-factory.externs.js +0 -0
  145. package/schematics/utils/import_manager.mjs +0 -197
  146. package/schematics/utils/line_mappings.mjs +0 -60
  147. package/schematics/utils/ng_component_template.mjs +0 -96
  148. package/schematics/utils/ng_decorators.mjs +0 -23
  149. package/schematics/utils/parse_html.mjs +0 -24
  150. package/schematics/utils/project_tsconfig_paths.mjs +0 -74
  151. package/schematics/utils/schematics_prompt.mjs +0 -30
  152. package/schematics/utils/typescript/class_declaration.mjs +0 -33
  153. package/schematics/utils/typescript/compiler_host.mjs +0 -66
  154. package/schematics/utils/typescript/decorators.mjs +0 -20
  155. package/schematics/utils/typescript/find_base_classes.mjs +0 -30
  156. package/schematics/utils/typescript/functions.mjs +0 -28
  157. package/schematics/utils/typescript/imports.mjs +0 -91
  158. package/schematics/utils/typescript/nodes.mjs +0 -57
  159. package/schematics/utils/typescript/parse_tsconfig.mjs +0 -26
  160. package/schematics/utils/typescript/property_name.mjs +0 -23
  161. package/schematics/utils/typescript/symbol.mjs +0 -72
  162. package/schematics/utils/utils.externs.js +0 -0
@@ -1,286 +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
- import { PartialEvaluator } from '@angular/compiler-cli/src/ngtsc/partial_evaluator';
9
- import { reflectObjectLiteral, TypeScriptReflectionHost } from '@angular/compiler-cli/src/ngtsc/reflection';
10
- import * as ts from 'typescript';
11
- import { ImportManager } from '../../utils/import_manager';
12
- import { getAngularDecorators } from '../../utils/ng_decorators';
13
- import { findBaseClassDeclarations } from '../../utils/typescript/find_base_classes';
14
- import { unwrapExpression } from '../../utils/typescript/functions';
15
- import { getPropertyNameText } from '../../utils/typescript/property_name';
16
- /**
17
- * Set of known decorators that indicate that the current class needs a directive
18
- * definition. These decorators are always specific to directives.
19
- */
20
- const DIRECTIVE_FIELD_DECORATORS = new Set([
21
- 'Input', 'Output', 'ViewChild', 'ViewChildren', 'ContentChild', 'ContentChildren', 'HostBinding',
22
- 'HostListener'
23
- ]);
24
- /**
25
- * Set of known lifecycle hooks that indicate that the current class needs a directive
26
- * definition. These lifecycle hooks are always specific to directives.
27
- */
28
- const DIRECTIVE_LIFECYCLE_HOOKS = new Set([
29
- 'ngOnChanges', 'ngOnInit', 'ngDoCheck', 'ngAfterViewInit', 'ngAfterViewChecked',
30
- 'ngAfterContentInit', 'ngAfterContentChecked'
31
- ]);
32
- /**
33
- * Set of known lifecycle hooks that indicate that a given class uses Angular
34
- * features, but it's ambiguous whether it is a directive or service.
35
- */
36
- const AMBIGUOUS_LIFECYCLE_HOOKS = new Set(['ngOnDestroy']);
37
- /** Describes how a given class is used in the context of Angular. */
38
- var InferredKind;
39
- (function (InferredKind) {
40
- InferredKind[InferredKind["DIRECTIVE"] = 0] = "DIRECTIVE";
41
- InferredKind[InferredKind["AMBIGUOUS"] = 1] = "AMBIGUOUS";
42
- InferredKind[InferredKind["UNKNOWN"] = 2] = "UNKNOWN";
43
- })(InferredKind || (InferredKind = {}));
44
- /** Describes possible types of Angular declarations. */
45
- var DeclarationType;
46
- (function (DeclarationType) {
47
- DeclarationType[DeclarationType["DIRECTIVE"] = 0] = "DIRECTIVE";
48
- DeclarationType[DeclarationType["COMPONENT"] = 1] = "COMPONENT";
49
- DeclarationType[DeclarationType["ABSTRACT_DIRECTIVE"] = 2] = "ABSTRACT_DIRECTIVE";
50
- DeclarationType[DeclarationType["PIPE"] = 3] = "PIPE";
51
- DeclarationType[DeclarationType["INJECTABLE"] = 4] = "INJECTABLE";
52
- })(DeclarationType || (DeclarationType = {}));
53
- /** TODO message that is added to ambiguous classes using Angular features. */
54
- const AMBIGUOUS_CLASS_TODO = 'Add Angular decorator.';
55
- export class UndecoratedClassesWithDecoratedFieldsTransform {
56
- constructor(typeChecker, getUpdateRecorder) {
57
- this.typeChecker = typeChecker;
58
- this.getUpdateRecorder = getUpdateRecorder;
59
- this.printer = ts.createPrinter();
60
- this.importManager = new ImportManager(this.getUpdateRecorder, this.printer);
61
- this.reflectionHost = new TypeScriptReflectionHost(this.typeChecker);
62
- this.partialEvaluator = new PartialEvaluator(this.reflectionHost, this.typeChecker, null);
63
- }
64
- /**
65
- * Migrates the specified source files. The transform adds the abstract `@Directive`
66
- * decorator to undecorated classes that use Angular features. Class members which
67
- * are decorated with any Angular decorator, or class members for lifecycle hooks are
68
- * indicating that a given class uses Angular features. https://hackmd.io/vuQfavzfRG6KUCtU7oK_EA
69
- */
70
- migrate(sourceFiles) {
71
- const { detectedAbstractDirectives, ambiguousClasses } = this._findUndecoratedAbstractDirectives(sourceFiles);
72
- detectedAbstractDirectives.forEach(node => {
73
- const sourceFile = node.getSourceFile();
74
- const recorder = this.getUpdateRecorder(sourceFile);
75
- const directiveExpr = this.importManager.addImportToSourceFile(sourceFile, 'Directive', '@angular/core');
76
- const decoratorExpr = ts.createDecorator(ts.createCall(directiveExpr, undefined, undefined));
77
- recorder.addClassDecorator(node, this.printer.printNode(ts.EmitHint.Unspecified, decoratorExpr, sourceFile));
78
- });
79
- // Ambiguous classes clearly use Angular features, but the migration is unable to
80
- // determine whether the class is used as directive, service or pipe. The migration
81
- // could potentially determine the type by checking NgModule definitions or inheritance
82
- // of other known declarations, but this is out of scope and a TODO/failure is sufficient.
83
- return Array.from(ambiguousClasses).reduce((failures, node) => {
84
- // If the class has been reported as ambiguous before, skip adding a TODO and
85
- // printing an error. A class could be visited multiple times when it's part
86
- // of multiple build targets in the CLI project.
87
- if (this._hasBeenReportedAsAmbiguous(node)) {
88
- return failures;
89
- }
90
- const sourceFile = node.getSourceFile();
91
- const recorder = this.getUpdateRecorder(sourceFile);
92
- // Add a TODO to the class that uses Angular features but is not decorated.
93
- recorder.addClassTodo(node, AMBIGUOUS_CLASS_TODO);
94
- // Add an error for the class that will be printed in the `ng update` output.
95
- return failures.concat({
96
- node,
97
- message: 'Class uses Angular features but cannot be migrated automatically. Please ' +
98
- 'add an appropriate Angular decorator.'
99
- });
100
- }, []);
101
- }
102
- /** Records all changes that were made in the import manager. */
103
- recordChanges() {
104
- this.importManager.recordChanges();
105
- }
106
- /**
107
- * Finds undecorated abstract directives in the specified source files. Also returns
108
- * a set of undecorated classes which could not be detected as guaranteed abstract
109
- * directives. Those are ambiguous and could be either Directive, Pipe or service.
110
- */
111
- _findUndecoratedAbstractDirectives(sourceFiles) {
112
- const ambiguousClasses = new Set();
113
- const declarations = new WeakMap();
114
- const detectedAbstractDirectives = new Set();
115
- const undecoratedClasses = new Set();
116
- const visitNode = (node) => {
117
- node.forEachChild(visitNode);
118
- if (!ts.isClassDeclaration(node)) {
119
- return;
120
- }
121
- const { inferredKind, decoratedType } = this._analyzeClassDeclaration(node);
122
- if (decoratedType !== null) {
123
- declarations.set(node, decoratedType);
124
- return;
125
- }
126
- if (inferredKind === InferredKind.DIRECTIVE) {
127
- detectedAbstractDirectives.add(node);
128
- }
129
- else if (inferredKind === InferredKind.AMBIGUOUS) {
130
- ambiguousClasses.add(node);
131
- }
132
- else {
133
- undecoratedClasses.add(node);
134
- }
135
- };
136
- sourceFiles.forEach(sourceFile => sourceFile.forEachChild(visitNode));
137
- /**
138
- * Checks the inheritance of the given set of classes. It removes classes from the
139
- * detected abstract directives set when they inherit from a non-abstract Angular
140
- * declaration. e.g. an abstract directive can never extend from a component.
141
- *
142
- * If a class inherits from an abstract directive though, we will migrate them too
143
- * as derived classes also need to be decorated. This has been done for a simpler mental
144
- * model and reduced complexity in the Angular compiler. See migration plan document.
145
- */
146
- const checkInheritanceOfClasses = (classes) => {
147
- classes.forEach(node => {
148
- for (const { node: baseClass } of findBaseClassDeclarations(node, this.typeChecker)) {
149
- if (!declarations.has(baseClass)) {
150
- continue;
151
- }
152
- // If the undecorated class inherits from an abstract directive, always migrate it.
153
- // Derived undecorated classes of abstract directives are always also considered
154
- // abstract directives and need to be decorated too. This is necessary as otherwise
155
- // the inheritance chain cannot be resolved by the Angular compiler. e.g. when it
156
- // flattens directive metadata for type checking. In the other case, we never want
157
- // to migrate a class if it extends from a non-abstract Angular declaration. That
158
- // is an unsupported pattern as of v9 and was previously handled with the
159
- // `undecorated-classes-with-di` migration (which copied the inherited decorator).
160
- if (declarations.get(baseClass) === DeclarationType.ABSTRACT_DIRECTIVE) {
161
- detectedAbstractDirectives.add(node);
162
- }
163
- else {
164
- detectedAbstractDirectives.delete(node);
165
- }
166
- ambiguousClasses.delete(node);
167
- break;
168
- }
169
- });
170
- };
171
- // Check inheritance of any detected abstract directive. We want to remove
172
- // classes that are not eligible abstract directives due to inheritance. i.e.
173
- // if a class extends from a component, it cannot be a derived abstract directive.
174
- checkInheritanceOfClasses(detectedAbstractDirectives);
175
- // Update the class declarations to reflect the detected abstract directives. This is
176
- // then used later when we check for undecorated classes that inherit from an abstract
177
- // directive and need to be decorated.
178
- detectedAbstractDirectives.forEach(n => declarations.set(n, DeclarationType.ABSTRACT_DIRECTIVE));
179
- // Check ambiguous and undecorated classes if they inherit from an abstract directive.
180
- // If they do, we want to migrate them too. See function definition for more details.
181
- checkInheritanceOfClasses(ambiguousClasses);
182
- checkInheritanceOfClasses(undecoratedClasses);
183
- return { detectedAbstractDirectives, ambiguousClasses };
184
- }
185
- /**
186
- * Analyzes the given class declaration by determining whether the class
187
- * is a directive, is an abstract directive, or uses Angular features.
188
- */
189
- _analyzeClassDeclaration(node) {
190
- const ngDecorators = node.decorators && getAngularDecorators(this.typeChecker, node.decorators);
191
- const inferredKind = this._determineClassKind(node);
192
- if (ngDecorators === undefined || ngDecorators.length === 0) {
193
- return { decoratedType: null, inferredKind };
194
- }
195
- const directiveDecorator = ngDecorators.find(({ name }) => name === 'Directive');
196
- const componentDecorator = ngDecorators.find(({ name }) => name === 'Component');
197
- const pipeDecorator = ngDecorators.find(({ name }) => name === 'Pipe');
198
- const injectableDecorator = ngDecorators.find(({ name }) => name === 'Injectable');
199
- const isAbstractDirective = directiveDecorator !== undefined && this._isAbstractDirective(directiveDecorator);
200
- let decoratedType = null;
201
- if (isAbstractDirective) {
202
- decoratedType = DeclarationType.ABSTRACT_DIRECTIVE;
203
- }
204
- else if (componentDecorator !== undefined) {
205
- decoratedType = DeclarationType.COMPONENT;
206
- }
207
- else if (directiveDecorator !== undefined) {
208
- decoratedType = DeclarationType.DIRECTIVE;
209
- }
210
- else if (pipeDecorator !== undefined) {
211
- decoratedType = DeclarationType.PIPE;
212
- }
213
- else if (injectableDecorator !== undefined) {
214
- decoratedType = DeclarationType.INJECTABLE;
215
- }
216
- return { decoratedType, inferredKind };
217
- }
218
- /**
219
- * Checks whether the given decorator resolves to an abstract directive. An directive is
220
- * considered "abstract" if there is no selector specified.
221
- */
222
- _isAbstractDirective({ node }) {
223
- const metadataArgs = node.expression.arguments;
224
- if (metadataArgs.length === 0) {
225
- return true;
226
- }
227
- const metadataExpr = unwrapExpression(metadataArgs[0]);
228
- if (!ts.isObjectLiteralExpression(metadataExpr)) {
229
- return false;
230
- }
231
- const metadata = reflectObjectLiteral(metadataExpr);
232
- if (!metadata.has('selector')) {
233
- return false;
234
- }
235
- const selector = this.partialEvaluator.evaluate(metadata.get('selector'));
236
- return selector == null;
237
- }
238
- /**
239
- * Determines the kind of a given class in terms of Angular. The method checks
240
- * whether the given class has members that indicate the use of Angular features.
241
- * e.g. lifecycle hooks or decorated members like `@Input` or `@Output` are
242
- * considered Angular features..
243
- */
244
- _determineClassKind(node) {
245
- let usage = InferredKind.UNKNOWN;
246
- for (const member of node.members) {
247
- const propertyName = member.name !== undefined ? getPropertyNameText(member.name) : null;
248
- // If the class declares any of the known directive lifecycle hooks, we can
249
- // immediately exit the loop as the class is guaranteed to be a directive.
250
- if (propertyName !== null && DIRECTIVE_LIFECYCLE_HOOKS.has(propertyName)) {
251
- return InferredKind.DIRECTIVE;
252
- }
253
- const ngDecorators = member.decorators !== undefined ?
254
- getAngularDecorators(this.typeChecker, member.decorators) :
255
- [];
256
- for (const { name } of ngDecorators) {
257
- if (DIRECTIVE_FIELD_DECORATORS.has(name)) {
258
- return InferredKind.DIRECTIVE;
259
- }
260
- }
261
- // If the class declares any of the lifecycle hooks that do not guarantee that
262
- // the given class is a directive, update the kind and continue looking for other
263
- // members that would unveil a more specific kind (i.e. being a directive).
264
- if (propertyName !== null && AMBIGUOUS_LIFECYCLE_HOOKS.has(propertyName)) {
265
- usage = InferredKind.AMBIGUOUS;
266
- }
267
- }
268
- return usage;
269
- }
270
- /**
271
- * Checks whether a given class has been reported as ambiguous in previous
272
- * migration run. e.g. when build targets are migrated first, and then test
273
- * targets that have an overlap with build source files, the same class
274
- * could be detected as ambiguous.
275
- */
276
- _hasBeenReportedAsAmbiguous(node) {
277
- const sourceFile = node.getSourceFile();
278
- const leadingComments = ts.getLeadingCommentRanges(sourceFile.text, node.pos);
279
- if (leadingComments === undefined) {
280
- return false;
281
- }
282
- return leadingComments.some(({ kind, pos, end }) => kind === ts.SyntaxKind.SingleLineCommentTrivia &&
283
- sourceFile.text.substring(pos, end).includes(`TODO: ${AMBIGUOUS_CLASS_TODO}`));
284
- }
285
- }
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRlY29yYXRlZC1maWVsZHMvdHJhbnNmb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzFHLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsb0JBQW9CLEVBQWMsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUl6RTs7O0dBR0c7QUFDSCxNQUFNLDBCQUEwQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsYUFBYTtJQUNoRyxjQUFjO0NBQ2YsQ0FBQyxDQUFDO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUN4QyxhQUFhLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0I7SUFDL0Usb0JBQW9CLEVBQUUsdUJBQXVCO0NBQzlDLENBQUMsQ0FBQztBQUVIOzs7R0FHRztBQUNILE1BQU0seUJBQXlC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akMsSUFBSSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hDLE9BQU8sWUFBWSxDQUFDLFNBQVMsQ0FBQztpQkFDL0I7YUFDRjtZQUVELDhFQUE4RTtZQUM5RSxpRkFBaUY7WUFDakYsMkVBQTJFO1lBQzNFLElBQUksWUFBWSxLQUFLLElBQUksSUFBSSx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3hFLEtBQUssR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO2FBQ2hDO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLDJCQUEyQixDQUFDLElBQXlCO1FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUUsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ2pDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQ3ZCLENBQUMsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUI7WUFDaEUsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1BhcnRpYWxFdmFsdWF0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcGFydGlhbF9ldmFsdWF0b3InO1xuaW1wb3J0IHtyZWZsZWN0T2JqZWN0TGl0ZXJhbCwgVHlwZVNjcmlwdFJlZmxlY3Rpb25Ib3N0fSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3JlZmxlY3Rpb24nO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7SW1wb3J0TWFuYWdlcn0gZnJvbSAnLi4vLi4vdXRpbHMvaW1wb3J0X21hbmFnZXInO1xuaW1wb3J0IHtnZXRBbmd1bGFyRGVjb3JhdG9ycywgTmdEZWNvcmF0b3J9IGZyb20gJy4uLy4uL3V0aWxzL25nX2RlY29yYXRvcnMnO1xuaW1wb3J0IHtmaW5kQmFzZUNsYXNzRGVjbGFyYXRpb25zfSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L2ZpbmRfYmFzZV9jbGFzc2VzJztcbmltcG9ydCB7dW53cmFwRXhwcmVzc2lvbn0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9mdW5jdGlvbnMnO1xuaW1wb3J0IHtnZXRQcm9wZXJ0eU5hbWVUZXh0fSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L3Byb3BlcnR5X25hbWUnO1xuXG5pbXBvcnQge1VwZGF0ZVJlY29yZGVyfSBmcm9tICcuL3VwZGF0ZV9yZWNvcmRlcic7XG5cbi8qKlxuICogU2V0IG9mIGtub3duIGRlY29yYXRvcnMgdGhhdCBpbmRpY2F0ZSB0aGF0IHRoZSBjdXJyZW50IGNsYXNzIG5lZWRzIGEgZGlyZWN0aXZlXG4gKiBkZWZpbml0aW9uLiBUaGVzZSBkZWNvcmF0b3JzIGFyZSBhbHdheXMgc3BlY2lmaWMgdG8gZGlyZWN0aXZlcy5cbiAqL1xuY29uc3QgRElSRUNUSVZFX0ZJRUxEX0RFQ09SQVRPUlMgPSBuZXcgU2V0KFtcbiAgJ0lucHV0JywgJ091dHB1dCcsICdWaWV3Q2hpbGQnLCAnVmlld0NoaWxkcmVuJywgJ0NvbnRlbnRDaGlsZCcsICdDb250ZW50Q2hpbGRyZW4nLCAnSG9zdEJpbmRpbmcnLFxuICAnSG9zdExpc3RlbmVyJ1xuXSk7XG5cbi8qKlxuICogU2V0IG9mIGtub3duIGxpZmVjeWNsZSBob29rcyB0aGF0IGluZGljYXRlIHRoYXQgdGhlIGN1cnJlbnQgY2xhc3MgbmVlZHMgYSBkaXJlY3RpdmVcbiAqIGRlZmluaXRpb24uIFRoZXNlIGxpZmVjeWNsZSBob29rcyBhcmUgYWx3YXlzIHNwZWNpZmljIHRvIGRpcmVjdGl2ZXMuXG4gKi9cbmNvbnN0IERJUkVDVElWRV9MSUZFQ1lDTEVfSE9PS1MgPSBuZXcgU2V0KFtcbiAgJ25nT25DaGFuZ2VzJywgJ25nT25Jbml0JywgJ25nRG9DaGVjaycsICduZ0FmdGVyVmlld0luaXQnLCAnbmdBZnRlclZpZXdDaGVja2VkJyxcbiAgJ25nQWZ0ZXJDb250ZW50SW5pdCcsICduZ0FmdGVyQ29udGVudENoZWNrZWQnXG5dKTtcblxuLyoqXG4gKiBTZXQgb2Yga25vd24gbGlmZWN5Y2xlIGhvb2tzIHRoYXQgaW5kaWNhdGUgdGhhdCBhIGdpdmVuIGNsYXNzIHVzZXMgQW5ndWxhclxuICogZmVhdHVyZXMsIGJ1dCBpdCdzIGFtYmlndW91cyB3aGV0aGVyIGl0IGlzIGEgZGlyZWN0aXZlIG9yIHNlcnZpY2UuXG4gKi9cbmNvbnN0IEFNQklHVU9VU19MSUZFQ1lDTEVfSE9PS1MgPSBuZXcgU2V0KFsnbmdPbkRlc3Ryb3knXSk7XG5cbi8qKiBEZXNjcmliZXMgaG93IGEgZ2l2ZW4gY2xhc3MgaXMgdXNlZCBpbiB0aGUgY29udGV4dCBvZiBBbmd1bGFyLiAqL1xuZW51bSBJbmZlcnJlZEtpbmQge1xuICBESVJFQ1RJVkUsXG4gIEFNQklHVU9VUyxcbiAgVU5LTk9XTixcbn1cblxuLyoqIERlc2NyaWJlcyBwb3NzaWJsZSB0eXBlcyBvZiBBbmd1bGFyIGRlY2xhcmF0aW9ucy4gKi9cbmVudW0gRGVjbGFyYXRpb25UeXBlIHtcbiAgRElSRUNUSVZFLFxuICBDT01QT05FTlQsXG4gIEFCU1RSQUNUX0RJUkVDVElWRSxcbiAgUElQRSxcbiAgSU5KRUNUQUJMRSxcbn1cblxuLyoqIEFuYWx5emVkIGNsYXNzIGRlY2xhcmF0aW9uLiAqL1xuaW50ZXJmYWNlIEFuYWx5emVkQ2xhc3Mge1xuICAvKiogVHlwZSBvZiBkZWNsYXJhdGlvbiB0aGF0IGlzIGRldGVybWluZWQgdGhyb3VnaCBhbiBhcHBsaWVkIGRlY29yYXRvci4gKi9cbiAgZGVjb3JhdGVkVHlwZTogRGVjbGFyYXRpb25UeXBlfG51bGw7XG4gIC8qKiBJbmZlcnJlZCBjbGFzcyBraW5kIGluIHRlcm1zIG9mIEFuZ3VsYXIuICovXG4gIGluZmVycmVkS2luZDogSW5mZXJyZWRLaW5kO1xufVxuXG5pbnRlcmZhY2UgQW5hbHlzaXNGYWlsdXJlIHtcbiAgbm9kZTogdHMuTm9kZTtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKiogVE9ETyBtZXNzYWdlIHRoYXQgaXMgYWRkZWQgdG8gYW1iaWd1b3VzIGNsYXNzZXMgdXNpbmcgQW5ndWxhciBmZWF0dXJlcy4gKi9cbmNvbnN0IEFNQklHVU9VU19DTEFTU19UT0RPID0gJ0FkZCBBbmd1bGFyIGRlY29yYXRvci4nO1xuXG5leHBvcnQgY2xhc3MgVW5kZWNvcmF0ZWRDbGFzc2VzV2l0aERlY29yYXRlZEZpZWxkc1RyYW5zZm9ybSB7XG4gIHByaXZhdGUgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoKTtcbiAgcHJpdmF0ZSBpbXBvcnRNYW5hZ2VyID0gbmV3IEltcG9ydE1hbmFnZXIodGhpcy5nZXRVcGRhdGVSZWNvcmRlciwgdGhpcy5wcmludGVyKTtcbiAgcHJpdmF0ZSByZWZsZWN0aW9uSG9zdCA9IG5ldyBUeXBlU2NyaXB0UmVmbGVjdGlvbkhvc3QodGhpcy50eXBlQ2hlY2tlcik7XG4gIHByaXZhdGUgcGFydGlhbEV2YWx1YXRvciA9IG5ldyBQYXJ0aWFsRXZhbHVhdG9yKHRoaXMucmVmbGVjdGlvbkhvc3QsIHRoaXMudHlwZUNoZWNrZXIsIG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgICBwcml2YXRlIGdldFVwZGF0ZVJlY29yZGVyOiAoc2Y6IHRzLlNvdXJjZUZpbGUpID0+IFVwZGF0ZVJlY29yZGVyKSB7fVxuXG4gIC8qKlxuICAgKiBNaWdyYXRlcyB0aGUgc3BlY2lmaWVkIHNvdXJjZSBmaWxlcy4gVGhlIHRyYW5zZm9ybSBhZGRzIHRoZSBhYnN0cmFjdCBgQERpcmVjdGl2ZWBcbiAgICogZGVjb3JhdG9yIHRvIHVuZGVjb3JhdGVkIGNsYXNzZXMgdGhhdCB1c2UgQW5ndWxhciBmZWF0dXJlcy4gQ2xhc3MgbWVtYmVycyB3aGljaFxuICAgKiBhcmUgZGVjb3JhdGVkIHdpdGggYW55IEFuZ3VsYXIgZGVjb3JhdG9yLCBvciBjbGFzcyBtZW1iZXJzIGZvciBsaWZlY3ljbGUgaG9va3MgYXJlXG4gICAqIGluZGljYXRpbmcgdGhhdCBhIGdpdmVuIGNsYXNzIHVzZXMgQW5ndWxhciBmZWF0dXJlcy4gaHR0cHM6Ly9oYWNrbWQuaW8vdnVRZmF2emZSRzZLVUN0VTdvS19FQVxuICAgKi9cbiAgbWlncmF0ZShzb3VyY2VGaWxlczogdHMuU291cmNlRmlsZVtdKTogQW5hbHlzaXNGYWlsdXJlW10ge1xuICAgIGNvbnN0IHtkZXRlY3RlZEFic3RyYWN0RGlyZWN0aXZlcywgYW1iaWd1b3VzQ2xhc3Nlc30gPVxuICAgICAgICB0aGlzLl9maW5kVW5kZWNvcmF0ZWRBYnN0cmFjdERpcmVjdGl2ZXMoc291cmNlRmlsZXMpO1xuXG4gICAgZGV0ZWN0ZWRBYnN0cmFjdERpcmVjdGl2ZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgICAgIGNvbnN0IHJlY29yZGVyID0gdGhpcy5nZXRVcGRhdGVSZWNvcmRlcihzb3VyY2VGaWxlKTtcbiAgICAgIGNvbnN0IGRpcmVjdGl2ZUV4cHIgPVxuICAgICAgICAgIHRoaXMuaW1wb3J0TWFuYWdlci5hZGRJbXBvcnRUb1NvdXJjZUZpbGUoc291cmNlRmlsZSwgJ0RpcmVjdGl2ZScsICdAYW5ndWxhci9jb3JlJyk7XG4gICAgICBjb25zdCBkZWNvcmF0b3JFeHByID0gdHMuY3JlYXRlRGVjb3JhdG9yKHRzLmNyZWF0ZUNhbGwoZGlyZWN0aXZlRXhwciwgdW5kZWZpbmVkLCB1bmRlZmluZWQpKTtcbiAgICAgIHJlY29yZGVyLmFkZENsYXNzRGVjb3JhdG9yKFxuICAgICAgICAgIG5vZGUsIHRoaXMucHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIGRlY29yYXRvckV4cHIsIHNvdXJjZUZpbGUpKTtcbiAgICB9KTtcblxuICAgIC8vIEFtYmlndW91cyBjbGFzc2VzIGNsZWFybHkgdXNlIEFuZ3VsYXIgZmVhdHVyZXMsIGJ1dCB0aGUgbWlncmF0aW9uIGlzIHVuYWJsZSB0b1xuICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHRoZSBjbGFzcyBpcyB1c2VkIGFzIGRpcmVjdGl2ZSwgc2VydmljZSBvciBwaXBlLiBUaGUgbWlncmF0aW9uXG4gICAgLy8gY291bGQgcG90ZW50aWFsbHkgZGV0ZXJtaW5lIHRoZSB0eXBlIGJ5IGNoZWNraW5nIE5nTW9kdWxlIGRlZmluaXRpb25zIG9yIGluaGVyaXRhbmNlXG4gICAgLy8gb2Ygb3RoZXIga25vd24gZGVjbGFyYXRpb25zLCBidXQgdGhpcyBpcyBvdXQgb2Ygc2NvcGUgYW5kIGEgVE9ETy9mYWlsdXJlIGlzIHN1ZmZpY2llbnQuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oYW1iaWd1b3VzQ2xhc3NlcykucmVkdWNlKChmYWlsdXJlcywgbm9kZSkgPT4ge1xuICAgICAgLy8gSWYgdGhlIGNsYXNzIGhhcyBiZWVuIHJlcG9ydGVkIGFzIGFtYmlndW91cyBiZWZvcmUsIHNraXAgYWRkaW5nIGEgVE9ETyBhbmRcbiAgICAgIC8vIHByaW50aW5nIGFuIGVycm9yLiBBIGNsYXNzIGNvdWxkIGJlIHZpc2l0ZWQgbXVsdGlwbGUgdGltZXMgd2hlbiBpdCdzIHBhcnRcbiAgICAgIC8vIG9mIG11bHRpcGxlIGJ1aWxkIHRhcmdldHMgaW4gdGhlIENMSSBwcm9qZWN0LlxuICAgICAgaWYgKHRoaXMuX2hhc0JlZW5SZXBvcnRlZEFzQW1iaWd1b3VzKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWlsdXJlcztcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlRmlsZSA9IG5vZGUuZ2V0U291cmNlRmlsZSgpO1xuICAgICAgY29uc3QgcmVjb3JkZXIgPSB0aGlzLmdldFVwZGF0ZVJlY29yZGVyKHNvdXJjZUZpbGUpO1xuXG4gICAgICAvLyBBZGQgYSBUT0RPIHRvIHRoZSBjbGFzcyB0aGF0IHVzZXMgQW5ndWxhciBmZWF0dXJlcyBidXQgaXMgbm90IGRlY29yYXRlZC5cbiAgICAgIHJlY29yZGVyLmFkZENsYXNzVG9kbyhub2RlLCBBTUJJR1VPVVNfQ0xBU1NfVE9ETyk7XG5cbiAgICAgIC8vIEFkZCBhbiBlcnJvciBmb3IgdGhlIGNsYXNzIHRoYXQgd2lsbCBiZSBwcmludGVkIGluIHRoZSBgbmcgdXBkYXRlYCBvdXRwdXQuXG4gICAgICByZXR1cm4gZmFpbHVyZXMuY29uY2F0KHtcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbWVzc2FnZTogJ0NsYXNzIHVzZXMgQW5ndWxhciBmZWF0dXJlcyBidXQgY2Fubm90IGJlIG1pZ3JhdGVkIGF1dG9tYXRpY2FsbHkuIFBsZWFzZSAnICtcbiAgICAgICAgICAgICdhZGQgYW4gYXBwcm9wcmlhdGUgQW5ndWxhciBkZWNvcmF0b3IuJ1xuICAgICAgfSk7XG4gICAgfSwgW10gYXMgQW5hbHlzaXNGYWlsdXJlW10pO1xuICB9XG5cbiAgLyoqIFJlY29yZHMgYWxsIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgaW4gdGhlIGltcG9ydCBtYW5hZ2VyLiAqL1xuICByZWNvcmRDaGFuZ2VzKCkge1xuICAgIHRoaXMuaW1wb3J0TWFuYWdlci5yZWNvcmRDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdW5kZWNvcmF0ZWQgYWJzdHJhY3QgZGlyZWN0aXZlcyBpbiB0aGUgc3BlY2lmaWVkIHNvdXJjZSBmaWxlcy4gQWxzbyByZXR1cm5zXG4gICAqIGEgc2V0IG9mIHVuZGVjb3JhdGVkIGNsYXNzZXMgd2hpY2ggY291bGQgbm90IGJlIGRldGVjdGVkIGFzIGd1YXJhbnRlZWQgYWJzdHJhY3RcbiAgICogZGlyZWN0aXZlcy4gVGhvc2UgYXJlIGFtYmlndW91cyBhbmQgY291bGQgYmUgZWl0aGVyIERpcmVjdGl2ZSwgUGlwZSBvciBzZXJ2aWNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmluZFVuZGVjb3JhdGVkQWJzdHJhY3REaXJlY3RpdmVzKHNvdXJjZUZpbGVzOiB0cy5Tb3VyY2VGaWxlW10pIHtcbiAgICBjb25zdCBhbWJpZ3VvdXNDbGFzc2VzID0gbmV3IFNldDx0cy5DbGFzc0RlY2xhcmF0aW9uPigpO1xuICAgIGNvbnN0IGRlY2xhcmF0aW9ucyA9IG5ldyBXZWFrTWFwPHRzLkNsYXNzRGVjbGFyYXRpb24sIERlY2xhcmF0aW9uVHlwZT4oKTtcbiAgICBjb25zdCBkZXRlY3RlZEFic3RyYWN0RGlyZWN0aXZlcyA9IG5ldyBTZXQ8dHMuQ2xhc3NEZWNsYXJhdGlvbj4oKTtcbiAgICBjb25zdCB1bmRlY29yYXRlZENsYXNzZXMgPSBuZXcgU2V0PHRzLkNsYXNzRGVjbGFyYXRpb24+KCk7XG5cbiAgICBjb25zdCB2aXNpdE5vZGUgPSAobm9kZTogdHMuTm9kZSkgPT4ge1xuICAgICAgbm9kZS5mb3JFYWNoQ2hpbGQodmlzaXROb2RlKTtcbiAgICAgIGlmICghdHMuaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtpbmZlcnJlZEtpbmQsIGRlY29yYXRlZFR5cGV9ID0gdGhpcy5fYW5hbHl6ZUNsYXNzRGVjbGFyYXRpb24obm9kZSk7XG5cbiAgICAgIGlmIChkZWNvcmF0ZWRUeXBlICE9PSBudWxsKSB7XG4gICAgICAgIGRlY2xhcmF0aW9ucy5zZXQobm9kZSwgZGVjb3JhdGVkVHlwZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZmVycmVkS2luZCA9PT0gSW5mZXJyZWRLaW5kLkRJUkVDVElWRSkge1xuICAgICAgICBkZXRlY3RlZEFic3RyYWN0RGlyZWN0aXZlcy5hZGQobm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKGluZmVycmVkS2luZCA9PT0gSW5mZXJyZWRLaW5kLkFNQklHVU9VUykge1xuICAgICAgICBhbWJpZ3VvdXNDbGFzc2VzLmFkZChub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVuZGVjb3JhdGVkQ2xhc3Nlcy5hZGQobm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNvdXJjZUZpbGVzLmZvckVhY2goc291cmNlRmlsZSA9PiBzb3VyY2VGaWxlLmZvckVhY2hDaGlsZCh2aXNpdE5vZGUpKTtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB0aGUgaW5oZXJpdGFuY2Ugb2YgdGhlIGdpdmVuIHNldCBvZiBjbGFzc2VzLiBJdCByZW1vdmVzIGNsYXNzZXMgZnJvbSB0aGVcbiAgICAgKiBkZXRlY3RlZCBhYnN0cmFjdCBkaXJlY3RpdmVzIHNldCB3aGVuIHRoZXkgaW5oZXJpdCBmcm9tIGEgbm9uLWFic3RyYWN0IEFuZ3VsYXJcbiAgICAgKiBkZWNsYXJhdGlvbi4gZS5nLiBhbiBhYnN0cmFjdCBkaXJlY3RpdmUgY2FuIG5ldmVyIGV4dGVuZCBmcm9tIGEgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogSWYgYSBjbGFzcyBpbmhlcml0cyBmcm9tIGFuIGFic3RyYWN0IGRpcmVjdGl2ZSB0aG91Z2gsIHdlIHdpbGwgbWlncmF0ZSB0aGVtIHRvb1xuICAgICAqIGFzIGRlcml2ZWQgY2xhc3NlcyBhbHNvIG5lZWQgdG8gYmUgZGVjb3JhdGVkLiBUaGlzIGhhcyBiZWVuIGRvbmUgZm9yIGEgc2ltcGxlciBtZW50YWxcbiAgICAgKiBtb2RlbCBhbmQgcmVkdWNlZCBjb21wbGV4aXR5IGluIHRoZSBBbmd1bGFyIGNvbXBpbGVyLiBTZWUgbWlncmF0aW9uIHBsYW4gZG9jdW1lbnQuXG4gICAgICovXG4gICAgY29uc3QgY2hlY2tJbmhlcml0YW5jZU9mQ2xhc3NlcyA9IChjbGFzc2VzOiBTZXQ8dHMuQ2xhc3NEZWNsYXJhdGlvbj4pID0+IHtcbiAgICAgIGNsYXNzZXMuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB7bm9kZTogYmFzZUNsYXNzfSBvZiBmaW5kQmFzZUNsYXNzRGVjbGFyYXRpb25zKG5vZGUsIHRoaXMudHlwZUNoZWNrZXIpKSB7XG4gICAgICAgICAgaWYgKCFkZWNsYXJhdGlvbnMuaGFzKGJhc2VDbGFzcykpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBJZiB0aGUgdW5kZWNvcmF0ZWQgY2xhc3MgaW5oZXJpdHMgZnJvbSBhbiBhYnN0cmFjdCBkaXJlY3RpdmUsIGFsd2F5cyBtaWdyYXRlIGl0LlxuICAgICAgICAgIC8vIERlcml2ZWQgdW5kZWNvcmF0ZWQgY2xhc3NlcyBvZiBhYnN0cmFjdCBkaXJlY3RpdmVzIGFyZSBhbHdheXMgYWxzbyBjb25zaWRlcmVkXG4gICAgICAgICAgLy8gYWJzdHJhY3QgZGlyZWN0aXZlcyBhbmQgbmVlZCB0byBiZSBkZWNvcmF0ZWQgdG9vLiBUaGlzIGlzIG5lY2Vzc2FyeSBhcyBvdGhlcndpc2VcbiAgICAgICAgICAvLyB0aGUgaW5oZXJpdGFuY2UgY2hhaW4gY2Fubm90IGJlIHJlc29sdmVkIGJ5IHRoZSBBbmd1bGFyIGNvbXBpbGVyLiBlLmcuIHdoZW4gaXRcbiAgICAgICAgICAvLyBmbGF0dGVucyBkaXJlY3RpdmUgbWV0YWRhdGEgZm9yIHR5cGUgY2hlY2tpbmcuIEluIHRoZSBvdGhlciBjYXNlLCB3ZSBuZXZlciB3YW50XG4gICAgICAgICAgLy8gdG8gbWlncmF0ZSBhIGNsYXNzIGlmIGl0IGV4dGVuZHMgZnJvbSBhIG5vbi1hYnN0cmFjdCBBbmd1bGFyIGRlY2xhcmF0aW9uLiBUaGF0XG4gICAgICAgICAgLy8gaXMgYW4gdW5zdXBwb3J0ZWQgcGF0dGVybiBhcyBvZiB2OSBhbmQgd2FzIHByZXZpb3VzbHkgaGFuZGxlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGB1bmRlY29yYXRlZC1jbGFzc2VzLXdpdGgtZGlgIG1pZ3JhdGlvbiAod2hpY2ggY29waWVkIHRoZSBpbmhlcml0ZWQgZGVjb3JhdG9yKS5cbiAgICAgICAgICBpZiAoZGVjbGFyYXRpb25zLmdldChiYXNlQ2xhc3MpID09PSBEZWNsYXJhdGlvblR5cGUuQUJTVFJBQ1RfRElSRUNUSVZFKSB7XG4gICAgICAgICAgICBkZXRlY3RlZEFic3RyYWN0RGlyZWN0aXZlcy5hZGQobm9kZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRldGVjdGVkQWJzdHJhY3REaXJlY3RpdmVzLmRlbGV0ZShub2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYW1iaWd1b3VzQ2xhc3Nlcy5kZWxldGUobm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBDaGVjayBpbmhlcml0YW5jZSBvZiBhbnkgZGV0ZWN0ZWQgYWJzdHJhY3QgZGlyZWN0aXZlLiBXZSB3YW50IHRvIHJlbW92ZVxuICAgIC8vIGNsYXNzZXMgdGhhdCBhcmUgbm90IGVsaWdpYmxlIGFic3RyYWN0IGRpcmVjdGl2ZXMgZHVlIHRvIGluaGVyaXRhbmNlLiBpLmUuXG4gICAgLy8gaWYgYSBjbGFzcyBleHRlbmRzIGZyb20gYSBjb21wb25lbnQsIGl0IGNhbm5vdCBiZSBhIGRlcml2ZWQgYWJzdHJhY3QgZGlyZWN0aXZlLlxuICAgIGNoZWNrSW5oZXJpdGFuY2VPZkNsYXNzZXMoZGV0ZWN0ZWRBYnN0cmFjdERpcmVjdGl2ZXMpO1xuICAgIC8vIFVwZGF0ZSB0aGUgY2xhc3MgZGVjbGFyYXRpb25zIHRvIHJlZmxlY3QgdGhlIGRldGVjdGVkIGFic3RyYWN0IGRpcmVjdGl2ZXMuIFRoaXMgaXNcbiAgICAvLyB0aGVuIHVzZWQgbGF0ZXIgd2hlbiB3ZSBjaGVjayBmb3IgdW5kZWNvcmF0ZWQgY2xhc3NlcyB0aGF0IGluaGVyaXQgZnJvbSBhbiBhYnN0cmFjdFxuICAgIC8vIGRpcmVjdGl2ZSBhbmQgbmVlZCB0byBiZSBkZWNvcmF0ZWQuXG4gICAgZGV0ZWN0ZWRBYnN0cmFjdERpcmVjdGl2ZXMuZm9yRWFjaChcbiAgICAgICAgbiA9PiBkZWNsYXJhdGlvbnMuc2V0KG4sIERlY2xhcmF0aW9uVHlwZS5BQlNUUkFDVF9ESVJFQ1RJVkUpKTtcbiAgICAvLyBDaGVjayBhbWJpZ3VvdXMgYW5kIHVuZGVjb3JhdGVkIGNsYXNzZXMgaWYgdGhleSBpbmhlcml0IGZyb20gYW4gYWJzdHJhY3QgZGlyZWN0aXZlLlxuICAgIC8vIElmIHRoZXkgZG8sIHdlIHdhbnQgdG8gbWlncmF0ZSB0aGVtIHRvby4gU2VlIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIG1vcmUgZGV0YWlscy5cbiAgICBjaGVja0luaGVyaXRhbmNlT2ZDbGFzc2VzKGFtYmlndW91c0NsYXNzZXMpO1xuICAgIGNoZWNrSW5oZXJpdGFuY2VPZkNsYXNzZXModW5kZWNvcmF0ZWRDbGFzc2VzKTtcblxuICAgIHJldHVybiB7ZGV0ZWN0ZWRBYnN0cmFjdERpcmVjdGl2ZXMsIGFtYmlndW91c0NsYXNzZXN9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFuYWx5emVzIHRoZSBnaXZlbiBjbGFzcyBkZWNsYXJhdGlvbiBieSBkZXRlcm1pbmluZyB3aGV0aGVyIHRoZSBjbGFzc1xuICAgKiBpcyBhIGRpcmVjdGl2ZSwgaXMgYW4gYWJzdHJhY3QgZGlyZWN0aXZlLCBvciB1c2VzIEFuZ3VsYXIgZmVhdHVyZXMuXG4gICAqL1xuICBwcml2YXRlIF9hbmFseXplQ2xhc3NEZWNsYXJhdGlvbihub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogQW5hbHl6ZWRDbGFzcyB7XG4gICAgY29uc3QgbmdEZWNvcmF0b3JzID0gbm9kZS5kZWNvcmF0b3JzICYmIGdldEFuZ3VsYXJEZWNvcmF0b3JzKHRoaXMudHlwZUNoZWNrZXIsIG5vZGUuZGVjb3JhdG9ycyk7XG4gICAgY29uc3QgaW5mZXJyZWRLaW5kID0gdGhpcy5fZGV0ZXJtaW5lQ2xhc3NLaW5kKG5vZGUpO1xuICAgIGlmIChuZ0RlY29yYXRvcnMgPT09IHVuZGVmaW5lZCB8fCBuZ0RlY29yYXRvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4ge2RlY29yYXRlZFR5cGU6IG51bGwsIGluZmVycmVkS2luZH07XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGl2ZURlY29yYXRvciA9IG5nRGVjb3JhdG9ycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT09ICdEaXJlY3RpdmUnKTtcbiAgICBjb25zdCBjb21wb25lbnREZWNvcmF0b3IgPSBuZ0RlY29yYXRvcnMuZmluZCgoe25hbWV9KSA9PiBuYW1lID09PSAnQ29tcG9uZW50Jyk7XG4gICAgY29uc3QgcGlwZURlY29yYXRvciA9IG5nRGVjb3JhdG9ycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT09ICdQaXBlJyk7XG4gICAgY29uc3QgaW5qZWN0YWJsZURlY29yYXRvciA9IG5nRGVjb3JhdG9ycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT09ICdJbmplY3RhYmxlJyk7XG4gICAgY29uc3QgaXNBYnN0cmFjdERpcmVjdGl2ZSA9XG4gICAgICAgIGRpcmVjdGl2ZURlY29yYXRvciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2lzQWJzdHJhY3REaXJlY3RpdmUoZGlyZWN0aXZlRGVjb3JhdG9yKTtcblxuICAgIGxldCBkZWNvcmF0ZWRUeXBlOiBEZWNsYXJhdGlvblR5cGV8bnVsbCA9IG51bGw7XG4gICAgaWYgKGlzQWJzdHJhY3REaXJlY3RpdmUpIHtcbiAgICAgIGRlY29yYXRlZFR5cGUgPSBEZWNsYXJhdGlvblR5cGUuQUJTVFJBQ1RfRElSRUNUSVZFO1xuICAgIH0gZWxzZSBpZiAoY29tcG9uZW50RGVjb3JhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlY29yYXRlZFR5cGUgPSBEZWNsYXJhdGlvblR5cGUuQ09NUE9ORU5UO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aXZlRGVjb3JhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlY29yYXRlZFR5cGUgPSBEZWNsYXJhdGlvblR5cGUuRElSRUNUSVZFO1xuICAgIH0gZWxzZSBpZiAocGlwZURlY29yYXRvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWNvcmF0ZWRUeXBlID0gRGVjbGFyYXRpb25UeXBlLlBJUEU7XG4gICAgfSBlbHNlIGlmIChpbmplY3RhYmxlRGVjb3JhdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlY29yYXRlZFR5cGUgPSBEZWNsYXJhdGlvblR5cGUuSU5KRUNUQUJMRTtcbiAgICB9XG4gICAgcmV0dXJuIHtkZWNvcmF0ZWRUeXBlLCBpbmZlcnJlZEtpbmR9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBkZWNvcmF0b3IgcmVzb2x2ZXMgdG8gYW4gYWJzdHJhY3QgZGlyZWN0aXZlLiBBbiBkaXJlY3RpdmUgaXNcbiAgICogY29uc2lkZXJlZCBcImFic3RyYWN0XCIgaWYgdGhlcmUgaXMgbm8gc2VsZWN0b3Igc3BlY2lmaWVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfaXNBYnN0cmFjdERpcmVjdGl2ZSh7bm9kZX06IE5nRGVjb3JhdG9yKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWV0YWRhdGFBcmdzID0gbm9kZS5leHByZXNzaW9uLmFyZ3VtZW50cztcbiAgICBpZiAobWV0YWRhdGFBcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IG1ldGFkYXRhRXhwciA9IHVud3JhcEV4cHJlc3Npb24obWV0YWRhdGFBcmdzWzBdKTtcbiAgICBpZiAoIXRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24obWV0YWRhdGFFeHByKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBtZXRhZGF0YSA9IHJlZmxlY3RPYmplY3RMaXRlcmFsKG1ldGFkYXRhRXhwcik7XG4gICAgaWYgKCFtZXRhZGF0YS5oYXMoJ3NlbGVjdG9yJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLnBhcnRpYWxFdmFsdWF0b3IuZXZhbHVhdGUobWV0YWRhdGEuZ2V0KCdzZWxlY3RvcicpISk7XG4gICAgcmV0dXJuIHNlbGVjdG9yID09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUga2luZCBvZiBhIGdpdmVuIGNsYXNzIGluIHRlcm1zIG9mIEFuZ3VsYXIuIFRoZSBtZXRob2QgY2hlY2tzXG4gICAqIHdoZXRoZXIgdGhlIGdpdmVuIGNsYXNzIGhhcyBtZW1iZXJzIHRoYXQgaW5kaWNhdGUgdGhlIHVzZSBvZiBBbmd1bGFyIGZlYXR1cmVzLlxuICAgKiBlLmcuIGxpZmVjeWNsZSBob29rcyBvciBkZWNvcmF0ZWQgbWVtYmVycyBsaWtlIGBASW5wdXRgIG9yIGBAT3V0cHV0YCBhcmVcbiAgICogY29uc2lkZXJlZCBBbmd1bGFyIGZlYXR1cmVzLi5cbiAgICovXG4gIHByaXZhdGUgX2RldGVybWluZUNsYXNzS2luZChub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogSW5mZXJyZWRLaW5kIHtcbiAgICBsZXQgdXNhZ2UgPSBJbmZlcnJlZEtpbmQuVU5LTk9XTjtcblxuICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIG5vZGUubWVtYmVycykge1xuICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gbWVtYmVyLm5hbWUgIT09IHVuZGVmaW5lZCA/IGdldFByb3BlcnR5TmFtZVRleHQobWVtYmVyLm5hbWUpIDogbnVsbDtcblxuICAgICAgLy8gSWYgdGhlIGNsYXNzIGRlY2xhcmVzIGFueSBvZiB0aGUga25vd24gZGlyZWN0aXZlIGxpZmVjeWNsZSBob29rcywgd2UgY2FuXG4gICAgICAvLyBpbW1lZGlhdGVseSBleGl0IHRoZSBsb29wIGFzIHRoZSBjbGFzcyBpcyBndWFyYW50ZWVkIHRvIGJlIGEgZGlyZWN0aXZlLlxuICAgICAgaWYgKHByb3BlcnR5TmFtZSAhPT0gbnVsbCAmJiBESVJFQ1RJVkVfTElGRUNZQ0xFX0hPT0tTLmhhcyhwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBJbmZlcnJlZEtpbmQuRElSRUNUSVZFO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZ0RlY29yYXRvcnMgPSBtZW1iZXIuZGVjb3JhdG9ycyAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICBnZXRBbmd1bGFyRGVjb3JhdG9ycyh0aGlzLnR5cGVDaGVja2VyLCBtZW1iZXIuZGVjb3JhdG9ycykgOlxuICAgICAgICAgIFtdO1xuICAgICAgZm9yIChjb25zdCB7bmFtZX0gb2YgbmdEZWNvcmF0b3JzKSB7XG4gICAgICAgIGlmIChESVJFQ1RJVkVfRklFTERfREVDT1JBVE9SUy5oYXMobmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gSW5mZXJyZWRLaW5kLkRJUkVDVElWRTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgY2xhc3MgZGVjbGFyZXMgYW55IG9mIHRoZSBsaWZlY3ljbGUgaG9va3MgdGhhdCBkbyBub3QgZ3VhcmFudGVlIHRoYXRcbiAgICAgIC8vIHRoZSBnaXZlbiBjbGFzcyBpcyBhIGRpcmVjdGl2ZSwgdXBkYXRlIHRoZSBraW5kIGFuZCBjb250aW51ZSBsb29raW5nIGZvciBvdGhlclxuICAgICAgLy8gbWVtYmVycyB0aGF0IHdvdWxkIHVudmVpbCBhIG1vcmUgc3BlY2lmaWMga2luZCAoaS5lLiBiZWluZyBhIGRpcmVjdGl2ZSkuXG4gICAgICBpZiAocHJvcGVydHlOYW1lICE9PSBudWxsICYmIEFNQklHVU9VU19MSUZFQ1lDTEVfSE9PS1MuaGFzKHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgdXNhZ2UgPSBJbmZlcnJlZEtpbmQuQU1CSUdVT1VTO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1c2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIGNsYXNzIGhhcyBiZWVuIHJlcG9ydGVkIGFzIGFtYmlndW91cyBpbiBwcmV2aW91c1xuICAgKiBtaWdyYXRpb24gcnVuLiBlLmcuIHdoZW4gYnVpbGQgdGFyZ2V0cyBhcmUgbWlncmF0ZWQgZmlyc3QsIGFuZCB0aGVuIHRlc3RcbiAgICogdGFyZ2V0cyB0aGF0IGhhdmUgYW4gb3ZlcmxhcCB3aXRoIGJ1aWxkIHNvdXJjZSBmaWxlcywgdGhlIHNhbWUgY2xhc3NcbiAgICogY291bGQgYmUgZGV0ZWN0ZWQgYXMgYW1iaWd1b3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBfaGFzQmVlblJlcG9ydGVkQXNBbWJpZ3VvdXMobm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgICBjb25zdCBsZWFkaW5nQ29tbWVudHMgPSB0cy5nZXRMZWFkaW5nQ29tbWVudFJhbmdlcyhzb3VyY2VGaWxlLnRleHQsIG5vZGUucG9zKTtcbiAgICBpZiAobGVhZGluZ0NvbW1lbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGxlYWRpbmdDb21tZW50cy5zb21lKFxuICAgICAgICAoe2tpbmQsIHBvcywgZW5kfSkgPT4ga2luZCA9PT0gdHMuU3ludGF4S2luZC5TaW5nbGVMaW5lQ29tbWVudFRyaXZpYSAmJlxuICAgICAgICAgICAgc291cmNlRmlsZS50ZXh0LnN1YnN0cmluZyhwb3MsIGVuZCkuaW5jbHVkZXMoYFRPRE86ICR7QU1CSUdVT1VTX0NMQVNTX1RPRE99YCkpO1xuICB9XG59XG4iXX0=
@@ -1,9 +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
- export {};
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlX3JlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRlY29yYXRlZC1maWVsZHMvdXBkYXRlX3JlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7SW1wb3J0TWFuYWdlclVwZGF0ZVJlY29yZGVyfSBmcm9tICcuLi8uLi91dGlscy9pbXBvcnRfbWFuYWdlcic7XG5cbi8qKlxuICogVXBkYXRlIHJlY29yZGVyIGludGVyZmFjZSB0aGF0IGlzIHVzZWQgdG8gdHJhbnNmb3JtIHNvdXJjZSBmaWxlc1xuICogaW4gYSBub24tY29sbGlkaW5nIHdheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVSZWNvcmRlciBleHRlbmRzIEltcG9ydE1hbmFnZXJVcGRhdGVSZWNvcmRlciB7XG4gIGFkZENsYXNzRGVjb3JhdG9yKG5vZGU6IHRzLkNsYXNzRGVjbGFyYXRpb24sIHRleHQ6IHN0cmluZyk6IHZvaWQ7XG4gIGFkZENsYXNzVG9kbyhub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xuICBjb21taXRVcGRhdGUoKTogdm9pZDtcbn1cbiJdfQ==
@@ -1,43 +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
- import { createProgram, readConfiguration } from '@angular/compiler-cli';
9
- /** Creates an NGC program that can be used to read and parse metadata for files. */
10
- export function createNgcProgram(createHost, tsconfigPath) {
11
- const { rootNames, options } = readConfiguration(tsconfigPath);
12
- // https://github.com/angular/angular/commit/ec4381dd401f03bded652665b047b6b90f2b425f made Ivy
13
- // the default. This breaks the assumption that "createProgram" from compiler-cli returns the
14
- // NGC program. In order to ensure that the migration runs properly, we set "enableIvy" to false.
15
- options.enableIvy = false;
16
- // Libraries which have been generated with CLI versions past v6.2.0, explicitly set the
17
- // flat-module options in their tsconfig files. This is problematic because by default,
18
- // those tsconfig files do not specify explicit source files which can be considered as
19
- // entry point for the flat-module bundle. Therefore the `@angular/compiler-cli` is unable
20
- // to determine the flat module entry point and throws a compile error. This is not an issue
21
- // for the libraries built with `ng-packagr`, because the tsconfig files are modified in-memory
22
- // to specify an explicit flat module entry-point. Our migrations don't distinguish between
23
- // libraries and applications, and also don't run `ng-packagr`. To ensure that such libraries
24
- // can be successfully migrated, we remove the flat-module options to eliminate the flat module
25
- // entry-point requirement. More context: https://github.com/angular/angular/issues/34985.
26
- options.flatModuleId = undefined;
27
- options.flatModuleOutFile = undefined;
28
- const host = createHost(options);
29
- // For this migration, we never need to read resources and can just return
30
- // an empty string for requested resources. We need to handle requested resources
31
- // because our created NGC compiler program does not know about special resolutions
32
- // which are set up by the Angular CLI. i.e. resolving stylesheets through "tilde".
33
- host.readResource = () => '';
34
- host.resourceNameToFileName = () => '$fake-file$';
35
- const ngcProgram = createProgram({ rootNames, options, host });
36
- // The "AngularCompilerProgram" does not expose the "AotCompiler" instance, nor does it
37
- // expose the logic that is necessary to analyze the determined modules. We work around
38
- // this by just accessing the necessary private properties using the bracket notation.
39
- const compiler = ngcProgram['compiler'];
40
- const program = ngcProgram.getTsProgram();
41
- return { host, ngcProgram, program, compiler };
42
- }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX25nY19wcm9ncmFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRpL2NyZWF0ZV9uZ2NfcHJvZ3JhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFHSCxPQUFPLEVBQWUsYUFBYSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFHckYsb0ZBQW9GO0FBQ3BGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FDNUIsVUFBeUQsRUFBRSxZQUFvQjtJQUNqRixNQUFNLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBQyxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTdELDhGQUE4RjtJQUM5Riw2RkFBNkY7SUFDN0YsaUdBQWlHO0lBQ2pHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRTFCLHdGQUF3RjtJQUN4Rix1RkFBdUY7SUFDdkYsdUZBQXVGO0lBQ3ZGLDBGQUEwRjtJQUMxRiw0RkFBNEY7SUFDNUYsK0ZBQStGO0lBQy9GLDJGQUEyRjtJQUMzRiw2RkFBNkY7SUFDN0YsK0ZBQStGO0lBQy9GLDBGQUEwRjtJQUMxRixPQUFPLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztJQUNqQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO0lBRXRDLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVqQywwRUFBMEU7SUFDMUUsaUZBQWlGO0lBQ2pGLG1GQUFtRjtJQUNuRixtRkFBbUY7SUFDbkYsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDN0IsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUVsRCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsRUFBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7SUFFN0QsdUZBQXVGO0lBQ3ZGLHVGQUF1RjtJQUN2RixzRkFBc0Y7SUFDdEYsTUFBTSxRQUFRLEdBQWlCLFVBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBRTFDLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QW90Q29tcGlsZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7Q29tcGlsZXJIb3N0LCBjcmVhdGVQcm9ncmFtLCByZWFkQ29uZmlndXJhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKiogQ3JlYXRlcyBhbiBOR0MgcHJvZ3JhbSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlYWQgYW5kIHBhcnNlIG1ldGFkYXRhIGZvciBmaWxlcy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZ2NQcm9ncmFtKFxuICAgIGNyZWF0ZUhvc3Q6IChvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMpID0+IENvbXBpbGVySG9zdCwgdHNjb25maWdQYXRoOiBzdHJpbmcpIHtcbiAgY29uc3Qge3Jvb3ROYW1lcywgb3B0aW9uc30gPSByZWFkQ29uZmlndXJhdGlvbih0c2NvbmZpZ1BhdGgpO1xuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvY29tbWl0L2VjNDM4MWRkNDAxZjAzYmRlZDY1MjY2NWIwNDdiNmI5MGYyYjQyNWYgbWFkZSBJdnlcbiAgLy8gdGhlIGRlZmF1bHQuIFRoaXMgYnJlYWtzIHRoZSBhc3N1bXB0aW9uIHRoYXQgXCJjcmVhdGVQcm9ncmFtXCIgZnJvbSBjb21waWxlci1jbGkgcmV0dXJucyB0aGVcbiAgLy8gTkdDIHByb2dyYW0uIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRoZSBtaWdyYXRpb24gcnVucyBwcm9wZXJseSwgd2Ugc2V0IFwiZW5hYmxlSXZ5XCIgdG8gZmFsc2UuXG4gIG9wdGlvbnMuZW5hYmxlSXZ5ID0gZmFsc2U7XG5cbiAgLy8gTGlicmFyaWVzIHdoaWNoIGhhdmUgYmVlbiBnZW5lcmF0ZWQgd2l0aCBDTEkgdmVyc2lvbnMgcGFzdCB2Ni4yLjAsIGV4cGxpY2l0bHkgc2V0IHRoZVxuICAvLyBmbGF0LW1vZHVsZSBvcHRpb25zIGluIHRoZWlyIHRzY29uZmlnIGZpbGVzLiBUaGlzIGlzIHByb2JsZW1hdGljIGJlY2F1c2UgYnkgZGVmYXVsdCxcbiAgLy8gdGhvc2UgdHNjb25maWcgZmlsZXMgZG8gbm90IHNwZWNpZnkgZXhwbGljaXQgc291cmNlIGZpbGVzIHdoaWNoIGNhbiBiZSBjb25zaWRlcmVkIGFzXG4gIC8vIGVudHJ5IHBvaW50IGZvciB0aGUgZmxhdC1tb2R1bGUgYnVuZGxlLiBUaGVyZWZvcmUgdGhlIGBAYW5ndWxhci9jb21waWxlci1jbGlgIGlzIHVuYWJsZVxuICAvLyB0byBkZXRlcm1pbmUgdGhlIGZsYXQgbW9kdWxlIGVudHJ5IHBvaW50IGFuZCB0aHJvd3MgYSBjb21waWxlIGVycm9yLiBUaGlzIGlzIG5vdCBhbiBpc3N1ZVxuICAvLyBmb3IgdGhlIGxpYnJhcmllcyBidWlsdCB3aXRoIGBuZy1wYWNrYWdyYCwgYmVjYXVzZSB0aGUgdHNjb25maWcgZmlsZXMgYXJlIG1vZGlmaWVkIGluLW1lbW9yeVxuICAvLyB0byBzcGVjaWZ5IGFuIGV4cGxpY2l0IGZsYXQgbW9kdWxlIGVudHJ5LXBvaW50LiBPdXIgbWlncmF0aW9ucyBkb24ndCBkaXN0aW5ndWlzaCBiZXR3ZWVuXG4gIC8vIGxpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zLCBhbmQgYWxzbyBkb24ndCBydW4gYG5nLXBhY2thZ3JgLiBUbyBlbnN1cmUgdGhhdCBzdWNoIGxpYnJhcmllc1xuICAvLyBjYW4gYmUgc3VjY2Vzc2Z1bGx5IG1pZ3JhdGVkLCB3ZSByZW1vdmUgdGhlIGZsYXQtbW9kdWxlIG9wdGlvbnMgdG8gZWxpbWluYXRlIHRoZSBmbGF0IG1vZHVsZVxuICAvLyBlbnRyeS1wb2ludCByZXF1aXJlbWVudC4gTW9yZSBjb250ZXh0OiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8zNDk4NS5cbiAgb3B0aW9ucy5mbGF0TW9kdWxlSWQgPSB1bmRlZmluZWQ7XG4gIG9wdGlvbnMuZmxhdE1vZHVsZU91dEZpbGUgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3QgaG9zdCA9IGNyZWF0ZUhvc3Qob3B0aW9ucyk7XG5cbiAgLy8gRm9yIHRoaXMgbWlncmF0aW9uLCB3ZSBuZXZlciBuZWVkIHRvIHJlYWQgcmVzb3VyY2VzIGFuZCBjYW4ganVzdCByZXR1cm5cbiAgLy8gYW4gZW1wdHkgc3RyaW5nIGZvciByZXF1ZXN0ZWQgcmVzb3VyY2VzLiBXZSBuZWVkIHRvIGhhbmRsZSByZXF1ZXN0ZWQgcmVzb3VyY2VzXG4gIC8vIGJlY2F1c2Ugb3VyIGNyZWF0ZWQgTkdDIGNvbXBpbGVyIHByb2dyYW0gZG9lcyBub3Qga25vdyBhYm91dCBzcGVjaWFsIHJlc29sdXRpb25zXG4gIC8vIHdoaWNoIGFyZSBzZXQgdXAgYnkgdGhlIEFuZ3VsYXIgQ0xJLiBpLmUuIHJlc29sdmluZyBzdHlsZXNoZWV0cyB0aHJvdWdoIFwidGlsZGVcIi5cbiAgaG9zdC5yZWFkUmVzb3VyY2UgPSAoKSA9PiAnJztcbiAgaG9zdC5yZXNvdXJjZU5hbWVUb0ZpbGVOYW1lID0gKCkgPT4gJyRmYWtlLWZpbGUkJztcblxuICBjb25zdCBuZ2NQcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSh7cm9vdE5hbWVzLCBvcHRpb25zLCBob3N0fSk7XG5cbiAgLy8gVGhlIFwiQW5ndWxhckNvbXBpbGVyUHJvZ3JhbVwiIGRvZXMgbm90IGV4cG9zZSB0aGUgXCJBb3RDb21waWxlclwiIGluc3RhbmNlLCBub3IgZG9lcyBpdFxuICAvLyBleHBvc2UgdGhlIGxvZ2ljIHRoYXQgaXMgbmVjZXNzYXJ5IHRvIGFuYWx5emUgdGhlIGRldGVybWluZWQgbW9kdWxlcy4gV2Ugd29yayBhcm91bmRcbiAgLy8gdGhpcyBieSBqdXN0IGFjY2Vzc2luZyB0aGUgbmVjZXNzYXJ5IHByaXZhdGUgcHJvcGVydGllcyB1c2luZyB0aGUgYnJhY2tldCBub3RhdGlvbi5cbiAgY29uc3QgY29tcGlsZXI6IEFvdENvbXBpbGVyID0gKG5nY1Byb2dyYW0gYXMgYW55KVsnY29tcGlsZXInXTtcbiAgY29uc3QgcHJvZ3JhbSA9IG5nY1Byb2dyYW0uZ2V0VHNQcm9ncmFtKCk7XG5cbiAgcmV0dXJuIHtob3N0LCBuZ2NQcm9ncmFtLCBwcm9ncmFtLCBjb21waWxlcn07XG59XG4iXX0=
@@ -1,82 +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
- import { StaticSymbol } from '@angular/compiler';
9
- import * as ts from 'typescript';
10
- /** Error that will be thrown if an unexpected value needs to be converted. */
11
- export class UnexpectedMetadataValueError extends Error {
12
- }
13
- /**
14
- * Converts a directive metadata object into a TypeScript expression. Throws
15
- * if metadata cannot be cleanly converted.
16
- */
17
- export function convertDirectiveMetadataToExpression(metadata, resolveSymbolImport, createImport, convertProperty) {
18
- if (typeof metadata === 'string') {
19
- return ts.createStringLiteral(metadata);
20
- }
21
- else if (Array.isArray(metadata)) {
22
- return ts.createArrayLiteral(metadata.map(el => convertDirectiveMetadataToExpression(el, resolveSymbolImport, createImport, convertProperty)));
23
- }
24
- else if (typeof metadata === 'number') {
25
- return ts.createNumericLiteral(metadata.toString());
26
- }
27
- else if (typeof metadata === 'boolean') {
28
- return metadata ? ts.createTrue() : ts.createFalse();
29
- }
30
- else if (typeof metadata === 'undefined') {
31
- return ts.createIdentifier('undefined');
32
- }
33
- else if (typeof metadata === 'bigint') {
34
- return ts.createBigIntLiteral(metadata.toString());
35
- }
36
- else if (typeof metadata === 'object') {
37
- // In case there is a static symbol object part of the metadata, try to resolve
38
- // the import expression of the symbol. If no import path could be resolved, an
39
- // error will be thrown as the symbol cannot be converted into TypeScript AST.
40
- if (metadata instanceof StaticSymbol) {
41
- const resolvedImport = resolveSymbolImport(metadata);
42
- if (resolvedImport === null) {
43
- throw new UnexpectedMetadataValueError();
44
- }
45
- return createImport(resolvedImport, metadata.name);
46
- }
47
- const literalProperties = [];
48
- for (const key of Object.keys(metadata)) {
49
- const metadataValue = metadata[key];
50
- let propertyValue = null;
51
- // Allows custom conversion of properties in an object. This is useful for special
52
- // cases where we don't want to store the enum values as integers, but rather use the
53
- // real enum symbol. e.g. instead of `2` we want to use `ViewEncapsulation.None`.
54
- if (convertProperty) {
55
- propertyValue = convertProperty(key, metadataValue);
56
- }
57
- // In case the property value has not been assigned to an expression, we convert
58
- // the resolved metadata value into a TypeScript expression.
59
- if (propertyValue === null) {
60
- propertyValue = convertDirectiveMetadataToExpression(metadataValue, resolveSymbolImport, createImport, convertProperty);
61
- }
62
- literalProperties.push(ts.createPropertyAssignment(getPropertyName(key), propertyValue));
63
- }
64
- return ts.createObjectLiteral(literalProperties, true);
65
- }
66
- throw new UnexpectedMetadataValueError();
67
- }
68
- /**
69
- * Gets a valid property name from the given text. If the text cannot be used
70
- * as unquoted identifier, the name will be wrapped in a string literal.
71
- */
72
- function getPropertyName(name) {
73
- // Matches the most common identifiers that do not need quotes. Constructing a
74
- // regular expression that matches the ECMAScript specification in order to determine
75
- // whether quotes are needed is out of scope for this migration. For those more complex
76
- // property names, we just always use quotes (when constructing AST from metadata).
77
- if (/^[a-zA-Z_$]+$/.test(name)) {
78
- return name;
79
- }
80
- return ts.createStringLiteral(name);
81
- }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydF9kaXJlY3RpdmVfbWV0YWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy91bmRlY29yYXRlZC1jbGFzc2VzLXdpdGgtZGkvZGVjb3JhdG9yX3Jld3JpdGUvY29udmVydF9kaXJlY3RpdmVfbWV0YWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLDhFQUE4RTtBQUM5RSxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsS0FBSztDQUFHO0FBRTFEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQ0FBb0MsQ0FDaEQsUUFBYSxFQUFFLG1CQUE0RCxFQUMzRSxZQUFpRSxFQUNqRSxlQUFtRTtJQUNyRSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNoQyxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN6QztTQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNsQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNyQyxFQUFFLENBQUMsRUFBRSxDQUFDLG9DQUFvQyxDQUN0QyxFQUFFLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNuRTtTQUFNLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ3ZDLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0tBQ3JEO1NBQU0sSUFBSSxPQUFPLFFBQVEsS0FBSyxTQUFTLEVBQUU7UUFDeEMsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3REO1NBQU0sSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQUU7UUFDMUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDekM7U0FBTSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUN2QyxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztLQUNwRDtTQUFNLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ3ZDLCtFQUErRTtRQUMvRSwrRUFBK0U7UUFDL0UsOEVBQThFO1FBQzlFLElBQUksUUFBUSxZQUFZLFlBQVksRUFBRTtZQUNwQyxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRCxJQUFJLGNBQWMsS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLE1BQU0sSUFBSSw0QkFBNEIsRUFBRSxDQUFDO2FBQzFDO1lBQ0QsT0FBTyxZQUFZLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwRDtRQUVELE1BQU0saUJBQWlCLEdBQTRCLEVBQUUsQ0FBQztRQUV0RCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdkMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksYUFBYSxHQUF1QixJQUFJLENBQUM7WUFFN0Msa0ZBQWtGO1lBQ2xGLHFGQUFxRjtZQUNyRixpRkFBaUY7WUFDakYsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLGFBQWEsR0FBRyxlQUFlLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2FBQ3JEO1lBRUQsZ0ZBQWdGO1lBQ2hGLDREQUE0RDtZQUM1RCxJQUFJLGFBQWEsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLGFBQWEsR0FBRyxvQ0FBb0MsQ0FDaEQsYUFBYSxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQzthQUN4RTtZQUVELGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDMUY7UUFFRCxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUN4RDtJQUVELE1BQU0sSUFBSSw0QkFBNEIsRUFBRSxDQUFDO0FBQzNDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUFZO0lBQ25DLDhFQUE4RTtJQUM5RSxxRkFBcUY7SUFDckYsdUZBQXVGO0lBQ3ZGLG1GQUFtRjtJQUNuRixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDOUIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUNELE9BQU8sRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtTdGF0aWNTeW1ib2x9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKiogRXJyb3IgdGhhdCB3aWxsIGJlIHRocm93biBpZiBhbiB1bmV4cGVjdGVkIHZhbHVlIG5lZWRzIHRvIGJlIGNvbnZlcnRlZC4gKi9cbmV4cG9ydCBjbGFzcyBVbmV4cGVjdGVkTWV0YWRhdGFWYWx1ZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGRpcmVjdGl2ZSBtZXRhZGF0YSBvYmplY3QgaW50byBhIFR5cGVTY3JpcHQgZXhwcmVzc2lvbi4gVGhyb3dzXG4gKiBpZiBtZXRhZGF0YSBjYW5ub3QgYmUgY2xlYW5seSBjb252ZXJ0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGlyZWN0aXZlTWV0YWRhdGFUb0V4cHJlc3Npb24oXG4gICAgbWV0YWRhdGE6IGFueSwgcmVzb2x2ZVN5bWJvbEltcG9ydDogKHN5bWJvbDogU3RhdGljU3ltYm9sKSA9PiBzdHJpbmcgfCBudWxsLFxuICAgIGNyZWF0ZUltcG9ydDogKG1vZHVsZU5hbWU6IHN0cmluZywgbmFtZTogc3RyaW5nKSA9PiB0cy5FeHByZXNzaW9uLFxuICAgIGNvbnZlcnRQcm9wZXJ0eT86IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdHMuRXhwcmVzc2lvbiB8IG51bGwpOiB0cy5FeHByZXNzaW9uIHtcbiAgaWYgKHR5cGVvZiBtZXRhZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHMuY3JlYXRlU3RyaW5nTGl0ZXJhbChtZXRhZGF0YSk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtZXRhZGF0YSkpIHtcbiAgICByZXR1cm4gdHMuY3JlYXRlQXJyYXlMaXRlcmFsKG1ldGFkYXRhLm1hcChcbiAgICAgICAgZWwgPT4gY29udmVydERpcmVjdGl2ZU1ldGFkYXRhVG9FeHByZXNzaW9uKFxuICAgICAgICAgICAgZWwsIHJlc29sdmVTeW1ib2xJbXBvcnQsIGNyZWF0ZUltcG9ydCwgY29udmVydFByb3BlcnR5KSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBtZXRhZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdHMuY3JlYXRlTnVtZXJpY0xpdGVyYWwobWV0YWRhdGEudG9TdHJpbmcoKSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG1ldGFkYXRhID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gbWV0YWRhdGEgPyB0cy5jcmVhdGVUcnVlKCkgOiB0cy5jcmVhdGVGYWxzZSgpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBtZXRhZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHMuY3JlYXRlSWRlbnRpZmllcigndW5kZWZpbmVkJyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG1ldGFkYXRhID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiB0cy5jcmVhdGVCaWdJbnRMaXRlcmFsKG1ldGFkYXRhLnRvU3RyaW5nKCkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBtZXRhZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGEgc3RhdGljIHN5bWJvbCBvYmplY3QgcGFydCBvZiB0aGUgbWV0YWRhdGEsIHRyeSB0byByZXNvbHZlXG4gICAgLy8gdGhlIGltcG9ydCBleHByZXNzaW9uIG9mIHRoZSBzeW1ib2wuIElmIG5vIGltcG9ydCBwYXRoIGNvdWxkIGJlIHJlc29sdmVkLCBhblxuICAgIC8vIGVycm9yIHdpbGwgYmUgdGhyb3duIGFzIHRoZSBzeW1ib2wgY2Fubm90IGJlIGNvbnZlcnRlZCBpbnRvIFR5cGVTY3JpcHQgQVNULlxuICAgIGlmIChtZXRhZGF0YSBpbnN0YW5jZW9mIFN0YXRpY1N5bWJvbCkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRJbXBvcnQgPSByZXNvbHZlU3ltYm9sSW1wb3J0KG1ldGFkYXRhKTtcbiAgICAgIGlmIChyZXNvbHZlZEltcG9ydCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZE1ldGFkYXRhVmFsdWVFcnJvcigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWF0ZUltcG9ydChyZXNvbHZlZEltcG9ydCwgbWV0YWRhdGEubmFtZSk7XG4gICAgfVxuXG4gICAgY29uc3QgbGl0ZXJhbFByb3BlcnRpZXM6IHRzLlByb3BlcnR5QXNzaWdubWVudFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhtZXRhZGF0YSkpIHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhVmFsdWUgPSBtZXRhZGF0YVtrZXldO1xuICAgICAgbGV0IHByb3BlcnR5VmFsdWU6IHRzLkV4cHJlc3Npb258bnVsbCA9IG51bGw7XG5cbiAgICAgIC8vIEFsbG93cyBjdXN0b20gY29udmVyc2lvbiBvZiBwcm9wZXJ0aWVzIGluIGFuIG9iamVjdC4gVGhpcyBpcyB1c2VmdWwgZm9yIHNwZWNpYWxcbiAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIGRvbid0IHdhbnQgdG8gc3RvcmUgdGhlIGVudW0gdmFsdWVzIGFzIGludGVnZXJzLCBidXQgcmF0aGVyIHVzZSB0aGVcbiAgICAgIC8vIHJlYWwgZW51bSBzeW1ib2wuIGUuZy4gaW5zdGVhZCBvZiBgMmAgd2Ugd2FudCB0byB1c2UgYFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVgLlxuICAgICAgaWYgKGNvbnZlcnRQcm9wZXJ0eSkge1xuICAgICAgICBwcm9wZXJ0eVZhbHVlID0gY29udmVydFByb3BlcnR5KGtleSwgbWV0YWRhdGFWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEluIGNhc2UgdGhlIHByb3BlcnR5IHZhbHVlIGhhcyBub3QgYmVlbiBhc3NpZ25lZCB0byBhbiBleHByZXNzaW9uLCB3ZSBjb252ZXJ0XG4gICAgICAvLyB0aGUgcmVzb2x2ZWQgbWV0YWRhdGEgdmFsdWUgaW50byBhIFR5cGVTY3JpcHQgZXhwcmVzc2lvbi5cbiAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHByb3BlcnR5VmFsdWUgPSBjb252ZXJ0RGlyZWN0aXZlTWV0YWRhdGFUb0V4cHJlc3Npb24oXG4gICAgICAgICAgICBtZXRhZGF0YVZhbHVlLCByZXNvbHZlU3ltYm9sSW1wb3J0LCBjcmVhdGVJbXBvcnQsIGNvbnZlcnRQcm9wZXJ0eSk7XG4gICAgICB9XG5cbiAgICAgIGxpdGVyYWxQcm9wZXJ0aWVzLnB1c2godHMuY3JlYXRlUHJvcGVydHlBc3NpZ25tZW50KGdldFByb3BlcnR5TmFtZShrZXkpLCBwcm9wZXJ0eVZhbHVlKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRzLmNyZWF0ZU9iamVjdExpdGVyYWwobGl0ZXJhbFByb3BlcnRpZXMsIHRydWUpO1xuICB9XG5cbiAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRNZXRhZGF0YVZhbHVlRXJyb3IoKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgdmFsaWQgcHJvcGVydHkgbmFtZSBmcm9tIHRoZSBnaXZlbiB0ZXh0LiBJZiB0aGUgdGV4dCBjYW5ub3QgYmUgdXNlZFxuICogYXMgdW5xdW90ZWQgaWRlbnRpZmllciwgdGhlIG5hbWUgd2lsbCBiZSB3cmFwcGVkIGluIGEgc3RyaW5nIGxpdGVyYWwuXG4gKi9cbmZ1bmN0aW9uIGdldFByb3BlcnR5TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmd8dHMuU3RyaW5nTGl0ZXJhbCB7XG4gIC8vIE1hdGNoZXMgdGhlIG1vc3QgY29tbW9uIGlkZW50aWZpZXJzIHRoYXQgZG8gbm90IG5lZWQgcXVvdGVzLiBDb25zdHJ1Y3RpbmcgYVxuICAvLyByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBtYXRjaGVzIHRoZSBFQ01BU2NyaXB0IHNwZWNpZmljYXRpb24gaW4gb3JkZXIgdG8gZGV0ZXJtaW5lXG4gIC8vIHdoZXRoZXIgcXVvdGVzIGFyZSBuZWVkZWQgaXMgb3V0IG9mIHNjb3BlIGZvciB0aGlzIG1pZ3JhdGlvbi4gRm9yIHRob3NlIG1vcmUgY29tcGxleFxuICAvLyBwcm9wZXJ0eSBuYW1lcywgd2UganVzdCBhbHdheXMgdXNlIHF1b3RlcyAod2hlbiBjb25zdHJ1Y3RpbmcgQVNUIGZyb20gbWV0YWRhdGEpLlxuICBpZiAoL15bYS16QS1aXyRdKyQvLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuICByZXR1cm4gdHMuY3JlYXRlU3RyaW5nTGl0ZXJhbChuYW1lKTtcbn1cbiJdfQ==