@angular/core 12.1.1 → 12.1.2

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 (150) 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 +7 -11
  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/change_detection/differs/iterable_differs.js +1 -1
  9. package/esm2015/src/compiler/compiler_facade_interface.js +1 -1
  10. package/esm2015/src/error_handler.js +2 -6
  11. package/esm2015/src/event_emitter.js +1 -1
  12. package/esm2015/src/linker/component_factory_resolver.js +1 -1
  13. package/esm2015/src/linker/template_ref.js +1 -1
  14. package/esm2015/src/linker/view_container_ref.js +1 -1
  15. package/esm2015/src/metadata/di.js +1 -1
  16. package/esm2015/src/render3/component_ref.js +1 -1
  17. package/esm2015/src/render3/ng_module_ref.js +1 -1
  18. package/esm2015/src/render3/view_ref.js +1 -1
  19. package/esm2015/src/sanitization/bypass.js +1 -1
  20. package/esm2015/src/version.js +1 -1
  21. package/esm2015/src/view/entrypoint.js +1 -1
  22. package/esm2015/src/view/refs.js +1 -1
  23. package/esm2015/testing/src/ng_zone_mock.js +1 -1
  24. package/esm2015/testing/src/r3_test_bed_compiler.js +4 -1
  25. package/esm2015/testing/src/resolvers.js +1 -1
  26. package/esm2015/testing/src/test_bed.js +12 -4
  27. package/fesm2015/core.js +7 -11
  28. package/fesm2015/core.js.map +1 -1
  29. package/fesm2015/testing.js +15 -4
  30. package/fesm2015/testing.js.map +1 -1
  31. package/package.json +1 -1
  32. package/schematics/migrations/missing-injectable/providers_evaluator.js +1 -1
  33. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js +1 -1
  34. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js +1 -1
  35. package/schematics/migrations.json +1 -1
  36. package/src/r3_symbols.d.ts +2 -3
  37. package/testing/testing.d.ts +2 -1
  38. package/testing/testing.metadata.json +1 -1
  39. package/testing.d.ts +1 -1
  40. package/schematics/migrations/abstract-control-parent/abstract-control-parent.externs.js +0 -0
  41. package/schematics/migrations/abstract-control-parent/index.mjs +0 -47
  42. package/schematics/migrations/abstract-control-parent/util.mjs +0 -50
  43. package/schematics/migrations/activated-route-snapshot-fragment/activated-route-snapshot-fragment.externs.js +0 -0
  44. package/schematics/migrations/activated-route-snapshot-fragment/index.mjs +0 -48
  45. package/schematics/migrations/activated-route-snapshot-fragment/util.mjs +0 -33
  46. package/schematics/migrations/can-activate-with-redirect-to/can-activate-with-redirect-to.externs.js +0 -0
  47. package/schematics/migrations/can-activate-with-redirect-to/index.mjs +0 -44
  48. package/schematics/migrations/can-activate-with-redirect-to/util.mjs +0 -55
  49. package/schematics/migrations/deep-shadow-piercing-selector/deep-shadow-piercing-selector.externs.js +0 -0
  50. package/schematics/migrations/deep-shadow-piercing-selector/index.mjs +0 -36
  51. package/schematics/migrations/dynamic-queries/dynamic-queries.externs.js +0 -0
  52. package/schematics/migrations/dynamic-queries/index.mjs +0 -51
  53. package/schematics/migrations/dynamic-queries/util.mjs +0 -65
  54. package/schematics/migrations/initial-navigation/collector.mjs +0 -105
  55. package/schematics/migrations/initial-navigation/index.mjs +0 -61
  56. package/schematics/migrations/initial-navigation/initial-navigation.externs.js +0 -0
  57. package/schematics/migrations/initial-navigation/transform.mjs +0 -54
  58. package/schematics/migrations/initial-navigation/update_recorder.mjs +0 -9
  59. package/schematics/migrations/initial-navigation/util.mjs +0 -28
  60. package/schematics/migrations/missing-injectable/definition_collector.mjs +0 -75
  61. package/schematics/migrations/missing-injectable/index.mjs +0 -100
  62. package/schematics/migrations/missing-injectable/missing-injectable.externs.js +0 -0
  63. package/schematics/migrations/missing-injectable/providers_evaluator.mjs +0 -50
  64. package/schematics/migrations/missing-injectable/transform.mjs +0 -187
  65. package/schematics/migrations/missing-injectable/update_recorder.mjs +0 -9
  66. package/schematics/migrations/module-with-providers/collector.mjs +0 -59
  67. package/schematics/migrations/module-with-providers/index.mjs +0 -71
  68. package/schematics/migrations/module-with-providers/module-with-providers.externs.js +0 -0
  69. package/schematics/migrations/module-with-providers/transform.mjs +0 -134
  70. package/schematics/migrations/module-with-providers/util.mjs +0 -25
  71. package/schematics/migrations/move-document/document_import_visitor.mjs +0 -60
  72. package/schematics/migrations/move-document/index.mjs +0 -71
  73. package/schematics/migrations/move-document/move-document.externs.js +0 -0
  74. package/schematics/migrations/move-document/move-import.mjs +0 -45
  75. package/schematics/migrations/native-view-encapsulation/index.mjs +0 -41
  76. package/schematics/migrations/native-view-encapsulation/native-view-encapsulation.externs.js +0 -0
  77. package/schematics/migrations/native-view-encapsulation/util.mjs +0 -34
  78. package/schematics/migrations/navigation-extras-omissions/index.mjs +0 -47
  79. package/schematics/migrations/navigation-extras-omissions/navigation-extras-omissions.externs.js +0 -0
  80. package/schematics/migrations/navigation-extras-omissions/util.mjs +0 -111
  81. package/schematics/migrations/relative-link-resolution/collector.mjs +0 -81
  82. package/schematics/migrations/relative-link-resolution/index.mjs +0 -62
  83. package/schematics/migrations/relative-link-resolution/relative-link-resolution.externs.js +0 -0
  84. package/schematics/migrations/relative-link-resolution/transform.mjs +0 -51
  85. package/schematics/migrations/relative-link-resolution/update_recorder.mjs +0 -9
  86. package/schematics/migrations/relative-link-resolution/util.mjs +0 -28
  87. package/schematics/migrations/renderer-to-renderer2/helpers.mjs +0 -224
  88. package/schematics/migrations/renderer-to-renderer2/index.mjs +0 -113
  89. package/schematics/migrations/renderer-to-renderer2/migration.mjs +0 -211
  90. package/schematics/migrations/renderer-to-renderer2/renderer-to-renderer2.externs.js +0 -0
  91. package/schematics/migrations/renderer-to-renderer2/util.mjs +0 -69
  92. package/schematics/migrations/router-preserve-query-params/index.mjs +0 -50
  93. package/schematics/migrations/router-preserve-query-params/router-preserve-query-params.externs.js +0 -0
  94. package/schematics/migrations/router-preserve-query-params/util.mjs +0 -88
  95. package/schematics/migrations/static-queries/angular/directive_inputs.mjs +0 -70
  96. package/schematics/migrations/static-queries/angular/ng_query_visitor.mjs +0 -113
  97. package/schematics/migrations/static-queries/angular/query-definition.mjs +0 -20
  98. package/schematics/migrations/static-queries/angular/super_class.mjs +0 -21
  99. package/schematics/migrations/static-queries/index.mjs +0 -206
  100. package/schematics/migrations/static-queries/static-queries.externs.js +0 -0
  101. package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.mjs +0 -200
  102. package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.mjs +0 -24
  103. package/schematics/migrations/static-queries/strategies/timing-strategy.mjs +0 -9
  104. package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.mjs +0 -355
  105. package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.mjs +0 -38
  106. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.mjs +0 -80
  107. package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.mjs +0 -154
  108. package/schematics/migrations/static-queries/transform.mjs +0 -88
  109. package/schematics/migrations/template-var-assignment/analyze_template.mjs +0 -25
  110. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.mjs +0 -65
  111. package/schematics/migrations/template-var-assignment/index.mjs +0 -68
  112. package/schematics/migrations/template-var-assignment/template-var-assignment.externs.js +0 -0
  113. package/schematics/migrations/undecorated-classes-with-decorated-fields/index.mjs +0 -92
  114. package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.mjs +0 -286
  115. package/schematics/migrations/undecorated-classes-with-decorated-fields/undecorated-classes-with-decorated-fields.externs.js +0 -0
  116. package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.mjs +0 -9
  117. package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.mjs +0 -43
  118. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.mjs +0 -82
  119. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.mjs +0 -102
  120. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.mjs +0 -111
  121. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.mjs +0 -17
  122. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.mjs +0 -51
  123. package/schematics/migrations/undecorated-classes-with-di/index.mjs +0 -162
  124. package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.mjs +0 -124
  125. package/schematics/migrations/undecorated-classes-with-di/transform.mjs +0 -356
  126. package/schematics/migrations/undecorated-classes-with-di/undecorated-classes-with-di.externs.js +0 -0
  127. package/schematics/migrations/undecorated-classes-with-di/update_recorder.mjs +0 -9
  128. package/schematics/migrations/wait-for-async/index.mjs +0 -76
  129. package/schematics/migrations/wait-for-async/util.mjs +0 -23
  130. package/schematics/migrations/wait-for-async/wait-for-async.externs.js +0 -0
  131. package/schematics/migrations/xhr-factory/index.mjs +0 -91
  132. package/schematics/migrations/xhr-factory/xhr-factory.externs.js +0 -0
  133. package/schematics/utils/import_manager.mjs +0 -197
  134. package/schematics/utils/line_mappings.mjs +0 -60
  135. package/schematics/utils/ng_component_template.mjs +0 -96
  136. package/schematics/utils/ng_decorators.mjs +0 -23
  137. package/schematics/utils/parse_html.mjs +0 -24
  138. package/schematics/utils/project_tsconfig_paths.mjs +0 -74
  139. package/schematics/utils/schematics_prompt.mjs +0 -30
  140. package/schematics/utils/typescript/class_declaration.mjs +0 -33
  141. package/schematics/utils/typescript/compiler_host.mjs +0 -66
  142. package/schematics/utils/typescript/decorators.mjs +0 -20
  143. package/schematics/utils/typescript/find_base_classes.mjs +0 -30
  144. package/schematics/utils/typescript/functions.mjs +0 -28
  145. package/schematics/utils/typescript/imports.mjs +0 -91
  146. package/schematics/utils/typescript/nodes.mjs +0 -57
  147. package/schematics/utils/typescript/parse_tsconfig.mjs +0 -26
  148. package/schematics/utils/typescript/property_name.mjs +0 -23
  149. package/schematics/utils/typescript/symbol.mjs +0 -72
  150. package/schematics/utils/utils.externs.js +0 -0
@@ -1,96 +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 { existsSync, readFileSync } from 'fs';
9
- import { dirname, resolve } from 'path';
10
- import * as ts from 'typescript';
11
- import { computeLineStartsMap, getLineAndCharacterFromPosition } from './line_mappings';
12
- import { getAngularDecorators } from './ng_decorators';
13
- import { unwrapExpression } from './typescript/functions';
14
- import { getPropertyNameText } from './typescript/property_name';
15
- /**
16
- * Visitor that can be used to determine Angular templates referenced within given
17
- * TypeScript source files (inline templates or external referenced templates)
18
- */
19
- export class NgComponentTemplateVisitor {
20
- constructor(typeChecker) {
21
- this.typeChecker = typeChecker;
22
- this.resolvedTemplates = [];
23
- }
24
- visitNode(node) {
25
- if (node.kind === ts.SyntaxKind.ClassDeclaration) {
26
- this.visitClassDeclaration(node);
27
- }
28
- ts.forEachChild(node, n => this.visitNode(n));
29
- }
30
- visitClassDeclaration(node) {
31
- if (!node.decorators || !node.decorators.length) {
32
- return;
33
- }
34
- const ngDecorators = getAngularDecorators(this.typeChecker, node.decorators);
35
- const componentDecorator = ngDecorators.find(dec => dec.name === 'Component');
36
- // In case no "@Component" decorator could be found on the current class, skip.
37
- if (!componentDecorator) {
38
- return;
39
- }
40
- const decoratorCall = componentDecorator.node.expression;
41
- // In case the component decorator call is not valid, skip this class declaration.
42
- if (decoratorCall.arguments.length !== 1) {
43
- return;
44
- }
45
- const componentMetadata = unwrapExpression(decoratorCall.arguments[0]);
46
- // Ensure that the component metadata is an object literal expression.
47
- if (!ts.isObjectLiteralExpression(componentMetadata)) {
48
- return;
49
- }
50
- const sourceFile = node.getSourceFile();
51
- const sourceFileName = sourceFile.fileName;
52
- // Walk through all component metadata properties and determine the referenced
53
- // HTML templates (either external or inline)
54
- componentMetadata.properties.forEach(property => {
55
- if (!ts.isPropertyAssignment(property)) {
56
- return;
57
- }
58
- const propertyName = getPropertyNameText(property.name);
59
- // In case there is an inline template specified, ensure that the value is statically
60
- // analyzable by checking if the initializer is a string literal-like node.
61
- if (propertyName === 'template' && ts.isStringLiteralLike(property.initializer)) {
62
- // Need to add an offset of one to the start because the template quotes are
63
- // not part of the template content.
64
- const templateStartIdx = property.initializer.getStart() + 1;
65
- const filePath = resolve(sourceFileName);
66
- this.resolvedTemplates.push({
67
- filePath: filePath,
68
- container: node,
69
- content: property.initializer.text,
70
- inline: true,
71
- start: templateStartIdx,
72
- getCharacterAndLineOfPosition: pos => ts.getLineAndCharacterOfPosition(sourceFile, pos + templateStartIdx)
73
- });
74
- }
75
- if (propertyName === 'templateUrl' && ts.isStringLiteralLike(property.initializer)) {
76
- const templatePath = resolve(dirname(sourceFileName), property.initializer.text);
77
- // In case the template does not exist in the file system, skip this
78
- // external template.
79
- if (!existsSync(templatePath)) {
80
- return;
81
- }
82
- const fileContent = readFileSync(templatePath, 'utf8');
83
- const lineStartsMap = computeLineStartsMap(fileContent);
84
- this.resolvedTemplates.push({
85
- filePath: templatePath,
86
- container: node,
87
- content: fileContent,
88
- inline: false,
89
- start: 0,
90
- getCharacterAndLineOfPosition: pos => getLineAndCharacterFromPosition(lineStartsMap, pos),
91
- });
92
- }
93
- });
94
- }
95
- }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdfY29tcG9uZW50X3RlbXBsYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL3V0aWxzL25nX2NvbXBvbmVudF90ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsVUFBVSxFQUFFLFlBQVksRUFBQyxNQUFNLElBQUksQ0FBQztBQUM1QyxPQUFPLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsK0JBQStCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQXVCL0Q7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLDBCQUEwQjtJQUdyQyxZQUFtQixXQUEyQjtRQUEzQixnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFGOUMsc0JBQWlCLEdBQXVCLEVBQUUsQ0FBQztJQUVNLENBQUM7SUFFbEQsU0FBUyxDQUFDLElBQWE7UUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7WUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQTJCLENBQUMsQ0FBQztTQUN6RDtRQUVELEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxJQUF5QjtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQy9DLE9BQU87U0FDUjtRQUVELE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdFLE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUM7UUFFOUUsK0VBQStFO1FBQy9FLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN2QixPQUFPO1NBQ1I7UUFFRCxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXpELGtGQUFrRjtRQUNsRixJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RSxzRUFBc0U7UUFDdEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3BELE9BQU87U0FDUjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBRTNDLDhFQUE4RTtRQUM5RSw2Q0FBNkM7UUFDN0MsaUJBQWlCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QyxPQUFPO2FBQ1I7WUFFRCxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFeEQscUZBQXFGO1lBQ3JGLDJFQUEyRTtZQUMzRSxJQUFJLFlBQVksS0FBSyxVQUFVLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDL0UsNEVBQTRFO2dCQUM1RSxvQ0FBb0M7Z0JBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQzdELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztvQkFDMUIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFNBQVMsRUFBRSxJQUFJO29CQUNmLE9BQU8sRUFBRSxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUk7b0JBQ2xDLE1BQU0sRUFBRSxJQUFJO29CQUNaLEtBQUssRUFBRSxnQkFBZ0I7b0JBQ3ZCLDZCQUE2QixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2pDLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLEVBQUUsR0FBRyxHQUFHLGdCQUFnQixDQUFDO2lCQUN6RSxDQUFDLENBQUM7YUFDSjtZQUNELElBQUksWUFBWSxLQUFLLGFBQWEsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNsRixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRWpGLG9FQUFvRTtnQkFDcEUscUJBQXFCO2dCQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFO29CQUM3QixPQUFPO2lCQUNSO2dCQUVELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZELE1BQU0sYUFBYSxHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUV4RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO29CQUMxQixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsU0FBUyxFQUFFLElBQUk7b0JBQ2YsT0FBTyxFQUFFLFdBQVc7b0JBQ3BCLE1BQU0sRUFBRSxLQUFLO29CQUNiLEtBQUssRUFBRSxDQUFDO29CQUNSLDZCQUE2QixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsK0JBQStCLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQztpQkFDMUYsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtkaXJuYW1lLCByZXNvbHZlfSBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2NvbXB1dGVMaW5lU3RhcnRzTWFwLCBnZXRMaW5lQW5kQ2hhcmFjdGVyRnJvbVBvc2l0aW9ufSBmcm9tICcuL2xpbmVfbWFwcGluZ3MnO1xuaW1wb3J0IHtnZXRBbmd1bGFyRGVjb3JhdG9yc30gZnJvbSAnLi9uZ19kZWNvcmF0b3JzJztcbmltcG9ydCB7dW53cmFwRXhwcmVzc2lvbn0gZnJvbSAnLi90eXBlc2NyaXB0L2Z1bmN0aW9ucyc7XG5pbXBvcnQge2dldFByb3BlcnR5TmFtZVRleHR9IGZyb20gJy4vdHlwZXNjcmlwdC9wcm9wZXJ0eV9uYW1lJztcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFRlbXBsYXRlIHtcbiAgLyoqIENsYXNzIGRlY2xhcmF0aW9uIHRoYXQgY29udGFpbnMgdGhpcyB0ZW1wbGF0ZS4gKi9cbiAgY29udGFpbmVyOiB0cy5DbGFzc0RlY2xhcmF0aW9uO1xuICAvKiogRmlsZSBjb250ZW50IG9mIHRoZSBnaXZlbiB0ZW1wbGF0ZS4gKi9cbiAgY29udGVudDogc3RyaW5nO1xuICAvKiogU3RhcnQgb2Zmc2V0IG9mIHRoZSB0ZW1wbGF0ZSBjb250ZW50IChlLmcuIGluIHRoZSBpbmxpbmUgc291cmNlIGZpbGUpICovXG4gIHN0YXJ0OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSBnaXZlbiB0ZW1wbGF0ZSBpcyBpbmxpbmUgb3Igbm90LiAqL1xuICBpbmxpbmU6IGJvb2xlYW47XG4gIC8qKiBQYXRoIHRvIHRoZSBmaWxlIHRoYXQgY29udGFpbnMgdGhpcyB0ZW1wbGF0ZS4gKi9cbiAgZmlsZVBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIEdldHMgdGhlIGNoYXJhY3RlciBhbmQgbGluZSBvZiBhIGdpdmVuIHBvc2l0aW9uIGluZGV4IGluIHRoZSB0ZW1wbGF0ZS5cbiAgICogSWYgdGhlIHRlbXBsYXRlIGlzIGRlY2xhcmVkIGlubGluZSB3aXRoaW4gYSBUeXBlU2NyaXB0IHNvdXJjZSBmaWxlLCB0aGUgbGluZSBhbmRcbiAgICogY2hhcmFjdGVyIGFyZSBiYXNlZCBvbiB0aGUgZnVsbCBzb3VyY2UgZmlsZSBjb250ZW50LlxuICAgKi9cbiAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IChwb3M6IG51bWJlcikgPT4ge1xuICAgIGNoYXJhY3RlcjogbnVtYmVyLCBsaW5lOiBudW1iZXJcbiAgfTtcbn1cblxuLyoqXG4gKiBWaXNpdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIEFuZ3VsYXIgdGVtcGxhdGVzIHJlZmVyZW5jZWQgd2l0aGluIGdpdmVuXG4gKiBUeXBlU2NyaXB0IHNvdXJjZSBmaWxlcyAoaW5saW5lIHRlbXBsYXRlcyBvciBleHRlcm5hbCByZWZlcmVuY2VkIHRlbXBsYXRlcylcbiAqL1xuZXhwb3J0IGNsYXNzIE5nQ29tcG9uZW50VGVtcGxhdGVWaXNpdG9yIHtcbiAgcmVzb2x2ZWRUZW1wbGF0ZXM6IFJlc29sdmVkVGVtcGxhdGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpIHt9XG5cbiAgdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpIHtcbiAgICBpZiAobm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb24pIHtcbiAgICAgIHRoaXMudmlzaXRDbGFzc0RlY2xhcmF0aW9uKG5vZGUgYXMgdHMuQ2xhc3NEZWNsYXJhdGlvbik7XG4gICAgfVxuXG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIG4gPT4gdGhpcy52aXNpdE5vZGUobikpO1xuICB9XG5cbiAgcHJpdmF0ZSB2aXNpdENsYXNzRGVjbGFyYXRpb24obm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbikge1xuICAgIGlmICghbm9kZS5kZWNvcmF0b3JzIHx8ICFub2RlLmRlY29yYXRvcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmdEZWNvcmF0b3JzID0gZ2V0QW5ndWxhckRlY29yYXRvcnModGhpcy50eXBlQ2hlY2tlciwgbm9kZS5kZWNvcmF0b3JzKTtcbiAgICBjb25zdCBjb21wb25lbnREZWNvcmF0b3IgPSBuZ0RlY29yYXRvcnMuZmluZChkZWMgPT4gZGVjLm5hbWUgPT09ICdDb21wb25lbnQnKTtcblxuICAgIC8vIEluIGNhc2Ugbm8gXCJAQ29tcG9uZW50XCIgZGVjb3JhdG9yIGNvdWxkIGJlIGZvdW5kIG9uIHRoZSBjdXJyZW50IGNsYXNzLCBza2lwLlxuICAgIGlmICghY29tcG9uZW50RGVjb3JhdG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVjb3JhdG9yQ2FsbCA9IGNvbXBvbmVudERlY29yYXRvci5ub2RlLmV4cHJlc3Npb247XG5cbiAgICAvLyBJbiBjYXNlIHRoZSBjb21wb25lbnQgZGVjb3JhdG9yIGNhbGwgaXMgbm90IHZhbGlkLCBza2lwIHRoaXMgY2xhc3MgZGVjbGFyYXRpb24uXG4gICAgaWYgKGRlY29yYXRvckNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudE1ldGFkYXRhID0gdW53cmFwRXhwcmVzc2lvbihkZWNvcmF0b3JDYWxsLmFyZ3VtZW50c1swXSk7XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgY29tcG9uZW50IG1ldGFkYXRhIGlzIGFuIG9iamVjdCBsaXRlcmFsIGV4cHJlc3Npb24uXG4gICAgaWYgKCF0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKGNvbXBvbmVudE1ldGFkYXRhKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgICBjb25zdCBzb3VyY2VGaWxlTmFtZSA9IHNvdXJjZUZpbGUuZmlsZU5hbWU7XG5cbiAgICAvLyBXYWxrIHRocm91Z2ggYWxsIGNvbXBvbmVudCBtZXRhZGF0YSBwcm9wZXJ0aWVzIGFuZCBkZXRlcm1pbmUgdGhlIHJlZmVyZW5jZWRcbiAgICAvLyBIVE1MIHRlbXBsYXRlcyAoZWl0aGVyIGV4dGVybmFsIG9yIGlubGluZSlcbiAgICBjb21wb25lbnRNZXRhZGF0YS5wcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgaWYgKCF0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wZXJ0eSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBnZXRQcm9wZXJ0eU5hbWVUZXh0KHByb3BlcnR5Lm5hbWUpO1xuXG4gICAgICAvLyBJbiBjYXNlIHRoZXJlIGlzIGFuIGlubGluZSB0ZW1wbGF0ZSBzcGVjaWZpZWQsIGVuc3VyZSB0aGF0IHRoZSB2YWx1ZSBpcyBzdGF0aWNhbGx5XG4gICAgICAvLyBhbmFseXphYmxlIGJ5IGNoZWNraW5nIGlmIHRoZSBpbml0aWFsaXplciBpcyBhIHN0cmluZyBsaXRlcmFsLWxpa2Ugbm9kZS5cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICd0ZW1wbGF0ZScgJiYgdHMuaXNTdHJpbmdMaXRlcmFsTGlrZShwcm9wZXJ0eS5pbml0aWFsaXplcikpIHtcbiAgICAgICAgLy8gTmVlZCB0byBhZGQgYW4gb2Zmc2V0IG9mIG9uZSB0byB0aGUgc3RhcnQgYmVjYXVzZSB0aGUgdGVtcGxhdGUgcXVvdGVzIGFyZVxuICAgICAgICAvLyBub3QgcGFydCBvZiB0aGUgdGVtcGxhdGUgY29udGVudC5cbiAgICAgICAgY29uc3QgdGVtcGxhdGVTdGFydElkeCA9IHByb3BlcnR5LmluaXRpYWxpemVyLmdldFN0YXJ0KCkgKyAxO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHJlc29sdmUoc291cmNlRmlsZU5hbWUpO1xuICAgICAgICB0aGlzLnJlc29sdmVkVGVtcGxhdGVzLnB1c2goe1xuICAgICAgICAgIGZpbGVQYXRoOiBmaWxlUGF0aCxcbiAgICAgICAgICBjb250YWluZXI6IG5vZGUsXG4gICAgICAgICAgY29udGVudDogcHJvcGVydHkuaW5pdGlhbGl6ZXIudGV4dCxcbiAgICAgICAgICBpbmxpbmU6IHRydWUsXG4gICAgICAgICAgc3RhcnQ6IHRlbXBsYXRlU3RhcnRJZHgsXG4gICAgICAgICAgZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb246IHBvcyA9PlxuICAgICAgICAgICAgICB0cy5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihzb3VyY2VGaWxlLCBwb3MgKyB0ZW1wbGF0ZVN0YXJ0SWR4KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT09ICd0ZW1wbGF0ZVVybCcgJiYgdHMuaXNTdHJpbmdMaXRlcmFsTGlrZShwcm9wZXJ0eS5pbml0aWFsaXplcikpIHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcmVzb2x2ZShkaXJuYW1lKHNvdXJjZUZpbGVOYW1lKSwgcHJvcGVydHkuaW5pdGlhbGl6ZXIudGV4dCk7XG5cbiAgICAgICAgLy8gSW4gY2FzZSB0aGUgdGVtcGxhdGUgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGZpbGUgc3lzdGVtLCBza2lwIHRoaXNcbiAgICAgICAgLy8gZXh0ZXJuYWwgdGVtcGxhdGUuXG4gICAgICAgIGlmICghZXhpc3RzU3luYyh0ZW1wbGF0ZVBhdGgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZUNvbnRlbnQgPSByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoLCAndXRmOCcpO1xuICAgICAgICBjb25zdCBsaW5lU3RhcnRzTWFwID0gY29tcHV0ZUxpbmVTdGFydHNNYXAoZmlsZUNvbnRlbnQpO1xuXG4gICAgICAgIHRoaXMucmVzb2x2ZWRUZW1wbGF0ZXMucHVzaCh7XG4gICAgICAgICAgZmlsZVBhdGg6IHRlbXBsYXRlUGF0aCxcbiAgICAgICAgICBjb250YWluZXI6IG5vZGUsXG4gICAgICAgICAgY29udGVudDogZmlsZUNvbnRlbnQsXG4gICAgICAgICAgaW5saW5lOiBmYWxzZSxcbiAgICAgICAgICBzdGFydDogMCxcbiAgICAgICAgICBnZXRDaGFyYWN0ZXJBbmRMaW5lT2ZQb3NpdGlvbjogcG9zID0+IGdldExpbmVBbmRDaGFyYWN0ZXJGcm9tUG9zaXRpb24obGluZVN0YXJ0c01hcCwgcG9zKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,23 +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 { getCallDecoratorImport } from './typescript/decorators';
9
- /**
10
- * Gets all decorators which are imported from an Angular package (e.g. "@angular/core")
11
- * from a list of decorators.
12
- */
13
- export function getAngularDecorators(typeChecker, decorators) {
14
- return decorators.map(node => ({ node, importData: getCallDecoratorImport(typeChecker, node) }))
15
- .filter(({ importData }) => importData && importData.importModule.startsWith('@angular/'))
16
- .map(({ node, importData }) => ({
17
- node: node,
18
- name: importData.name,
19
- moduleName: importData.importModule,
20
- importNode: importData.node
21
- }));
22
- }
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdfZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy91dGlscy9uZ19kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBYS9EOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDaEMsV0FBMkIsRUFBRSxVQUF1QztJQUN0RSxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1NBQ3pGLE1BQU0sQ0FBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN2RixHQUFHLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QixJQUFJLEVBQUUsSUFBK0I7UUFDckMsSUFBSSxFQUFFLFVBQVcsQ0FBQyxJQUFJO1FBQ3RCLFVBQVUsRUFBRSxVQUFXLENBQUMsWUFBWTtRQUNwQyxVQUFVLEVBQUUsVUFBVyxDQUFDLElBQUk7S0FDN0IsQ0FBQyxDQUFDLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtnZXRDYWxsRGVjb3JhdG9ySW1wb3J0fSBmcm9tICcuL3R5cGVzY3JpcHQvZGVjb3JhdG9ycyc7XG5cbmV4cG9ydCB0eXBlIENhbGxFeHByZXNzaW9uRGVjb3JhdG9yID0gdHMuRGVjb3JhdG9yJntcbiAgZXhwcmVzc2lvbjogdHMuQ2FsbEV4cHJlc3Npb247XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5nRGVjb3JhdG9yIHtcbiAgbmFtZTogc3RyaW5nO1xuICBtb2R1bGVOYW1lOiBzdHJpbmc7XG4gIG5vZGU6IENhbGxFeHByZXNzaW9uRGVjb3JhdG9yO1xuICBpbXBvcnROb2RlOiB0cy5JbXBvcnREZWNsYXJhdGlvbjtcbn1cblxuLyoqXG4gKiBHZXRzIGFsbCBkZWNvcmF0b3JzIHdoaWNoIGFyZSBpbXBvcnRlZCBmcm9tIGFuIEFuZ3VsYXIgcGFja2FnZSAoZS5nLiBcIkBhbmd1bGFyL2NvcmVcIilcbiAqIGZyb20gYSBsaXN0IG9mIGRlY29yYXRvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbmd1bGFyRGVjb3JhdG9ycyhcbiAgICB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIGRlY29yYXRvcnM6IFJlYWRvbmx5QXJyYXk8dHMuRGVjb3JhdG9yPik6IE5nRGVjb3JhdG9yW10ge1xuICByZXR1cm4gZGVjb3JhdG9ycy5tYXAobm9kZSA9PiAoe25vZGUsIGltcG9ydERhdGE6IGdldENhbGxEZWNvcmF0b3JJbXBvcnQodHlwZUNoZWNrZXIsIG5vZGUpfSkpXG4gICAgICAuZmlsdGVyKCh7aW1wb3J0RGF0YX0pID0+IGltcG9ydERhdGEgJiYgaW1wb3J0RGF0YS5pbXBvcnRNb2R1bGUuc3RhcnRzV2l0aCgnQGFuZ3VsYXIvJykpXG4gICAgICAubWFwKCh7bm9kZSwgaW1wb3J0RGF0YX0pID0+ICh7XG4gICAgICAgICAgICAgbm9kZTogbm9kZSBhcyBDYWxsRXhwcmVzc2lvbkRlY29yYXRvcixcbiAgICAgICAgICAgICBuYW1lOiBpbXBvcnREYXRhIS5uYW1lLFxuICAgICAgICAgICAgIG1vZHVsZU5hbWU6IGltcG9ydERhdGEhLmltcG9ydE1vZHVsZSxcbiAgICAgICAgICAgICBpbXBvcnROb2RlOiBpbXBvcnREYXRhIS5ub2RlXG4gICAgICAgICAgIH0pKTtcbn1cbiJdfQ==
@@ -1,24 +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 { parseTemplate } from '@angular/compiler';
9
- /**
10
- * Parses the given HTML content using the Angular compiler. In case the parsing
11
- * fails, null is being returned.
12
- */
13
- export function parseHtmlGracefully(htmlContent, filePath) {
14
- try {
15
- return parseTemplate(htmlContent, filePath).nodes;
16
- }
17
- catch (_a) {
18
- // Do nothing if the template couldn't be parsed. We don't want to throw any
19
- // exception if a template is syntactically not valid. e.g. template could be
20
- // using preprocessor syntax.
21
- return null;
22
- }
23
- }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VfaHRtbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy91dGlscy9wYXJzZV9odG1sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsV0FBbUIsRUFBRSxRQUFnQjtJQUN2RSxJQUFJO1FBQ0YsT0FBTyxhQUFhLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQztLQUNuRDtJQUFDLFdBQU07UUFDTiw0RUFBNEU7UUFDNUUsNkVBQTZFO1FBQzdFLDZCQUE2QjtRQUM3QixPQUFPLElBQUksQ0FBQztLQUNiO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge3BhcnNlVGVtcGxhdGV9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7Tm9kZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXIvc3JjL3JlbmRlcjMvcjNfYXN0JztcblxuLyoqXG4gKiBQYXJzZXMgdGhlIGdpdmVuIEhUTUwgY29udGVudCB1c2luZyB0aGUgQW5ndWxhciBjb21waWxlci4gSW4gY2FzZSB0aGUgcGFyc2luZ1xuICogZmFpbHMsIG51bGwgaXMgYmVpbmcgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUh0bWxHcmFjZWZ1bGx5KGh0bWxDb250ZW50OiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcpOiBOb2RlW118bnVsbCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhcnNlVGVtcGxhdGUoaHRtbENvbnRlbnQsIGZpbGVQYXRoKS5ub2RlcztcbiAgfSBjYXRjaCB7XG4gICAgLy8gRG8gbm90aGluZyBpZiB0aGUgdGVtcGxhdGUgY291bGRuJ3QgYmUgcGFyc2VkLiBXZSBkb24ndCB3YW50IHRvIHRocm93IGFueVxuICAgIC8vIGV4Y2VwdGlvbiBpZiBhIHRlbXBsYXRlIGlzIHN5bnRhY3RpY2FsbHkgbm90IHZhbGlkLiBlLmcuIHRlbXBsYXRlIGNvdWxkIGJlXG4gICAgLy8gdXNpbmcgcHJlcHJvY2Vzc29yIHN5bnRheC5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
@@ -1,74 +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 { JsonParseMode, normalize, parseJson } from '@angular-devkit/core';
9
- /** Name of the default Angular CLI workspace configuration files. */
10
- const defaultWorkspaceConfigPaths = ['/angular.json', '/.angular.json'];
11
- /**
12
- * Gets all tsconfig paths from a CLI project by reading the workspace configuration
13
- * and looking for common tsconfig locations.
14
- */
15
- export function getProjectTsConfigPaths(tree) {
16
- // Start with some tsconfig paths that are generally used within CLI projects. Note
17
- // that we are not interested in IDE-specific tsconfig files (e.g. /tsconfig.json)
18
- const buildPaths = new Set(['src/tsconfig.app.json']);
19
- const testPaths = new Set(['src/tsconfig.spec.json']);
20
- // Add any tsconfig directly referenced in a build or test task of the angular.json workspace.
21
- const workspace = getWorkspaceConfigGracefully(tree);
22
- if (workspace) {
23
- const projects = Object.keys(workspace.projects).map(name => workspace.projects[name]);
24
- for (const project of projects) {
25
- const buildPath = getTargetTsconfigPath(project, 'build');
26
- const testPath = getTargetTsconfigPath(project, 'test');
27
- if (buildPath) {
28
- buildPaths.add(buildPath);
29
- }
30
- if (testPath) {
31
- testPaths.add(testPath);
32
- }
33
- }
34
- }
35
- // Filter out tsconfig files that don't exist in the CLI project.
36
- return {
37
- buildPaths: Array.from(buildPaths).filter(p => tree.exists(p)),
38
- testPaths: Array.from(testPaths).filter(p => tree.exists(p)),
39
- };
40
- }
41
- /** Gets the tsconfig path from the given target within the specified project. */
42
- function getTargetTsconfigPath(project, targetName) {
43
- if (project.targets && project.targets[targetName] && project.targets[targetName].options &&
44
- project.targets[targetName].options.tsConfig) {
45
- return normalize(project.targets[targetName].options.tsConfig);
46
- }
47
- if (project.architect && project.architect[targetName] && project.architect[targetName].options &&
48
- project.architect[targetName].options.tsConfig) {
49
- return normalize(project.architect[targetName].options.tsConfig);
50
- }
51
- return null;
52
- }
53
- /**
54
- * Resolve the workspace configuration of the specified tree gracefully. We cannot use the utility
55
- * functions from the default Angular schematics because those might not be present in older
56
- * versions of the CLI. Also it's important to resolve the workspace gracefully because
57
- * the CLI project could be still using `.angular-cli.json` instead of thew new config.
58
- */
59
- function getWorkspaceConfigGracefully(tree) {
60
- const path = defaultWorkspaceConfigPaths.find(filePath => tree.exists(filePath));
61
- const configBuffer = tree.read(path);
62
- if (!path || !configBuffer) {
63
- return null;
64
- }
65
- try {
66
- // Parse the workspace file as JSON5 which is also supported for CLI
67
- // workspace configurations.
68
- return parseJson(configBuffer.toString(), JsonParseMode.Json5);
69
- }
70
- catch (e) {
71
- return null;
72
- }
73
- }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdF90c2NvbmZpZ19wYXRocy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy91dGlscy9wcm9qZWN0X3RzY29uZmlnX3BhdGhzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSXpFLHFFQUFxRTtBQUNyRSxNQUFNLDJCQUEyQixHQUFHLENBQUMsZUFBZSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFFeEU7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBQVU7SUFDaEQsbUZBQW1GO0lBQ25GLGtGQUFrRjtJQUNsRixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztJQUM5RCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUU5RCw4RkFBOEY7SUFDOUYsTUFBTSxTQUFTLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckQsSUFBSSxTQUFTLEVBQUU7UUFDYixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkYsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7WUFDOUIsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzFELE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV4RCxJQUFJLFNBQVMsRUFBRTtnQkFDYixVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzNCO1lBRUQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN6QjtTQUNGO0tBQ0Y7SUFFRCxpRUFBaUU7SUFDakUsT0FBTztRQUNMLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3RCxDQUFDO0FBQ0osQ0FBQztBQUVELGlGQUFpRjtBQUNqRixTQUFTLHFCQUFxQixDQUFDLE9BQXlCLEVBQUUsVUFBa0I7SUFDMUUsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPO1FBQ3JGLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtRQUNoRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNoRTtJQUVELElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTztRQUMzRixPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7UUFDbEQsT0FBTyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbEU7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsNEJBQTRCLENBQUMsSUFBVTtJQUM5QyxNQUFNLElBQUksR0FBRywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDakYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFLLENBQUMsQ0FBQztJQUV0QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxJQUFJO1FBQ0Ysb0VBQW9FO1FBQ3BFLDRCQUE0QjtRQUM1QixPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2hFO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLElBQUksQ0FBQztLQUNiO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0pzb25QYXJzZU1vZGUsIG5vcm1hbGl6ZSwgcGFyc2VKc29ufSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQge1RyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7V29ya3NwYWNlUHJvamVjdH0gZnJvbSAnQHNjaGVtYXRpY3MvYW5ndWxhci91dGlsaXR5L3dvcmtzcGFjZS1tb2RlbHMnO1xuXG4vKiogTmFtZSBvZiB0aGUgZGVmYXVsdCBBbmd1bGFyIENMSSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvbiBmaWxlcy4gKi9cbmNvbnN0IGRlZmF1bHRXb3Jrc3BhY2VDb25maWdQYXRocyA9IFsnL2FuZ3VsYXIuanNvbicsICcvLmFuZ3VsYXIuanNvbiddO1xuXG4vKipcbiAqIEdldHMgYWxsIHRzY29uZmlnIHBhdGhzIGZyb20gYSBDTEkgcHJvamVjdCBieSByZWFkaW5nIHRoZSB3b3Jrc3BhY2UgY29uZmlndXJhdGlvblxuICogYW5kIGxvb2tpbmcgZm9yIGNvbW1vbiB0c2NvbmZpZyBsb2NhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9qZWN0VHNDb25maWdQYXRocyh0cmVlOiBUcmVlKToge2J1aWxkUGF0aHM6IHN0cmluZ1tdLCB0ZXN0UGF0aHM6IHN0cmluZ1tdfSB7XG4gIC8vIFN0YXJ0IHdpdGggc29tZSB0c2NvbmZpZyBwYXRocyB0aGF0IGFyZSBnZW5lcmFsbHkgdXNlZCB3aXRoaW4gQ0xJIHByb2plY3RzLiBOb3RlXG4gIC8vIHRoYXQgd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIElERS1zcGVjaWZpYyB0c2NvbmZpZyBmaWxlcyAoZS5nLiAvdHNjb25maWcuanNvbilcbiAgY29uc3QgYnVpbGRQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPihbJ3NyYy90c2NvbmZpZy5hcHAuanNvbiddKTtcbiAgY29uc3QgdGVzdFBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFsnc3JjL3RzY29uZmlnLnNwZWMuanNvbiddKTtcblxuICAvLyBBZGQgYW55IHRzY29uZmlnIGRpcmVjdGx5IHJlZmVyZW5jZWQgaW4gYSBidWlsZCBvciB0ZXN0IHRhc2sgb2YgdGhlIGFuZ3VsYXIuanNvbiB3b3Jrc3BhY2UuXG4gIGNvbnN0IHdvcmtzcGFjZSA9IGdldFdvcmtzcGFjZUNvbmZpZ0dyYWNlZnVsbHkodHJlZSk7XG5cbiAgaWYgKHdvcmtzcGFjZSkge1xuICAgIGNvbnN0IHByb2plY3RzID0gT2JqZWN0LmtleXMod29ya3NwYWNlLnByb2plY3RzKS5tYXAobmFtZSA9PiB3b3Jrc3BhY2UucHJvamVjdHNbbmFtZV0pO1xuICAgIGZvciAoY29uc3QgcHJvamVjdCBvZiBwcm9qZWN0cykge1xuICAgICAgY29uc3QgYnVpbGRQYXRoID0gZ2V0VGFyZ2V0VHNjb25maWdQYXRoKHByb2plY3QsICdidWlsZCcpO1xuICAgICAgY29uc3QgdGVzdFBhdGggPSBnZXRUYXJnZXRUc2NvbmZpZ1BhdGgocHJvamVjdCwgJ3Rlc3QnKTtcblxuICAgICAgaWYgKGJ1aWxkUGF0aCkge1xuICAgICAgICBidWlsZFBhdGhzLmFkZChidWlsZFBhdGgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGVzdFBhdGgpIHtcbiAgICAgICAgdGVzdFBhdGhzLmFkZCh0ZXN0UGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRmlsdGVyIG91dCB0c2NvbmZpZyBmaWxlcyB0aGF0IGRvbid0IGV4aXN0IGluIHRoZSBDTEkgcHJvamVjdC5cbiAgcmV0dXJuIHtcbiAgICBidWlsZFBhdGhzOiBBcnJheS5mcm9tKGJ1aWxkUGF0aHMpLmZpbHRlcihwID0+IHRyZWUuZXhpc3RzKHApKSxcbiAgICB0ZXN0UGF0aHM6IEFycmF5LmZyb20odGVzdFBhdGhzKS5maWx0ZXIocCA9PiB0cmVlLmV4aXN0cyhwKSksXG4gIH07XG59XG5cbi8qKiBHZXRzIHRoZSB0c2NvbmZpZyBwYXRoIGZyb20gdGhlIGdpdmVuIHRhcmdldCB3aXRoaW4gdGhlIHNwZWNpZmllZCBwcm9qZWN0LiAqL1xuZnVuY3Rpb24gZ2V0VGFyZ2V0VHNjb25maWdQYXRoKHByb2plY3Q6IFdvcmtzcGFjZVByb2plY3QsIHRhcmdldE5hbWU6IHN0cmluZyk6IHN0cmluZ3xudWxsIHtcbiAgaWYgKHByb2plY3QudGFyZ2V0cyAmJiBwcm9qZWN0LnRhcmdldHNbdGFyZ2V0TmFtZV0gJiYgcHJvamVjdC50YXJnZXRzW3RhcmdldE5hbWVdLm9wdGlvbnMgJiZcbiAgICAgIHByb2plY3QudGFyZ2V0c1t0YXJnZXROYW1lXS5vcHRpb25zLnRzQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZShwcm9qZWN0LnRhcmdldHNbdGFyZ2V0TmFtZV0ub3B0aW9ucy50c0NvbmZpZyk7XG4gIH1cblxuICBpZiAocHJvamVjdC5hcmNoaXRlY3QgJiYgcHJvamVjdC5hcmNoaXRlY3RbdGFyZ2V0TmFtZV0gJiYgcHJvamVjdC5hcmNoaXRlY3RbdGFyZ2V0TmFtZV0ub3B0aW9ucyAmJlxuICAgICAgcHJvamVjdC5hcmNoaXRlY3RbdGFyZ2V0TmFtZV0ub3B0aW9ucy50c0NvbmZpZykge1xuICAgIHJldHVybiBub3JtYWxpemUocHJvamVjdC5hcmNoaXRlY3RbdGFyZ2V0TmFtZV0ub3B0aW9ucy50c0NvbmZpZyk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgd29ya3NwYWNlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNwZWNpZmllZCB0cmVlIGdyYWNlZnVsbHkuIFdlIGNhbm5vdCB1c2UgdGhlIHV0aWxpdHlcbiAqIGZ1bmN0aW9ucyBmcm9tIHRoZSBkZWZhdWx0IEFuZ3VsYXIgc2NoZW1hdGljcyBiZWNhdXNlIHRob3NlIG1pZ2h0IG5vdCBiZSBwcmVzZW50IGluIG9sZGVyXG4gKiB2ZXJzaW9ucyBvZiB0aGUgQ0xJLiBBbHNvIGl0J3MgaW1wb3J0YW50IHRvIHJlc29sdmUgdGhlIHdvcmtzcGFjZSBncmFjZWZ1bGx5IGJlY2F1c2VcbiAqIHRoZSBDTEkgcHJvamVjdCBjb3VsZCBiZSBzdGlsbCB1c2luZyBgLmFuZ3VsYXItY2xpLmpzb25gIGluc3RlYWQgb2YgdGhldyBuZXcgY29uZmlnLlxuICovXG5mdW5jdGlvbiBnZXRXb3Jrc3BhY2VDb25maWdHcmFjZWZ1bGx5KHRyZWU6IFRyZWUpOiBhbnkge1xuICBjb25zdCBwYXRoID0gZGVmYXVsdFdvcmtzcGFjZUNvbmZpZ1BhdGhzLmZpbmQoZmlsZVBhdGggPT4gdHJlZS5leGlzdHMoZmlsZVBhdGgpKTtcbiAgY29uc3QgY29uZmlnQnVmZmVyID0gdHJlZS5yZWFkKHBhdGghKTtcblxuICBpZiAoIXBhdGggfHwgIWNvbmZpZ0J1ZmZlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBQYXJzZSB0aGUgd29ya3NwYWNlIGZpbGUgYXMgSlNPTjUgd2hpY2ggaXMgYWxzbyBzdXBwb3J0ZWQgZm9yIENMSVxuICAgIC8vIHdvcmtzcGFjZSBjb25maWd1cmF0aW9ucy5cbiAgICByZXR1cm4gcGFyc2VKc29uKGNvbmZpZ0J1ZmZlci50b1N0cmluZygpLCBKc29uUGFyc2VNb2RlLkpzb241KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
@@ -1,30 +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
- let resolvedInquirerModule;
9
- try {
10
- // "inquirer" is the prompt module also used by the devkit schematics CLI
11
- // in order to show prompts for schematics. We transitively depend on this
12
- // module, but don't want to throw an exception if the module is not
13
- // installed for some reason. In that case prompts are just not supported.
14
- resolvedInquirerModule = require('inquirer');
15
- }
16
- catch (e) {
17
- resolvedInquirerModule = null;
18
- }
19
- /** Whether prompts are currently supported. */
20
- export function supportsPrompt() {
21
- return !!resolvedInquirerModule && !!process.stdin.isTTY;
22
- }
23
- /**
24
- * Gets the resolved instance of "inquirer" which can be used to programmatically
25
- * create prompts.
26
- */
27
- export function getInquirer() {
28
- return resolvedInquirerModule;
29
- }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hdGljc19wcm9tcHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvdXRpbHMvc2NoZW1hdGljc19wcm9tcHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBSUgsSUFBSSxzQkFBcUMsQ0FBQztBQUUxQyxJQUFJO0lBQ0YseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSxvRUFBb0U7SUFDcEUsMEVBQTBFO0lBQzFFLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztDQUM5QztBQUFDLE9BQU8sQ0FBQyxFQUFFO0lBQ1Ysc0JBQXNCLEdBQUcsSUFBSSxDQUFDO0NBQy9CO0FBRUQsK0NBQStDO0FBQy9DLE1BQU0sVUFBVSxjQUFjO0lBQzVCLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUMzRCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFdBQVc7SUFDekIsT0FBTyxzQkFBdUIsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbnR5cGUgSW5xdWlyZXIgPSB0eXBlb2YgaW1wb3J0KCdpbnF1aXJlcicpO1xuXG5sZXQgcmVzb2x2ZWRJbnF1aXJlck1vZHVsZTogSW5xdWlyZXJ8bnVsbDtcblxudHJ5IHtcbiAgLy8gXCJpbnF1aXJlclwiIGlzIHRoZSBwcm9tcHQgbW9kdWxlIGFsc28gdXNlZCBieSB0aGUgZGV2a2l0IHNjaGVtYXRpY3MgQ0xJXG4gIC8vIGluIG9yZGVyIHRvIHNob3cgcHJvbXB0cyBmb3Igc2NoZW1hdGljcy4gV2UgdHJhbnNpdGl2ZWx5IGRlcGVuZCBvbiB0aGlzXG4gIC8vIG1vZHVsZSwgYnV0IGRvbid0IHdhbnQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBtb2R1bGUgaXMgbm90XG4gIC8vIGluc3RhbGxlZCBmb3Igc29tZSByZWFzb24uIEluIHRoYXQgY2FzZSBwcm9tcHRzIGFyZSBqdXN0IG5vdCBzdXBwb3J0ZWQuXG4gIHJlc29sdmVkSW5xdWlyZXJNb2R1bGUgPSByZXF1aXJlKCdpbnF1aXJlcicpO1xufSBjYXRjaCAoZSkge1xuICByZXNvbHZlZElucXVpcmVyTW9kdWxlID0gbnVsbDtcbn1cblxuLyoqIFdoZXRoZXIgcHJvbXB0cyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c1Byb21wdCgpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhcmVzb2x2ZWRJbnF1aXJlck1vZHVsZSAmJiAhIXByb2Nlc3Muc3RkaW4uaXNUVFk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcmVzb2x2ZWQgaW5zdGFuY2Ugb2YgXCJpbnF1aXJlclwiIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHByb2dyYW1tYXRpY2FsbHlcbiAqIGNyZWF0ZSBwcm9tcHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5xdWlyZXIoKTogSW5xdWlyZXIge1xuICByZXR1cm4gcmVzb2x2ZWRJbnF1aXJlck1vZHVsZSE7XG59XG4iXX0=
@@ -1,33 +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 * as ts from 'typescript';
9
- /** Determines the base type identifiers of a specified class declaration. */
10
- export function getBaseTypeIdentifiers(node) {
11
- if (!node.heritageClauses) {
12
- return null;
13
- }
14
- return node.heritageClauses.filter(clause => clause.token === ts.SyntaxKind.ExtendsKeyword)
15
- .reduce((types, clause) => types.concat(clause.types), [])
16
- .map(typeExpression => typeExpression.expression)
17
- .filter(ts.isIdentifier);
18
- }
19
- /** Gets the first found parent class declaration of a given node. */
20
- export function findParentClassDeclaration(node) {
21
- while (!ts.isClassDeclaration(node)) {
22
- if (ts.isSourceFile(node)) {
23
- return null;
24
- }
25
- node = node.parent;
26
- }
27
- return node;
28
- }
29
- /** Checks whether the given class declaration has an explicit constructor or not. */
30
- export function hasExplicitConstructor(node) {
31
- return node.members.some(ts.isConstructorDeclaration);
32
- }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3NfZGVjbGFyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvdXRpbHMvdHlwZXNjcmlwdC9jbGFzc19kZWNsYXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyw2RUFBNkU7QUFDN0UsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQXlCO0lBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztTQUN0RixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFzQyxDQUFDO1NBQzdGLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7U0FDaEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQscUVBQXFFO0FBQ3JFLE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxJQUFhO0lBQ3RELE9BQU8sQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDbkMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUNwQjtJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsc0JBQXNCLENBQUMsSUFBeUI7SUFDOUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKiogRGV0ZXJtaW5lcyB0aGUgYmFzZSB0eXBlIGlkZW50aWZpZXJzIG9mIGEgc3BlY2lmaWVkIGNsYXNzIGRlY2xhcmF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VUeXBlSWRlbnRpZmllcnMobm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbik6IHRzLklkZW50aWZpZXJbXXxudWxsIHtcbiAgaWYgKCFub2RlLmhlcml0YWdlQ2xhdXNlcykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5vZGUuaGVyaXRhZ2VDbGF1c2VzLmZpbHRlcihjbGF1c2UgPT4gY2xhdXNlLnRva2VuID09PSB0cy5TeW50YXhLaW5kLkV4dGVuZHNLZXl3b3JkKVxuICAgICAgLnJlZHVjZSgodHlwZXMsIGNsYXVzZSkgPT4gdHlwZXMuY29uY2F0KGNsYXVzZS50eXBlcyksIFtdIGFzIHRzLkV4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50c1tdKVxuICAgICAgLm1hcCh0eXBlRXhwcmVzc2lvbiA9PiB0eXBlRXhwcmVzc2lvbi5leHByZXNzaW9uKVxuICAgICAgLmZpbHRlcih0cy5pc0lkZW50aWZpZXIpO1xufVxuXG4vKiogR2V0cyB0aGUgZmlyc3QgZm91bmQgcGFyZW50IGNsYXNzIGRlY2xhcmF0aW9uIG9mIGEgZ2l2ZW4gbm9kZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kUGFyZW50Q2xhc3NEZWNsYXJhdGlvbihub2RlOiB0cy5Ob2RlKTogdHMuQ2xhc3NEZWNsYXJhdGlvbnxudWxsIHtcbiAgd2hpbGUgKCF0cy5pc0NsYXNzRGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICBpZiAodHMuaXNTb3VyY2VGaWxlKG5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICB9XG4gIHJldHVybiBub2RlO1xufVxuXG4vKiogQ2hlY2tzIHdoZXRoZXIgdGhlIGdpdmVuIGNsYXNzIGRlY2xhcmF0aW9uIGhhcyBhbiBleHBsaWNpdCBjb25zdHJ1Y3RvciBvciBub3QuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRXhwbGljaXRDb25zdHJ1Y3Rvcihub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiBub2RlLm1lbWJlcnMuc29tZSh0cy5pc0NvbnN0cnVjdG9yRGVjbGFyYXRpb24pO1xufVxuIl19
@@ -1,66 +0,0 @@
1
- import { dirname, relative, resolve } from 'path';
2
- import * as ts from 'typescript';
3
- import { parseTsconfigFile } from './parse_tsconfig';
4
- /**
5
- * Creates a TypeScript program instance for a TypeScript project within
6
- * the virtual file system tree.
7
- * @param tree Virtual file system tree that contains the source files.
8
- * @param tsconfigPath Virtual file system path that resolves to the TypeScript project.
9
- * @param basePath Base path for the virtual file system tree.
10
- * @param fakeFileRead Optional file reader function. Can be used to overwrite files in
11
- * the TypeScript program, or to add in-memory files (e.g. to add global types).
12
- * @param additionalFiles Additional file paths that should be added to the program.
13
- */
14
- export function createMigrationProgram(tree, tsconfigPath, basePath, fakeFileRead, additionalFiles) {
15
- // Resolve the tsconfig path to an absolute path. This is needed as TypeScript otherwise
16
- // is not able to resolve root directories in the given tsconfig. More details can be found
17
- // in the following issue: https://github.com/microsoft/TypeScript/issues/37731.
18
- tsconfigPath = resolve(basePath, tsconfigPath);
19
- const parsed = parseTsconfigFile(tsconfigPath, dirname(tsconfigPath));
20
- const host = createMigrationCompilerHost(tree, parsed.options, basePath, fakeFileRead);
21
- const program = ts.createProgram(parsed.fileNames.concat(additionalFiles || []), parsed.options, host);
22
- return { parsed, host, program };
23
- }
24
- export function createMigrationCompilerHost(tree, options, basePath, fakeRead) {
25
- const host = ts.createCompilerHost(options, true);
26
- const defaultReadFile = host.readFile;
27
- // We need to overwrite the host "readFile" method, as we want the TypeScript
28
- // program to be based on the file contents in the virtual file tree. Otherwise
29
- // if we run multiple migrations we might have intersecting changes and
30
- // source files.
31
- host.readFile = fileName => {
32
- var _a;
33
- const treeRelativePath = relative(basePath, fileName);
34
- let result = fakeRead === null || fakeRead === void 0 ? void 0 : fakeRead(treeRelativePath);
35
- if (result === undefined) {
36
- // If the relative path resolved to somewhere outside of the tree, fall back to
37
- // TypeScript's default file reading function since the `tree` will throw an error.
38
- result = treeRelativePath.startsWith('..') ? defaultReadFile.call(host, fileName) :
39
- (_a = tree.read(treeRelativePath)) === null || _a === void 0 ? void 0 : _a.toString();
40
- }
41
- // Strip BOM as otherwise TSC methods (Ex: getWidth) will return an offset,
42
- // which breaks the CLI UpdateRecorder.
43
- // See: https://github.com/angular/angular/pull/30719
44
- return result ? result.replace(/^\uFEFF/, '') : undefined;
45
- };
46
- return host;
47
- }
48
- /**
49
- * Checks whether a file can be migrate by our automated migrations.
50
- * @param basePath Absolute path to the project.
51
- * @param sourceFile File being checked.
52
- * @param program Program that includes the source file.
53
- */
54
- export function canMigrateFile(basePath, sourceFile, program) {
55
- // We shouldn't migrate .d.ts files or files from an external library.
56
- if (sourceFile.isDeclarationFile || program.isSourceFileFromExternalLibrary(sourceFile)) {
57
- return false;
58
- }
59
- // Our migrations are set up to create a `Program` from the project's tsconfig and to migrate all
60
- // the files within the program. This can include files that are outside of the Angular CLI
61
- // project. We can't migrate files outside of the project, because our file system interactions
62
- // go through the CLI's `Tree` which assumes that all files are within the project. See:
63
- // https://github.com/angular/angular-cli/blob/0b0961c9c233a825b6e4bb59ab7f0790f9b14676/packages/angular_devkit/schematics/src/tree/host-tree.ts#L131
64
- return !relative(basePath, sourceFile.fileName).startsWith('..');
65
- }
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXJfaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy91dGlscy90eXBlc2NyaXB0L2NvbXBpbGVyX2hvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBSW5EOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDbEMsSUFBVSxFQUFFLFlBQW9CLEVBQUUsUUFBZ0IsRUFBRSxZQUE2QixFQUNqRixlQUEwQjtJQUM1Qix3RkFBd0Y7SUFDeEYsMkZBQTJGO0lBQzNGLGdGQUFnRjtJQUNoRixZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUMvQyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSxJQUFJLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sT0FBTyxHQUNULEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0YsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FDdkMsSUFBVSxFQUFFLE9BQTJCLEVBQUUsUUFBZ0IsRUFDekQsUUFBeUI7SUFDM0IsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNsRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBRXRDLDZFQUE2RTtJQUM3RSwrRUFBK0U7SUFDL0UsdUVBQXVFO0lBQ3ZFLGdCQUFnQjtJQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFOztRQUN6QixNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxNQUFNLEdBQXFCLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTVELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QiwrRUFBK0U7WUFDL0UsbUZBQW1GO1lBQ25GLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQywwQ0FBRSxRQUFRLEVBQUUsQ0FBQztTQUN0RjtRQUVELDJFQUEyRTtRQUMzRSx1Q0FBdUM7UUFDdkMscURBQXFEO1FBQ3JELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzVELENBQUMsQ0FBQztJQUVGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDMUIsUUFBZ0IsRUFBRSxVQUF5QixFQUFFLE9BQW1CO0lBQ2xFLHNFQUFzRTtJQUN0RSxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsK0JBQStCLENBQUMsVUFBVSxDQUFDLEVBQUU7UUFDdkYsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELGlHQUFpRztJQUNqRywyRkFBMkY7SUFDM0YsK0ZBQStGO0lBQy9GLHdGQUF3RjtJQUN4RixxSkFBcUo7SUFDckosT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge1RyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7ZGlybmFtZSwgcmVsYXRpdmUsIHJlc29sdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge3BhcnNlVHNjb25maWdGaWxlfSBmcm9tICcuL3BhcnNlX3RzY29uZmlnJztcblxuZXhwb3J0IHR5cGUgRmFrZVJlYWRGaWxlRm4gPSAoZmlsZU5hbWU6IHN0cmluZykgPT4gc3RyaW5nfHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgVHlwZVNjcmlwdCBwcm9ncmFtIGluc3RhbmNlIGZvciBhIFR5cGVTY3JpcHQgcHJvamVjdCB3aXRoaW5cbiAqIHRoZSB2aXJ0dWFsIGZpbGUgc3lzdGVtIHRyZWUuXG4gKiBAcGFyYW0gdHJlZSBWaXJ0dWFsIGZpbGUgc3lzdGVtIHRyZWUgdGhhdCBjb250YWlucyB0aGUgc291cmNlIGZpbGVzLlxuICogQHBhcmFtIHRzY29uZmlnUGF0aCBWaXJ0dWFsIGZpbGUgc3lzdGVtIHBhdGggdGhhdCByZXNvbHZlcyB0byB0aGUgVHlwZVNjcmlwdCBwcm9qZWN0LlxuICogQHBhcmFtIGJhc2VQYXRoIEJhc2UgcGF0aCBmb3IgdGhlIHZpcnR1YWwgZmlsZSBzeXN0ZW0gdHJlZS5cbiAqIEBwYXJhbSBmYWtlRmlsZVJlYWQgT3B0aW9uYWwgZmlsZSByZWFkZXIgZnVuY3Rpb24uIENhbiBiZSB1c2VkIHRvIG92ZXJ3cml0ZSBmaWxlcyBpblxuICogICB0aGUgVHlwZVNjcmlwdCBwcm9ncmFtLCBvciB0byBhZGQgaW4tbWVtb3J5IGZpbGVzIChlLmcuIHRvIGFkZCBnbG9iYWwgdHlwZXMpLlxuICogQHBhcmFtIGFkZGl0aW9uYWxGaWxlcyBBZGRpdGlvbmFsIGZpbGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHByb2dyYW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtKFxuICAgIHRyZWU6IFRyZWUsIHRzY29uZmlnUGF0aDogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nLCBmYWtlRmlsZVJlYWQ/OiBGYWtlUmVhZEZpbGVGbixcbiAgICBhZGRpdGlvbmFsRmlsZXM/OiBzdHJpbmdbXSkge1xuICAvLyBSZXNvbHZlIHRoZSB0c2NvbmZpZyBwYXRoIHRvIGFuIGFic29sdXRlIHBhdGguIFRoaXMgaXMgbmVlZGVkIGFzIFR5cGVTY3JpcHQgb3RoZXJ3aXNlXG4gIC8vIGlzIG5vdCBhYmxlIHRvIHJlc29sdmUgcm9vdCBkaXJlY3RvcmllcyBpbiB0aGUgZ2l2ZW4gdHNjb25maWcuIE1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmRcbiAgLy8gaW4gdGhlIGZvbGxvd2luZyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8zNzczMS5cbiAgdHNjb25maWdQYXRoID0gcmVzb2x2ZShiYXNlUGF0aCwgdHNjb25maWdQYXRoKTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VUc2NvbmZpZ0ZpbGUodHNjb25maWdQYXRoLCBkaXJuYW1lKHRzY29uZmlnUGF0aCkpO1xuICBjb25zdCBob3N0ID0gY3JlYXRlTWlncmF0aW9uQ29tcGlsZXJIb3N0KHRyZWUsIHBhcnNlZC5vcHRpb25zLCBiYXNlUGF0aCwgZmFrZUZpbGVSZWFkKTtcbiAgY29uc3QgcHJvZ3JhbSA9XG4gICAgICB0cy5jcmVhdGVQcm9ncmFtKHBhcnNlZC5maWxlTmFtZXMuY29uY2F0KGFkZGl0aW9uYWxGaWxlcyB8fCBbXSksIHBhcnNlZC5vcHRpb25zLCBob3N0KTtcbiAgcmV0dXJuIHtwYXJzZWQsIGhvc3QsIHByb2dyYW19O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWlncmF0aW9uQ29tcGlsZXJIb3N0KFxuICAgIHRyZWU6IFRyZWUsIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucywgYmFzZVBhdGg6IHN0cmluZyxcbiAgICBmYWtlUmVhZD86IEZha2VSZWFkRmlsZUZuKTogdHMuQ29tcGlsZXJIb3N0IHtcbiAgY29uc3QgaG9zdCA9IHRzLmNyZWF0ZUNvbXBpbGVySG9zdChvcHRpb25zLCB0cnVlKTtcbiAgY29uc3QgZGVmYXVsdFJlYWRGaWxlID0gaG9zdC5yZWFkRmlsZTtcblxuICAvLyBXZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgaG9zdCBcInJlYWRGaWxlXCIgbWV0aG9kLCBhcyB3ZSB3YW50IHRoZSBUeXBlU2NyaXB0XG4gIC8vIHByb2dyYW0gdG8gYmUgYmFzZWQgb24gdGhlIGZpbGUgY29udGVudHMgaW4gdGhlIHZpcnR1YWwgZmlsZSB0cmVlLiBPdGhlcndpc2VcbiAgLy8gaWYgd2UgcnVuIG11bHRpcGxlIG1pZ3JhdGlvbnMgd2UgbWlnaHQgaGF2ZSBpbnRlcnNlY3RpbmcgY2hhbmdlcyBhbmRcbiAgLy8gc291cmNlIGZpbGVzLlxuICBob3N0LnJlYWRGaWxlID0gZmlsZU5hbWUgPT4ge1xuICAgIGNvbnN0IHRyZWVSZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShiYXNlUGF0aCwgZmlsZU5hbWUpO1xuICAgIGxldCByZXN1bHQ6IHN0cmluZ3x1bmRlZmluZWQgPSBmYWtlUmVhZD8uKHRyZWVSZWxhdGl2ZVBhdGgpO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBJZiB0aGUgcmVsYXRpdmUgcGF0aCByZXNvbHZlZCB0byBzb21ld2hlcmUgb3V0c2lkZSBvZiB0aGUgdHJlZSwgZmFsbCBiYWNrIHRvXG4gICAgICAvLyBUeXBlU2NyaXB0J3MgZGVmYXVsdCBmaWxlIHJlYWRpbmcgZnVuY3Rpb24gc2luY2UgdGhlIGB0cmVlYCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAgcmVzdWx0ID0gdHJlZVJlbGF0aXZlUGF0aC5zdGFydHNXaXRoKCcuLicpID8gZGVmYXVsdFJlYWRGaWxlLmNhbGwoaG9zdCwgZmlsZU5hbWUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUucmVhZCh0cmVlUmVsYXRpdmVQYXRoKT8udG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBCT00gYXMgb3RoZXJ3aXNlIFRTQyBtZXRob2RzIChFeDogZ2V0V2lkdGgpIHdpbGwgcmV0dXJuIGFuIG9mZnNldCxcbiAgICAvLyB3aGljaCBicmVha3MgdGhlIENMSSBVcGRhdGVSZWNvcmRlci5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvcHVsbC8zMDcxOVxuICAgIHJldHVybiByZXN1bHQgPyByZXN1bHQucmVwbGFjZSgvXlxcdUZFRkYvLCAnJykgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgcmV0dXJuIGhvc3Q7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBmaWxlIGNhbiBiZSBtaWdyYXRlIGJ5IG91ciBhdXRvbWF0ZWQgbWlncmF0aW9ucy5cbiAqIEBwYXJhbSBiYXNlUGF0aCBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBwcm9qZWN0LlxuICogQHBhcmFtIHNvdXJjZUZpbGUgRmlsZSBiZWluZyBjaGVja2VkLlxuICogQHBhcmFtIHByb2dyYW0gUHJvZ3JhbSB0aGF0IGluY2x1ZGVzIHRoZSBzb3VyY2UgZmlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbk1pZ3JhdGVGaWxlKFxuICAgIGJhc2VQYXRoOiBzdHJpbmcsIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHByb2dyYW06IHRzLlByb2dyYW0pOiBib29sZWFuIHtcbiAgLy8gV2Ugc2hvdWxkbid0IG1pZ3JhdGUgLmQudHMgZmlsZXMgb3IgZmlsZXMgZnJvbSBhbiBleHRlcm5hbCBsaWJyYXJ5LlxuICBpZiAoc291cmNlRmlsZS5pc0RlY2xhcmF0aW9uRmlsZSB8fCBwcm9ncmFtLmlzU291cmNlRmlsZUZyb21FeHRlcm5hbExpYnJhcnkoc291cmNlRmlsZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBPdXIgbWlncmF0aW9ucyBhcmUgc2V0IHVwIHRvIGNyZWF0ZSBhIGBQcm9ncmFtYCBmcm9tIHRoZSBwcm9qZWN0J3MgdHNjb25maWcgYW5kIHRvIG1pZ3JhdGUgYWxsXG4gIC8vIHRoZSBmaWxlcyB3aXRoaW4gdGhlIHByb2dyYW0uIFRoaXMgY2FuIGluY2x1ZGUgZmlsZXMgdGhhdCBhcmUgb3V0c2lkZSBvZiB0aGUgQW5ndWxhciBDTElcbiAgLy8gcHJvamVjdC4gV2UgY2FuJ3QgbWlncmF0ZSBmaWxlcyBvdXRzaWRlIG9mIHRoZSBwcm9qZWN0LCBiZWNhdXNlIG91ciBmaWxlIHN5c3RlbSBpbnRlcmFjdGlvbnNcbiAgLy8gZ28gdGhyb3VnaCB0aGUgQ0xJJ3MgYFRyZWVgIHdoaWNoIGFzc3VtZXMgdGhhdCBhbGwgZmlsZXMgYXJlIHdpdGhpbiB0aGUgcHJvamVjdC4gU2VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLWNsaS9ibG9iLzBiMDk2MWM5YzIzM2E4MjViNmU0YmI1OWFiN2YwNzkwZjliMTQ2NzYvcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvc2NoZW1hdGljcy9zcmMvdHJlZS9ob3N0LXRyZWUudHMjTDEzMVxuICByZXR1cm4gIXJlbGF0aXZlKGJhc2VQYXRoLCBzb3VyY2VGaWxlLmZpbGVOYW1lKS5zdGFydHNXaXRoKCcuLicpO1xufVxuIl19
@@ -1,20 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import * as ts from 'typescript';
9
- import { getImportOfIdentifier } from './imports';
10
- export function getCallDecoratorImport(typeChecker, decorator) {
11
- // Note that this does not cover the edge case where decorators are called from
12
- // a namespace import: e.g. "@core.Component()". This is not handled by Ngtsc either.
13
- if (!ts.isCallExpression(decorator.expression) ||
14
- !ts.isIdentifier(decorator.expression.expression)) {
15
- return null;
16
- }
17
- const identifier = decorator.expression.expression;
18
- return getImportOfIdentifier(typeChecker, identifier);
19
- }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy91dGlscy90eXBlc2NyaXB0L2RlY29yYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakMsT0FBTyxFQUFDLHFCQUFxQixFQUFTLE1BQU0sV0FBVyxDQUFDO0FBRXhELE1BQU0sVUFBVSxzQkFBc0IsQ0FDbEMsV0FBMkIsRUFBRSxTQUF1QjtJQUN0RCwrRUFBK0U7SUFDL0UscUZBQXFGO0lBQ3JGLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQUMxQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUNyRCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDbkQsT0FBTyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDeEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtnZXRJbXBvcnRPZklkZW50aWZpZXIsIEltcG9ydH0gZnJvbSAnLi9pbXBvcnRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENhbGxEZWNvcmF0b3JJbXBvcnQoXG4gICAgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCBkZWNvcmF0b3I6IHRzLkRlY29yYXRvcik6IEltcG9ydHxudWxsIHtcbiAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgY292ZXIgdGhlIGVkZ2UgY2FzZSB3aGVyZSBkZWNvcmF0b3JzIGFyZSBjYWxsZWQgZnJvbVxuICAvLyBhIG5hbWVzcGFjZSBpbXBvcnQ6IGUuZy4gXCJAY29yZS5Db21wb25lbnQoKVwiLiBUaGlzIGlzIG5vdCBoYW5kbGVkIGJ5IE5ndHNjIGVpdGhlci5cbiAgaWYgKCF0cy5pc0NhbGxFeHByZXNzaW9uKGRlY29yYXRvci5leHByZXNzaW9uKSB8fFxuICAgICAgIXRzLmlzSWRlbnRpZmllcihkZWNvcmF0b3IuZXhwcmVzc2lvbi5leHByZXNzaW9uKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaWRlbnRpZmllciA9IGRlY29yYXRvci5leHByZXNzaW9uLmV4cHJlc3Npb247XG4gIHJldHVybiBnZXRJbXBvcnRPZklkZW50aWZpZXIodHlwZUNoZWNrZXIsIGlkZW50aWZpZXIpO1xufVxuIl19
@@ -1,30 +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 * as ts from 'typescript';
9
- import { getBaseTypeIdentifiers } from './class_declaration';
10
- /** Gets all base class declarations of the specified class declaration. */
11
- export function findBaseClassDeclarations(node, typeChecker) {
12
- const result = [];
13
- let currentClass = node;
14
- while (currentClass) {
15
- const baseTypes = getBaseTypeIdentifiers(currentClass);
16
- if (!baseTypes || baseTypes.length !== 1) {
17
- break;
18
- }
19
- const symbol = typeChecker.getTypeAtLocation(baseTypes[0]).getSymbol();
20
- // Note: `ts.Symbol#valueDeclaration` can be undefined. TypeScript has an incorrect type
21
- // for this: https://github.com/microsoft/TypeScript/issues/24706.
22
- if (!symbol || !symbol.valueDeclaration || !ts.isClassDeclaration(symbol.valueDeclaration)) {
23
- break;
24
- }
25
- result.push({ identifier: baseTypes[0], node: symbol.valueDeclaration });
26
- currentClass = symbol.valueDeclaration;
27
- }
28
- return result;
29
- }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZF9iYXNlX2NsYXNzZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvdXRpbHMvdHlwZXNjcmlwdC9maW5kX2Jhc2VfY2xhc3Nlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqQyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUUzRCwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLHlCQUF5QixDQUFDLElBQXlCLEVBQUUsV0FBMkI7SUFDOUYsTUFBTSxNQUFNLEdBQTZELEVBQUUsQ0FBQztJQUM1RSxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7SUFFeEIsT0FBTyxZQUFZLEVBQUU7UUFDbkIsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QyxNQUFNO1NBQ1A7UUFDRCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkUsd0ZBQXdGO1FBQ3hGLGtFQUFrRTtRQUNsRSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQzFGLE1BQU07U0FDUDtRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsZ0JBQWdCLEVBQUMsQ0FBQyxDQUFDO1FBQ3ZFLFlBQVksR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7S0FDeEM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtnZXRCYXNlVHlwZUlkZW50aWZpZXJzfSBmcm9tICcuL2NsYXNzX2RlY2xhcmF0aW9uJztcblxuLyoqIEdldHMgYWxsIGJhc2UgY2xhc3MgZGVjbGFyYXRpb25zIG9mIHRoZSBzcGVjaWZpZWQgY2xhc3MgZGVjbGFyYXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEJhc2VDbGFzc0RlY2xhcmF0aW9ucyhub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpIHtcbiAgY29uc3QgcmVzdWx0OiB7aWRlbnRpZmllcjogdHMuSWRlbnRpZmllciwgbm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbn1bXSA9IFtdO1xuICBsZXQgY3VycmVudENsYXNzID0gbm9kZTtcblxuICB3aGlsZSAoY3VycmVudENsYXNzKSB7XG4gICAgY29uc3QgYmFzZVR5cGVzID0gZ2V0QmFzZVR5cGVJZGVudGlmaWVycyhjdXJyZW50Q2xhc3MpO1xuICAgIGlmICghYmFzZVR5cGVzIHx8IGJhc2VUeXBlcy5sZW5ndGggIT09IDEpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdCBzeW1ib2wgPSB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihiYXNlVHlwZXNbMF0pLmdldFN5bWJvbCgpO1xuICAgIC8vIE5vdGU6IGB0cy5TeW1ib2wjdmFsdWVEZWNsYXJhdGlvbmAgY2FuIGJlIHVuZGVmaW5lZC4gVHlwZVNjcmlwdCBoYXMgYW4gaW5jb3JyZWN0IHR5cGVcbiAgICAvLyBmb3IgdGhpczogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNDcwNi5cbiAgICBpZiAoIXN5bWJvbCB8fCAhc3ltYm9sLnZhbHVlRGVjbGFyYXRpb24gfHwgIXRzLmlzQ2xhc3NEZWNsYXJhdGlvbihzeW1ib2wudmFsdWVEZWNsYXJhdGlvbikpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXN1bHQucHVzaCh7aWRlbnRpZmllcjogYmFzZVR5cGVzWzBdLCBub2RlOiBzeW1ib2wudmFsdWVEZWNsYXJhdGlvbn0pO1xuICAgIGN1cnJlbnRDbGFzcyA9IHN5bWJvbC52YWx1ZURlY2xhcmF0aW9uO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
@@ -1,28 +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 * as ts from 'typescript';
9
- /** Checks whether a given node is a function like declaration. */
10
- export function isFunctionLikeDeclaration(node) {
11
- return ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) ||
12
- ts.isArrowFunction(node) || ts.isFunctionExpression(node) ||
13
- ts.isGetAccessorDeclaration(node) || ts.isSetAccessorDeclaration(node);
14
- }
15
- /**
16
- * Unwraps a given expression TypeScript node. Expressions can be wrapped within multiple
17
- * parentheses or as expression. e.g. "(((({exp}))))()". The function should return the
18
- * TypeScript node referring to the inner expression. e.g "exp".
19
- */
20
- export function unwrapExpression(node) {
21
- if (ts.isParenthesizedExpression(node) || ts.isAsExpression(node)) {
22
- return unwrapExpression(node.expression);
23
- }
24
- else {
25
- return node;
26
- }
27
- }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL3V0aWxzL3R5cGVzY3JpcHQvZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLGtFQUFrRTtBQUNsRSxNQUFNLFVBQVUseUJBQXlCLENBQUMsSUFBYTtJQUNyRCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBQ2pFLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztRQUN6RCxFQUFFLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLElBQThDO0lBQzdFLElBQUksRUFBRSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDakUsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDMUM7U0FBTTtRQUNMLE9BQU8sSUFBSSxDQUFDO0tBQ2I7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKiogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBub2RlIGlzIGEgZnVuY3Rpb24gbGlrZSBkZWNsYXJhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uTGlrZURlY2xhcmF0aW9uKG5vZGU6IHRzLk5vZGUpOiBub2RlIGlzIHRzLkZ1bmN0aW9uTGlrZURlY2xhcmF0aW9uIHtcbiAgcmV0dXJuIHRzLmlzRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKSB8fCB0cy5pc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpIHx8XG4gICAgICB0cy5pc0Fycm93RnVuY3Rpb24obm9kZSkgfHwgdHMuaXNGdW5jdGlvbkV4cHJlc3Npb24obm9kZSkgfHxcbiAgICAgIHRzLmlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKSB8fCB0cy5pc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSk7XG59XG5cbi8qKlxuICogVW53cmFwcyBhIGdpdmVuIGV4cHJlc3Npb24gVHlwZVNjcmlwdCBub2RlLiBFeHByZXNzaW9ucyBjYW4gYmUgd3JhcHBlZCB3aXRoaW4gbXVsdGlwbGVcbiAqIHBhcmVudGhlc2VzIG9yIGFzIGV4cHJlc3Npb24uIGUuZy4gXCIoKCgoe2V4cH0pKSkpKClcIi4gVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlXG4gKiBUeXBlU2NyaXB0IG5vZGUgcmVmZXJyaW5nIHRvIHRoZSBpbm5lciBleHByZXNzaW9uLiBlLmcgXCJleHBcIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcEV4cHJlc3Npb24obm9kZTogdHMuRXhwcmVzc2lvbnx0cy5QYXJlbnRoZXNpemVkRXhwcmVzc2lvbik6IHRzLkV4cHJlc3Npb24ge1xuICBpZiAodHMuaXNQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihub2RlKSB8fCB0cy5pc0FzRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybiB1bndyYXBFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbn1cbiJdfQ==
@@ -1,91 +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 * as ts from 'typescript';
9
- /** Gets import information about the specified identifier by using the Type checker. */
10
- export function getImportOfIdentifier(typeChecker, node) {
11
- const symbol = typeChecker.getSymbolAtLocation(node);
12
- if (!symbol || symbol.declarations === undefined || !symbol.declarations.length) {
13
- return null;
14
- }
15
- const decl = symbol.declarations[0];
16
- if (!ts.isImportSpecifier(decl)) {
17
- return null;
18
- }
19
- const importDecl = decl.parent.parent.parent;
20
- if (!ts.isStringLiteral(importDecl.moduleSpecifier)) {
21
- return null;
22
- }
23
- return {
24
- // Handles aliased imports: e.g. "import {Component as myComp} from ...";
25
- name: decl.propertyName ? decl.propertyName.text : decl.name.text,
26
- importModule: importDecl.moduleSpecifier.text,
27
- node: importDecl
28
- };
29
- }
30
- /**
31
- * Gets a top-level import specifier with a specific name that is imported from a particular module.
32
- * E.g. given a file that looks like:
33
- *
34
- * ```
35
- * import { Component, Directive } from '@angular/core';
36
- * import { Foo } from './foo';
37
- * ```
38
- *
39
- * Calling `getImportSpecifier(sourceFile, '@angular/core', 'Directive')` will yield the node
40
- * referring to `Directive` in the top import.
41
- *
42
- * @param sourceFile File in which to look for imports.
43
- * @param moduleName Name of the import's module.
44
- * @param specifierName Original name of the specifier to look for. Aliases will be resolved to
45
- * their original name.
46
- */
47
- export function getImportSpecifier(sourceFile, moduleName, specifierName) {
48
- for (const node of sourceFile.statements) {
49
- if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier) &&
50
- node.moduleSpecifier.text === moduleName) {
51
- const namedBindings = node.importClause && node.importClause.namedBindings;
52
- if (namedBindings && ts.isNamedImports(namedBindings)) {
53
- const match = findImportSpecifier(namedBindings.elements, specifierName);
54
- if (match) {
55
- return match;
56
- }
57
- }
58
- }
59
- }
60
- return null;
61
- }
62
- /**
63
- * Replaces an import inside a named imports node with a different one.
64
- * @param node Node that contains the imports.
65
- * @param existingImport Import that should be replaced.
66
- * @param newImportName Import that should be inserted.
67
- */
68
- export function replaceImport(node, existingImport, newImportName) {
69
- const isAlreadyImported = findImportSpecifier(node.elements, newImportName);
70
- if (isAlreadyImported) {
71
- return node;
72
- }
73
- const existingImportNode = findImportSpecifier(node.elements, existingImport);
74
- if (!existingImportNode) {
75
- return node;
76
- }
77
- return ts.updateNamedImports(node, [
78
- ...node.elements.filter(current => current !== existingImportNode),
79
- // Create a new import while trying to preserve the alias of the old one.
80
- ts.createImportSpecifier(existingImportNode.propertyName ? ts.createIdentifier(newImportName) : undefined, existingImportNode.propertyName ? existingImportNode.name :
81
- ts.createIdentifier(newImportName))
82
- ]);
83
- }
84
- /** Finds an import specifier with a particular name. */
85
- export function findImportSpecifier(nodes, specifierName) {
86
- return nodes.find(element => {
87
- const { name, propertyName } = element;
88
- return propertyName ? propertyName.text === specifierName : name.text === specifierName;
89
- });
90
- }
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy91dGlscy90eXBlc2NyaXB0L2ltcG9ydHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFRakMsd0ZBQXdGO0FBQ3hGLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxXQUEyQixFQUFFLElBQW1CO0lBRXBGLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVyRCxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDL0UsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRTdDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUNuRCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsT0FBTztRQUNMLHlFQUF5RTtRQUN6RSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtRQUNqRSxZQUFZLEVBQUUsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJO1FBQzdDLElBQUksRUFBRSxVQUFVO0tBQ2pCLENBQUM7QUFDSixDQUFDO0FBR0Q7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQzlCLFVBQXlCLEVBQUUsVUFBa0IsRUFBRSxhQUFxQjtJQUN0RSxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7UUFDeEMsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtZQUM1QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDO1lBQzNFLElBQUksYUFBYSxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQ3JELE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ3pFLElBQUksS0FBSyxFQUFFO29CQUNULE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7U0FDRjtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBR0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUN6QixJQUFxQixFQUFFLGNBQXNCLEVBQUUsYUFBcUI7SUFDdEUsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzVFLElBQUksaUJBQWlCLEVBQUU7UUFDckIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM5RSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7UUFDdkIsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRTtRQUNqQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLGtCQUFrQixDQUFDO1FBQ2xFLHlFQUF5RTtRQUN6RSxFQUFFLENBQUMscUJBQXFCLENBQ3BCLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ2hGLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQzFFLENBQUMsQ0FBQztBQUNMLENBQUM7QUFHRCx3REFBd0Q7QUFDeEQsTUFBTSxVQUFVLG1CQUFtQixDQUMvQixLQUF1QyxFQUFFLGFBQXFCO0lBQ2hFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMxQixNQUFNLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBQyxHQUFHLE9BQU8sQ0FBQztRQUNyQyxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDO0lBQzFGLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuZXhwb3J0IHR5cGUgSW1wb3J0ID0ge1xuICBuYW1lOiBzdHJpbmcsXG4gIGltcG9ydE1vZHVsZTogc3RyaW5nLFxuICBub2RlOiB0cy5JbXBvcnREZWNsYXJhdGlvblxufTtcblxuLyoqIEdldHMgaW1wb3J0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllciBieSB1c2luZyB0aGUgVHlwZSBjaGVja2VyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltcG9ydE9mSWRlbnRpZmllcih0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIG5vZGU6IHRzLklkZW50aWZpZXIpOiBJbXBvcnR8XG4gICAgbnVsbCB7XG4gIGNvbnN0IHN5bWJvbCA9IHR5cGVDaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG5cbiAgaWYgKCFzeW1ib2wgfHwgc3ltYm9sLmRlY2xhcmF0aW9ucyA9PT0gdW5kZWZpbmVkIHx8ICFzeW1ib2wuZGVjbGFyYXRpb25zLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGVjbCA9IHN5bWJvbC5kZWNsYXJhdGlvbnNbMF07XG5cbiAgaWYgKCF0cy5pc0ltcG9ydFNwZWNpZmllcihkZWNsKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaW1wb3J0RGVjbCA9IGRlY2wucGFyZW50LnBhcmVudC5wYXJlbnQ7XG5cbiAgaWYgKCF0cy5pc1N0cmluZ0xpdGVyYWwoaW1wb3J0RGVjbC5tb2R1bGVTcGVjaWZpZXIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIEhhbmRsZXMgYWxpYXNlZCBpbXBvcnRzOiBlLmcuIFwiaW1wb3J0IHtDb21wb25lbnQgYXMgbXlDb21wfSBmcm9tIC4uLlwiO1xuICAgIG5hbWU6IGRlY2wucHJvcGVydHlOYW1lID8gZGVjbC5wcm9wZXJ0eU5hbWUudGV4dCA6IGRlY2wubmFtZS50ZXh0LFxuICAgIGltcG9ydE1vZHVsZTogaW1wb3J0RGVjbC5tb2R1bGVTcGVjaWZpZXIudGV4dCxcbiAgICBub2RlOiBpbXBvcnREZWNsXG4gIH07XG59XG5cblxuLyoqXG4gKiBHZXRzIGEgdG9wLWxldmVsIGltcG9ydCBzcGVjaWZpZXIgd2l0aCBhIHNwZWNpZmljIG5hbWUgdGhhdCBpcyBpbXBvcnRlZCBmcm9tIGEgcGFydGljdWxhciBtb2R1bGUuXG4gKiBFLmcuIGdpdmVuIGEgZmlsZSB0aGF0IGxvb2tzIGxpa2U6XG4gKlxuICogYGBgXG4gKiBpbXBvcnQgeyBDb21wb25lbnQsIERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICogaW1wb3J0IHsgRm9vIH0gZnJvbSAnLi9mb28nO1xuICogYGBgXG4gKlxuICogQ2FsbGluZyBgZ2V0SW1wb3J0U3BlY2lmaWVyKHNvdXJjZUZpbGUsICdAYW5ndWxhci9jb3JlJywgJ0RpcmVjdGl2ZScpYCB3aWxsIHlpZWxkIHRoZSBub2RlXG4gKiByZWZlcnJpbmcgdG8gYERpcmVjdGl2ZWAgaW4gdGhlIHRvcCBpbXBvcnQuXG4gKlxuICogQHBhcmFtIHNvdXJjZUZpbGUgRmlsZSBpbiB3aGljaCB0byBsb29rIGZvciBpbXBvcnRzLlxuICogQHBhcmFtIG1vZHVsZU5hbWUgTmFtZSBvZiB0aGUgaW1wb3J0J3MgbW9kdWxlLlxuICogQHBhcmFtIHNwZWNpZmllck5hbWUgT3JpZ2luYWwgbmFtZSBvZiB0aGUgc3BlY2lmaWVyIHRvIGxvb2sgZm9yLiBBbGlhc2VzIHdpbGwgYmUgcmVzb2x2ZWQgdG9cbiAqICAgIHRoZWlyIG9yaWdpbmFsIG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbXBvcnRTcGVjaWZpZXIoXG4gICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgbW9kdWxlTmFtZTogc3RyaW5nLCBzcGVjaWZpZXJOYW1lOiBzdHJpbmcpOiB0cy5JbXBvcnRTcGVjaWZpZXJ8bnVsbCB7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBzb3VyY2VGaWxlLnN0YXRlbWVudHMpIHtcbiAgICBpZiAodHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSAmJiB0cy5pc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpICYmXG4gICAgICAgIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQgPT09IG1vZHVsZU5hbWUpIHtcbiAgICAgIGNvbnN0IG5hbWVkQmluZGluZ3MgPSBub2RlLmltcG9ydENsYXVzZSAmJiBub2RlLmltcG9ydENsYXVzZS5uYW1lZEJpbmRpbmdzO1xuICAgICAgaWYgKG5hbWVkQmluZGluZ3MgJiYgdHMuaXNOYW1lZEltcG9ydHMobmFtZWRCaW5kaW5ncykpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBmaW5kSW1wb3J0U3BlY2lmaWVyKG5hbWVkQmluZGluZ3MuZWxlbWVudHMsIHNwZWNpZmllck5hbWUpO1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuXG4vKipcbiAqIFJlcGxhY2VzIGFuIGltcG9ydCBpbnNpZGUgYSBuYW1lZCBpbXBvcnRzIG5vZGUgd2l0aCBhIGRpZmZlcmVudCBvbmUuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRoYXQgY29udGFpbnMgdGhlIGltcG9ydHMuXG4gKiBAcGFyYW0gZXhpc3RpbmdJbXBvcnQgSW1wb3J0IHRoYXQgc2hvdWxkIGJlIHJlcGxhY2VkLlxuICogQHBhcmFtIG5ld0ltcG9ydE5hbWUgSW1wb3J0IHRoYXQgc2hvdWxkIGJlIGluc2VydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUltcG9ydChcbiAgICBub2RlOiB0cy5OYW1lZEltcG9ydHMsIGV4aXN0aW5nSW1wb3J0OiBzdHJpbmcsIG5ld0ltcG9ydE5hbWU6IHN0cmluZykge1xuICBjb25zdCBpc0FscmVhZHlJbXBvcnRlZCA9IGZpbmRJbXBvcnRTcGVjaWZpZXIobm9kZS5lbGVtZW50cywgbmV3SW1wb3J0TmFtZSk7XG4gIGlmIChpc0FscmVhZHlJbXBvcnRlZCkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdJbXBvcnROb2RlID0gZmluZEltcG9ydFNwZWNpZmllcihub2RlLmVsZW1lbnRzLCBleGlzdGluZ0ltcG9ydCk7XG4gIGlmICghZXhpc3RpbmdJbXBvcnROb2RlKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gdHMudXBkYXRlTmFtZWRJbXBvcnRzKG5vZGUsIFtcbiAgICAuLi5ub2RlLmVsZW1lbnRzLmZpbHRlcihjdXJyZW50ID0+IGN1cnJlbnQgIT09IGV4aXN0aW5nSW1wb3J0Tm9kZSksXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGltcG9ydCB3aGlsZSB0cnlpbmcgdG8gcHJlc2VydmUgdGhlIGFsaWFzIG9mIHRoZSBvbGQgb25lLlxuICAgIHRzLmNyZWF0ZUltcG9ydFNwZWNpZmllcihcbiAgICAgICAgZXhpc3RpbmdJbXBvcnROb2RlLnByb3BlcnR5TmFtZSA/IHRzLmNyZWF0ZUlkZW50aWZpZXIobmV3SW1wb3J0TmFtZSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGV4aXN0aW5nSW1wb3J0Tm9kZS5wcm9wZXJ0eU5hbWUgPyBleGlzdGluZ0ltcG9ydE5vZGUubmFtZSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cy5jcmVhdGVJZGVudGlmaWVyKG5ld0ltcG9ydE5hbWUpKVxuICBdKTtcbn1cblxuXG4vKiogRmluZHMgYW4gaW1wb3J0IHNwZWNpZmllciB3aXRoIGEgcGFydGljdWxhciBuYW1lLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRJbXBvcnRTcGVjaWZpZXIoXG4gICAgbm9kZXM6IHRzLk5vZGVBcnJheTx0cy5JbXBvcnRTcGVjaWZpZXI+LCBzcGVjaWZpZXJOYW1lOiBzdHJpbmcpOiB0cy5JbXBvcnRTcGVjaWZpZXJ8dW5kZWZpbmVkIHtcbiAgcmV0dXJuIG5vZGVzLmZpbmQoZWxlbWVudCA9PiB7XG4gICAgY29uc3Qge25hbWUsIHByb3BlcnR5TmFtZX0gPSBlbGVtZW50O1xuICAgIHJldHVybiBwcm9wZXJ0eU5hbWUgPyBwcm9wZXJ0eU5hbWUudGV4dCA9PT0gc3BlY2lmaWVyTmFtZSA6IG5hbWUudGV4dCA9PT0gc3BlY2lmaWVyTmFtZTtcbiAgfSk7XG59XG4iXX0=