@angular/core 12.1.0 → 12.1.4

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 (159) 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 +91 -41
  4. package/bundles/core.umd.js.map +1 -1
  5. package/core.d.ts +14 -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/linker/component_factory_resolver.js +1 -1
  18. package/esm2015/src/linker/template_ref.js +1 -1
  19. package/esm2015/src/linker/view_container_ref.js +1 -1
  20. package/esm2015/src/metadata/di.js +1 -1
  21. package/esm2015/src/render3/component_ref.js +1 -1
  22. package/esm2015/src/render3/jit/directive.js +6 -5
  23. package/esm2015/src/render3/jit/module.js +7 -4
  24. package/esm2015/src/render3/jit/partial.js +27 -9
  25. package/esm2015/src/render3/jit/pipe.js +5 -3
  26. package/esm2015/src/render3/ng_module_ref.js +1 -1
  27. package/esm2015/src/render3/view_ref.js +1 -1
  28. package/esm2015/src/sanitization/bypass.js +1 -1
  29. package/esm2015/src/version.js +1 -1
  30. package/esm2015/src/view/entrypoint.js +1 -1
  31. package/esm2015/src/view/refs.js +1 -1
  32. package/esm2015/testing/src/ng_zone_mock.js +1 -1
  33. package/esm2015/testing/src/r3_test_bed_compiler.js +4 -1
  34. package/esm2015/testing/src/resolvers.js +1 -1
  35. package/esm2015/testing/src/test_bed.js +12 -4
  36. package/fesm2015/core.js +91 -41
  37. package/fesm2015/core.js.map +1 -1
  38. package/fesm2015/testing.js +15 -4
  39. package/fesm2015/testing.js.map +1 -1
  40. package/package.json +1 -1
  41. package/schematics/migrations/missing-injectable/providers_evaluator.js +1 -1
  42. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js +1 -1
  43. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js +1 -1
  44. package/schematics/migrations.json +1 -1
  45. package/src/r3_symbols.d.ts +2 -3
  46. package/testing/testing.d.ts +2 -1
  47. package/testing/testing.metadata.json +1 -1
  48. package/testing.d.ts +1 -1
  49. package/schematics/migrations/abstract-control-parent/abstract-control-parent.externs.js +0 -0
  50. package/schematics/migrations/abstract-control-parent/index.mjs +0 -47
  51. package/schematics/migrations/abstract-control-parent/util.mjs +0 -50
  52. package/schematics/migrations/activated-route-snapshot-fragment/activated-route-snapshot-fragment.externs.js +0 -0
  53. package/schematics/migrations/activated-route-snapshot-fragment/index.mjs +0 -48
  54. package/schematics/migrations/activated-route-snapshot-fragment/util.mjs +0 -33
  55. package/schematics/migrations/can-activate-with-redirect-to/can-activate-with-redirect-to.externs.js +0 -0
  56. package/schematics/migrations/can-activate-with-redirect-to/index.mjs +0 -44
  57. package/schematics/migrations/can-activate-with-redirect-to/util.mjs +0 -55
  58. package/schematics/migrations/deep-shadow-piercing-selector/deep-shadow-piercing-selector.externs.js +0 -0
  59. package/schematics/migrations/deep-shadow-piercing-selector/index.mjs +0 -36
  60. package/schematics/migrations/dynamic-queries/dynamic-queries.externs.js +0 -0
  61. package/schematics/migrations/dynamic-queries/index.mjs +0 -51
  62. package/schematics/migrations/dynamic-queries/util.mjs +0 -65
  63. package/schematics/migrations/initial-navigation/collector.mjs +0 -105
  64. package/schematics/migrations/initial-navigation/index.mjs +0 -61
  65. package/schematics/migrations/initial-navigation/initial-navigation.externs.js +0 -0
  66. package/schematics/migrations/initial-navigation/transform.mjs +0 -54
  67. package/schematics/migrations/initial-navigation/update_recorder.mjs +0 -9
  68. package/schematics/migrations/initial-navigation/util.mjs +0 -28
  69. package/schematics/migrations/missing-injectable/definition_collector.mjs +0 -75
  70. package/schematics/migrations/missing-injectable/index.mjs +0 -100
  71. package/schematics/migrations/missing-injectable/missing-injectable.externs.js +0 -0
  72. package/schematics/migrations/missing-injectable/providers_evaluator.mjs +0 -50
  73. package/schematics/migrations/missing-injectable/transform.mjs +0 -187
  74. package/schematics/migrations/missing-injectable/update_recorder.mjs +0 -9
  75. package/schematics/migrations/module-with-providers/collector.mjs +0 -59
  76. package/schematics/migrations/module-with-providers/index.mjs +0 -71
  77. package/schematics/migrations/module-with-providers/module-with-providers.externs.js +0 -0
  78. package/schematics/migrations/module-with-providers/transform.mjs +0 -134
  79. package/schematics/migrations/module-with-providers/util.mjs +0 -25
  80. package/schematics/migrations/move-document/document_import_visitor.mjs +0 -60
  81. package/schematics/migrations/move-document/index.mjs +0 -71
  82. package/schematics/migrations/move-document/move-document.externs.js +0 -0
  83. package/schematics/migrations/move-document/move-import.mjs +0 -45
  84. package/schematics/migrations/native-view-encapsulation/index.mjs +0 -41
  85. package/schematics/migrations/native-view-encapsulation/native-view-encapsulation.externs.js +0 -0
  86. package/schematics/migrations/native-view-encapsulation/util.mjs +0 -34
  87. package/schematics/migrations/navigation-extras-omissions/index.mjs +0 -47
  88. package/schematics/migrations/navigation-extras-omissions/navigation-extras-omissions.externs.js +0 -0
  89. package/schematics/migrations/navigation-extras-omissions/util.mjs +0 -111
  90. package/schematics/migrations/relative-link-resolution/collector.mjs +0 -81
  91. package/schematics/migrations/relative-link-resolution/index.mjs +0 -62
  92. package/schematics/migrations/relative-link-resolution/relative-link-resolution.externs.js +0 -0
  93. package/schematics/migrations/relative-link-resolution/transform.mjs +0 -51
  94. package/schematics/migrations/relative-link-resolution/update_recorder.mjs +0 -9
  95. package/schematics/migrations/relative-link-resolution/util.mjs +0 -28
  96. package/schematics/migrations/renderer-to-renderer2/helpers.mjs +0 -224
  97. package/schematics/migrations/renderer-to-renderer2/index.mjs +0 -113
  98. package/schematics/migrations/renderer-to-renderer2/migration.mjs +0 -211
  99. package/schematics/migrations/renderer-to-renderer2/renderer-to-renderer2.externs.js +0 -0
  100. package/schematics/migrations/renderer-to-renderer2/util.mjs +0 -69
  101. package/schematics/migrations/router-preserve-query-params/index.mjs +0 -50
  102. package/schematics/migrations/router-preserve-query-params/router-preserve-query-params.externs.js +0 -0
  103. package/schematics/migrations/router-preserve-query-params/util.mjs +0 -88
  104. package/schematics/migrations/static-queries/angular/directive_inputs.mjs +0 -70
  105. package/schematics/migrations/static-queries/angular/ng_query_visitor.mjs +0 -113
  106. package/schematics/migrations/static-queries/angular/query-definition.mjs +0 -20
  107. package/schematics/migrations/static-queries/angular/super_class.mjs +0 -21
  108. package/schematics/migrations/static-queries/index.mjs +0 -206
  109. package/schematics/migrations/static-queries/static-queries.externs.js +0 -0
  110. package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.mjs +0 -200
  111. package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.mjs +0 -24
  112. package/schematics/migrations/static-queries/strategies/timing-strategy.mjs +0 -9
  113. package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.mjs +0 -355
  114. package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.mjs +0 -38
  115. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.mjs +0 -80
  116. package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.mjs +0 -154
  117. package/schematics/migrations/static-queries/transform.mjs +0 -88
  118. package/schematics/migrations/template-var-assignment/analyze_template.mjs +0 -25
  119. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.mjs +0 -65
  120. package/schematics/migrations/template-var-assignment/index.mjs +0 -68
  121. package/schematics/migrations/template-var-assignment/template-var-assignment.externs.js +0 -0
  122. package/schematics/migrations/undecorated-classes-with-decorated-fields/index.mjs +0 -92
  123. package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.mjs +0 -286
  124. package/schematics/migrations/undecorated-classes-with-decorated-fields/undecorated-classes-with-decorated-fields.externs.js +0 -0
  125. package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.mjs +0 -9
  126. package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.mjs +0 -43
  127. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.mjs +0 -82
  128. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.mjs +0 -102
  129. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.mjs +0 -111
  130. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.mjs +0 -17
  131. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.mjs +0 -51
  132. package/schematics/migrations/undecorated-classes-with-di/index.mjs +0 -162
  133. package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.mjs +0 -124
  134. package/schematics/migrations/undecorated-classes-with-di/transform.mjs +0 -356
  135. package/schematics/migrations/undecorated-classes-with-di/undecorated-classes-with-di.externs.js +0 -0
  136. package/schematics/migrations/undecorated-classes-with-di/update_recorder.mjs +0 -9
  137. package/schematics/migrations/wait-for-async/index.mjs +0 -76
  138. package/schematics/migrations/wait-for-async/util.mjs +0 -23
  139. package/schematics/migrations/wait-for-async/wait-for-async.externs.js +0 -0
  140. package/schematics/migrations/xhr-factory/index.mjs +0 -91
  141. package/schematics/migrations/xhr-factory/xhr-factory.externs.js +0 -0
  142. package/schematics/utils/import_manager.mjs +0 -197
  143. package/schematics/utils/line_mappings.mjs +0 -60
  144. package/schematics/utils/ng_component_template.mjs +0 -96
  145. package/schematics/utils/ng_decorators.mjs +0 -23
  146. package/schematics/utils/parse_html.mjs +0 -24
  147. package/schematics/utils/project_tsconfig_paths.mjs +0 -74
  148. package/schematics/utils/schematics_prompt.mjs +0 -30
  149. package/schematics/utils/typescript/class_declaration.mjs +0 -33
  150. package/schematics/utils/typescript/compiler_host.mjs +0 -66
  151. package/schematics/utils/typescript/decorators.mjs +0 -20
  152. package/schematics/utils/typescript/find_base_classes.mjs +0 -30
  153. package/schematics/utils/typescript/functions.mjs +0 -28
  154. package/schematics/utils/typescript/imports.mjs +0 -91
  155. package/schematics/utils/typescript/nodes.mjs +0 -57
  156. package/schematics/utils/typescript/parse_tsconfig.mjs +0 -26
  157. package/schematics/utils/typescript/property_name.mjs +0 -23
  158. package/schematics/utils/typescript/symbol.mjs +0 -72
  159. package/schematics/utils/utils.externs.js +0 -0
@@ -1,102 +0,0 @@
1
- import * as ts from 'typescript';
2
- import { unwrapExpression } from '../../../utils/typescript/functions';
3
- import { ImportRewriteTransformerFactory, UnresolvedIdentifierError } from './import_rewrite_visitor';
4
- /**
5
- * Class that can be used to copy decorators to a new location. The rewriter ensures that
6
- * identifiers and imports are rewritten to work in the new file location. Fields in a
7
- * decorator that cannot be cleanly copied will be copied with a comment explaining that
8
- * imports and identifiers need to be adjusted manually.
9
- */
10
- export class DecoratorRewriter {
11
- constructor(importManager, typeChecker, evaluator, compiler) {
12
- this.importManager = importManager;
13
- this.typeChecker = typeChecker;
14
- this.evaluator = evaluator;
15
- this.compiler = compiler;
16
- this.previousSourceFile = null;
17
- this.newSourceFile = null;
18
- this.newProperties = [];
19
- this.nonCopyableProperties = [];
20
- this.importRewriterFactory = new ImportRewriteTransformerFactory(this.importManager, this.typeChecker, this.compiler['_host']);
21
- }
22
- rewrite(ngDecorator, newSourceFile) {
23
- const decorator = ngDecorator.node;
24
- // Reset the previous state of the decorator rewriter.
25
- this.newProperties = [];
26
- this.nonCopyableProperties = [];
27
- this.newSourceFile = newSourceFile;
28
- this.previousSourceFile = decorator.getSourceFile();
29
- // If the decorator will be added to the same source file it currently
30
- // exists in, we don't need to rewrite any paths or add new imports.
31
- if (this.previousSourceFile === newSourceFile) {
32
- return this._createDecorator(decorator.expression);
33
- }
34
- const oldCallExpr = decorator.expression;
35
- if (!oldCallExpr.arguments.length) {
36
- // Re-use the original decorator if there are no arguments and nothing needs
37
- // to be sanitized or rewritten.
38
- return this._createDecorator(decorator.expression);
39
- }
40
- const metadata = unwrapExpression(oldCallExpr.arguments[0]);
41
- if (!ts.isObjectLiteralExpression(metadata)) {
42
- // Re-use the original decorator as there is no metadata that can be sanitized.
43
- return this._createDecorator(decorator.expression);
44
- }
45
- metadata.properties.forEach(prop => {
46
- // We don't handle spread assignments, accessors or method declarations automatically
47
- // as it involves more advanced static analysis and these type of properties are not
48
- // picked up by ngc either.
49
- if (ts.isSpreadAssignment(prop) || ts.isAccessor(prop) || ts.isMethodDeclaration(prop)) {
50
- this.nonCopyableProperties.push(prop);
51
- return;
52
- }
53
- const sanitizedProp = this._sanitizeMetadataProperty(prop);
54
- if (sanitizedProp !== null) {
55
- this.newProperties.push(sanitizedProp);
56
- }
57
- else {
58
- this.nonCopyableProperties.push(prop);
59
- }
60
- });
61
- // In case there is at least one non-copyable property, we add a leading comment to
62
- // the first property assignment in order to ask the developer to manually manage
63
- // imports and do path rewriting for these properties.
64
- if (this.nonCopyableProperties.length !== 0) {
65
- ['The following fields were copied from the base class,',
66
- 'but could not be updated automatically to work in the',
67
- 'new file location. Please add any required imports for', 'the properties below:']
68
- .forEach(text => ts.addSyntheticLeadingComment(this.nonCopyableProperties[0], ts.SyntaxKind.SingleLineCommentTrivia, ` ${text}`, true));
69
- }
70
- // Note that we don't update the decorator as we don't want to copy potential leading
71
- // comments of the decorator. This is necessary because otherwise comments from the
72
- // copied decorator end up describing the new class (which is not always correct).
73
- return this._createDecorator(ts.createCall(this.importManager.addImportToSourceFile(newSourceFile, ngDecorator.name, ngDecorator.moduleName), undefined, [ts.updateObjectLiteral(metadata, [...this.newProperties, ...this.nonCopyableProperties])]));
74
- }
75
- /** Creates a new decorator with the given expression. */
76
- _createDecorator(expr) {
77
- // Note that we don't update the decorator as we don't want to copy potential leading
78
- // comments of the decorator. This is necessary because otherwise comments from the
79
- // copied decorator end up describing the new class (which is not always correct).
80
- return ts.createDecorator(expr);
81
- }
82
- /**
83
- * Sanitizes a metadata property by ensuring that all contained identifiers
84
- * are imported in the target source file.
85
- */
86
- _sanitizeMetadataProperty(prop) {
87
- try {
88
- return ts
89
- .transform(prop, [ctx => this.importRewriterFactory.create(ctx, this.newSourceFile)])
90
- .transformed[0];
91
- }
92
- catch (e) {
93
- // If the error is for an unresolved identifier, we want to return "null" because
94
- // such object literal elements could be added to the non-copyable properties.
95
- if (e instanceof UnresolvedIdentifierError) {
96
- return null;
97
- }
98
- throw e;
99
- }
100
- }
101
- }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9yX3Jld3JpdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvdW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRpL2RlY29yYXRvcl9yZXdyaXRlL2RlY29yYXRvcl9yZXdyaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUlqQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUVyRSxPQUFPLEVBQUMsK0JBQStCLEVBQUUseUJBQXlCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFVNUIsWUFDWSxhQUE0QixFQUFVLFdBQTJCLEVBQ2pFLFNBQTJCLEVBQVUsUUFBcUI7UUFEMUQsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFDakUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBWHRFLHVCQUFrQixHQUF1QixJQUFJLENBQUM7UUFDOUMsa0JBQWEsR0FBdUIsSUFBSSxDQUFDO1FBRXpDLGtCQUFhLEdBQWtDLEVBQUUsQ0FBQztRQUNsRCwwQkFBcUIsR0FBa0MsRUFBRSxDQUFDO1FBRWxELDBCQUFxQixHQUFHLElBQUksK0JBQStCLENBQy9ELElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFJTyxDQUFDO0lBRTFFLE9BQU8sQ0FBQyxXQUF3QixFQUFFLGFBQTRCO1FBQzVELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFFbkMsc0RBQXNEO1FBQ3RELElBQUksQ0FB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QyxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELHlEQUF5RDtJQUNqRCxnQkFBZ0IsQ0FBQyxJQUFtQjtRQUMxQyxxRkFBcUY7UUFDckYsbUZBQW1GO1FBQ25GLGtGQUFrRjtRQUNsRixPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNLLHlCQUF5QixDQUFDLElBQWlDO1FBRWpFLElBQUk7WUFDRixPQUFPLEVBQUU7aUJBQ0osU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWMsQ0FBQyxDQUFDLENBQUM7aUJBQ3JGLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNyQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsaUZBQWlGO1lBQ2pGLDhFQUE4RTtZQUM5RSxJQUFJLENBQUMsWUFBWSx5QkFBeUIsRUFBRTtnQkFDMUMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sQ0FBQyxDQUFDO1NBQ1Q7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJcbi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtBb3RDb21waWxlcn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtQYXJ0aWFsRXZhbHVhdG9yfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3BhcnRpYWxfZXZhbHVhdG9yJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0ltcG9ydE1hbmFnZXJ9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ltcG9ydF9tYW5hZ2VyJztcbmltcG9ydCB7TmdEZWNvcmF0b3J9IGZyb20gJy4uLy4uLy4uL3V0aWxzL25nX2RlY29yYXRvcnMnO1xuaW1wb3J0IHt1bndyYXBFeHByZXNzaW9ufSBmcm9tICcuLi8uLi8uLi91dGlscy90eXBlc2NyaXB0L2Z1bmN0aW9ucyc7XG5cbmltcG9ydCB7SW1wb3J0UmV3cml0ZVRyYW5zZm9ybWVyRmFjdG9yeSwgVW5yZXNvbHZlZElkZW50aWZpZXJFcnJvcn0gZnJvbSAnLi9pbXBvcnRfcmV3cml0ZV92aXNpdG9yJztcblxuXG4vKipcbiAqIENsYXNzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29weSBkZWNvcmF0b3JzIHRvIGEgbmV3IGxvY2F0aW9uLiBUaGUgcmV3cml0ZXIgZW5zdXJlcyB0aGF0XG4gKiBpZGVudGlmaWVycyBhbmQgaW1wb3J0cyBhcmUgcmV3cml0dGVuIHRvIHdvcmsgaW4gdGhlIG5ldyBmaWxlIGxvY2F0aW9uLiBGaWVsZHMgaW4gYVxuICogZGVjb3JhdG9yIHRoYXQgY2Fubm90IGJlIGNsZWFubHkgY29waWVkIHdpbGwgYmUgY29waWVkIHdpdGggYSBjb21tZW50IGV4cGxhaW5pbmcgdGhhdFxuICogaW1wb3J0cyBhbmQgaWRlbnRpZmllcnMgbmVlZCB0byBiZSBhZGp1c3RlZCBtYW51YWxseS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlY29yYXRvclJld3JpdGVyIHtcbiAgcHJldmlvdXNTb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlfG51bGwgPSBudWxsO1xuICBuZXdTb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlfG51bGwgPSBudWxsO1xuXG4gIG5ld1Byb3BlcnRpZXM6IHRzLk9iamVjdExpdGVyYWxFbGVtZW50TGlrZVtdID0gW107XG4gIG5vbkNvcHlhYmxlUHJvcGVydGllczogdHMuT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlW10gPSBbXTtcblxuICBwcml2YXRlIGltcG9ydFJld3JpdGVyRmFjdG9yeSA9IG5ldyBJbXBvcnRSZXdyaXRlVHJhbnNmb3JtZXJGYWN0b3J5KFxuICAgICAgdGhpcy5pbXBvcnRNYW5hZ2VyLCB0aGlzLnR5cGVDaGVja2VyLCB0aGlzLmNvbXBpbGVyWydfaG9zdCddKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgaW1wb3J0TWFuYWdlcjogSW1wb3J0TWFuYWdlciwgcHJpdmF0ZSB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgICBwcml2YXRlIGV2YWx1YXRvcjogUGFydGlhbEV2YWx1YXRvciwgcHJpdmF0ZSBjb21waWxlcjogQW90Q29tcGlsZXIpIHt9XG5cbiAgcmV3cml0ZShuZ0RlY29yYXRvcjogTmdEZWNvcmF0b3IsIG5ld1NvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiB0cy5EZWNvcmF0b3Ige1xuICAgIGNvbnN0IGRlY29yYXRvciA9IG5nRGVjb3JhdG9yLm5vZGU7XG5cbiAgICAvLyBSZXNldCB0aGUgcHJldmlvdXMgc3RhdGUgb2YgdGhlIGRlY29yYXRvciByZXdyaXRlci5cbiAgICB0aGlzLm5ld1Byb3BlcnRpZXMgPSBbXTtcbiAgICB0aGlzLm5vbkNvcHlhYmxlUHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMubmV3U291cmNlRmlsZSA9IG5ld1NvdXJjZUZpbGU7XG4gICAgdGhpcy5wcmV2aW91c1NvdXJjZUZpbGUgPSBkZWNvcmF0b3IuZ2V0U291cmNlRmlsZSgpO1xuXG4gICAgLy8gSWYgdGhlIGRlY29yYXRvciB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzYW1lIHNvdXJjZSBmaWxlIGl0IGN1cnJlbnRseVxuICAgIC8vIGV4aXN0cyBpbiwgd2UgZG9uJ3QgbmVlZCB0byByZXdyaXRlIGFueSBwYXRocyBvciBhZGQgbmV3IGltcG9ydHMuXG4gICAgaWYgKHRoaXMucHJldmlvdXNTb3VyY2VGaWxlID09PSBuZXdTb3VyY2VGaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlRGVjb3JhdG9yKGRlY29yYXRvci5leHByZXNzaW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRDYWxsRXhwciA9IGRlY29yYXRvci5leHByZXNzaW9uO1xuXG4gICAgaWYgKCFvbGRDYWxsRXhwci5hcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBSZS11c2UgdGhlIG9yaWdpbmFsIGRlY29yYXRvciBpZiB0aGVyZSBhcmUgbm8gYXJndW1lbnRzIGFuZCBub3RoaW5nIG5lZWRzXG4gICAgICAvLyB0byBiZSBzYW5pdGl6ZWQgb3IgcmV3cml0dGVuLlxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURlY29yYXRvcihkZWNvcmF0b3IuZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0YWRhdGEgPSB1bndyYXBFeHByZXNzaW9uKG9sZENhbGxFeHByLmFyZ3VtZW50c1swXSk7XG4gICAgaWYgKCF0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKG1ldGFkYXRhKSkge1xuICAgICAgLy8gUmUtdXNlIHRoZSBvcmlnaW5hbCBkZWNvcmF0b3IgYXMgdGhlcmUgaXMgbm8gbWV0YWRhdGEgdGhhdCBjYW4gYmUgc2FuaXRpemVkLlxuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURlY29yYXRvcihkZWNvcmF0b3IuZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgbWV0YWRhdGEucHJvcGVydGllcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgLy8gV2UgZG9uJ3QgaGFuZGxlIHNwcmVhZCBhc3NpZ25tZW50cywgYWNjZXNzb3JzIG9yIG1ldGhvZCBkZWNsYXJhdGlvbnMgYXV0b21hdGljYWxseVxuICAgICAgLy8gYXMgaXQgaW52b2x2ZXMgbW9yZSBhZHZhbmNlZCBzdGF0aWMgYW5hbHlzaXMgYW5kIHRoZXNlIHR5cGUgb2YgcHJvcGVydGllcyBhcmUgbm90XG4gICAgICAvLyBwaWNrZWQgdXAgYnkgbmdjIGVpdGhlci5cbiAgICAgIGlmICh0cy5pc1NwcmVhZEFzc2lnbm1lbnQocHJvcCkgfHwgdHMuaXNBY2Nlc3Nvcihwcm9wKSB8fCB0cy5pc01ldGhvZERlY2xhcmF0aW9uKHByb3ApKSB7XG4gICAgICAgIHRoaXMubm9uQ29weWFibGVQcm9wZXJ0aWVzLnB1c2gocHJvcCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2FuaXRpemVkUHJvcCA9IHRoaXMuX3Nhbml0aXplTWV0YWRhdGFQcm9wZXJ0eShwcm9wKTtcbiAgICAgIGlmIChzYW5pdGl6ZWRQcm9wICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubmV3UHJvcGVydGllcy5wdXNoKHNhbml0aXplZFByb3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ub25Db3B5YWJsZVByb3BlcnRpZXMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEluIGNhc2UgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG5vbi1jb3B5YWJsZSBwcm9wZXJ0eSwgd2UgYWRkIGEgbGVhZGluZyBjb21tZW50IHRvXG4gICAgLy8gdGhlIGZpcnN0IHByb3BlcnR5IGFzc2lnbm1lbnQgaW4gb3JkZXIgdG8gYXNrIHRoZSBkZXZlbG9wZXIgdG8gbWFudWFsbHkgbWFuYWdlXG4gICAgLy8gaW1wb3J0cyBhbmQgZG8gcGF0aCByZXdyaXRpbmcgZm9yIHRoZXNlIHByb3BlcnRpZXMuXG4gICAgaWYgKHRoaXMubm9uQ29weWFibGVQcm9wZXJ0aWVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgWydUaGUgZm9sbG93aW5nIGZpZWxkcyB3ZXJlIGNvcGllZCBmcm9tIHRoZSBiYXNlIGNsYXNzLCcsXG4gICAgICAgJ2J1dCBjb3VsZCBub3QgYmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5IHRvIHdvcmsgaW4gdGhlJyxcbiAgICAgICAnbmV3IGZpbGUgbG9jYXRpb24uIFBsZWFzZSBhZGQgYW55IHJlcXVpcmVkIGltcG9ydHMgZm9yJywgJ3RoZSBwcm9wZXJ0aWVzIGJlbG93OiddXG4gICAgICAgICAgLmZvckVhY2goXG4gICAgICAgICAgICAgIHRleHQgPT4gdHMuYWRkU3ludGhldGljTGVhZGluZ0NvbW1lbnQoXG4gICAgICAgICAgICAgICAgICB0aGlzLm5vbkNvcHlhYmxlUHJvcGVydGllc1swXSwgdHMuU3ludGF4S2luZC5TaW5nbGVMaW5lQ29tbWVudFRyaXZpYSwgYCAke3RleHR9YCxcbiAgICAgICAgICAgICAgICAgIHRydWUpKTtcbiAgICB9XG5cbiAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXBkYXRlIHRoZSBkZWNvcmF0b3IgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb3B5IHBvdGVudGlhbCBsZWFkaW5nXG4gICAgLy8gY29tbWVudHMgb2YgdGhlIGRlY29yYXRvci4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgY29tbWVudHMgZnJvbSB0aGVcbiAgICAvLyBjb3BpZWQgZGVjb3JhdG9yIGVuZCB1cCBkZXNjcmliaW5nIHRoZSBuZXcgY2xhc3MgKHdoaWNoIGlzIG5vdCBhbHdheXMgY29ycmVjdCkuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZURlY29yYXRvcih0cy5jcmVhdGVDYWxsKFxuICAgICAgICB0aGlzLmltcG9ydE1hbmFnZXIuYWRkSW1wb3J0VG9Tb3VyY2VGaWxlKFxuICAgICAgICAgICAgbmV3U291cmNlRmlsZSwgbmdEZWNvcmF0b3IubmFtZSwgbmdEZWNvcmF0b3IubW9kdWxlTmFtZSksXG4gICAgICAgIHVuZGVmaW5lZCwgW3RzLnVwZGF0ZU9iamVjdExpdGVyYWwoXG4gICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLCBbLi4udGhpcy5uZXdQcm9wZXJ0aWVzLCAuLi50aGlzLm5vbkNvcHlhYmxlUHJvcGVydGllc10pXSkpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBuZXcgZGVjb3JhdG9yIHdpdGggdGhlIGdpdmVuIGV4cHJlc3Npb24uICovXG4gIHByaXZhdGUgX2NyZWF0ZURlY29yYXRvcihleHByOiB0cy5FeHByZXNzaW9uKTogdHMuRGVjb3JhdG9yIHtcbiAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgdXBkYXRlIHRoZSBkZWNvcmF0b3IgYXMgd2UgZG9uJ3Qgd2FudCB0byBjb3B5IHBvdGVudGlhbCBsZWFkaW5nXG4gICAgLy8gY29tbWVudHMgb2YgdGhlIGRlY29yYXRvci4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvdGhlcndpc2UgY29tbWVudHMgZnJvbSB0aGVcbiAgICAvLyBjb3BpZWQgZGVjb3JhdG9yIGVuZCB1cCBkZXNjcmliaW5nIHRoZSBuZXcgY2xhc3MgKHdoaWNoIGlzIG5vdCBhbHdheXMgY29ycmVjdCkuXG4gICAgcmV0dXJuIHRzLmNyZWF0ZURlY29yYXRvcihleHByKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZXMgYSBtZXRhZGF0YSBwcm9wZXJ0eSBieSBlbnN1cmluZyB0aGF0IGFsbCBjb250YWluZWQgaWRlbnRpZmllcnNcbiAgICogYXJlIGltcG9ydGVkIGluIHRoZSB0YXJnZXQgc291cmNlIGZpbGUuXG4gICAqL1xuICBwcml2YXRlIF9zYW5pdGl6ZU1ldGFkYXRhUHJvcGVydHkocHJvcDogdHMuT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlKTogdHMuT2JqZWN0TGl0ZXJhbEVsZW1lbnRMaWtlXG4gICAgICB8bnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0c1xuICAgICAgICAgIC50cmFuc2Zvcm0ocHJvcCwgW2N0eCA9PiB0aGlzLmltcG9ydFJld3JpdGVyRmFjdG9yeS5jcmVhdGUoY3R4LCB0aGlzLm5ld1NvdXJjZUZpbGUhKV0pXG4gICAgICAgICAgLnRyYW5zZm9ybWVkWzBdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElmIHRoZSBlcnJvciBpcyBmb3IgYW4gdW5yZXNvbHZlZCBpZGVudGlmaWVyLCB3ZSB3YW50IHRvIHJldHVybiBcIm51bGxcIiBiZWNhdXNlXG4gICAgICAvLyBzdWNoIG9iamVjdCBsaXRlcmFsIGVsZW1lbnRzIGNvdWxkIGJlIGFkZGVkIHRvIHRoZSBub24tY29weWFibGUgcHJvcGVydGllcy5cbiAgICAgIGlmIChlIGluc3RhbmNlb2YgVW5yZXNvbHZlZElkZW50aWZpZXJFcnJvcikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,111 +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 { dirname, resolve } from 'path';
9
- import * as ts from 'typescript';
10
- import { getImportOfIdentifier } from '../../../utils/typescript/imports';
11
- import { getValueSymbolOfDeclaration } from '../../../utils/typescript/symbol';
12
- import { getPosixPath } from './path_format';
13
- import { getExportSymbolsOfFile } from './source_file_exports';
14
- /**
15
- * Factory that creates a TypeScript transformer which ensures that
16
- * referenced identifiers are available at the target file location.
17
- *
18
- * Imports cannot be just added as sometimes identifiers collide in the
19
- * target source file and the identifier needs to be aliased.
20
- */
21
- export class ImportRewriteTransformerFactory {
22
- constructor(importManager, typeChecker, compilerHost) {
23
- this.importManager = importManager;
24
- this.typeChecker = typeChecker;
25
- this.compilerHost = compilerHost;
26
- this.sourceFileExports = new Map();
27
- }
28
- create(ctx, newSourceFile) {
29
- const visitNode = (node) => {
30
- if (ts.isIdentifier(node)) {
31
- // Record the identifier reference and return the new identifier. The identifier
32
- // name can change if the generated import uses an namespaced import or aliased
33
- // import identifier (to avoid collisions).
34
- return this._recordIdentifierReference(node, newSourceFile);
35
- }
36
- return ts.visitEachChild(node, visitNode, ctx);
37
- };
38
- return (node) => ts.visitNode(node, visitNode);
39
- }
40
- _recordIdentifierReference(node, targetSourceFile) {
41
- // For object literal elements we don't want to check identifiers that describe the
42
- // property name. These identifiers do not refer to a value but rather to a property
43
- // name and therefore don't need to be imported. The exception is that for shorthand
44
- // property assignments the "name" identifier is both used as value and property name.
45
- if (ts.isObjectLiteralElementLike(node.parent) &&
46
- !ts.isShorthandPropertyAssignment(node.parent) && node.parent.name === node) {
47
- return node;
48
- }
49
- const resolvedImport = getImportOfIdentifier(this.typeChecker, node);
50
- const sourceFile = node.getSourceFile();
51
- if (resolvedImport) {
52
- const symbolName = resolvedImport.name;
53
- const moduleFileName = this.compilerHost.moduleNameToFileName(resolvedImport.importModule, sourceFile.fileName);
54
- // In case the identifier refers to an export in the target source file, we need to use
55
- // the local identifier in the scope of the target source file. This is necessary because
56
- // the export could be aliased and the alias is not available to the target source file.
57
- if (moduleFileName && resolve(moduleFileName) === resolve(targetSourceFile.fileName)) {
58
- const resolvedExport = this._getSourceFileExports(targetSourceFile).find(e => e.exportName === symbolName);
59
- if (resolvedExport) {
60
- return resolvedExport.identifier;
61
- }
62
- }
63
- return this.importManager.addImportToSourceFile(targetSourceFile, symbolName, this._rewriteModuleImport(resolvedImport, targetSourceFile));
64
- }
65
- else {
66
- let symbol = getValueSymbolOfDeclaration(node, this.typeChecker);
67
- if (symbol) {
68
- // If the symbol refers to a shorthand property assignment, we want to resolve the
69
- // value symbol of the shorthand property assignment. This is necessary because the
70
- // value symbol is ambiguous for shorthand property assignment identifiers as the
71
- // identifier resolves to both property name and property value.
72
- if (symbol.valueDeclaration && ts.isShorthandPropertyAssignment(symbol.valueDeclaration)) {
73
- symbol = this.typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
74
- }
75
- const resolvedExport = this._getSourceFileExports(sourceFile).find(e => e.symbol === symbol);
76
- if (resolvedExport) {
77
- return this.importManager.addImportToSourceFile(targetSourceFile, resolvedExport.exportName, getPosixPath(this.compilerHost.fileNameToModuleName(sourceFile.fileName, targetSourceFile.fileName)));
78
- }
79
- }
80
- // The referenced identifier cannot be imported. In that case we throw an exception
81
- // which can be handled outside of the transformer.
82
- throw new UnresolvedIdentifierError();
83
- }
84
- }
85
- /**
86
- * Gets the resolved exports of a given source file. Exports are cached
87
- * for subsequent calls.
88
- */
89
- _getSourceFileExports(sourceFile) {
90
- if (this.sourceFileExports.has(sourceFile)) {
91
- return this.sourceFileExports.get(sourceFile);
92
- }
93
- const sourceFileExports = getExportSymbolsOfFile(sourceFile, this.typeChecker);
94
- this.sourceFileExports.set(sourceFile, sourceFileExports);
95
- return sourceFileExports;
96
- }
97
- /** Rewrites a module import to be relative to the target file location. */
98
- _rewriteModuleImport(resolvedImport, newSourceFile) {
99
- if (!resolvedImport.importModule.startsWith('.')) {
100
- return resolvedImport.importModule;
101
- }
102
- const importFilePath = resolvedImport.node.getSourceFile().fileName;
103
- const resolvedModulePath = resolve(dirname(importFilePath), resolvedImport.importModule);
104
- const relativeModuleName = this.compilerHost.fileNameToModuleName(resolvedModulePath, newSourceFile.fileName);
105
- return getPosixPath(relativeModuleName);
106
- }
107
- }
108
- /** Error that will be thrown if a given identifier cannot be resolved. */
109
- export class UnresolvedIdentifierError extends Error {
110
- }
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0X3Jld3JpdGVfdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3VuZGVjb3JhdGVkLWNsYXNzZXMtd2l0aC1kaS9kZWNvcmF0b3JfcmV3cml0ZS9pbXBvcnRfcmV3cml0ZV92aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBR2pDLE9BQU8sRUFBQyxxQkFBcUIsRUFBUyxNQUFNLG1DQUFtQyxDQUFDO0FBQ2hGLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRTdFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFDLHNCQUFzQixFQUFpQixNQUFNLHVCQUF1QixDQUFDO0FBRzdFOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTywrQkFBK0I7SUFHMUMsWUFDWSxhQUE0QixFQUFVLFdBQTJCLEVBQ2pFLFlBQTZCO1FBRDdCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQ2pFLGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUpqQyxzQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztJQUkzQixDQUFDO0lBRTdDLE1BQU0sQ0FBb0IsR0FBNkIsRUFBRSxhQUE0QjtRQUVuRixNQUFNLFNBQVMsR0FBZSxDQUFDLElBQWEsRUFBRSxFQUFFO1lBQzlDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekIsZ0ZBQWdGO2dCQUNoRiwrRUFBK0U7Z0JBQy9FLDJDQUEyQztnQkFDM0MsT0FBTyxJ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QTBFO0FBQzFFLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxLQUFLO0NBQUciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBb3RDb21waWxlckhvc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtJbXBvcnRNYW5hZ2VyfSBmcm9tICcuLi8uLi8uLi91dGlscy9pbXBvcnRfbWFuYWdlcic7XG5pbXBvcnQge2dldEltcG9ydE9mSWRlbnRpZmllciwgSW1wb3J0fSBmcm9tICcuLi8uLi8uLi91dGlscy90eXBlc2NyaXB0L2ltcG9ydHMnO1xuaW1wb3J0IHtnZXRWYWx1ZVN5bWJvbE9mRGVjbGFyYXRpb259IGZyb20gJy4uLy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvc3ltYm9sJztcblxuaW1wb3J0IHtnZXRQb3NpeFBhdGh9IGZyb20gJy4vcGF0aF9mb3JtYXQnO1xuaW1wb3J0IHtnZXRFeHBvcnRTeW1ib2xzT2ZGaWxlLCBSZXNvbHZlZEV4cG9ydH0gZnJvbSAnLi9zb3VyY2VfZmlsZV9leHBvcnRzJztcblxuXG4vKipcbiAqIEZhY3RvcnkgdGhhdCBjcmVhdGVzIGEgVHlwZVNjcmlwdCB0cmFuc2Zvcm1lciB3aGljaCBlbnN1cmVzIHRoYXRcbiAqIHJlZmVyZW5jZWQgaWRlbnRpZmllcnMgYXJlIGF2YWlsYWJsZSBhdCB0aGUgdGFyZ2V0IGZpbGUgbG9jYXRpb24uXG4gKlxuICogSW1wb3J0cyBjYW5ub3QgYmUganVzdCBhZGRlZCBhcyBzb21ldGltZXMgaWRlbnRpZmllcnMgY29sbGlkZSBpbiB0aGVcbiAqIHRhcmdldCBzb3VyY2UgZmlsZSBhbmQgdGhlIGlkZW50aWZpZXIgbmVlZHMgdG8gYmUgYWxpYXNlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEltcG9ydFJld3JpdGVUcmFuc2Zvcm1lckZhY3Rvcnkge1xuICBwcml2YXRlIHNvdXJjZUZpbGVFeHBvcnRzID0gbmV3IE1hcDx0cy5Tb3VyY2VGaWxlLCBSZXNvbHZlZEV4cG9ydFtdPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBpbXBvcnRNYW5hZ2VyOiBJbXBvcnRNYW5hZ2VyLCBwcml2YXRlIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgICAgIHByaXZhdGUgY29tcGlsZXJIb3N0OiBBb3RDb21waWxlckhvc3QpIHt9XG5cbiAgY3JlYXRlPFQgZXh0ZW5kcyB0cy5Ob2RlPihjdHg6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCwgbmV3U291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6XG4gICAgICB0cy5UcmFuc2Zvcm1lcjxUPiB7XG4gICAgY29uc3QgdmlzaXROb2RlOiB0cy5WaXNpdG9yID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZSkpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSBpZGVudGlmaWVyIHJlZmVyZW5jZSBhbmQgcmV0dXJuIHRoZSBuZXcgaWRlbnRpZmllci4gVGhlIGlkZW50aWZpZXJcbiAgICAgICAgLy8gbmFtZSBjYW4gY2hhbmdlIGlmIHRoZSBnZW5lcmF0ZWQgaW1wb3J0IHVzZXMgYW4gbmFtZXNwYWNlZCBpbXBvcnQgb3IgYWxpYXNlZFxuICAgICAgICAvLyBpbXBvcnQgaWRlbnRpZmllciAodG8gYXZvaWQgY29sbGlzaW9ucykuXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWNvcmRJZGVudGlmaWVyUmVmZXJlbmNlKG5vZGUsIG5ld1NvdXJjZUZpbGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlLCBjdHgpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKG5vZGU6IFQpID0+IHRzLnZpc2l0Tm9kZShub2RlLCB2aXNpdE5vZGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVjb3JkSWRlbnRpZmllclJlZmVyZW5jZShub2RlOiB0cy5JZGVudGlmaWVyLCB0YXJnZXRTb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTpcbiAgICAgIHRzLk5vZGUge1xuICAgIC8vIEZvciBvYmplY3QgbGl0ZXJhbCBlbGVtZW50cyB3ZSBkb24ndCB3YW50IHRvIGNoZWNrIGlkZW50aWZpZXJzIHRoYXQgZGVzY3JpYmUgdGhlXG4gICAgLy8gcHJvcGVydHkgbmFtZS4gVGhlc2UgaWRlbnRpZmllcnMgZG8gbm90IHJlZmVyIHRvIGEgdmFsdWUgYnV0IHJhdGhlciB0byBhIHByb3BlcnR5XG4gICAgLy8gbmFtZSBhbmQgdGhlcmVmb3JlIGRvbid0IG5lZWQgdG8gYmUgaW1wb3J0ZWQuIFRoZSBleGNlcHRpb24gaXMgdGhhdCBmb3Igc2hvcnRoYW5kXG4gICAgLy8gcHJvcGVydHkgYXNzaWdubWVudHMgdGhlIFwibmFtZVwiIGlkZW50aWZpZXIgaXMgYm90aCB1c2VkIGFzIHZhbHVlIGFuZCBwcm9wZXJ0eSBuYW1lLlxuICAgIGlmICh0cy5pc09iamVjdExpdGVyYWxFbGVtZW50TGlrZShub2RlLnBhcmVudCkgJiZcbiAgICAgICAgIXRzLmlzU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50KG5vZGUucGFyZW50KSAmJiBub2RlLnBhcmVudC5uYW1lID09PSBub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvbHZlZEltcG9ydCA9IGdldEltcG9ydE9mSWRlbnRpZmllcih0aGlzLnR5cGVDaGVja2VyLCBub2RlKTtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG5cbiAgICBpZiAocmVzb2x2ZWRJbXBvcnQpIHtcbiAgICAgIGNvbnN0IHN5bWJvbE5hbWUgPSByZXNvbHZlZEltcG9ydC5uYW1lO1xuICAgICAgY29uc3QgbW9kdWxlRmlsZU5hbWUgPVxuICAgICAgICAgIHRoaXMuY29tcGlsZXJIb3N0Lm1vZHVsZU5hbWVUb0ZpbGVOYW1lKHJlc29sdmVkSW1wb3J0LmltcG9ydE1vZHVsZSwgc291cmNlRmlsZS5maWxlTmFtZSk7XG5cbiAgICAgIC8vIEluIGNhc2UgdGhlIGlkZW50aWZpZXIgcmVmZXJzIHRvIGFuIGV4cG9ydCBpbiB0aGUgdGFyZ2V0IHNvdXJjZSBmaWxlLCB3ZSBuZWVkIHRvIHVzZVxuICAgICAgLy8gdGhlIGxvY2FsIGlkZW50aWZpZXIgaW4gdGhlIHNjb3BlIG9mIHRoZSB0YXJnZXQgc291cmNlIGZpbGUuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2VcbiAgICAgIC8vIHRoZSBleHBvcnQgY291bGQgYmUgYWxpYXNlZCBhbmQgdGhlIGFsaWFzIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHRhcmdldCBzb3VyY2UgZmlsZS5cbiAgICAgIGlmIChtb2R1bGVGaWxlTmFtZSAmJiByZXNvbHZlKG1vZHVsZUZpbGVOYW1lKSA9PT0gcmVzb2x2ZSh0YXJnZXRTb3VyY2VGaWxlLmZpbGVOYW1lKSkge1xuICAgICAgICBjb25zdCByZXNvbHZlZEV4cG9ydCA9XG4gICAgICAgICAgICB0aGlzLl9nZXRTb3VyY2VGaWxlRXhwb3J0cyh0YXJnZXRTb3VyY2VGaWxlKS5maW5kKGUgPT4gZS5leHBvcnROYW1lID09PSBzeW1ib2xOYW1lKTtcbiAgICAgICAgaWYgKHJlc29sdmVkRXhwb3J0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVkRXhwb3J0LmlkZW50aWZpZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0TWFuYWdlci5hZGRJbXBvcnRUb1NvdXJjZUZpbGUoXG4gICAgICAgICAgdGFyZ2V0U291cmNlRmlsZSwgc3ltYm9sTmFtZSxcbiAgICAgICAgICB0aGlzLl9yZXdyaXRlTW9kdWxlSW1wb3J0KHJlc29sdmVkSW1wb3J0LCB0YXJnZXRTb3VyY2VGaWxlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBzeW1ib2wgPSBnZXRWYWx1ZVN5bWJvbE9mRGVjbGFyYXRpb24obm9kZSwgdGhpcy50eXBlQ2hlY2tlcik7XG5cbiAgICAgIGlmIChzeW1ib2wpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN5bWJvbCByZWZlcnMgdG8gYSBzaG9ydGhhbmQgcHJvcGVydHkgYXNzaWdubWVudCwgd2Ugd2FudCB0byByZXNvbHZlIHRoZVxuICAgICAgICAvLyB2YWx1ZSBzeW1ib2wgb2YgdGhlIHNob3J0aGFuZCBwcm9wZXJ0eSBhc3NpZ25tZW50LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZVxuICAgICAgICAvLyB2YWx1ZSBzeW1ib2wgaXMgYW1iaWd1b3VzIGZvciBzaG9ydGhhbmQgcHJvcGVydHkgYXNzaWdubWVudCBpZGVudGlmaWVycyBhcyB0aGVcbiAgICAgICAgLy8gaWRlbnRpZmllciByZXNvbHZlcyB0byBib3RoIHByb3BlcnR5IG5hbWUgYW5kIHByb3BlcnR5IHZhbHVlLlxuICAgICAgICBpZiAoc3ltYm9sLnZhbHVlRGVjbGFyYXRpb24gJiYgdHMuaXNTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQoc3ltYm9sLnZhbHVlRGVjbGFyYXRpb24pKSB7XG4gICAgICAgICAgc3ltYm9sID0gdGhpcy50eXBlQ2hlY2tlci5nZXRTaG9ydGhhbmRBc3NpZ25tZW50VmFsdWVTeW1ib2woc3ltYm9sLnZhbHVlRGVjbGFyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRFeHBvcnQgPVxuICAgICAgICAgICAgdGhpcy5fZ2V0U291cmNlRmlsZUV4cG9ydHMoc291cmNlRmlsZSkuZmluZChlID0+IGUuc3ltYm9sID09PSBzeW1ib2wpO1xuXG4gICAgICAgIGlmIChyZXNvbHZlZEV4cG9ydCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydE1hbmFnZXIuYWRkSW1wb3J0VG9Tb3VyY2VGaWxlKFxuICAgICAgICAgICAgICB0YXJnZXRTb3VyY2VGaWxlLCByZXNvbHZlZEV4cG9ydC5leHBvcnROYW1lLFxuICAgICAgICAgICAgICBnZXRQb3NpeFBhdGgodGhpcy5jb21waWxlckhvc3QuZmlsZU5hbWVUb01vZHVsZU5hbWUoXG4gICAgICAgICAgICAgICAgICBzb3VyY2VGaWxlLmZpbGVOYW1lLCB0YXJnZXRTb3VyY2VGaWxlLmZpbGVOYW1lKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZWZlcmVuY2VkIGlkZW50aWZpZXIgY2Fubm90IGJlIGltcG9ydGVkLiBJbiB0aGF0IGNhc2Ugd2UgdGhyb3cgYW4gZXhjZXB0aW9uXG4gICAgICAvLyB3aGljaCBjYW4gYmUgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSB0cmFuc2Zvcm1lci5cbiAgICAgIHRocm93IG5ldyBVbnJlc29sdmVkSWRlbnRpZmllckVycm9yKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJlc29sdmVkIGV4cG9ydHMgb2YgYSBnaXZlbiBzb3VyY2UgZmlsZS4gRXhwb3J0cyBhcmUgY2FjaGVkXG4gICAqIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U291cmNlRmlsZUV4cG9ydHMoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IFJlc29sdmVkRXhwb3J0W10ge1xuICAgIGlmICh0aGlzLnNvdXJjZUZpbGVFeHBvcnRzLmhhcyhzb3VyY2VGaWxlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlRmlsZUV4cG9ydHMuZ2V0KHNvdXJjZUZpbGUpITtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VGaWxlRXhwb3J0cyA9IGdldEV4cG9ydFN5bWJvbHNPZkZpbGUoc291cmNlRmlsZSwgdGhpcy50eXBlQ2hlY2tlcik7XG4gICAgdGhpcy5zb3VyY2VGaWxlRXhwb3J0cy5zZXQoc291cmNlRmlsZSwgc291cmNlRmlsZUV4cG9ydHMpO1xuICAgIHJldHVybiBzb3VyY2VGaWxlRXhwb3J0cztcbiAgfVxuXG4gIC8qKiBSZXdyaXRlcyBhIG1vZHVsZSBpbXBvcnQgdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHRhcmdldCBmaWxlIGxvY2F0aW9uLiAqL1xuICBwcml2YXRlIF9yZXdyaXRlTW9kdWxlSW1wb3J0KHJlc29sdmVkSW1wb3J0OiBJbXBvcnQsIG5ld1NvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiBzdHJpbmcge1xuICAgIGlmICghcmVzb2x2ZWRJbXBvcnQuaW1wb3J0TW9kdWxlLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVkSW1wb3J0LmltcG9ydE1vZHVsZTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBvcnRGaWxlUGF0aCA9IHJlc29sdmVkSW1wb3J0Lm5vZGUuZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lO1xuICAgIGNvbnN0IHJlc29sdmVkTW9kdWxlUGF0aCA9IHJlc29sdmUoZGlybmFtZShpbXBvcnRGaWxlUGF0aCksIHJlc29sdmVkSW1wb3J0LmltcG9ydE1vZHVsZSk7XG4gICAgY29uc3QgcmVsYXRpdmVNb2R1bGVOYW1lID1cbiAgICAgICAgdGhpcy5jb21waWxlckhvc3QuZmlsZU5hbWVUb01vZHVsZU5hbWUocmVzb2x2ZWRNb2R1bGVQYXRoLCBuZXdTb3VyY2VGaWxlLmZpbGVOYW1lKTtcblxuICAgIHJldHVybiBnZXRQb3NpeFBhdGgocmVsYXRpdmVNb2R1bGVOYW1lKTtcbiAgfVxufVxuXG4vKiogRXJyb3IgdGhhdCB3aWxsIGJlIHRocm93biBpZiBhIGdpdmVuIGlkZW50aWZpZXIgY2Fubm90IGJlIHJlc29sdmVkLiAqL1xuZXhwb3J0IGNsYXNzIFVucmVzb2x2ZWRJZGVudGlmaWVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuIl19
@@ -1,17 +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 { normalize } from 'path';
9
- /** Normalizes the specified path to conform with the posix path format. */
10
- export function getPosixPath(pathString) {
11
- const normalized = normalize(pathString).replace(/\\/g, '/');
12
- if (!normalized.startsWith('.')) {
13
- return `./${normalized}`;
14
- }
15
- return normalized;
16
- }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aF9mb3JtYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy91bmRlY29yYXRlZC1jbGFzc2VzLXdpdGgtZGkvZGVjb3JhdG9yX3Jld3JpdGUvcGF0aF9mb3JtYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUUvQiwyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxVQUFrQjtJQUM3QyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMvQixPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7S0FDMUI7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7bm9ybWFsaXplfSBmcm9tICdwYXRoJztcblxuLyoqIE5vcm1hbGl6ZXMgdGhlIHNwZWNpZmllZCBwYXRoIHRvIGNvbmZvcm0gd2l0aCB0aGUgcG9zaXggcGF0aCBmb3JtYXQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9zaXhQYXRoKHBhdGhTdHJpbmc6IHN0cmluZykge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplKHBhdGhTdHJpbmcpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgaWYgKCFub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgIHJldHVybiBgLi8ke25vcm1hbGl6ZWR9YDtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cbiJdfQ==
@@ -1,51 +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 { getValueSymbolOfDeclaration } from '../../../utils/typescript/symbol';
10
- /** Computes the resolved exports of a given source file. */
11
- export function getExportSymbolsOfFile(sf, typeChecker) {
12
- const exports = [];
13
- const resolvedExports = [];
14
- ts.forEachChild(sf, function visitNode(node) {
15
- if (ts.isClassDeclaration(node) || ts.isFunctionDeclaration(node) ||
16
- ts.isInterfaceDeclaration(node) &&
17
- (ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Export) !== 0) {
18
- if (node.name) {
19
- exports.push({ exportName: node.name.text, identifier: node.name });
20
- }
21
- }
22
- else if (ts.isVariableStatement(node)) {
23
- for (const decl of node.declarationList.declarations) {
24
- visitNode(decl);
25
- }
26
- }
27
- else if (ts.isVariableDeclaration(node)) {
28
- if ((ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Export) != 0 &&
29
- ts.isIdentifier(node.name)) {
30
- exports.push({ exportName: node.name.text, identifier: node.name });
31
- }
32
- }
33
- else if (ts.isExportDeclaration(node)) {
34
- const { moduleSpecifier, exportClause } = node;
35
- if (!moduleSpecifier && exportClause && ts.isNamedExports(exportClause)) {
36
- exportClause.elements.forEach(el => exports.push({
37
- exportName: el.name.text,
38
- identifier: el.propertyName ? el.propertyName : el.name
39
- }));
40
- }
41
- }
42
- });
43
- exports.forEach(({ identifier, exportName }) => {
44
- const symbol = getValueSymbolOfDeclaration(identifier, typeChecker);
45
- if (symbol) {
46
- resolvedExports.push({ symbol, identifier, exportName });
47
- }
48
- });
49
- return resolvedExports;
50
- }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlX2ZpbGVfZXhwb3J0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3VuZGVjb3JhdGVkLWNsYXNzZXMtd2l0aC1kaS9kZWNvcmF0b3JfcmV3cml0ZS9zb3VyY2VfZmlsZV9leHBvcnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pDLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBUTdFLDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsc0JBQXNCLENBQ2xDLEVBQWlCLEVBQUUsV0FBMkI7SUFDaEQsTUFBTSxPQUFPLEdBQXNELEVBQUUsQ0FBQztJQUN0RSxNQUFNLGVBQWUsR0FBcUIsRUFBRSxDQUFDO0lBRTdDLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFNBQVMsU0FBUyxDQUFDLElBQUk7UUFDekMsSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQztZQUM3RCxFQUFFLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDO2dCQUMzQixDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0YsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUMsQ0FBQyxDQUFDO2FBQ25FO1NBQ0Y7YUFBTSxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFO2dCQUNwRCxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakI7U0FDRjthQUFNLElBQUksRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNsRSxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7YUFDbkU7U0FDRjthQUFNLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzdDLElBQUksQ0FBQyxlQUFlLElBQUksWUFBWSxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3ZFLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDL0MsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSTtvQkFDeEIsVUFBVSxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJO2lCQUN4RCxDQUFDLENBQUMsQ0FBQzthQUNMO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUMsRUFBRSxFQUFFO1FBQzNDLE1BQU0sTUFBTSxHQUFHLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRSxJQUFJLE1BQU0sRUFBRTtZQUNWLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7U0FDeEQ7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge2dldFZhbHVlU3ltYm9sT2ZEZWNsYXJhdGlvbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9zeW1ib2wnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkRXhwb3J0IHtcbiAgc3ltYm9sOiB0cy5TeW1ib2w7XG4gIGV4cG9ydE5hbWU6IHN0cmluZztcbiAgaWRlbnRpZmllcjogdHMuSWRlbnRpZmllcjtcbn1cblxuLyoqIENvbXB1dGVzIHRoZSByZXNvbHZlZCBleHBvcnRzIG9mIGEgZ2l2ZW4gc291cmNlIGZpbGUuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwb3J0U3ltYm9sc09mRmlsZShcbiAgICBzZjogdHMuU291cmNlRmlsZSwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKTogUmVzb2x2ZWRFeHBvcnRbXSB7XG4gIGNvbnN0IGV4cG9ydHM6IHtleHBvcnROYW1lOiBzdHJpbmcsIGlkZW50aWZpZXI6IHRzLklkZW50aWZpZXJ9W10gPSBbXTtcbiAgY29uc3QgcmVzb2x2ZWRFeHBvcnRzOiBSZXNvbHZlZEV4cG9ydFtdID0gW107XG5cbiAgdHMuZm9yRWFjaENoaWxkKHNmLCBmdW5jdGlvbiB2aXNpdE5vZGUobm9kZSkge1xuICAgIGlmICh0cy5pc0NsYXNzRGVjbGFyYXRpb24obm9kZSkgfHwgdHMuaXNGdW5jdGlvbkRlY2xhcmF0aW9uKG5vZGUpIHx8XG4gICAgICAgIHRzLmlzSW50ZXJmYWNlRGVjbGFyYXRpb24obm9kZSkgJiZcbiAgICAgICAgICAgICh0cy5nZXRDb21iaW5lZE1vZGlmaWVyRmxhZ3Mobm9kZSBhcyB0cy5EZWNsYXJhdGlvbikgJiB0cy5Nb2RpZmllckZsYWdzLkV4cG9ydCkgIT09IDApIHtcbiAgICAgIGlmIChub2RlLm5hbWUpIHtcbiAgICAgICAgZXhwb3J0cy5wdXNoKHtleHBvcnROYW1lOiBub2RlLm5hbWUudGV4dCwgaWRlbnRpZmllcjogbm9kZS5uYW1lfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0cy5pc1ZhcmlhYmxlU3RhdGVtZW50KG5vZGUpKSB7XG4gICAgICBmb3IgKGNvbnN0IGRlY2wgb2Ygbm9kZS5kZWNsYXJhdGlvbkxpc3QuZGVjbGFyYXRpb25zKSB7XG4gICAgICAgIHZpc2l0Tm9kZShkZWNsKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRzLmlzVmFyaWFibGVEZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgaWYgKCh0cy5nZXRDb21iaW5lZE1vZGlmaWVyRmxhZ3Mobm9kZSkgJiB0cy5Nb2RpZmllckZsYWdzLkV4cG9ydCkgIT0gMCAmJlxuICAgICAgICAgIHRzLmlzSWRlbnRpZmllcihub2RlLm5hbWUpKSB7XG4gICAgICAgIGV4cG9ydHMucHVzaCh7ZXhwb3J0TmFtZTogbm9kZS5uYW1lLnRleHQsIGlkZW50aWZpZXI6IG5vZGUubmFtZX0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHMuaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgY29uc3Qge21vZHVsZVNwZWNpZmllciwgZXhwb3J0Q2xhdXNlfSA9IG5vZGU7XG4gICAgICBpZiAoIW1vZHVsZVNwZWNpZmllciAmJiBleHBvcnRDbGF1c2UgJiYgdHMuaXNOYW1lZEV4cG9ydHMoZXhwb3J0Q2xhdXNlKSkge1xuICAgICAgICBleHBvcnRDbGF1c2UuZWxlbWVudHMuZm9yRWFjaChlbCA9PiBleHBvcnRzLnB1c2goe1xuICAgICAgICAgIGV4cG9ydE5hbWU6IGVsLm5hbWUudGV4dCxcbiAgICAgICAgICBpZGVudGlmaWVyOiBlbC5wcm9wZXJ0eU5hbWUgPyBlbC5wcm9wZXJ0eU5hbWUgOiBlbC5uYW1lXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGV4cG9ydHMuZm9yRWFjaCgoe2lkZW50aWZpZXIsIGV4cG9ydE5hbWV9KSA9PiB7XG4gICAgY29uc3Qgc3ltYm9sID0gZ2V0VmFsdWVTeW1ib2xPZkRlY2xhcmF0aW9uKGlkZW50aWZpZXIsIHR5cGVDaGVja2VyKTtcbiAgICBpZiAoc3ltYm9sKSB7XG4gICAgICByZXNvbHZlZEV4cG9ydHMucHVzaCh7c3ltYm9sLCBpZGVudGlmaWVyLCBleHBvcnROYW1lfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzb2x2ZWRFeHBvcnRzO1xufVxuIl19
@@ -1,162 +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 { SchematicsException } from '@angular-devkit/schematics';
9
- import { PartialEvaluator } from '@angular/compiler-cli/src/ngtsc/partial_evaluator';
10
- import { TypeScriptReflectionHost } from '@angular/compiler-cli/src/ngtsc/reflection';
11
- import { relative } from 'path';
12
- import * as ts from 'typescript';
13
- import { getProjectTsConfigPaths } from '../../utils/project_tsconfig_paths';
14
- import { canMigrateFile, createMigrationCompilerHost } from '../../utils/typescript/compiler_host';
15
- import { createNgcProgram } from './create_ngc_program';
16
- import { NgDeclarationCollector } from './ng_declaration_collector';
17
- import { UndecoratedClassesTransform } from './transform';
18
- const MIGRATION_RERUN_MESSAGE = 'Migration can be rerun with: "ng update @angular/core ' +
19
- '--migrate-only migration-v9-undecorated-classes-with-di"';
20
- const MIGRATION_AOT_FAILURE = 'This migration uses the Angular compiler internally and ' +
21
- 'therefore projects that no longer build successfully after the update cannot run ' +
22
- 'the migration. Please ensure there are no AOT compilation errors and rerun the migration.';
23
- /** Entry point for the V9 "undecorated-classes-with-di" migration. */
24
- export default function () {
25
- return (tree, ctx) => {
26
- const { buildPaths } = getProjectTsConfigPaths(tree);
27
- const basePath = process.cwd();
28
- const failures = [];
29
- let programError = false;
30
- if (!buildPaths.length) {
31
- throw new SchematicsException('Could not find any tsconfig file. Cannot migrate undecorated derived classes and ' +
32
- 'undecorated base classes which use DI.');
33
- }
34
- for (const tsconfigPath of buildPaths) {
35
- const result = runUndecoratedClassesMigration(tree, tsconfigPath, basePath, ctx.logger);
36
- failures.push(...result.failures);
37
- programError = programError || !!result.programError;
38
- }
39
- if (programError) {
40
- ctx.logger.info('Could not migrate all undecorated classes that use dependency');
41
- ctx.logger.info('injection. Some project targets could not be analyzed due to');
42
- ctx.logger.info('TypeScript program failures.\n');
43
- ctx.logger.info(`${MIGRATION_RERUN_MESSAGE}\n`);
44
- if (failures.length) {
45
- ctx.logger.info('Please manually fix the following failures and re-run the');
46
- ctx.logger.info('migration once the TypeScript program failures are resolved.');
47
- failures.forEach(message => ctx.logger.warn(`⮑ ${message}`));
48
- }
49
- }
50
- else if (failures.length) {
51
- ctx.logger.info('Could not migrate all undecorated classes that use dependency');
52
- ctx.logger.info('injection. Please manually fix the following failures:');
53
- failures.forEach(message => ctx.logger.warn(`⮑ ${message}`));
54
- }
55
- };
56
- }
57
- function runUndecoratedClassesMigration(tree, tsconfigPath, basePath, logger) {
58
- const failures = [];
59
- const programData = gracefullyCreateProgram(tree, basePath, tsconfigPath, logger);
60
- // Gracefully exit if the program could not be created.
61
- if (programData === null) {
62
- return { failures: [], programError: true };
63
- }
64
- const { program, compiler } = programData;
65
- const typeChecker = program.getTypeChecker();
66
- const partialEvaluator = new PartialEvaluator(new TypeScriptReflectionHost(typeChecker), typeChecker, /* dependencyTracker */ null);
67
- const declarationCollector = new NgDeclarationCollector(typeChecker, partialEvaluator);
68
- const sourceFiles = program.getSourceFiles().filter(sourceFile => canMigrateFile(basePath, sourceFile, program));
69
- // Analyze source files by detecting all directives, components and providers.
70
- sourceFiles.forEach(sourceFile => declarationCollector.visitNode(sourceFile));
71
- const { decoratedDirectives, decoratedProviders, undecoratedDeclarations } = declarationCollector;
72
- const transform = new UndecoratedClassesTransform(typeChecker, compiler, partialEvaluator, getUpdateRecorder);
73
- const updateRecorders = new Map();
74
- // Run the migrations for decorated providers and both decorated and undecorated
75
- // directives. The transform failures are collected and converted into human-readable
76
- // failures which can be printed to the console.
77
- [...transform.migrateDecoratedDirectives(decoratedDirectives),
78
- ...transform.migrateDecoratedProviders(decoratedProviders),
79
- ...transform.migrateUndecoratedDeclarations(Array.from(undecoratedDeclarations))]
80
- .forEach(({ node, message }) => {
81
- const nodeSourceFile = node.getSourceFile();
82
- const relativeFilePath = relative(basePath, nodeSourceFile.fileName);
83
- const { line, character } = ts.getLineAndCharacterOfPosition(node.getSourceFile(), node.getStart());
84
- failures.push(`${relativeFilePath}@${line + 1}:${character + 1}: ${message}`);
85
- });
86
- // Record the changes collected in the import manager and transformer.
87
- transform.recordChanges();
88
- // Walk through each update recorder and commit the update. We need to commit the
89
- // updates in batches per source file as there can be only one recorder per source
90
- // file in order to avoid shifted character offsets.
91
- updateRecorders.forEach(recorder => recorder.commitUpdate());
92
- return { failures };
93
- /** Gets the update recorder for the specified source file. */
94
- function getUpdateRecorder(sourceFile) {
95
- if (updateRecorders.has(sourceFile)) {
96
- return updateRecorders.get(sourceFile);
97
- }
98
- const treeRecorder = tree.beginUpdate(relative(basePath, sourceFile.fileName));
99
- const recorder = {
100
- addClassComment(node, text) {
101
- treeRecorder.insertLeft(node.members.pos, `\n // ${text}\n`);
102
- },
103
- addClassDecorator(node, text) {
104
- // New imports should be inserted at the left while decorators should be inserted
105
- // at the right in order to ensure that imports are inserted before the decorator
106
- // if the start position of import and decorator is the source file start.
107
- treeRecorder.insertRight(node.getStart(), `${text}\n`);
108
- },
109
- addNewImport(start, importText) {
110
- // New imports should be inserted at the left while decorators should be inserted
111
- // at the right in order to ensure that imports are inserted before the decorator
112
- // if the start position of import and decorator is the source file start.
113
- treeRecorder.insertLeft(start, importText);
114
- },
115
- updateExistingImport(namedBindings, newNamedBindings) {
116
- treeRecorder.remove(namedBindings.getStart(), namedBindings.getWidth());
117
- treeRecorder.insertRight(namedBindings.getStart(), newNamedBindings);
118
- },
119
- commitUpdate() {
120
- tree.commitUpdate(treeRecorder);
121
- }
122
- };
123
- updateRecorders.set(sourceFile, recorder);
124
- return recorder;
125
- }
126
- }
127
- function getErrorDiagnostics(diagnostics) {
128
- return diagnostics.filter(d => d.category === ts.DiagnosticCategory.Error);
129
- }
130
- function gracefullyCreateProgram(tree, basePath, tsconfigPath, logger) {
131
- try {
132
- const { ngcProgram, host, program, compiler } = createNgcProgram((options) => createMigrationCompilerHost(tree, options, basePath), tsconfigPath);
133
- const syntacticDiagnostics = getErrorDiagnostics(ngcProgram.getTsSyntacticDiagnostics());
134
- const structuralDiagnostics = getErrorDiagnostics(ngcProgram.getNgStructuralDiagnostics());
135
- const configDiagnostics = getErrorDiagnostics([...program.getOptionsDiagnostics(), ...ngcProgram.getNgOptionDiagnostics()]);
136
- if (configDiagnostics.length) {
137
- logger.warn(`\nTypeScript project "${tsconfigPath}" has configuration errors. This could cause ` +
138
- `an incomplete migration. Please fix the following failures and rerun the migration:`);
139
- logger.error(ts.formatDiagnostics(configDiagnostics, host));
140
- return null;
141
- }
142
- // Syntactic TypeScript errors can throw off the query analysis and therefore we want
143
- // to notify the developer that we couldn't analyze parts of the project. Developers
144
- // can just re-run the migration after fixing these failures.
145
- if (syntacticDiagnostics.length) {
146
- logger.warn(`\nTypeScript project "${tsconfigPath}" has syntactical errors which could cause ` +
147
- `an incomplete migration. Please fix the following failures and rerun the migration:`);
148
- logger.error(ts.formatDiagnostics(syntacticDiagnostics, host));
149
- return null;
150
- }
151
- if (structuralDiagnostics.length) {
152
- throw new Error(ts.formatDiagnostics(structuralDiagnostics, host));
153
- }
154
- return { program, compiler };
155
- }
156
- catch (e) {
157
- logger.warn(`\n${MIGRATION_AOT_FAILURE} The following project failed: ${tsconfigPath}\n`);
158
- logger.error(`${e.toString()}\n`);
159
- return null;
160
- }
161
- }
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy91bmRlY29yYXRlZC1jbGFzc2VzLXdpdGgtZGkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBR0gsT0FBTyxFQUF5QixtQkFBbUIsRUFBTyxNQUFNLDRCQUE0QixDQUFDO0FBRzdGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ25GLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakMsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFDLGNBQWMsRUFBRSwyQkFBMkIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBRWpHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3RELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUd4RCxNQUFNLHVCQUF1QixHQUFHLHdEQUF3RDtJQUNwRiwwREFBMEQsQ0FBQztBQUUvRCxNQUFNLHFCQUFxQixHQUFHLDBEQUEwRDtJQUNwRixtRkFBbUY7SUFDbkYsMkZBQTJGLENBQUM7QUFFaEcsc0VBQXNFO0FBQ3RFLE1BQU0sQ0FBQyxPQUFPO0lBQ1osT0FBTyxDQUFDLElBQVUsRUFBRSxHQUFxQixFQUFFLEVBQUU7UUFDM0MsTUFBTSxFQUFDLFVBQVUsRUFBQyxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELE1BQU0sUUFBUSxH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QUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUM7S0FDYjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtsb2dnaW5nfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQge1J1bGUsIFNjaGVtYXRpY0NvbnRleHQsIFNjaGVtYXRpY3NFeGNlcHRpb24sIFRyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7QW90Q29tcGlsZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7RGlhZ25vc3RpYyBhcyBOZ0RpYWdub3N0aWN9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaSc7XG5pbXBvcnQge1BhcnRpYWxFdmFsdWF0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcGFydGlhbF9ldmFsdWF0b3InO1xuaW1wb3J0IHtUeXBlU2NyaXB0UmVmbGVjdGlvbkhvc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbic7XG5pbXBvcnQge3JlbGF0aXZlfSBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldFByb2plY3RUc0NvbmZpZ1BhdGhzfSBmcm9tICcuLi8uLi91dGlscy9wcm9qZWN0X3RzY29uZmlnX3BhdGhzJztcbmltcG9ydCB7Y2FuTWlncmF0ZUZpbGUsIGNyZWF0ZU1pZ3JhdGlvbkNvbXBpbGVySG9zdH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9jb21waWxlcl9ob3N0JztcblxuaW1wb3J0IHtjcmVhdGVOZ2NQcm9ncmFtfSBmcm9tICcuL2NyZWF0ZV9uZ2NfcHJvZ3JhbSc7XG5pbXBvcnQge05nRGVjbGFyYXRpb25Db2xsZWN0b3J9IGZyb20gJy4vbmdfZGVjbGFyYXRpb25fY29sbGVjdG9yJztcbmltcG9ydCB7VW5kZWNvcmF0ZWRDbGFzc2VzVHJhbnNmb3JtfSBmcm9tICcuL3RyYW5zZm9ybSc7XG5pbXBvcnQge1VwZGF0ZVJlY29yZGVyfSBmcm9tICcuL3VwZGF0ZV9yZWNvcmRlcic7XG5cbmNvbnN0IE1JR1JBVElPTl9SRVJVTl9NRVNTQUdFID0gJ01pZ3JhdGlvbiBjYW4gYmUgcmVydW4gd2l0aDogXCJuZyB1cGRhdGUgQGFuZ3VsYXIvY29yZSAnICtcbiAgICAnLS1taWdyYXRlLW9ubHkgbWlncmF0aW9uLXY5LXVuZGVjb3JhdGVkLWNsYXNzZXMtd2l0aC1kaVwiJztcblxuY29uc3QgTUlHUkFUSU9OX0FPVF9GQUlMVVJFID0gJ1RoaXMgbWlncmF0aW9uIHVzZXMgdGhlIEFuZ3VsYXIgY29tcGlsZXIgaW50ZXJuYWxseSBhbmQgJyArXG4gICAgJ3RoZXJlZm9yZSBwcm9qZWN0cyB0aGF0IG5vIGxvbmdlciBidWlsZCBzdWNjZXNzZnVsbHkgYWZ0ZXIgdGhlIHVwZGF0ZSBjYW5ub3QgcnVuICcgK1xuICAgICd0aGUgbWlncmF0aW9uLiBQbGVhc2UgZW5zdXJlIHRoZXJlIGFyZSBubyBBT1QgY29tcGlsYXRpb24gZXJyb3JzIGFuZCByZXJ1biB0aGUgbWlncmF0aW9uLic7XG5cbi8qKiBFbnRyeSBwb2ludCBmb3IgdGhlIFY5IFwidW5kZWNvcmF0ZWQtY2xhc3Nlcy13aXRoLWRpXCIgbWlncmF0aW9uLiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKTogUnVsZSB7XG4gIHJldHVybiAodHJlZTogVHJlZSwgY3R4OiBTY2hlbWF0aWNDb250ZXh0KSA9PiB7XG4gICAgY29uc3Qge2J1aWxkUGF0aHN9ID0gZ2V0UHJvamVjdFRzQ29uZmlnUGF0aHModHJlZSk7XG4gICAgY29uc3QgYmFzZVBhdGggPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBwcm9ncmFtRXJyb3IgPSBmYWxzZTtcblxuICAgIGlmICghYnVpbGRQYXRocy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBTY2hlbWF0aWNzRXhjZXB0aW9uKFxuICAgICAgICAgICdDb3VsZCBub3QgZmluZCBhbnkgdHNjb25maWcgZmlsZS4gQ2Fubm90IG1pZ3JhdGUgdW5kZWNvcmF0ZWQgZGVyaXZlZCBjbGFzc2VzIGFuZCAnICtcbiAgICAgICAgICAndW5kZWNvcmF0ZWQgYmFzZSBjbGFzc2VzIHdoaWNoIHVzZSBESS4nKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRzY29uZmlnUGF0aCBvZiBidWlsZFBhdGhzKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBydW5VbmRlY29yYXRlZENsYXNzZXNNaWdyYXRpb24odHJlZSwgdHNjb25maWdQYXRoLCBiYXNlUGF0aCwgY3R4LmxvZ2dlcik7XG4gICAgICBmYWlsdXJlcy5wdXNoKC4uLnJlc3VsdC5mYWlsdXJlcyk7XG4gICAgICBwcm9ncmFtRXJyb3IgPSBwcm9ncmFtRXJyb3IgfHwgISFyZXN1bHQucHJvZ3JhbUVycm9yO1xuICAgIH1cblxuICAgIGlmIChwcm9ncmFtRXJyb3IpIHtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygnQ291bGQgbm90IG1pZ3JhdGUgYWxsIHVuZGVjb3JhdGVkIGNsYXNzZXMgdGhhdCB1c2UgZGVwZW5kZW5jeScpO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKCdpbmplY3Rpb24uIFNvbWUgcHJvamVjdCB0YXJnZXRzIGNvdWxkIG5vdCBiZSBhbmFseXplZCBkdWUgdG8nKTtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygnVHlwZVNjcmlwdCBwcm9ncmFtIGZhaWx1cmVzLlxcbicpO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKGAke01JR1JBVElPTl9SRVJVTl9NRVNTQUdFfVxcbmApO1xuXG4gICAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKSB7XG4gICAgICAgIGN0eC5sb2dnZXIuaW5mbygnUGxlYXNlIG1hbnVhbGx5IGZpeCB0aGUgZm9sbG93aW5nIGZhaWx1cmVzIGFuZCByZS1ydW4gdGhlJyk7XG4gICAgICAgIGN0eC5sb2dnZXIuaW5mbygnbWlncmF0aW9uIG9uY2UgdGhlIFR5cGVTY3JpcHQgcHJvZ3JhbSBmYWlsdXJlcyBhcmUgcmVzb2x2ZWQuJyk7XG4gICAgICAgIGZhaWx1cmVzLmZvckVhY2gobWVzc2FnZSA9PiBjdHgubG9nZ2VyLndhcm4oYOKukSAgICR7bWVzc2FnZX1gKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmYWlsdXJlcy5sZW5ndGgpIHtcbiAgICAgIGN0eC5sb2dnZXIuaW5mbygnQ291bGQgbm90IG1pZ3JhdGUgYWxsIHVuZGVjb3JhdGVkIGNsYXNzZXMgdGhhdCB1c2UgZGVwZW5kZW5jeScpO1xuICAgICAgY3R4LmxvZ2dlci5pbmZvKCdpbmplY3Rpb24uIFBsZWFzZSBtYW51YWxseSBmaXggdGhlIGZvbGxvd2luZyBmYWlsdXJlczonKTtcbiAgICAgIGZhaWx1cmVzLmZvckVhY2gobWVzc2FnZSA9PiBjdHgubG9nZ2VyLndhcm4oYOKukSAgICR7bWVzc2FnZX1gKSk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBydW5VbmRlY29yYXRlZENsYXNzZXNNaWdyYXRpb24oXG4gICAgdHJlZTogVHJlZSwgdHNjb25maWdQYXRoOiBzdHJpbmcsIGJhc2VQYXRoOiBzdHJpbmcsXG4gICAgbG9nZ2VyOiBsb2dnaW5nLkxvZ2dlckFwaSk6IHtmYWlsdXJlczogc3RyaW5nW10sIHByb2dyYW1FcnJvcj86IGJvb2xlYW59IHtcbiAgY29uc3QgZmFpbHVyZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHByb2dyYW1EYXRhID0gZ3JhY2VmdWxseUNyZWF0ZVByb2dyYW0odHJlZSwgYmFzZVBhdGgsIHRzY29uZmlnUGF0aCwgbG9nZ2VyKTtcblxuICAvLyBHcmFjZWZ1bGx5IGV4aXQgaWYgdGhlIHByb2dyYW0gY291bGQgbm90IGJlIGNyZWF0ZWQuXG4gIGlmIChwcm9ncmFtRGF0YSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB7ZmFpbHVyZXM6IFtdLCBwcm9ncmFtRXJyb3I6IHRydWV9O1xuICB9XG5cbiAgY29uc3Qge3Byb2dyYW0sIGNvbXBpbGVyfSA9IHByb2dyYW1EYXRhO1xuICBjb25zdCB0eXBlQ2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgcGFydGlhbEV2YWx1YXRvciA9IG5ldyBQYXJ0aWFsRXZhbHVhdG9yKFxuICAgICAgbmV3IFR5cGVTY3JpcHRSZWZsZWN0aW9uSG9zdCh0eXBlQ2hlY2tlciksIHR5cGVDaGVja2VyLCAvKiBkZXBlbmRlbmN5VHJhY2tlciAqLyBudWxsKTtcbiAgY29uc3QgZGVjbGFyYXRpb25Db2xsZWN0b3IgPSBuZXcgTmdEZWNsYXJhdGlvbkNvbGxlY3Rvcih0eXBlQ2hlY2tlciwgcGFydGlhbEV2YWx1YXRvcik7XG4gIGNvbnN0IHNvdXJjZUZpbGVzID1cbiAgICAgIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKS5maWx0ZXIoc291cmNlRmlsZSA9PiBjYW5NaWdyYXRlRmlsZShiYXNlUGF0aCwgc291cmNlRmlsZSwgcHJvZ3JhbSkpO1xuXG4gIC8vIEFuYWx5emUgc291cmNlIGZpbGVzIGJ5IGRldGVjdGluZyBhbGwgZGlyZWN0aXZlcywgY29tcG9uZW50cyBhbmQgcHJvdmlkZXJzLlxuICBzb3VyY2VGaWxlcy5mb3JFYWNoKHNvdXJjZUZpbGUgPT4gZGVjbGFyYXRpb25Db2xsZWN0b3IudmlzaXROb2RlKHNvdXJjZUZpbGUpKTtcblxuICBjb25zdCB7ZGVjb3JhdGVkRGlyZWN0aXZlcywgZGVjb3JhdGVkUHJvdmlkZXJzLCB1bmRlY29yYXRlZERlY2xhcmF0aW9uc30gPSBkZWNsYXJhdGlvbkNvbGxlY3RvcjtcbiAgY29uc3QgdHJhbnNmb3JtID1cbiAgICAgIG5ldyBVbmRlY29yYXRlZENsYXNzZXNUcmFuc2Zvcm0odHlwZUNoZWNrZXIsIGNvbXBpbGVyLCBwYXJ0aWFsRXZhbHVhdG9yLCBnZXRVcGRhdGVSZWNvcmRlcik7XG4gIGNvbnN0IHVwZGF0ZVJlY29yZGVycyA9IG5ldyBNYXA8dHMuU291cmNlRmlsZSwgVXBkYXRlUmVjb3JkZXI+KCk7XG5cbiAgLy8gUnVuIHRoZSBtaWdyYXRpb25zIGZvciBkZWNvcmF0ZWQgcHJvdmlkZXJzIGFuZCBib3RoIGRlY29yYXRlZCBhbmQgdW5kZWNvcmF0ZWRcbiAgLy8gZGlyZWN0aXZlcy4gVGhlIHRyYW5zZm9ybSBmYWlsdXJlcyBhcmUgY29sbGVjdGVkIGFuZCBjb252ZXJ0ZWQgaW50byBodW1hbi1yZWFkYWJsZVxuICAvLyBmYWlsdXJlcyB3aGljaCBjYW4gYmUgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cbiAgWy4uLnRyYW5zZm9ybS5taWdyYXRlRGVjb3JhdGVkRGlyZWN0aXZlcyhkZWNvcmF0ZWREaXJlY3RpdmVzKSxcbiAgIC4uLnRyYW5zZm9ybS5taWdyYXRlRGVjb3JhdGVkUHJvdmlkZXJzKGRlY29yYXRlZFByb3ZpZGVycyksXG4gICAuLi50cmFuc2Zvcm0ubWlncmF0ZVVuZGVjb3JhdGVkRGVjbGFyYXRpb25zKEFycmF5LmZyb20odW5kZWNvcmF0ZWREZWNsYXJhdGlvbnMpKV1cbiAgICAgIC5mb3JFYWNoKCh7bm9kZSwgbWVzc2FnZX0pID0+IHtcbiAgICAgICAgY29uc3Qgbm9kZVNvdXJjZUZpbGUgPSBub2RlLmdldFNvdXJjZUZpbGUoKTtcbiAgICAgICAgY29uc3QgcmVsYXRpdmVGaWxlUGF0aCA9IHJlbGF0aXZlKGJhc2VQYXRoLCBub2RlU291cmNlRmlsZS5maWxlTmFtZSk7XG4gICAgICAgIGNvbnN0IHtsaW5lLCBjaGFyYWN0ZXJ9ID1cbiAgICAgICAgICAgIHRzLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKG5vZGUuZ2V0U291cmNlRmlsZSgpLCBub2RlLmdldFN0YXJ0KCkpO1xuICAgICAgICBmYWlsdXJlcy5wdXNoKGAke3JlbGF0aXZlRmlsZVBhdGh9QCR7bGluZSArIDF9OiR7Y2hhcmFjdGVyICsgMX06ICR7bWVzc2FnZX1gKTtcbiAgICAgIH0pO1xuXG4gIC8vIFJlY29yZCB0aGUgY2hhbmdlcyBjb2xsZWN0ZWQgaW4gdGhlIGltcG9ydCBtYW5hZ2VyIGFuZCB0cmFuc2Zvcm1lci5cbiAgdHJhbnNmb3JtLnJlY29yZENoYW5nZXMoKTtcblxuICAvLyBXYWxrIHRocm91Z2ggZWFjaCB1cGRhdGUgcmVjb3JkZXIgYW5kIGNvbW1pdCB0aGUgdXBkYXRlLiBXZSBuZWVkIHRvIGNvbW1pdCB0aGVcbiAgLy8gdXBkYXRlcyBpbiBiYXRjaGVzIHBlciBzb3VyY2UgZmlsZSBhcyB0aGVyZSBjYW4gYmUgb25seSBvbmUgcmVjb3JkZXIgcGVyIHNvdXJjZVxuICAvLyBmaWxlIGluIG9yZGVyIHRvIGF2b2lkIHNoaWZ0ZWQgY2hhcmFjdGVyIG9mZnNldHMuXG4gIHVwZGF0ZVJlY29yZGVycy5mb3JFYWNoKHJlY29yZGVyID0+IHJlY29yZGVyLmNvbW1pdFVwZGF0ZSgpKTtcblxuICByZXR1cm4ge2ZhaWx1cmVzfTtcblxuICAvKiogR2V0cyB0aGUgdXBkYXRlIHJlY29yZGVyIGZvciB0aGUgc3BlY2lmaWVkIHNvdXJjZSBmaWxlLiAqL1xuICBmdW5jdGlvbiBnZXRVcGRhdGVSZWNvcmRlcihzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogVXBkYXRlUmVjb3JkZXIge1xuICAgIGlmICh1cGRhdGVSZWNvcmRlcnMuaGFzKHNvdXJjZUZpbGUpKSB7XG4gICAgICByZXR1cm4gdXBkYXRlUmVjb3JkZXJzLmdldChzb3VyY2VGaWxlKSE7XG4gICAgfVxuICAgIGNvbnN0IHRyZWVSZWNvcmRlciA9IHRyZWUuYmVnaW5VcGRhdGUocmVsYXRpdmUoYmFzZVBhdGgsIHNvdXJjZUZpbGUuZmlsZU5hbWUpKTtcbiAgICBjb25zdCByZWNvcmRlcjogVXBkYXRlUmVjb3JkZXIgPSB7XG4gICAgICBhZGRDbGFzc0NvbW1lbnQobm9kZTogdHMuQ2xhc3NEZWNsYXJhdGlvbiwgdGV4dDogc3RyaW5nKSB7XG4gICAgICAgIHRyZWVSZWNvcmRlci5pbnNlcnRMZWZ0KG5vZGUubWVtYmVycy5wb3MsIGBcXG4gIC8vICR7dGV4dH1cXG5gKTtcbiAgICAgIH0sXG4gICAgICBhZGRDbGFzc0RlY29yYXRvcihub2RlOiB0cy5DbGFzc0RlY2xhcmF0aW9uLCB0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gTmV3IGltcG9ydHMgc2hvdWxkIGJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IHdoaWxlIGRlY29yYXRvcnMgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICAgIC8vIGF0IHRoZSByaWdodCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBpbXBvcnRzIGFyZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGRlY29yYXRvclxuICAgICAgICAvLyBpZiB0aGUgc3RhcnQgcG9zaXRpb24gb2YgaW1wb3J0IGFuZCBkZWNvcmF0b3IgaXMgdGhlIHNvdXJjZSBmaWxlIHN0YXJ0LlxuICAgICAgICB0cmVlUmVjb3JkZXIuaW5zZXJ0UmlnaHQobm9kZS5nZXRTdGFydCgpLCBgJHt0ZXh0fVxcbmApO1xuICAgICAgfSxcbiAgICAgIGFkZE5ld0ltcG9ydChzdGFydDogbnVtYmVyLCBpbXBvcnRUZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gTmV3IGltcG9ydHMgc2hvdWxkIGJlIGluc2VydGVkIGF0IHRoZSBsZWZ0IHdoaWxlIGRlY29yYXRvcnMgc2hvdWxkIGJlIGluc2VydGVkXG4gICAgICAgIC8vIGF0IHRoZSByaWdodCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBpbXBvcnRzIGFyZSBpbnNlcnRlZCBiZWZvcmUgdGhlIGRlY29yYXRvclxuICAgICAgICAvLyBpZiB0aGUgc3RhcnQgcG9zaXRpb24gb2YgaW1wb3J0IGFuZCBkZWNvcmF0b3IgaXMgdGhlIHNvdXJjZSBmaWxlIHN0YXJ0LlxuICAgICAgICB0cmVlUmVjb3JkZXIuaW5zZXJ0TGVmdChzdGFydCwgaW1wb3J0VGV4dCk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlRXhpc3RpbmdJbXBvcnQobmFtZWRCaW5kaW5nczogdHMuTmFtZWRJbXBvcnRzLCBuZXdOYW1lZEJpbmRpbmdzOiBzdHJpbmcpIHtcbiAgICAgICAgdHJlZVJlY29yZGVyLnJlbW92ZShuYW1lZEJpbmRpbmdzLmdldFN0YXJ0KCksIG5hbWVkQmluZGluZ3MuZ2V0V2lkdGgoKSk7XG4gICAgICAgIHRyZWVSZWNvcmRlci5pbnNlcnRSaWdodChuYW1lZEJpbmRpbmdzLmdldFN0YXJ0KCksIG5ld05hbWVkQmluZGluZ3MpO1xuICAgICAgfSxcbiAgICAgIGNvbW1pdFVwZGF0ZSgpIHtcbiAgICAgICAgdHJlZS5jb21taXRVcGRhdGUodHJlZVJlY29yZGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHVwZGF0ZVJlY29yZGVycy5zZXQoc291cmNlRmlsZSwgcmVjb3JkZXIpO1xuICAgIHJldHVybiByZWNvcmRlcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRFcnJvckRpYWdub3N0aWNzKGRpYWdub3N0aWNzOiBSZWFkb25seUFycmF5PHRzLkRpYWdub3N0aWN8TmdEaWFnbm9zdGljPikge1xuICByZXR1cm4gPHRzLkRpYWdub3N0aWNbXT5kaWFnbm9zdGljcy5maWx0ZXIoZCA9PiBkLmNhdGVnb3J5ID09PSB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpO1xufVxuXG5mdW5jdGlvbiBncmFjZWZ1bGx5Q3JlYXRlUHJvZ3JhbShcbiAgICB0cmVlOiBUcmVlLCBiYXNlUGF0aDogc3RyaW5nLCB0c2NvbmZpZ1BhdGg6IHN0cmluZyxcbiAgICBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpKToge2NvbXBpbGVyOiBBb3RDb21waWxlciwgcHJvZ3JhbTogdHMuUHJvZ3JhbX18bnVsbCB7XG4gIHRyeSB7XG4gICAgY29uc3Qge25nY1Byb2dyYW0sIGhvc3QsIHByb2dyYW0sIGNvbXBpbGVyfSA9IGNyZWF0ZU5nY1Byb2dyYW0oXG4gICAgICAgIChvcHRpb25zKSA9PiBjcmVhdGVNaWdyYXRpb25Db21waWxlckhvc3QodHJlZSwgb3B0aW9ucywgYmFzZVBhdGgpLCB0c2NvbmZpZ1BhdGgpO1xuICAgIGNvbnN0IHN5bnRhY3RpY0RpYWdub3N0aWNzID0gZ2V0RXJyb3JEaWFnbm9zdGljcyhuZ2NQcm9ncmFtLmdldFRzU3ludGFjdGljRGlhZ25vc3RpY3MoKSk7XG4gICAgY29uc3Qgc3RydWN0dXJhbERpYWdub3N0aWNzID0gZ2V0RXJyb3JEaWFnbm9zdGljcyhuZ2NQcm9ncmFtLmdldE5nU3RydWN0dXJhbERpYWdub3N0aWNzKCkpO1xuICAgIGNvbnN0IGNvbmZpZ0RpYWdub3N0aWNzID0gZ2V0RXJyb3JEaWFnbm9zdGljcyhcbiAgICAgICAgWy4uLnByb2dyYW0uZ2V0T3B0aW9uc0RpYWdub3N0aWNzKCksIC4uLm5nY1Byb2dyYW0uZ2V0TmdPcHRpb25EaWFnbm9zdGljcygpXSk7XG5cbiAgICBpZiAoY29uZmlnRGlhZ25vc3RpY3MubGVuZ3RoKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgXFxuVHlwZVNjcmlwdCBwcm9qZWN0IFwiJHt0c2NvbmZpZ1BhdGh9XCIgaGFzIGNvbmZpZ3VyYXRpb24gZXJyb3JzLiBUaGlzIGNvdWxkIGNhdXNlIGAgK1xuICAgICAgICAgIGBhbiBpbmNvbXBsZXRlIG1pZ3JhdGlvbi4gUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGZhaWx1cmVzIGFuZCByZXJ1biB0aGUgbWlncmF0aW9uOmApO1xuICAgICAgbG9nZ2VyLmVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKGNvbmZpZ0RpYWdub3N0aWNzLCBob3N0KSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTeW50YWN0aWMgVHlwZVNjcmlwdCBlcnJvcnMgY2FuIHRocm93IG9mZiB0aGUgcXVlcnkgYW5hbHlzaXMgYW5kIHRoZXJlZm9yZSB3ZSB3YW50XG4gICAgLy8gdG8gbm90aWZ5IHRoZSBkZXZlbG9wZXIgdGhhdCB3ZSBjb3VsZG4ndCBhbmFseXplIHBhcnRzIG9mIHRoZSBwcm9qZWN0LiBEZXZlbG9wZXJzXG4gICAgLy8gY2FuIGp1c3QgcmUtcnVuIHRoZSBtaWdyYXRpb24gYWZ0ZXIgZml4aW5nIHRoZXNlIGZhaWx1cmVzLlxuICAgIGlmIChzeW50YWN0aWNEaWFnbm9zdGljcy5sZW5ndGgpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIGBcXG5UeXBlU2NyaXB0IHByb2plY3QgXCIke3RzY29uZmlnUGF0aH1cIiBoYXMgc3ludGFjdGljYWwgZXJyb3JzIHdoaWNoIGNvdWxkIGNhdXNlIGAgK1xuICAgICAgICAgIGBhbiBpbmNvbXBsZXRlIG1pZ3JhdGlvbi4gUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGZhaWx1cmVzIGFuZCByZXJ1biB0aGUgbWlncmF0aW9uOmApO1xuICAgICAgbG9nZ2VyLmVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKHN5bnRhY3RpY0RpYWdub3N0aWNzLCBob3N0KSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RydWN0dXJhbERpYWdub3N0aWNzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRzLmZvcm1hdERpYWdub3N0aWNzKDx0cy5EaWFnbm9zdGljW10+c3RydWN0dXJhbERpYWdub3N0aWNzLCBob3N0KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtwcm9ncmFtLCBjb21waWxlcn07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIud2FybihgXFxuJHtNSUdSQVRJT05fQU9UX0ZBSUxVUkV9IFRoZSBmb2xsb3dpbmcgcHJvamVjdCBmYWlsZWQ6ICR7dHNjb25maWdQYXRofVxcbmApO1xuICAgIGxvZ2dlci5lcnJvcihgJHtlLnRvU3RyaW5nKCl9XFxuYCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==