@angular/core 13.0.0-rc.0 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/core.d.ts +224 -221
  2. package/esm2020/index.mjs +6 -5
  3. package/esm2020/src/application_module.mjs +2 -7
  4. package/esm2020/src/core_render3_private_export.mjs +2 -1
  5. package/esm2020/src/linker/component_factory_resolver.mjs +5 -5
  6. package/esm2020/src/linker/ng_module_factory.mjs +1 -1
  7. package/esm2020/src/render3/definition.mjs +2 -5
  8. package/esm2020/src/render3/di.mjs +3 -3
  9. package/esm2020/src/render3/error_code.mjs +2 -5
  10. package/esm2020/src/render3/error_details_base_url.mjs +16 -0
  11. package/esm2020/src/render3/fields.mjs +1 -2
  12. package/esm2020/src/render3/ng_module_ref.mjs +2 -5
  13. package/esm2020/src/render3/util/global_utils.mjs +2 -3
  14. package/esm2020/src/version.mjs +1 -1
  15. package/esm2020/testing/src/logger.mjs +3 -3
  16. package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
  17. package/esm2020/testing/src/test_compiler.mjs +3 -3
  18. package/fesm2015/core.mjs +26 -25
  19. package/fesm2015/core.mjs.map +1 -1
  20. package/fesm2015/testing.mjs +4 -4
  21. package/fesm2020/core.mjs +26 -25
  22. package/fesm2020/core.mjs.map +1 -1
  23. package/fesm2020/testing.mjs +4 -4
  24. package/package.json +1 -1
  25. package/schematics/migrations/router-link-empty-expression/index.js +2 -2
  26. package/schematics/migrations.json +0 -100
  27. package/schematics/utils/ng_component_template.d.ts +4 -1
  28. package/schematics/utils/ng_component_template.js +28 -14
  29. package/testing/testing.d.ts +1 -1
  30. package/schematics/migrations/abstract-control-parent/index.d.ts +0 -11
  31. package/schematics/migrations/abstract-control-parent/index.js +0 -69
  32. package/schematics/migrations/abstract-control-parent/util.d.ts +0 -14
  33. package/schematics/migrations/abstract-control-parent/util.js +0 -67
  34. package/schematics/migrations/activated-route-snapshot-fragment/index.d.ts +0 -13
  35. package/schematics/migrations/activated-route-snapshot-fragment/index.js +0 -73
  36. package/schematics/migrations/activated-route-snapshot-fragment/util.d.ts +0 -16
  37. package/schematics/migrations/activated-route-snapshot-fragment/util.js +0 -51
  38. package/schematics/migrations/can-activate-with-redirect-to/index.d.ts +0 -11
  39. package/schematics/migrations/can-activate-with-redirect-to/index.js +0 -69
  40. package/schematics/migrations/can-activate-with-redirect-to/util.d.ts +0 -11
  41. package/schematics/migrations/can-activate-with-redirect-to/util.js +0 -73
  42. package/schematics/migrations/deep-shadow-piercing-selector/index.d.ts +0 -10
  43. package/schematics/migrations/deep-shadow-piercing-selector/index.js +0 -49
  44. package/schematics/migrations/dynamic-queries/index.d.ts +0 -13
  45. package/schematics/migrations/dynamic-queries/index.js +0 -76
  46. package/schematics/migrations/dynamic-queries/util.d.ts +0 -25
  47. package/schematics/migrations/dynamic-queries/util.js +0 -84
  48. package/schematics/migrations/initial-navigation/collector.d.ts +0 -22
  49. package/schematics/migrations/initial-navigation/collector.js +0 -122
  50. package/schematics/migrations/initial-navigation/index.d.ts +0 -11
  51. package/schematics/migrations/initial-navigation/index.js +0 -83
  52. package/schematics/migrations/initial-navigation/transform.d.ts +0 -20
  53. package/schematics/migrations/initial-navigation/transform.js +0 -71
  54. package/schematics/migrations/initial-navigation/update_recorder.d.ts +0 -18
  55. package/schematics/migrations/initial-navigation/update_recorder.js +0 -20
  56. package/schematics/migrations/initial-navigation/util.d.ts +0 -12
  57. package/schematics/migrations/initial-navigation/util.js +0 -46
  58. package/schematics/migrations/missing-injectable/definition_collector.d.ts +0 -37
  59. package/schematics/migrations/missing-injectable/definition_collector.js +0 -92
  60. package/schematics/migrations/missing-injectable/index.d.ts +0 -11
  61. package/schematics/migrations/missing-injectable/index.js +0 -136
  62. package/schematics/migrations/missing-injectable/providers_evaluator.d.ts +0 -26
  63. package/schematics/migrations/missing-injectable/providers_evaluator.js +0 -71
  64. package/schematics/migrations/missing-injectable/transform.d.ts +0 -70
  65. package/schematics/migrations/missing-injectable/transform.js +0 -203
  66. package/schematics/migrations/missing-injectable/update_recorder.d.ts +0 -21
  67. package/schematics/migrations/missing-injectable/update_recorder.js +0 -20
  68. package/schematics/migrations/module-with-providers/collector.d.ts +0 -34
  69. package/schematics/migrations/module-with-providers/collector.js +0 -76
  70. package/schematics/migrations/module-with-providers/index.d.ts +0 -13
  71. package/schematics/migrations/module-with-providers/index.js +0 -107
  72. package/schematics/migrations/module-with-providers/transform.d.ts +0 -50
  73. package/schematics/migrations/module-with-providers/transform.js +0 -149
  74. package/schematics/migrations/module-with-providers/util.d.ts +0 -13
  75. package/schematics/migrations/module-with-providers/util.js +0 -43
  76. package/schematics/migrations/move-document/document_import_visitor.d.ts +0 -27
  77. package/schematics/migrations/move-document/document_import_visitor.js +0 -77
  78. package/schematics/migrations/move-document/index.d.ts +0 -11
  79. package/schematics/migrations/move-document/index.js +0 -93
  80. package/schematics/migrations/move-document/move-import.d.ts +0 -12
  81. package/schematics/migrations/move-document/move-import.js +0 -64
  82. package/schematics/migrations/native-view-encapsulation/index.d.ts +0 -11
  83. package/schematics/migrations/native-view-encapsulation/index.js +0 -63
  84. package/schematics/migrations/native-view-encapsulation/util.d.ts +0 -11
  85. package/schematics/migrations/native-view-encapsulation/util.js +0 -51
  86. package/schematics/migrations/navigation-extras-omissions/index.d.ts +0 -11
  87. package/schematics/migrations/navigation-extras-omissions/index.js +0 -72
  88. package/schematics/migrations/navigation-extras-omissions/util.d.ts +0 -11
  89. package/schematics/migrations/navigation-extras-omissions/util.js +0 -129
  90. package/schematics/migrations/relative-link-resolution/collector.d.ts +0 -22
  91. package/schematics/migrations/relative-link-resolution/collector.js +0 -98
  92. package/schematics/migrations/relative-link-resolution/index.d.ts +0 -11
  93. package/schematics/migrations/relative-link-resolution/index.js +0 -84
  94. package/schematics/migrations/relative-link-resolution/transform.d.ts +0 -22
  95. package/schematics/migrations/relative-link-resolution/transform.js +0 -68
  96. package/schematics/migrations/relative-link-resolution/update_recorder.d.ts +0 -18
  97. package/schematics/migrations/relative-link-resolution/update_recorder.js +0 -20
  98. package/schematics/migrations/relative-link-resolution/util.d.ts +0 -12
  99. package/schematics/migrations/relative-link-resolution/util.js +0 -46
  100. package/schematics/migrations/renderer-to-renderer2/helpers.d.ts +0 -25
  101. package/schematics/migrations/renderer-to-renderer2/helpers.js +0 -241
  102. package/schematics/migrations/renderer-to-renderer2/index.d.ts +0 -14
  103. package/schematics/migrations/renderer-to-renderer2/index.js +0 -138
  104. package/schematics/migrations/renderer-to-renderer2/migration.d.ts +0 -18
  105. package/schematics/migrations/renderer-to-renderer2/migration.js +0 -228
  106. package/schematics/migrations/renderer-to-renderer2/util.d.ts +0 -18
  107. package/schematics/migrations/renderer-to-renderer2/util.js +0 -86
  108. package/schematics/migrations/router-preserve-query-params/index.d.ts +0 -14
  109. package/schematics/migrations/router-preserve-query-params/index.js +0 -75
  110. package/schematics/migrations/router-preserve-query-params/util.d.ts +0 -11
  111. package/schematics/migrations/router-preserve-query-params/util.js +0 -106
  112. package/schematics/migrations/static-queries/angular/directive_inputs.d.ts +0 -11
  113. package/schematics/migrations/static-queries/angular/directive_inputs.js +0 -87
  114. package/schematics/migrations/static-queries/angular/ng_query_visitor.d.ts +0 -45
  115. package/schematics/migrations/static-queries/angular/ng_query_visitor.js +0 -130
  116. package/schematics/migrations/static-queries/angular/query-definition.d.ts +0 -37
  117. package/schematics/migrations/static-queries/angular/query-definition.js +0 -33
  118. package/schematics/migrations/static-queries/angular/super_class.d.ts +0 -15
  119. package/schematics/migrations/static-queries/angular/super_class.js +0 -35
  120. package/schematics/migrations/static-queries/index.d.ts +0 -11
  121. package/schematics/migrations/static-queries/index.js +0 -244
  122. package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.d.ts +0 -41
  123. package/schematics/migrations/static-queries/strategies/template_strategy/template_strategy.js +0 -210
  124. package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.d.ts +0 -24
  125. package/schematics/migrations/static-queries/strategies/test_strategy/test_strategy.js +0 -38
  126. package/schematics/migrations/static-queries/strategies/timing-strategy.d.ts +0 -19
  127. package/schematics/migrations/static-queries/strategies/timing-strategy.js +0 -20
  128. package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.d.ts +0 -82
  129. package/schematics/migrations/static-queries/strategies/usage_strategy/declaration_usage_visitor.js +0 -372
  130. package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.d.ts +0 -18
  131. package/schematics/migrations/static-queries/strategies/usage_strategy/super_class_context.js +0 -55
  132. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.d.ts +0 -27
  133. package/schematics/migrations/static-queries/strategies/usage_strategy/template_usage_visitor.js +0 -93
  134. package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.d.ts +0 -34
  135. package/schematics/migrations/static-queries/strategies/usage_strategy/usage_strategy.js +0 -172
  136. package/schematics/migrations/static-queries/transform.d.ts +0 -21
  137. package/schematics/migrations/static-queries/transform.js +0 -105
  138. package/schematics/migrations/template-var-assignment/analyze_template.d.ts +0 -20
  139. package/schematics/migrations/template-var-assignment/analyze_template.js +0 -38
  140. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.d.ts +0 -28
  141. package/schematics/migrations/template-var-assignment/angular/html_variable_assignment_visitor.js +0 -80
  142. package/schematics/migrations/template-var-assignment/index.d.ts +0 -11
  143. package/schematics/migrations/template-var-assignment/index.js +0 -101
  144. package/schematics/migrations/undecorated-classes-with-decorated-fields/index.d.ts +0 -14
  145. package/schematics/migrations/undecorated-classes-with-decorated-fields/index.js +0 -128
  146. package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.d.ts +0 -64
  147. package/schematics/migrations/undecorated-classes-with-decorated-fields/transform.js +0 -302
  148. package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.d.ts +0 -19
  149. package/schematics/migrations/undecorated-classes-with-decorated-fields/update_recorder.js +0 -20
  150. package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.d.ts +0 -18
  151. package/schematics/migrations/undecorated-classes-with-di/create_ngc_program.js +0 -56
  152. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.d.ts +0 -18
  153. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/convert_directive_metadata.js +0 -99
  154. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.d.ts +0 -37
  155. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/decorator_rewriter.js +0 -118
  156. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.d.ts +0 -37
  157. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/import_rewrite_visitor.js +0 -129
  158. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.d.ts +0 -10
  159. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/path_format.js +0 -31
  160. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.d.ts +0 -16
  161. package/schematics/migrations/undecorated-classes-with-di/decorator_rewrite/source_file_exports.js +0 -68
  162. package/schematics/migrations/undecorated-classes-with-di/index.d.ts +0 -11
  163. package/schematics/migrations/undecorated-classes-with-di/index.js +0 -226
  164. package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.d.ts +0 -38
  165. package/schematics/migrations/undecorated-classes-with-di/ng_declaration_collector.js +0 -135
  166. package/schematics/migrations/undecorated-classes-with-di/transform.d.ts +0 -97
  167. package/schematics/migrations/undecorated-classes-with-di/transform.js +0 -373
  168. package/schematics/migrations/undecorated-classes-with-di/update_recorder.d.ts +0 -20
  169. package/schematics/migrations/undecorated-classes-with-di/update_recorder.js +0 -20
  170. package/schematics/migrations/wait-for-async/index.d.ts +0 -11
  171. package/schematics/migrations/wait-for-async/index.js +0 -101
  172. package/schematics/migrations/wait-for-async/util.d.ts +0 -11
  173. package/schematics/migrations/wait-for-async/util.js +0 -40
  174. package/schematics/migrations/xhr-factory/index.d.ts +0 -10
  175. package/schematics/migrations/xhr-factory/index.js +0 -107
@@ -1,241 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- (function (factory) {
12
- if (typeof module === "object" && typeof module.exports === "object") {
13
- var v = factory(require, exports);
14
- if (v !== undefined) module.exports = v;
15
- }
16
- else if (typeof define === "function" && define.amd) {
17
- define("@angular/core/schematics/migrations/renderer-to-renderer2/helpers", ["require", "exports", "typescript"], factory);
18
- }
19
- })(function (require, exports) {
20
- "use strict";
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.getHelper = void 0;
23
- const typescript_1 = __importDefault(require("typescript"));
24
- /** Gets the string representation of a helper function. */
25
- function getHelper(name, sourceFile, printer) {
26
- const helperDeclaration = getHelperDeclaration(name);
27
- return '\n' + printer.printNode(typescript_1.default.EmitHint.Unspecified, helperDeclaration, sourceFile) + '\n';
28
- }
29
- exports.getHelper = getHelper;
30
- /** Creates a function declaration for the specified helper name. */
31
- function getHelperDeclaration(name) {
32
- switch (name) {
33
- case "AnyDuringRendererMigration" /* any */:
34
- return createAnyTypeHelper();
35
- case "__ngRendererCreateElementHelper" /* createElement */:
36
- return getCreateElementHelper();
37
- case "__ngRendererCreateTextHelper" /* createText */:
38
- return getCreateTextHelper();
39
- case "__ngRendererCreateTemplateAnchorHelper" /* createTemplateAnchor */:
40
- return getCreateTemplateAnchorHelper();
41
- case "__ngRendererProjectNodesHelper" /* projectNodes */:
42
- return getProjectNodesHelper();
43
- case "__ngRendererAnimateHelper" /* animate */:
44
- return getAnimateHelper();
45
- case "__ngRendererDestroyViewHelper" /* destroyView */:
46
- return getDestroyViewHelper();
47
- case "__ngRendererDetachViewHelper" /* detachView */:
48
- return getDetachViewHelper();
49
- case "__ngRendererAttachViewAfterHelper" /* attachViewAfter */:
50
- return getAttachViewAfterHelper();
51
- case "__ngRendererSetElementAttributeHelper" /* setElementAttribute */:
52
- return getSetElementAttributeHelper();
53
- case "__ngRendererSplitNamespaceHelper" /* splitNamespace */:
54
- return getSplitNamespaceHelper();
55
- }
56
- }
57
- /** Creates a helper for a custom `any` type during the migration. */
58
- function createAnyTypeHelper() {
59
- // type AnyDuringRendererMigration = any;
60
- return typescript_1.default.createTypeAliasDeclaration([], [], "AnyDuringRendererMigration" /* any */, [], typescript_1.default.createKeywordTypeNode(typescript_1.default.SyntaxKind.AnyKeyword));
61
- }
62
- /** Creates a function parameter that is typed as `any`. */
63
- function getAnyTypedParameter(parameterName, isRequired = true) {
64
- // Declare the parameter as `any` so we don't have to add extra logic to ensure that the
65
- // generated code will pass type checking. Use our custom `any` type so people have an incentive
66
- // to clean it up afterwards and to avoid potentially introducing lint warnings in G3.
67
- const type = typescript_1.default.createTypeReferenceNode("AnyDuringRendererMigration" /* any */, []);
68
- return typescript_1.default.createParameter([], [], undefined, parameterName, isRequired ? undefined : typescript_1.default.createToken(typescript_1.default.SyntaxKind.QuestionToken), type);
69
- }
70
- /** Creates a helper for `createElement`. */
71
- function getCreateElementHelper() {
72
- const renderer = typescript_1.default.createIdentifier('renderer');
73
- const parent = typescript_1.default.createIdentifier('parent');
74
- const namespaceAndName = typescript_1.default.createIdentifier('namespaceAndName');
75
- const name = typescript_1.default.createIdentifier('name');
76
- const namespace = typescript_1.default.createIdentifier('namespace');
77
- // [namespace, name] = splitNamespace(namespaceAndName);
78
- const namespaceAndNameVariable = typescript_1.default.createVariableDeclaration(typescript_1.default.createArrayBindingPattern([namespace, name].map(id => typescript_1.default.createBindingElement(undefined, undefined, id))), undefined, typescript_1.default.createCall(typescript_1.default.createIdentifier("__ngRendererSplitNamespaceHelper" /* splitNamespace */), [], [namespaceAndName]));
79
- // `renderer.createElement(name, namespace)`.
80
- const creationCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'createElement'), [], [name, namespace]);
81
- return getCreationHelper("__ngRendererCreateElementHelper" /* createElement */, creationCall, renderer, parent, [namespaceAndName], [typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([namespaceAndNameVariable], typescript_1.default.NodeFlags.Const))]);
82
- }
83
- /** Creates a helper for `createText`. */
84
- function getCreateTextHelper() {
85
- const renderer = typescript_1.default.createIdentifier('renderer');
86
- const parent = typescript_1.default.createIdentifier('parent');
87
- const value = typescript_1.default.createIdentifier('value');
88
- // `renderer.createText(value)`.
89
- const creationCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'createText'), [], [value]);
90
- return getCreationHelper("__ngRendererCreateTextHelper" /* createText */, creationCall, renderer, parent, [value]);
91
- }
92
- /** Creates a helper for `createTemplateAnchor`. */
93
- function getCreateTemplateAnchorHelper() {
94
- const renderer = typescript_1.default.createIdentifier('renderer');
95
- const parent = typescript_1.default.createIdentifier('parent');
96
- // `renderer.createComment('')`.
97
- const creationCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'createComment'), [], [typescript_1.default.createStringLiteral('')]);
98
- return getCreationHelper("__ngRendererCreateTemplateAnchorHelper" /* createTemplateAnchor */, creationCall, renderer, parent);
99
- }
100
- /**
101
- * Gets the function declaration for a creation helper. This is reused between `createElement`,
102
- * `createText` and `createTemplateAnchor` which follow a very similar pattern.
103
- * @param functionName Function that the helper should have.
104
- * @param creationCall Expression that is used to create a node inside the function.
105
- * @param rendererParameter Parameter for the `renderer`.
106
- * @param parentParameter Parameter for the `parent` inside the function.
107
- * @param extraParameters Extra parameters to be added to the end.
108
- * @param precedingVariables Extra variables to be added before the one that creates the `node`.
109
- */
110
- function getCreationHelper(functionName, creationCall, renderer, parent, extraParameters = [], precedingVariables = []) {
111
- const node = typescript_1.default.createIdentifier('node');
112
- // `const node = {{creationCall}}`.
113
- const nodeVariableStatement = typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(node, undefined, creationCall)], typescript_1.default.NodeFlags.Const));
114
- // `if (parent) { renderer.appendChild(parent, node) }`.
115
- const guardedAppendChildCall = typescript_1.default.createIf(parent, typescript_1.default.createBlock([typescript_1.default.createExpressionStatement(typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'appendChild'), [], [parent, node]))], true));
116
- return typescript_1.default.createFunctionDeclaration([], [], undefined, functionName, [], [renderer, parent, ...extraParameters].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([
117
- ...precedingVariables, nodeVariableStatement, guardedAppendChildCall,
118
- typescript_1.default.createReturn(node)
119
- ], true));
120
- }
121
- /** Creates a helper for `projectNodes`. */
122
- function getProjectNodesHelper() {
123
- const renderer = typescript_1.default.createIdentifier('renderer');
124
- const parent = typescript_1.default.createIdentifier('parent');
125
- const nodes = typescript_1.default.createIdentifier('nodes');
126
- const incrementor = typescript_1.default.createIdentifier('i');
127
- // for (let i = 0; i < nodes.length; i++) {
128
- // renderer.appendChild(parent, nodes[i]);
129
- // }
130
- const loopInitializer = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(incrementor, undefined, typescript_1.default.createNumericLiteral('0'))], typescript_1.default.NodeFlags.Let);
131
- const loopCondition = typescript_1.default.createBinary(incrementor, typescript_1.default.SyntaxKind.LessThanToken, typescript_1.default.createPropertyAccess(nodes, typescript_1.default.createIdentifier('length')));
132
- const appendStatement = typescript_1.default.createExpressionStatement(typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'appendChild'), [], [parent, typescript_1.default.createElementAccess(nodes, incrementor)]));
133
- const loop = typescript_1.default.createFor(loopInitializer, loopCondition, typescript_1.default.createPostfix(incrementor, typescript_1.default.SyntaxKind.PlusPlusToken), typescript_1.default.createBlock([appendStatement]));
134
- return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererProjectNodesHelper" /* projectNodes */, [], [renderer, parent, nodes].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([loop], true));
135
- }
136
- /** Creates a helper for `animate`. */
137
- function getAnimateHelper() {
138
- // throw new Error('...');
139
- const throwStatement = typescript_1.default.createThrow(typescript_1.default.createNew(typescript_1.default.createIdentifier('Error'), [], [typescript_1.default.createStringLiteral('Renderer.animate is no longer supported!')]));
140
- return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererAnimateHelper" /* animate */, [], [], undefined, typescript_1.default.createBlock([throwStatement], true));
141
- }
142
- /** Creates a helper for `destroyView`. */
143
- function getDestroyViewHelper() {
144
- const renderer = typescript_1.default.createIdentifier('renderer');
145
- const allNodes = typescript_1.default.createIdentifier('allNodes');
146
- const incrementor = typescript_1.default.createIdentifier('i');
147
- // for (let i = 0; i < allNodes.length; i++) {
148
- // renderer.destroyNode(allNodes[i]);
149
- // }
150
- const loopInitializer = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(incrementor, undefined, typescript_1.default.createNumericLiteral('0'))], typescript_1.default.NodeFlags.Let);
151
- const loopCondition = typescript_1.default.createBinary(incrementor, typescript_1.default.SyntaxKind.LessThanToken, typescript_1.default.createPropertyAccess(allNodes, typescript_1.default.createIdentifier('length')));
152
- const destroyStatement = typescript_1.default.createExpressionStatement(typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'destroyNode'), [], [typescript_1.default.createElementAccess(allNodes, incrementor)]));
153
- const loop = typescript_1.default.createFor(loopInitializer, loopCondition, typescript_1.default.createPostfix(incrementor, typescript_1.default.SyntaxKind.PlusPlusToken), typescript_1.default.createBlock([destroyStatement]));
154
- return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererDestroyViewHelper" /* destroyView */, [], [renderer, allNodes].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([loop], true));
155
- }
156
- /** Creates a helper for `detachView`. */
157
- function getDetachViewHelper() {
158
- const renderer = typescript_1.default.createIdentifier('renderer');
159
- const rootNodes = typescript_1.default.createIdentifier('rootNodes');
160
- const incrementor = typescript_1.default.createIdentifier('i');
161
- const node = typescript_1.default.createIdentifier('node');
162
- // for (let i = 0; i < rootNodes.length; i++) {
163
- // const node = rootNodes[i];
164
- // renderer.removeChild(renderer.parentNode(node), node);
165
- // }
166
- const loopInitializer = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(incrementor, undefined, typescript_1.default.createNumericLiteral('0'))], typescript_1.default.NodeFlags.Let);
167
- const loopCondition = typescript_1.default.createBinary(incrementor, typescript_1.default.SyntaxKind.LessThanToken, typescript_1.default.createPropertyAccess(rootNodes, typescript_1.default.createIdentifier('length')));
168
- // const node = rootNodes[i];
169
- const nodeVariableStatement = typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(node, undefined, typescript_1.default.createElementAccess(rootNodes, incrementor))], typescript_1.default.NodeFlags.Const));
170
- // renderer.removeChild(renderer.parentNode(node), node);
171
- const removeCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'removeChild'), [], [typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'parentNode'), [], [node]), node]);
172
- const loop = typescript_1.default.createFor(loopInitializer, loopCondition, typescript_1.default.createPostfix(incrementor, typescript_1.default.SyntaxKind.PlusPlusToken), typescript_1.default.createBlock([nodeVariableStatement, typescript_1.default.createExpressionStatement(removeCall)]));
173
- return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererDetachViewHelper" /* detachView */, [], [renderer, rootNodes].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([loop], true));
174
- }
175
- /** Creates a helper for `attachViewAfter` */
176
- function getAttachViewAfterHelper() {
177
- const renderer = typescript_1.default.createIdentifier('renderer');
178
- const node = typescript_1.default.createIdentifier('node');
179
- const rootNodes = typescript_1.default.createIdentifier('rootNodes');
180
- const parent = typescript_1.default.createIdentifier('parent');
181
- const nextSibling = typescript_1.default.createIdentifier('nextSibling');
182
- const incrementor = typescript_1.default.createIdentifier('i');
183
- const createConstWithMethodCallInitializer = (constName, methodToCall) => {
184
- return typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(constName, undefined, typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, methodToCall), [], [node]))], typescript_1.default.NodeFlags.Const));
185
- };
186
- // const parent = renderer.parentNode(node);
187
- const parentVariableStatement = createConstWithMethodCallInitializer(parent, 'parentNode');
188
- // const nextSibling = renderer.nextSibling(node);
189
- const nextSiblingVariableStatement = createConstWithMethodCallInitializer(nextSibling, 'nextSibling');
190
- // for (let i = 0; i < rootNodes.length; i++) {
191
- // renderer.insertBefore(parentElement, rootNodes[i], nextSibling);
192
- // }
193
- const loopInitializer = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(incrementor, undefined, typescript_1.default.createNumericLiteral('0'))], typescript_1.default.NodeFlags.Let);
194
- const loopCondition = typescript_1.default.createBinary(incrementor, typescript_1.default.SyntaxKind.LessThanToken, typescript_1.default.createPropertyAccess(rootNodes, typescript_1.default.createIdentifier('length')));
195
- const insertBeforeCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'insertBefore'), [], [parent, typescript_1.default.createElementAccess(rootNodes, incrementor), nextSibling]);
196
- const loop = typescript_1.default.createFor(loopInitializer, loopCondition, typescript_1.default.createPostfix(incrementor, typescript_1.default.SyntaxKind.PlusPlusToken), typescript_1.default.createBlock([typescript_1.default.createExpressionStatement(insertBeforeCall)]));
197
- return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererAttachViewAfterHelper" /* attachViewAfter */, [], [renderer, node, rootNodes].map(name => getAnyTypedParameter(name)), undefined, typescript_1.default.createBlock([parentVariableStatement, nextSiblingVariableStatement, loop], true));
198
- }
199
- /** Creates a helper for `setElementAttribute` */
200
- function getSetElementAttributeHelper() {
201
- const renderer = typescript_1.default.createIdentifier('renderer');
202
- const element = typescript_1.default.createIdentifier('element');
203
- const namespaceAndName = typescript_1.default.createIdentifier('namespaceAndName');
204
- const value = typescript_1.default.createIdentifier('value');
205
- const name = typescript_1.default.createIdentifier('name');
206
- const namespace = typescript_1.default.createIdentifier('namespace');
207
- // [namespace, name] = splitNamespace(namespaceAndName);
208
- const namespaceAndNameVariable = typescript_1.default.createVariableDeclaration(typescript_1.default.createArrayBindingPattern([namespace, name].map(id => typescript_1.default.createBindingElement(undefined, undefined, id))), undefined, typescript_1.default.createCall(typescript_1.default.createIdentifier("__ngRendererSplitNamespaceHelper" /* splitNamespace */), [], [namespaceAndName]));
209
- // renderer.setAttribute(element, name, value, namespace);
210
- const setCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'setAttribute'), [], [element, name, value, namespace]);
211
- // renderer.removeAttribute(element, name, namespace);
212
- const removeCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(renderer, 'removeAttribute'), [], [element, name, namespace]);
213
- // if (value != null) { setCall() } else { removeCall }
214
- const ifStatement = typescript_1.default.createIf(typescript_1.default.createBinary(value, typescript_1.default.SyntaxKind.ExclamationEqualsToken, typescript_1.default.createNull()), typescript_1.default.createBlock([typescript_1.default.createExpressionStatement(setCall)], true), typescript_1.default.createBlock([typescript_1.default.createExpressionStatement(removeCall)], true));
215
- const functionBody = typescript_1.default.createBlock([
216
- typescript_1.default.createVariableStatement(undefined, typescript_1.default.createVariableDeclarationList([namespaceAndNameVariable], typescript_1.default.NodeFlags.Const)),
217
- ifStatement
218
- ], true);
219
- return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererSetElementAttributeHelper" /* setElementAttribute */, [], [
220
- getAnyTypedParameter(renderer), getAnyTypedParameter(element),
221
- getAnyTypedParameter(namespaceAndName), getAnyTypedParameter(value, false)
222
- ], undefined, functionBody);
223
- }
224
- /** Creates a helper for splitting a name that might contain a namespace. */
225
- function getSplitNamespaceHelper() {
226
- const name = typescript_1.default.createIdentifier('name');
227
- const match = typescript_1.default.createIdentifier('match');
228
- const regex = typescript_1.default.createRegularExpressionLiteral('/^:([^:]+):(.+)$/');
229
- const matchCall = typescript_1.default.createCall(typescript_1.default.createPropertyAccess(name, 'match'), [], [regex]);
230
- // const match = name.split(regex);
231
- const matchVariable = typescript_1.default.createVariableDeclarationList([typescript_1.default.createVariableDeclaration(match, undefined, matchCall)], typescript_1.default.NodeFlags.Const);
232
- // return [match[1], match[2]];
233
- const matchReturn = typescript_1.default.createReturn(typescript_1.default.createArrayLiteral([typescript_1.default.createElementAccess(match, 1), typescript_1.default.createElementAccess(match, 2)]));
234
- // if (name[0] === ':') { const match = ...; return ...; }
235
- const ifStatement = typescript_1.default.createIf(typescript_1.default.createBinary(typescript_1.default.createElementAccess(name, 0), typescript_1.default.SyntaxKind.EqualsEqualsEqualsToken, typescript_1.default.createStringLiteral(':')), typescript_1.default.createBlock([typescript_1.default.createVariableStatement([], matchVariable), matchReturn], true));
236
- // return ['', name];
237
- const elseReturn = typescript_1.default.createReturn(typescript_1.default.createArrayLiteral([typescript_1.default.createStringLiteral(''), name]));
238
- return typescript_1.default.createFunctionDeclaration([], [], undefined, "__ngRendererSplitNamespaceHelper" /* splitNamespace */, [], [getAnyTypedParameter(name)], undefined, typescript_1.default.createBlock([ifStatement, elseReturn], true));
239
- }
240
- });
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JlbmRlcmVyLXRvLXJlbmRlcmVyMi9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDREQUE0QjtJQWlCNUIsMkRBQTJEO0lBQzNELFNBQWdCLFNBQVMsQ0FDckIsSUFBb0IsRUFBRSxVQUF5QixFQUFFLE9BQW1CO1FBQ3RFLE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsT0FBTyxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxvQkFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pHLENBQUM7SUFKRCw4QkFJQztJQUVELG9FQUFvRTtJQUNwRSxTQUFTLG9CQUFvQixDQUFDLElBQW9CO1FBQ2hELFFBQVEsSUFBSSxFQUFFO1lBQ1o7Z0JBQ0UsT0FBTyxtQkFBbUIsRUFBRSxDQUFDO1lBQy9CO2dCQUNFLE9BQU8sc0JBQXNCLEVBQUUsQ0FBQztZQUNsQztnQkFDRSxPQUFPLG1CQUFtQixFQUFFLENBQUM7WUFDL0I7Z0JBQ0UsT0FBTyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3pDO2dCQUNFLE9BQU8scUJBQXFCLEVBQUUsQ0FBQztZQUNqQztnQkFDRSxPQUFPLGdCQUFnQixFQUFFLENBQUM7WUFDNUI7Z0JBQ0UsT0FBTyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2hDO2dCQUNFLE9BQU8sbUJBQW1CLEVBQUUsQ0FBQztZQUMvQjtnQkFDRSxPQUFPLHdCQUF3QixFQUFFLENBQUM7WUFDcEM7Z0JBQ0UsT0FBTyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3hDO2dCQUNFLE9BQU8sdUJBQXVCLEVBQUUsQ0FB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QUFFLGFBQWEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFeEYscUJBQXFCO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLG9CQUFFLENBQUMsWUFBWSxDQUFDLG9CQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxvQkFBRSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RixPQUFPLG9CQUFFLENBQUMseUJBQXlCLENBQy9CLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUywyREFBaUMsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQzdGLG9CQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8qKiBOYW1lcyBvZiB0aGUgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgZm9yIHRoaXMgbWlncmF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gSGVscGVyRnVuY3Rpb24ge1xuICBhbnkgPSAnQW55RHVyaW5nUmVuZGVyZXJNaWdyYXRpb24nLFxuICBjcmVhdGVFbGVtZW50ID0gJ19fbmdSZW5kZXJlckNyZWF0ZUVsZW1lbnRIZWxwZXInLFxuICBjcmVhdGVUZXh0ID0gJ19fbmdSZW5kZXJlckNyZWF0ZVRleHRIZWxwZXInLFxuICBjcmVhdGVUZW1wbGF0ZUFuY2hvciA9ICdfX25nUmVuZGVyZXJDcmVhdGVUZW1wbGF0ZUFuY2hvckhlbHBlcicsXG4gIHByb2plY3ROb2RlcyA9ICdfX25nUmVuZGVyZXJQcm9qZWN0Tm9kZXNIZWxwZXInLFxuICBhbmltYXRlID0gJ19fbmdSZW5kZXJlckFuaW1hdGVIZWxwZXInLFxuICBkZXN0cm95VmlldyA9ICdfX25nUmVuZGVyZXJEZXN0cm95Vmlld0hlbHBlcicsXG4gIGRldGFjaFZpZXcgPSAnX19uZ1JlbmRlcmVyRGV0YWNoVmlld0hlbHBlcicsXG4gIGF0dGFjaFZpZXdBZnRlciA9ICdfX25nUmVuZGVyZXJBdHRhY2hWaWV3QWZ0ZXJIZWxwZXInLFxuICBzcGxpdE5hbWVzcGFjZSA9ICdfX25nUmVuZGVyZXJTcGxpdE5hbWVzcGFjZUhlbHBlcicsXG4gIHNldEVsZW1lbnRBdHRyaWJ1dGUgPSAnX19uZ1JlbmRlcmVyU2V0RWxlbWVudEF0dHJpYnV0ZUhlbHBlcidcbn1cblxuLyoqIEdldHMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGhlbHBlciBmdW5jdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWxwZXIoXG4gICAgbmFtZTogSGVscGVyRnVuY3Rpb24sIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHByaW50ZXI6IHRzLlByaW50ZXIpOiBzdHJpbmcge1xuICBjb25zdCBoZWxwZXJEZWNsYXJhdGlvbiA9IGdldEhlbHBlckRlY2xhcmF0aW9uKG5hbWUpO1xuICByZXR1cm4gJ1xcbicgKyBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgaGVscGVyRGVjbGFyYXRpb24sIHNvdXJjZUZpbGUpICsgJ1xcbic7XG59XG5cbi8qKiBDcmVhdGVzIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgaGVscGVyIG5hbWUuICovXG5mdW5jdGlvbiBnZXRIZWxwZXJEZWNsYXJhdGlvbihuYW1lOiBIZWxwZXJGdW5jdGlvbik6IHRzLk5vZGUge1xuICBzd2l0Y2ggKG5hbWUpIHtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmFueTpcbiAgICAgIHJldHVybiBjcmVhdGVBbnlUeXBlSGVscGVyKCk7XG4gICAgY2FzZSBIZWxwZXJGdW5jdGlvbi5jcmVhdGVFbGVtZW50OlxuICAgICAgcmV0dXJuIGdldENyZWF0ZUVsZW1lbnRIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmNyZWF0ZVRleHQ6XG4gICAgICByZXR1cm4gZ2V0Q3JlYXRlVGV4dEhlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uY3JlYXRlVGVtcGxhdGVBbmNob3I6XG4gICAgICByZXR1cm4gZ2V0Q3JlYXRlVGVtcGxhdGVBbmNob3JIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLnByb2plY3ROb2RlczpcbiAgICAgIHJldHVybiBnZXRQcm9qZWN0Tm9kZXNIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmFuaW1hdGU6XG4gICAgICByZXR1cm4gZ2V0QW5pbWF0ZUhlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uZGVzdHJveVZpZXc6XG4gICAgICByZXR1cm4gZ2V0RGVzdHJveVZpZXdIZWxwZXIoKTtcbiAgICBjYXNlIEhlbHBlckZ1bmN0aW9uLmRldGFjaFZpZXc6XG4gICAgICByZXR1cm4gZ2V0RGV0YWNoVmlld0hlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uYXR0YWNoVmlld0FmdGVyOlxuICAgICAgcmV0dXJuIGdldEF0dGFjaFZpZXdBZnRlckhlbHBlcigpO1xuICAgIGNhc2UgSGVscGVyRnVuY3Rpb24uc2V0RWxlbWVudEF0dHJpYnV0ZTpcbiAgICAgIHJldHVybiBnZXRTZXRFbGVtZW50QXR0cmlidXRlSGVscGVyKCk7XG4gICAgY2FzZSBIZWxwZXJGdW5jdGlvbi5zcGxpdE5hbWVzcGFjZTpcbiAgICAgIHJldHVybiBnZXRTcGxpdE5hbWVzcGFjZUhlbHBlcigpO1xuICB9XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBhIGN1c3RvbSBgYW55YCB0eXBlIGR1cmluZyB0aGUgbWlncmF0aW9uLiAqL1xuZnVuY3Rpb24gY3JlYXRlQW55VHlwZUhlbHBlcigpOiB0cy5UeXBlQWxpYXNEZWNsYXJhdGlvbiB7XG4gIC8vIHR5cGUgQW55RHVyaW5nUmVuZGVyZXJNaWdyYXRpb24gPSBhbnk7XG4gIHJldHVybiB0cy5jcmVhdGVUeXBlQWxpYXNEZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgSGVscGVyRnVuY3Rpb24uYW55LCBbXSwgdHMuY3JlYXRlS2V5d29yZFR5cGVOb2RlKHRzLlN5bnRheEtpbmQuQW55S2V5d29yZCkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGZ1bmN0aW9uIHBhcmFtZXRlciB0aGF0IGlzIHR5cGVkIGFzIGBhbnlgLiAqL1xuZnVuY3Rpb24gZ2V0QW55VHlwZWRQYXJhbWV0ZXIoXG4gICAgcGFyYW1ldGVyTmFtZTogc3RyaW5nfHRzLklkZW50aWZpZXIsIGlzUmVxdWlyZWQgPSB0cnVlKTogdHMuUGFyYW1ldGVyRGVjbGFyYXRpb24ge1xuICAvLyBEZWNsYXJlIHRoZSBwYXJhbWV0ZXIgYXMgYGFueWAgc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgZXh0cmEgbG9naWMgdG8gZW5zdXJlIHRoYXQgdGhlXG4gIC8vIGdlbmVyYXRlZCBjb2RlIHdpbGwgcGFzcyB0eXBlIGNoZWNraW5nLiBVc2Ugb3VyIGN1c3RvbSBgYW55YCB0eXBlIHNvIHBlb3BsZSBoYXZlIGFuIGluY2VudGl2ZVxuICAvLyB0byBjbGVhbiBpdCB1cCBhZnRlcndhcmRzIGFuZCB0byBhdm9pZCBwb3RlbnRpYWxseSBpbnRyb2R1Y2luZyBsaW50IHdhcm5pbmdzIGluIEczLlxuICBjb25zdCB0eXBlID0gdHMuY3JlYXRlVHlwZVJlZmVyZW5jZU5vZGUoSGVscGVyRnVuY3Rpb24uYW55LCBbXSk7XG4gIHJldHVybiB0cy5jcmVhdGVQYXJhbWV0ZXIoXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgcGFyYW1ldGVyTmFtZSxcbiAgICAgIGlzUmVxdWlyZWQgPyB1bmRlZmluZWQgOiB0cy5jcmVhdGVUb2tlbih0cy5TeW50YXhLaW5kLlF1ZXN0aW9uVG9rZW4pLCB0eXBlKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBjcmVhdGVFbGVtZW50YC4gKi9cbmZ1bmN0aW9uIGdldENyZWF0ZUVsZW1lbnRIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3QgcGFyZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcigncGFyZW50Jyk7XG4gIGNvbnN0IG5hbWVzcGFjZUFuZE5hbWUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduYW1lc3BhY2VBbmROYW1lJyk7XG4gIGNvbnN0IG5hbWUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduYW1lJyk7XG4gIGNvbnN0IG5hbWVzcGFjZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25hbWVzcGFjZScpO1xuXG4gIC8vIFtuYW1lc3BhY2UsIG5hbWVdID0gc3BsaXROYW1lc3BhY2UobmFtZXNwYWNlQW5kTmFtZSk7XG4gIGNvbnN0IG5hbWVzcGFjZUFuZE5hbWVWYXJpYWJsZSA9IHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oXG4gICAgICB0cy5jcmVhdGVBcnJheUJpbmRpbmdQYXR0ZXJuKFxuICAgICAgICAgIFtuYW1lc3BhY2UsIG5hbWVdLm1hcChpZCA9PiB0cy5jcmVhdGVCaW5kaW5nRWxlbWVudCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgaWQpKSksXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZUlkZW50aWZpZXIoSGVscGVyRnVuY3Rpb24uc3BsaXROYW1lc3BhY2UpLCBbXSwgW25hbWVzcGFjZUFuZE5hbWVdKSk7XG5cbiAgLy8gYHJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQobmFtZSwgbmFtZXNwYWNlKWAuXG4gIGNvbnN0IGNyZWF0aW9uQ2FsbCA9XG4gICAgICB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnY3JlYXRlRWxlbWVudCcpLCBbXSwgW25hbWUsIG5hbWVzcGFjZV0pO1xuXG4gIHJldHVybiBnZXRDcmVhdGlvbkhlbHBlcihcbiAgICAgIEhlbHBlckZ1bmN0aW9uLmNyZWF0ZUVsZW1lbnQsIGNyZWF0aW9uQ2FsbCwgcmVuZGVyZXIsIHBhcmVudCwgW25hbWVzcGFjZUFuZE5hbWVdLFxuICAgICAgW3RzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChbbmFtZXNwYWNlQW5kTmFtZVZhcmlhYmxlXSwgdHMuTm9kZUZsYWdzLkNvbnN0KSldKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBjcmVhdGVUZXh0YC4gKi9cbmZ1bmN0aW9uIGdldENyZWF0ZVRleHRIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3QgcGFyZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcigncGFyZW50Jyk7XG4gIGNvbnN0IHZhbHVlID0gdHMuY3JlYXRlSWRlbnRpZmllcigndmFsdWUnKTtcblxuICAvLyBgcmVuZGVyZXIuY3JlYXRlVGV4dCh2YWx1ZSlgLlxuICBjb25zdCBjcmVhdGlvbkNhbGwgPSB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnY3JlYXRlVGV4dCcpLCBbXSwgW3ZhbHVlXSk7XG5cbiAgcmV0dXJuIGdldENyZWF0aW9uSGVscGVyKEhlbHBlckZ1bmN0aW9uLmNyZWF0ZVRleHQsIGNyZWF0aW9uQ2FsbCwgcmVuZGVyZXIsIHBhcmVudCwgW3ZhbHVlXSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgY3JlYXRlVGVtcGxhdGVBbmNob3JgLiAqL1xuZnVuY3Rpb24gZ2V0Q3JlYXRlVGVtcGxhdGVBbmNob3JIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3QgcGFyZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcigncGFyZW50Jyk7XG5cbiAgLy8gYHJlbmRlcmVyLmNyZWF0ZUNvbW1lbnQoJycpYC5cbiAgY29uc3QgY3JlYXRpb25DYWxsID0gdHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnY3JlYXRlQ29tbWVudCcpLCBbXSwgW3RzLmNyZWF0ZVN0cmluZ0xpdGVyYWwoJycpXSk7XG5cbiAgcmV0dXJuIGdldENyZWF0aW9uSGVscGVyKEhlbHBlckZ1bmN0aW9uLmNyZWF0ZVRlbXBsYXRlQW5jaG9yLCBjcmVhdGlvbkNhbGwsIHJlbmRlcmVyLCBwYXJlbnQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGZvciBhIGNyZWF0aW9uIGhlbHBlci4gVGhpcyBpcyByZXVzZWQgYmV0d2VlbiBgY3JlYXRlRWxlbWVudGAsXG4gKiBgY3JlYXRlVGV4dGAgYW5kIGBjcmVhdGVUZW1wbGF0ZUFuY2hvcmAgd2hpY2ggZm9sbG93IGEgdmVyeSBzaW1pbGFyIHBhdHRlcm4uXG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIEZ1bmN0aW9uIHRoYXQgdGhlIGhlbHBlciBzaG91bGQgaGF2ZS5cbiAqIEBwYXJhbSBjcmVhdGlvbkNhbGwgRXhwcmVzc2lvbiB0aGF0IGlzIHVzZWQgdG8gY3JlYXRlIGEgbm9kZSBpbnNpZGUgdGhlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHJlbmRlcmVyUGFyYW1ldGVyIFBhcmFtZXRlciBmb3IgdGhlIGByZW5kZXJlcmAuXG4gKiBAcGFyYW0gcGFyZW50UGFyYW1ldGVyIFBhcmFtZXRlciBmb3IgdGhlIGBwYXJlbnRgIGluc2lkZSB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gZXh0cmFQYXJhbWV0ZXJzIEV4dHJhIHBhcmFtZXRlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIGVuZC5cbiAqIEBwYXJhbSBwcmVjZWRpbmdWYXJpYWJsZXMgRXh0cmEgdmFyaWFibGVzIHRvIGJlIGFkZGVkIGJlZm9yZSB0aGUgb25lIHRoYXQgY3JlYXRlcyB0aGUgYG5vZGVgLlxuICovXG5mdW5jdGlvbiBnZXRDcmVhdGlvbkhlbHBlcihcbiAgICBmdW5jdGlvbk5hbWU6IEhlbHBlckZ1bmN0aW9uLCBjcmVhdGlvbkNhbGw6IHRzLkNhbGxFeHByZXNzaW9uLCByZW5kZXJlcjogdHMuSWRlbnRpZmllcixcbiAgICBwYXJlbnQ6IHRzLklkZW50aWZpZXIsIGV4dHJhUGFyYW1ldGVyczogdHMuSWRlbnRpZmllcltdID0gW10sXG4gICAgcHJlY2VkaW5nVmFyaWFibGVzOiB0cy5WYXJpYWJsZVN0YXRlbWVudFtdID0gW10pOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgY29uc3Qgbm9kZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25vZGUnKTtcblxuICAvLyBgY29uc3Qgbm9kZSA9IHt7Y3JlYXRpb25DYWxsfX1gLlxuICBjb25zdCBub2RlVmFyaWFibGVTdGF0ZW1lbnQgPSB0cy5jcmVhdGVWYXJpYWJsZVN0YXRlbWVudChcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUsIHVuZGVmaW5lZCwgY3JlYXRpb25DYWxsKV0sIHRzLk5vZGVGbGFncy5Db25zdCkpO1xuXG4gIC8vIGBpZiAocGFyZW50KSB7IHJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgbm9kZSkgfWAuXG4gIGNvbnN0IGd1YXJkZWRBcHBlbmRDaGlsZENhbGwgPSB0cy5jcmVhdGVJZihcbiAgICAgIHBhcmVudCxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFxuICAgICAgICAgIFt0cy5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KFxuICAgICAgICAgICAgICB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnYXBwZW5kQ2hpbGQnKSwgW10sIFtwYXJlbnQsIG5vZGVdKSldLFxuICAgICAgICAgIHRydWUpKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBmdW5jdGlvbk5hbWUsIFtdLFxuICAgICAgW3JlbmRlcmVyLCBwYXJlbnQsIC4uLmV4dHJhUGFyYW1ldGVyc10ubWFwKG5hbWUgPT4gZ2V0QW55VHlwZWRQYXJhbWV0ZXIobmFtZSkpLCB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVCbG9jayhcbiAgICAgICAgICBbXG4gICAgICAgICAgICAuLi5wcmVjZWRpbmdWYXJpYWJsZXMsIG5vZGVWYXJpYWJsZVN0YXRlbWVudCwgZ3VhcmRlZEFwcGVuZENoaWxkQ2FsbCxcbiAgICAgICAgICAgIHRzLmNyZWF0ZVJldHVybihub2RlKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgdHJ1ZSkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYHByb2plY3ROb2Rlc2AuICovXG5mdW5jdGlvbiBnZXRQcm9qZWN0Tm9kZXNIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3QgcGFyZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcigncGFyZW50Jyk7XG4gIGNvbnN0IG5vZGVzID0gdHMuY3JlYXRlSWRlbnRpZmllcignbm9kZXMnKTtcbiAgY29uc3QgaW5jcmVtZW50b3IgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdpJyk7XG5cbiAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAvLyAgIHJlbmRlcmVyLmFwcGVuZENoaWxkKHBhcmVudCwgbm9kZXNbaV0pO1xuICAvLyB9XG4gIGNvbnN0IGxvb3BJbml0aWFsaXplciA9IHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgW3RzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oaW5jcmVtZW50b3IsIHVuZGVmaW5lZCwgdHMuY3JlYXRlTnVtZXJpY0xpdGVyYWwoJzAnKSldLFxuICAgICAgdHMuTm9kZUZsYWdzLkxldCk7XG4gIGNvbnN0IGxvb3BDb25kaXRpb24gPSB0cy5jcmVhdGVCaW5hcnkoXG4gICAgICBpbmNyZW1lbnRvciwgdHMuU3ludGF4S2luZC5MZXNzVGhhblRva2VuLFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3Mobm9kZXMsIHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2xlbmd0aCcpKSk7XG4gIGNvbnN0IGFwcGVuZFN0YXRlbWVudCA9IHRzLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQodHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnYXBwZW5kQ2hpbGQnKSwgW10sXG4gICAgICBbcGFyZW50LCB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKG5vZGVzLCBpbmNyZW1lbnRvcildKSk7XG4gIGNvbnN0IGxvb3AgPSB0cy5jcmVhdGVGb3IoXG4gICAgICBsb29wSW5pdGlhbGl6ZXIsIGxvb3BDb25kaXRpb24sIHRzLmNyZWF0ZVBvc3RmaXgoaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuUGx1c1BsdXNUb2tlbiksXG4gICAgICB0cy5jcmVhdGVCbG9jayhbYXBwZW5kU3RhdGVtZW50XSkpO1xuXG4gIHJldHVybiB0cy5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgW10sIFtdLCB1bmRlZmluZWQsIEhlbHBlckZ1bmN0aW9uLnByb2plY3ROb2RlcywgW10sXG4gICAgICBbcmVuZGVyZXIsIHBhcmVudCwgbm9kZXNdLm1hcChuYW1lID0+IGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWUpKSwgdW5kZWZpbmVkLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW2xvb3BdLCB0cnVlKSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgYW5pbWF0ZWAuICovXG5mdW5jdGlvbiBnZXRBbmltYXRlSGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICAvLyB0aHJvdyBuZXcgRXJyb3IoJy4uLicpO1xuICBjb25zdCB0aHJvd1N0YXRlbWVudCA9IHRzLmNyZWF0ZVRocm93KHRzLmNyZWF0ZU5ldyhcbiAgICAgIHRzLmNyZWF0ZUlkZW50aWZpZXIoJ0Vycm9yJyksIFtdLFxuICAgICAgW3RzLmNyZWF0ZVN0cmluZ0xpdGVyYWwoJ1JlbmRlcmVyLmFuaW1hdGUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCEnKV0pKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBIZWxwZXJGdW5jdGlvbi5hbmltYXRlLCBbXSwgW10sIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFt0aHJvd1N0YXRlbWVudF0sIHRydWUpKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBkZXN0cm95Vmlld2AuICovXG5mdW5jdGlvbiBnZXREZXN0cm95Vmlld0hlbHBlcigpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgY29uc3QgcmVuZGVyZXIgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdyZW5kZXJlcicpO1xuICBjb25zdCBhbGxOb2RlcyA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2FsbE5vZGVzJyk7XG4gIGNvbnN0IGluY3JlbWVudG9yID0gdHMuY3JlYXRlSWRlbnRpZmllcignaScpO1xuXG4gIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICByZW5kZXJlci5kZXN0cm95Tm9kZShhbGxOb2Rlc1tpXSk7XG4gIC8vIH1cbiAgY29uc3QgbG9vcEluaXRpYWxpemVyID0gdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoXG4gICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihpbmNyZW1lbnRvciwgdW5kZWZpbmVkLCB0cy5jcmVhdGVOdW1lcmljTGl0ZXJhbCgnMCcpKV0sXG4gICAgICB0cy5Ob2RlRmxhZ3MuTGV0KTtcbiAgY29uc3QgbG9vcENvbmRpdGlvbiA9IHRzLmNyZWF0ZUJpbmFyeShcbiAgICAgIGluY3JlbWVudG9yLCB0cy5TeW50YXhLaW5kLkxlc3NUaGFuVG9rZW4sXG4gICAgICB0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhhbGxOb2RlcywgdHMuY3JlYXRlSWRlbnRpZmllcignbGVuZ3RoJykpKTtcbiAgY29uc3QgZGVzdHJveVN0YXRlbWVudCA9IHRzLmNyZWF0ZUV4cHJlc3Npb25TdGF0ZW1lbnQodHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAnZGVzdHJveU5vZGUnKSwgW10sXG4gICAgICBbdHMuY3JlYXRlRWxlbWVudEFjY2VzcyhhbGxOb2RlcywgaW5jcmVtZW50b3IpXSkpO1xuICBjb25zdCBsb29wID0gdHMuY3JlYXRlRm9yKFxuICAgICAgbG9vcEluaXRpYWxpemVyLCBsb29wQ29uZGl0aW9uLCB0cy5jcmVhdGVQb3N0Zml4KGluY3JlbWVudG9yLCB0cy5TeW50YXhLaW5kLlBsdXNQbHVzVG9rZW4pLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW2Rlc3Ryb3lTdGF0ZW1lbnRdKSk7XG5cbiAgcmV0dXJuIHRzLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgSGVscGVyRnVuY3Rpb24uZGVzdHJveVZpZXcsIFtdLFxuICAgICAgW3JlbmRlcmVyLCBhbGxOb2Rlc10ubWFwKG5hbWUgPT4gZ2V0QW55VHlwZWRQYXJhbWV0ZXIobmFtZSkpLCB1bmRlZmluZWQsXG4gICAgICB0cy5jcmVhdGVCbG9jayhbbG9vcF0sIHRydWUpKTtcbn1cblxuLyoqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGBkZXRhY2hWaWV3YC4gKi9cbmZ1bmN0aW9uIGdldERldGFjaFZpZXdIZWxwZXIoKTogdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB7XG4gIGNvbnN0IHJlbmRlcmVyID0gdHMuY3JlYXRlSWRlbnRpZmllcigncmVuZGVyZXInKTtcbiAgY29uc3Qgcm9vdE5vZGVzID0gdHMuY3JlYXRlSWRlbnRpZmllcigncm9vdE5vZGVzJyk7XG4gIGNvbnN0IGluY3JlbWVudG9yID0gdHMuY3JlYXRlSWRlbnRpZmllcignaScpO1xuICBjb25zdCBub2RlID0gdHMuY3JlYXRlSWRlbnRpZmllcignbm9kZScpO1xuXG4gIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgcm9vdE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgY29uc3Qgbm9kZSA9IHJvb3ROb2Rlc1tpXTtcbiAgLy8gICByZW5kZXJlci5yZW1vdmVDaGlsZChyZW5kZXJlci5wYXJlbnROb2RlKG5vZGUpLCBub2RlKTtcbiAgLy8gfVxuICBjb25zdCBsb29wSW5pdGlhbGl6ZXIgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGluY3JlbWVudG9yLCB1bmRlZmluZWQsIHRzLmNyZWF0ZU51bWVyaWNMaXRlcmFsKCcwJykpXSxcbiAgICAgIHRzLk5vZGVGbGFncy5MZXQpO1xuICBjb25zdCBsb29wQ29uZGl0aW9uID0gdHMuY3JlYXRlQmluYXJ5KFxuICAgICAgaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuTGVzc1RoYW5Ub2tlbixcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJvb3ROb2RlcywgdHMuY3JlYXRlSWRlbnRpZmllcignbGVuZ3RoJykpKTtcblxuICAvLyBjb25zdCBub2RlID0gcm9vdE5vZGVzW2ldO1xuICBjb25zdCBub2RlVmFyaWFibGVTdGF0ZW1lbnQgPSB0cy5jcmVhdGVWYXJpYWJsZVN0YXRlbWVudChcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICBub2RlLCB1bmRlZmluZWQsIHRzLmNyZWF0ZUVsZW1lbnRBY2Nlc3Mocm9vdE5vZGVzLCBpbmNyZW1lbnRvcikpXSxcbiAgICAgICAgICB0cy5Ob2RlRmxhZ3MuQ29uc3QpKTtcbiAgLy8gcmVuZGVyZXIucmVtb3ZlQ2hpbGQocmVuZGVyZXIucGFyZW50Tm9kZShub2RlKSwgbm9kZSk7XG4gIGNvbnN0IHJlbW92ZUNhbGwgPSB0cy5jcmVhdGVDYWxsKFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MocmVuZGVyZXIsICdyZW1vdmVDaGlsZCcpLCBbXSxcbiAgICAgIFt0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCAncGFyZW50Tm9kZScpLCBbXSwgW25vZGVdKSwgbm9kZV0pO1xuXG4gIGNvbnN0IGxvb3AgPSB0cy5jcmVhdGVGb3IoXG4gICAgICBsb29wSW5pdGlhbGl6ZXIsIGxvb3BDb25kaXRpb24sIHRzLmNyZWF0ZVBvc3RmaXgoaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuUGx1c1BsdXNUb2tlbiksXG4gICAgICB0cy5jcmVhdGVCbG9jayhbbm9kZVZhcmlhYmxlU3RhdGVtZW50LCB0cy5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KHJlbW92ZUNhbGwpXSkpO1xuXG4gIHJldHVybiB0cy5jcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uKFxuICAgICAgW10sIFtdLCB1bmRlZmluZWQsIEhlbHBlckZ1bmN0aW9uLmRldGFjaFZpZXcsIFtdLFxuICAgICAgW3JlbmRlcmVyLCByb290Tm9kZXNdLm1hcChuYW1lID0+IGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWUpKSwgdW5kZWZpbmVkLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW2xvb3BdLCB0cnVlKSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgaGVscGVyIGZvciBgYXR0YWNoVmlld0FmdGVyYCAqL1xuZnVuY3Rpb24gZ2V0QXR0YWNoVmlld0FmdGVySGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICBjb25zdCByZW5kZXJlciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3JlbmRlcmVyJyk7XG4gIGNvbnN0IG5vZGUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdub2RlJyk7XG4gIGNvbnN0IHJvb3ROb2RlcyA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3Jvb3ROb2RlcycpO1xuICBjb25zdCBwYXJlbnQgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdwYXJlbnQnKTtcbiAgY29uc3QgbmV4dFNpYmxpbmcgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduZXh0U2libGluZycpO1xuICBjb25zdCBpbmNyZW1lbnRvciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2knKTtcbiAgY29uc3QgY3JlYXRlQ29uc3RXaXRoTWV0aG9kQ2FsbEluaXRpYWxpemVyID0gKGNvbnN0TmFtZTogdHMuSWRlbnRpZmllciwgbWV0aG9kVG9DYWxsOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoXG4gICAgICAgICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgICBjb25zdE5hbWUsIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0cy5jcmVhdGVDYWxsKHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJlbmRlcmVyLCBtZXRob2RUb0NhbGwpLCBbXSwgW25vZGVdKSldLFxuICAgICAgICAgICAgdHMuTm9kZUZsYWdzLkNvbnN0KSk7XG4gIH07XG5cbiAgLy8gY29uc3QgcGFyZW50ID0gcmVuZGVyZXIucGFyZW50Tm9kZShub2RlKTtcbiAgY29uc3QgcGFyZW50VmFyaWFibGVTdGF0ZW1lbnQgPSBjcmVhdGVDb25zdFdpdGhNZXRob2RDYWxsSW5pdGlhbGl6ZXIocGFyZW50LCAncGFyZW50Tm9kZScpO1xuXG4gIC8vIGNvbnN0IG5leHRTaWJsaW5nID0gcmVuZGVyZXIubmV4dFNpYmxpbmcobm9kZSk7XG4gIGNvbnN0IG5leHRTaWJsaW5nVmFyaWFibGVTdGF0ZW1lbnQgPVxuICAgICAgY3JlYXRlQ29uc3RXaXRoTWV0aG9kQ2FsbEluaXRpYWxpemVyKG5leHRTaWJsaW5nLCAnbmV4dFNpYmxpbmcnKTtcblxuICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IHJvb3ROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAvLyAgIHJlbmRlcmVyLmluc2VydEJlZm9yZShwYXJlbnRFbGVtZW50LCByb290Tm9kZXNbaV0sIG5leHRTaWJsaW5nKTtcbiAgLy8gfVxuICBjb25zdCBsb29wSW5pdGlhbGl6ZXIgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKGluY3JlbWVudG9yLCB1bmRlZmluZWQsIHRzLmNyZWF0ZU51bWVyaWNMaXRlcmFsKCcwJykpXSxcbiAgICAgIHRzLk5vZGVGbGFncy5MZXQpO1xuICBjb25zdCBsb29wQ29uZGl0aW9uID0gdHMuY3JlYXRlQmluYXJ5KFxuICAgICAgaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuTGVzc1RoYW5Ub2tlbixcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHJvb3ROb2RlcywgdHMuY3JlYXRlSWRlbnRpZmllcignbGVuZ3RoJykpKTtcbiAgY29uc3QgaW5zZXJ0QmVmb3JlQ2FsbCA9IHRzLmNyZWF0ZUNhbGwoXG4gICAgICB0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhyZW5kZXJlciwgJ2luc2VydEJlZm9yZScpLCBbXSxcbiAgICAgIFtwYXJlbnQsIHRzLmNyZWF0ZUVsZW1lbnRBY2Nlc3Mocm9vdE5vZGVzLCBpbmNyZW1lbnRvciksIG5leHRTaWJsaW5nXSk7XG4gIGNvbnN0IGxvb3AgPSB0cy5jcmVhdGVGb3IoXG4gICAgICBsb29wSW5pdGlhbGl6ZXIsIGxvb3BDb25kaXRpb24sIHRzLmNyZWF0ZVBvc3RmaXgoaW5jcmVtZW50b3IsIHRzLlN5bnRheEtpbmQuUGx1c1BsdXNUb2tlbiksXG4gICAgICB0cy5jcmVhdGVCbG9jayhbdHMuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChpbnNlcnRCZWZvcmVDYWxsKV0pKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBIZWxwZXJGdW5jdGlvbi5hdHRhY2hWaWV3QWZ0ZXIsIFtdLFxuICAgICAgW3JlbmRlcmVyLCBub2RlLCByb290Tm9kZXNdLm1hcChuYW1lID0+IGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWUpKSwgdW5kZWZpbmVkLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW3BhcmVudFZhcmlhYmxlU3RhdGVtZW50LCBuZXh0U2libGluZ1ZhcmlhYmxlU3RhdGVtZW50LCBsb29wXSwgdHJ1ZSkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYHNldEVsZW1lbnRBdHRyaWJ1dGVgICovXG5mdW5jdGlvbiBnZXRTZXRFbGVtZW50QXR0cmlidXRlSGVscGVyKCk6IHRzLkZ1bmN0aW9uRGVjbGFyYXRpb24ge1xuICBjb25zdCByZW5kZXJlciA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ3JlbmRlcmVyJyk7XG4gIGNvbnN0IGVsZW1lbnQgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdlbGVtZW50Jyk7XG4gIGNvbnN0IG5hbWVzcGFjZUFuZE5hbWUgPSB0cy5jcmVhdGVJZGVudGlmaWVyKCduYW1lc3BhY2VBbmROYW1lJyk7XG4gIGNvbnN0IHZhbHVlID0gdHMuY3JlYXRlSWRlbnRpZmllcigndmFsdWUnKTtcbiAgY29uc3QgbmFtZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25hbWUnKTtcbiAgY29uc3QgbmFtZXNwYWNlID0gdHMuY3JlYXRlSWRlbnRpZmllcignbmFtZXNwYWNlJyk7XG5cbiAgLy8gW25hbWVzcGFjZSwgbmFtZV0gPSBzcGxpdE5hbWVzcGFjZShuYW1lc3BhY2VBbmROYW1lKTtcbiAgY29uc3QgbmFtZXNwYWNlQW5kTmFtZVZhcmlhYmxlID0gdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgIHRzLmNyZWF0ZUFycmF5QmluZGluZ1BhdHRlcm4oXG4gICAgICAgICAgW25hbWVzcGFjZSwgbmFtZV0ubWFwKGlkID0+IHRzLmNyZWF0ZUJpbmRpbmdFbGVtZW50KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBpZCkpKSxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZUNhbGwodHMuY3JlYXRlSWRlbnRpZmllcihIZWxwZXJGdW5jdGlvbi5zcGxpdE5hbWVzcGFjZSksIFtdLCBbbmFtZXNwYWNlQW5kTmFtZV0pKTtcblxuICAvLyByZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWxlbWVudCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSk7XG4gIGNvbnN0IHNldENhbGwgPSB0cy5jcmVhdGVDYWxsKFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MocmVuZGVyZXIsICdzZXRBdHRyaWJ1dGUnKSwgW10sIFtlbGVtZW50LCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlXSk7XG5cbiAgLy8gcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKGVsZW1lbnQsIG5hbWUsIG5hbWVzcGFjZSk7XG4gIGNvbnN0IHJlbW92ZUNhbGwgPSB0cy5jcmVhdGVDYWxsKFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MocmVuZGVyZXIsICdyZW1vdmVBdHRyaWJ1dGUnKSwgW10sIFtlbGVtZW50LCBuYW1lLCBuYW1lc3BhY2VdKTtcblxuICAvLyBpZiAodmFsdWUgIT0gbnVsbCkgeyBzZXRDYWxsKCkgfSBlbHNlIHsgcmVtb3ZlQ2FsbCB9XG4gIGNvbnN0IGlmU3RhdGVtZW50ID0gdHMuY3JlYXRlSWYoXG4gICAgICB0cy5jcmVhdGVCaW5hcnkodmFsdWUsIHRzLlN5bnRheEtpbmQuRXhjbGFtYXRpb25FcXVhbHNUb2tlbiwgdHMuY3JlYXRlTnVsbCgpKSxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFt0cy5jcmVhdGVFeHByZXNzaW9uU3RhdGVtZW50KHNldENhbGwpXSwgdHJ1ZSksXG4gICAgICB0cy5jcmVhdGVCbG9jayhbdHMuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChyZW1vdmVDYWxsKV0sIHRydWUpKTtcblxuICBjb25zdCBmdW5jdGlvbkJvZHkgPSB0cy5jcmVhdGVCbG9jayhcbiAgICAgIFtcbiAgICAgICAgdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChbbmFtZXNwYWNlQW5kTmFtZVZhcmlhYmxlXSwgdHMuTm9kZUZsYWdzLkNvbnN0KSksXG4gICAgICAgIGlmU3RhdGVtZW50XG4gICAgICBdLFxuICAgICAgdHJ1ZSk7XG5cbiAgcmV0dXJuIHRzLmNyZWF0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oXG4gICAgICBbXSwgW10sIHVuZGVmaW5lZCwgSGVscGVyRnVuY3Rpb24uc2V0RWxlbWVudEF0dHJpYnV0ZSwgW10sXG4gICAgICBbXG4gICAgICAgIGdldEFueVR5cGVkUGFyYW1ldGVyKHJlbmRlcmVyKSwgZ2V0QW55VHlwZWRQYXJhbWV0ZXIoZWxlbWVudCksXG4gICAgICAgIGdldEFueVR5cGVkUGFyYW1ldGVyKG5hbWVzcGFjZUFuZE5hbWUpLCBnZXRBbnlUeXBlZFBhcmFtZXRlcih2YWx1ZSwgZmFsc2UpXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLCBmdW5jdGlvbkJvZHkpO1xufVxuXG4vKiogQ3JlYXRlcyBhIGhlbHBlciBmb3Igc3BsaXR0aW5nIGEgbmFtZSB0aGF0IG1pZ2h0IGNvbnRhaW4gYSBuYW1lc3BhY2UuICovXG5mdW5jdGlvbiBnZXRTcGxpdE5hbWVzcGFjZUhlbHBlcigpOiB0cy5GdW5jdGlvbkRlY2xhcmF0aW9uIHtcbiAgY29uc3QgbmFtZSA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoJ25hbWUnKTtcbiAgY29uc3QgbWF0Y2ggPSB0cy5jcmVhdGVJZGVudGlmaWVyKCdtYXRjaCcpO1xuICBjb25zdCByZWdleCA9IHRzLmNyZWF0ZVJlZ3VsYXJFeHByZXNzaW9uTGl0ZXJhbCgnL146KFteOl0rKTooLispJC8nKTtcbiAgY29uc3QgbWF0Y2hDYWxsID0gdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVQcm9wZXJ0eUFjY2VzcyhuYW1lLCAnbWF0Y2gnKSwgW10sIFtyZWdleF0pO1xuXG4gIC8vIGNvbnN0IG1hdGNoID0gbmFtZS5zcGxpdChyZWdleCk7XG4gIGNvbnN0IG1hdGNoVmFyaWFibGUgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgIFt0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKG1hdGNoLCB1bmRlZmluZWQsIG1hdGNoQ2FsbCldLCB0cy5Ob2RlRmxhZ3MuQ29uc3QpO1xuXG4gIC8vIHJldHVybiBbbWF0Y2hbMV0sIG1hdGNoWzJdXTtcbiAgY29uc3QgbWF0Y2hSZXR1cm4gPSB0cy5jcmVhdGVSZXR1cm4oXG4gICAgICB0cy5jcmVhdGVBcnJheUxpdGVyYWwoW3RzLmNyZWF0ZUVsZW1lbnRBY2Nlc3MobWF0Y2gsIDEpLCB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKG1hdGNoLCAyKV0pKTtcblxuICAvLyBpZiAobmFtZVswXSA9PT0gJzonKSB7IGNvbnN0IG1hdGNoID0gLi4uOyByZXR1cm4gLi4uOyB9XG4gIGNvbnN0IGlmU3RhdGVtZW50ID0gdHMuY3JlYXRlSWYoXG4gICAgICB0cy5jcmVhdGVCaW5hcnkoXG4gICAgICAgICAgdHMuY3JlYXRlRWxlbWVudEFjY2VzcyhuYW1lLCAwKSwgdHMuU3ludGF4S2luZC5FcXVhbHNFcXVhbHNFcXVhbHNUb2tlbixcbiAgICAgICAgICB0cy5jcmVhdGVTdHJpbmdMaXRlcmFsKCc6JykpLFxuICAgICAgdHMuY3JlYXRlQmxvY2soW3RzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFtdLCBtYXRjaFZhcmlhYmxlKSwgbWF0Y2hSZXR1cm5dLCB0cnVlKSk7XG5cbiAgLy8gcmV0dXJuIFsnJywgbmFtZV07XG4gIGNvbnN0IGVsc2VSZXR1cm4gPSB0cy5jcmVhdGVSZXR1cm4odHMuY3JlYXRlQXJyYXlMaXRlcmFsKFt0cy5jcmVhdGVTdHJpbmdMaXRlcmFsKCcnKSwgbmFtZV0pKTtcblxuICByZXR1cm4gdHMuY3JlYXRlRnVuY3Rpb25EZWNsYXJhdGlvbihcbiAgICAgIFtdLCBbXSwgdW5kZWZpbmVkLCBIZWxwZXJGdW5jdGlvbi5zcGxpdE5hbWVzcGFjZSwgW10sIFtnZXRBbnlUeXBlZFBhcmFtZXRlcihuYW1lKV0sIHVuZGVmaW5lZCxcbiAgICAgIHRzLmNyZWF0ZUJsb2NrKFtpZlN0YXRlbWVudCwgZWxzZVJldHVybl0sIHRydWUpKTtcbn1cbiJdfQ==
@@ -1,14 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- /// <amd-module name="@angular/core/schematics/migrations/renderer-to-renderer2" />
9
- import { Rule } from '@angular-devkit/schematics';
10
- /**
11
- * Migration that switches from `Renderer` to `Renderer2`. More information on how it works:
12
- * https://hackmd.angular.io/UTzUZTnPRA-cSa_4mHyfYw
13
- */
14
- export default function (): Rule;
@@ -1,138 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10
- return new (P || (P = Promise))(function (resolve, reject) {
11
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
12
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14
- step((generator = generator.apply(thisArg, _arguments || [])).next());
15
- });
16
- };
17
- var __importDefault = (this && this.__importDefault) || function (mod) {
18
- return (mod && mod.__esModule) ? mod : { "default": mod };
19
- };
20
- (function (factory) {
21
- if (typeof module === "object" && typeof module.exports === "object") {
22
- var v = factory(require, exports);
23
- if (v !== undefined) module.exports = v;
24
- }
25
- else if (typeof define === "function" && define.amd) {
26
- define("@angular/core/schematics/migrations/renderer-to-renderer2", ["require", "exports", "@angular-devkit/schematics", "path", "typescript", "@angular/core/schematics/utils/project_tsconfig_paths", "@angular/core/schematics/utils/typescript/compiler_host", "@angular/core/schematics/utils/typescript/imports", "@angular/core/schematics/utils/typescript/nodes", "@angular/core/schematics/migrations/renderer-to-renderer2/helpers", "@angular/core/schematics/migrations/renderer-to-renderer2/migration", "@angular/core/schematics/migrations/renderer-to-renderer2/util"], factory);
27
- }
28
- })(function (require, exports) {
29
- "use strict";
30
- Object.defineProperty(exports, "__esModule", { value: true });
31
- const schematics_1 = require("@angular-devkit/schematics");
32
- const path_1 = require("path");
33
- const typescript_1 = __importDefault(require("typescript"));
34
- const project_tsconfig_paths_1 = require("@angular/core/schematics/utils/project_tsconfig_paths");
35
- const compiler_host_1 = require("@angular/core/schematics/utils/typescript/compiler_host");
36
- const imports_1 = require("@angular/core/schematics/utils/typescript/imports");
37
- const nodes_1 = require("@angular/core/schematics/utils/typescript/nodes");
38
- const helpers_1 = require("@angular/core/schematics/migrations/renderer-to-renderer2/helpers");
39
- const migration_1 = require("@angular/core/schematics/migrations/renderer-to-renderer2/migration");
40
- const util_1 = require("@angular/core/schematics/migrations/renderer-to-renderer2/util");
41
- const MODULE_AUGMENTATION_FILENAME = 'ɵɵRENDERER_MIGRATION_CORE_AUGMENTATION.d.ts';
42
- /**
43
- * Migration that switches from `Renderer` to `Renderer2`. More information on how it works:
44
- * https://hackmd.angular.io/UTzUZTnPRA-cSa_4mHyfYw
45
- */
46
- function default_1() {
47
- return (tree) => __awaiter(this, void 0, void 0, function* () {
48
- const { buildPaths, testPaths } = yield (0, project_tsconfig_paths_1.getProjectTsConfigPaths)(tree);
49
- const basePath = process.cwd();
50
- const allPaths = [...buildPaths, ...testPaths];
51
- if (!allPaths.length) {
52
- throw new schematics_1.SchematicsException('Could not find any tsconfig file. Cannot migrate Renderer usages to Renderer2.');
53
- }
54
- for (const tsconfigPath of allPaths) {
55
- runRendererToRenderer2Migration(tree, tsconfigPath, basePath);
56
- }
57
- });
58
- }
59
- exports.default = default_1;
60
- function runRendererToRenderer2Migration(tree, tsconfigPath, basePath) {
61
- // Technically we can get away with using `MODULE_AUGMENTATION_FILENAME` as the path, but as of
62
- // TS 4.2, the module resolution caching seems to be more aggressive which causes the file to be
63
- // retained between test runs. We can avoid it by using the full path.
64
- const augmentedFilePath = (0, path_1.join)(basePath, MODULE_AUGMENTATION_FILENAME);
65
- const { program } = (0, compiler_host_1.createMigrationProgram)(tree, tsconfigPath, basePath, fileName => {
66
- // In case the module augmentation file has been requested, we return a source file that
67
- // augments "@angular/core" to include a named export called "Renderer". This ensures that
68
- // we can rely on the type checker for this migration in v9 where "Renderer" has been removed.
69
- if ((0, path_1.basename)(fileName) === MODULE_AUGMENTATION_FILENAME) {
70
- return `
71
- import '@angular/core';
72
- declare module "@angular/core" {
73
- class Renderer {}
74
- }
75
- `;
76
- }
77
- return undefined;
78
- }, [augmentedFilePath]);
79
- const typeChecker = program.getTypeChecker();
80
- const printer = typescript_1.default.createPrinter();
81
- const sourceFiles = program.getSourceFiles().filter(sourceFile => (0, compiler_host_1.canMigrateFile)(basePath, sourceFile, program));
82
- sourceFiles.forEach(sourceFile => {
83
- const rendererImportSpecifier = (0, imports_1.getImportSpecifier)(sourceFile, '@angular/core', 'Renderer');
84
- const rendererImport = rendererImportSpecifier ?
85
- (0, nodes_1.closestNode)(rendererImportSpecifier, typescript_1.default.SyntaxKind.NamedImports) :
86
- null;
87
- // If there are no imports for the `Renderer`, we can exit early.
88
- if (!rendererImportSpecifier || !rendererImport) {
89
- return;
90
- }
91
- const { typedNodes, methodCalls, forwardRefs } = (0, util_1.findRendererReferences)(sourceFile, typeChecker, rendererImportSpecifier);
92
- const update = tree.beginUpdate((0, path_1.relative)(basePath, sourceFile.fileName));
93
- const helpersToAdd = new Set();
94
- // Change the `Renderer` import to `Renderer2`.
95
- update.remove(rendererImport.getStart(), rendererImport.getWidth());
96
- update.insertRight(rendererImport.getStart(), printer.printNode(typescript_1.default.EmitHint.Unspecified, (0, imports_1.replaceImport)(rendererImport, 'Renderer', 'Renderer2'), sourceFile));
97
- // Change the method parameter and property types to `Renderer2`.
98
- typedNodes.forEach(node => {
99
- const type = node.type;
100
- if (type) {
101
- update.remove(type.getStart(), type.getWidth());
102
- update.insertRight(type.getStart(), 'Renderer2');
103
- }
104
- });
105
- // Change all identifiers inside `forwardRef` referring to the `Renderer`.
106
- forwardRefs.forEach(identifier => {
107
- update.remove(identifier.getStart(), identifier.getWidth());
108
- update.insertRight(identifier.getStart(), 'Renderer2');
109
- });
110
- // Migrate all of the method calls.
111
- methodCalls.forEach(call => {
112
- const { node, requiredHelpers } = (0, migration_1.migrateExpression)(call, typeChecker);
113
- if (node) {
114
- // If we migrated the node to a new expression, replace only the call expression.
115
- update.remove(call.getStart(), call.getWidth());
116
- update.insertRight(call.getStart(), printer.printNode(typescript_1.default.EmitHint.Unspecified, node, sourceFile));
117
- }
118
- else if (call.parent && typescript_1.default.isExpressionStatement(call.parent)) {
119
- // Otherwise if the call is inside an expression statement, drop the entire statement.
120
- // This takes care of any trailing semicolons. We only need to drop nodes for cases like
121
- // `setBindingDebugInfo` which have been noop for a while so they can be removed safely.
122
- update.remove(call.parent.getStart(), call.parent.getWidth());
123
- }
124
- if (requiredHelpers) {
125
- requiredHelpers.forEach(helperName => helpersToAdd.add(helperName));
126
- }
127
- });
128
- // Some of the methods can't be mapped directly to `Renderer2` and need extra logic around them.
129
- // The safest way to do so is to declare helper functions similar to the ones emitted by TS
130
- // which encapsulate the extra "glue" logic. We should only emit these functions once per file.
131
- helpersToAdd.forEach(helperName => {
132
- update.insertLeft(sourceFile.endOfFileToken.getStart(), (0, helpers_1.getHelper)(helperName, sourceFile, printer));
133
- });
134
- tree.commitUpdate(update);
135
- });
136
- }
137
- });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy9yZW5kZXJlci10by1yZW5kZXJlcjIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFSCwyREFBMkU7SUFDM0UsK0JBQThDO0lBQzlDLDREQUE0QjtJQUU1QixrR0FBMkU7SUFDM0UsMkZBQTRGO0lBQzVGLCtFQUFpRjtJQUNqRiwyRUFBeUQ7SUFFekQsK0ZBQW9EO0lBQ3BELG1HQUE4QztJQUM5Qyx5RkFBOEM7SUFFOUMsTUFBTSw0QkFBNEIsR0FBRyw2Q0FBNkMsQ0FBQztJQUVuRjs7O09BR0c7SUFDSDtRQUNFLE9BQU8sQ0FBTyxJQUFVLEVBQUUsRUFBRTtZQUMxQixNQUFNLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxHQUFHLE1BQU0sSUFBQSxnREFBdUIsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBRS9DLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUNwQixNQUFNLElBQUksZ0NBQW1CLENBQ3pCLGdGQUFnRixDQUFDLENBQUM7YUFDdkY7WUFFRCxLQUFLLE1BQU0sWUFBWSxJQUFJLFFBQVEsRUFBRTtnQkFDbkMsK0JBQStCLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQzthQUMvRDtRQUNILENBQUMsQ0FBQSxDQUFDO0lBQ0osQ0FBQztJQWZELDRCQWVDO0lBRUQsU0FBUywrQkFBK0IsQ0FBQyxJQUFVLEVBQUUsWUFBb0IsRUFBRSxRQUFnQjtRQUN6RiwrRkFBK0Y7UUFD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QUVILGdHQUFnRztZQUNoRywyRkFBMkY7WUFDM0YsK0ZBQStGO1lBQy9GLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ2hDLE1BQU0sQ0FBQyxVQUFVLENBQ2IsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFBLG1CQUFTLEVBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3hGLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtSdWxlLCBTY2hlbWF0aWNzRXhjZXB0aW9uLCBUcmVlfSBmcm9tICdAYW5ndWxhci1kZXZraXQvc2NoZW1hdGljcyc7XG5pbXBvcnQge2Jhc2VuYW1lLCBqb2luLCByZWxhdGl2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Z2V0UHJvamVjdFRzQ29uZmlnUGF0aHN9IGZyb20gJy4uLy4uL3V0aWxzL3Byb2plY3RfdHNjb25maWdfcGF0aHMnO1xuaW1wb3J0IHtjYW5NaWdyYXRlRmlsZSwgY3JlYXRlTWlncmF0aW9uUHJvZ3JhbX0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9jb21waWxlcl9ob3N0JztcbmltcG9ydCB7Z2V0SW1wb3J0U3BlY2lmaWVyLCByZXBsYWNlSW1wb3J0fSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L2ltcG9ydHMnO1xuaW1wb3J0IHtjbG9zZXN0Tm9kZX0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9ub2Rlcyc7XG5cbmltcG9ydCB7Z2V0SGVscGVyLCBIZWxwZXJGdW5jdGlvbn0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7bWlncmF0ZUV4cHJlc3Npb259IGZyb20gJy4vbWlncmF0aW9uJztcbmltcG9ydCB7ZmluZFJlbmRlcmVyUmVmZXJlbmNlc30gZnJvbSAnLi91dGlsJztcblxuY29uc3QgTU9EVUxFX0FVR01FTlRBVElPTl9GSUxFTkFNRSA9ICfJtcm1UkVOREVSRVJfTUlHUkFUSU9OX0NPUkVfQVVHTUVOVEFUSU9OLmQudHMnO1xuXG4vKipcbiAqIE1pZ3JhdGlvbiB0aGF0IHN3aXRjaGVzIGZyb20gYFJlbmRlcmVyYCB0byBgUmVuZGVyZXIyYC4gTW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgaXQgd29ya3M6XG4gKiBodHRwczovL2hhY2ttZC5hbmd1bGFyLmlvL1VUelVaVG5QUkEtY1NhXzRtSHlmWXdcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKTogUnVsZSB7XG4gIHJldHVybiBhc3luYyAodHJlZTogVHJlZSkgPT4ge1xuICAgIGNvbnN0IHtidWlsZFBhdGhzLCB0ZXN0UGF0aHN9ID0gYXdhaXQgZ2V0UHJvamVjdFRzQ29uZmlnUGF0aHModHJlZSk7XG4gICAgY29uc3QgYmFzZVBhdGggPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGFsbFBhdGhzID0gWy4uLmJ1aWxkUGF0aHMsIC4uLnRlc3RQYXRoc107XG5cbiAgICBpZiAoIWFsbFBhdGhzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oXG4gICAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIGFueSB0c2NvbmZpZyBmaWxlLiBDYW5ub3QgbWlncmF0ZSBSZW5kZXJlciB1c2FnZXMgdG8gUmVuZGVyZXIyLicpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdHNjb25maWdQYXRoIG9mIGFsbFBhdGhzKSB7XG4gICAgICBydW5SZW5kZXJlclRvUmVuZGVyZXIyTWlncmF0aW9uKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcnVuUmVuZGVyZXJUb1JlbmRlcmVyMk1pZ3JhdGlvbih0cmVlOiBUcmVlLCB0c2NvbmZpZ1BhdGg6IHN0cmluZywgYmFzZVBhdGg6IHN0cmluZykge1xuICAvLyBUZWNobmljYWxseSB3ZSBjYW4gZ2V0IGF3YXkgd2l0aCB1c2luZyBgTU9EVUxFX0FVR01FTlRBVElPTl9GSUxFTkFNRWAgYXMgdGhlIHBhdGgsIGJ1dCBhcyBvZlxuICAvLyBUUyA0LjIsIHRoZSBtb2R1bGUgcmVzb2x1dGlvbiBjYWNoaW5nIHNlZW1zIHRvIGJlIG1vcmUgYWdncmVzc2l2ZSB3aGljaCBjYXVzZXMgdGhlIGZpbGUgdG8gYmVcbiAgLy8gcmV0YWluZWQgYmV0d2VlbiB0ZXN0IHJ1bnMuIFdlIGNhbiBhdm9pZCBpdCBieSB1c2luZyB0aGUgZnVsbCBwYXRoLlxuICBjb25zdCBhdWdtZW50ZWRGaWxlUGF0aCA9IGpvaW4oYmFzZVBhdGgsIE1PRFVMRV9BVUdNRU5UQVRJT05fRklMRU5BTUUpO1xuICBjb25zdCB7cHJvZ3JhbX0gPSBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgsIGZpbGVOYW1lID0+IHtcbiAgICAvLyBJbiBjYXNlIHRoZSBtb2R1bGUgYXVnbWVudGF0aW9uIGZpbGUgaGFzIGJlZW4gcmVxdWVzdGVkLCB3ZSByZXR1cm4gYSBzb3VyY2UgZmlsZSB0aGF0XG4gICAgLy8gYXVnbWVudHMgXCJAYW5ndWxhci9jb3JlXCIgdG8gaW5jbHVkZSBhIG5hbWVkIGV4cG9ydCBjYWxsZWQgXCJSZW5kZXJlclwiLiBUaGlzIGVuc3VyZXMgdGhhdFxuICAgIC8vIHdlIGNhbiByZWx5IG9uIHRoZSB0eXBlIGNoZWNrZXIgZm9yIHRoaXMgbWlncmF0aW9uIGluIHY5IHdoZXJlIFwiUmVuZGVyZXJcIiBoYXMgYmVlbiByZW1vdmVkLlxuICAgIGlmIChiYXNlbmFtZShmaWxlTmFtZSkgPT09IE1PRFVMRV9BVUdNRU5UQVRJT05fRklMRU5BTUUpIHtcbiAgICAgIHJldHVybiBgXG4gICAgICAgIGltcG9ydCAnQGFuZ3VsYXIvY29yZSc7XG4gICAgICAgIGRlY2xhcmUgbW9kdWxlIFwiQGFuZ3VsYXIvY29yZVwiIHtcbiAgICAgICAgICBjbGFzcyBSZW5kZXJlciB7fVxuICAgICAgICB9XG4gICAgICBgO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9LCBbYXVnbWVudGVkRmlsZVBhdGhdKTtcbiAgY29uc3QgdHlwZUNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKCk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzID1cbiAgICAgIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKS5maWx0ZXIoc291cmNlRmlsZSA9PiBjYW5NaWdyYXRlRmlsZShiYXNlUGF0aCwgc291cmNlRmlsZSwgcHJvZ3JhbSkpO1xuXG4gIHNvdXJjZUZpbGVzLmZvckVhY2goc291cmNlRmlsZSA9PiB7XG4gICAgY29uc3QgcmVuZGVyZXJJbXBvcnRTcGVjaWZpZXIgPSBnZXRJbXBvcnRTcGVjaWZpZXIoc291cmNlRmlsZSwgJ0Bhbmd1bGFyL2NvcmUnLCAnUmVuZGVyZXInKTtcbiAgICBjb25zdCByZW5kZXJlckltcG9ydCA9IHJlbmRlcmVySW1wb3J0U3BlY2lmaWVyID9cbiAgICAgICAgY2xvc2VzdE5vZGU8dHMuTmFtZWRJbXBvcnRzPihyZW5kZXJlckltcG9ydFNwZWNpZmllciwgdHMuU3ludGF4S2luZC5OYW1lZEltcG9ydHMpIDpcbiAgICAgICAgbnVsbDtcblxuICAgIC8vIElmIHRoZXJlIGFyZSBubyBpbXBvcnRzIGZvciB0aGUgYFJlbmRlcmVyYCwgd2UgY2FuIGV4aXQgZWFybHkuXG4gICAgaWYgKCFyZW5kZXJlckltcG9ydFNwZWNpZmllciB8fCAhcmVuZGVyZXJJbXBvcnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7dHlwZWROb2RlcywgbWV0aG9kQ2FsbHMsIGZvcndhcmRSZWZzfSA9XG4gICAgICAgIGZpbmRSZW5kZXJlclJlZmVyZW5jZXMoc291cmNlRmlsZSwgdHlwZUNoZWNrZXIsIHJlbmRlcmVySW1wb3J0U3BlY2lmaWVyKTtcbiAgICBjb25zdCB1cGRhdGUgPSB0cmVlLmJlZ2luVXBkYXRlKHJlbGF0aXZlKGJhc2VQYXRoLCBzb3VyY2VGaWxlLmZpbGVOYW1lKSk7XG4gICAgY29uc3QgaGVscGVyc1RvQWRkID0gbmV3IFNldDxIZWxwZXJGdW5jdGlvbj4oKTtcblxuICAgIC8vIENoYW5nZSB0aGUgYFJlbmRlcmVyYCBpbXBvcnQgdG8gYFJlbmRlcmVyMmAuXG4gICAgdXBkYXRlLnJlbW92ZShyZW5kZXJlckltcG9ydC5nZXRTdGFydCgpLCByZW5kZXJlckltcG9ydC5nZXRXaWR0aCgpKTtcbiAgICB1cGRhdGUuaW5zZXJ0UmlnaHQoXG4gICAgICAgIHJlbmRlcmVySW1wb3J0LmdldFN0YXJ0KCksXG4gICAgICAgIHByaW50ZXIucHJpbnROb2RlKFxuICAgICAgICAgICAgdHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIHJlcGxhY2VJbXBvcnQocmVuZGVyZXJJbXBvcnQsICdSZW5kZXJlcicsICdSZW5kZXJlcjInKSxcbiAgICAgICAgICAgIHNvdXJjZUZpbGUpKTtcblxuICAgIC8vIENoYW5nZSB0aGUgbWV0aG9kIHBhcmFtZXRlciBhbmQgcHJvcGVydHkgdHlwZXMgdG8gYFJlbmRlcmVyMmAuXG4gICAgdHlwZWROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IG5vZGUudHlwZTtcblxuICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgdXBkYXRlLnJlbW92ZSh0eXBlLmdldFN0YXJ0KCksIHR5cGUuZ2V0V2lkdGgoKSk7XG4gICAgICAgIHVwZGF0ZS5pbnNlcnRSaWdodCh0eXBlLmdldFN0YXJ0KCksICdSZW5kZXJlcjInKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIENoYW5nZSBhbGwgaWRlbnRpZmllcnMgaW5zaWRlIGBmb3J3YXJkUmVmYCByZWZlcnJpbmcgdG8gdGhlIGBSZW5kZXJlcmAuXG4gICAgZm9yd2FyZFJlZnMuZm9yRWFjaChpZGVudGlmaWVyID0+IHtcbiAgICAgIHVwZGF0ZS5yZW1vdmUoaWRlbnRpZmllci5nZXRTdGFydCgpLCBpZGVudGlmaWVyLmdldFdpZHRoKCkpO1xuICAgICAgdXBkYXRlLmluc2VydFJpZ2h0KGlkZW50aWZpZXIuZ2V0U3RhcnQoKSwgJ1JlbmRlcmVyMicpO1xuICAgIH0pO1xuXG4gICAgLy8gTWlncmF0ZSBhbGwgb2YgdGhlIG1ldGhvZCBjYWxscy5cbiAgICBtZXRob2RDYWxscy5mb3JFYWNoKGNhbGwgPT4ge1xuICAgICAgY29uc3Qge25vZGUsIHJlcXVpcmVkSGVscGVyc30gPSBtaWdyYXRlRXhwcmVzc2lvbihjYWxsLCB0eXBlQ2hlY2tlcik7XG5cbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIC8vIElmIHdlIG1pZ3JhdGVkIHRoZSBub2RlIHRvIGEgbmV3IGV4cHJlc3Npb24sIHJlcGxhY2Ugb25seSB0aGUgY2FsbCBleHByZXNzaW9uLlxuICAgICAgICB1cGRhdGUucmVtb3ZlKGNhbGwuZ2V0U3RhcnQoKSwgY2FsbC5nZXRXaWR0aCgpKTtcbiAgICAgICAgdXBkYXRlLmluc2VydFJpZ2h0KFxuICAgICAgICAgICAgY2FsbC5nZXRTdGFydCgpLCBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgbm9kZSwgc291cmNlRmlsZSkpO1xuICAgICAgfSBlbHNlIGlmIChjYWxsLnBhcmVudCAmJiB0cy5pc0V4cHJlc3Npb25TdGF0ZW1lbnQoY2FsbC5wYXJlbnQpKSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSBpZiB0aGUgY2FsbCBpcyBpbnNpZGUgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnQsIGRyb3AgdGhlIGVudGlyZSBzdGF0ZW1lbnQuXG4gICAgICAgIC8vIFRoaXMgdGFrZXMgY2FyZSBvZiBhbnkgdHJhaWxpbmcgc2VtaWNvbG9ucy4gV2Ugb25seSBuZWVkIHRvIGRyb3Agbm9kZXMgZm9yIGNhc2VzIGxpa2VcbiAgICAgICAgLy8gYHNldEJpbmRpbmdEZWJ1Z0luZm9gIHdoaWNoIGhhdmUgYmVlbiBub29wIGZvciBhIHdoaWxlIHNvIHRoZXkgY2FuIGJlIHJlbW92ZWQgc2FmZWx5LlxuICAgICAgICB1cGRhdGUucmVtb3ZlKGNhbGwucGFyZW50LmdldFN0YXJ0KCksIGNhbGwucGFyZW50LmdldFdpZHRoKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVxdWlyZWRIZWxwZXJzKSB7XG4gICAgICAgIHJlcXVpcmVkSGVscGVycy5mb3JFYWNoKGhlbHBlck5hbWUgPT4gaGVscGVyc1RvQWRkLmFkZChoZWxwZXJOYW1lKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTb21lIG9mIHRoZSBtZXRob2RzIGNhbid0IGJlIG1hcHBlZCBkaXJlY3RseSB0byBgUmVuZGVyZXIyYCBhbmQgbmVlZCBleHRyYSBsb2dpYyBhcm91bmQgdGhlbS5cbiAgICAvLyBUaGUgc2FmZXN0IHdheSB0byBkbyBzbyBpcyB0byBkZWNsYXJlIGhlbHBlciBmdW5jdGlvbnMgc2ltaWxhciB0byB0aGUgb25lcyBlbWl0dGVkIGJ5IFRTXG4gICAgLy8gd2hpY2ggZW5jYXBzdWxhdGUgdGhlIGV4dHJhIFwiZ2x1ZVwiIGxvZ2ljLiBXZSBzaG91bGQgb25seSBlbWl0IHRoZXNlIGZ1bmN0aW9ucyBvbmNlIHBlciBmaWxlLlxuICAgIGhlbHBlcnNUb0FkZC5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgICAgdXBkYXRlLmluc2VydExlZnQoXG4gICAgICAgICAgc291cmNlRmlsZS5lbmRPZkZpbGVUb2tlbi5nZXRTdGFydCgpLCBnZXRIZWxwZXIoaGVscGVyTmFtZSwgc291cmNlRmlsZSwgcHJpbnRlcikpO1xuICAgIH0pO1xuXG4gICAgdHJlZS5jb21taXRVcGRhdGUodXBkYXRlKTtcbiAgfSk7XG59XG4iXX0=
@@ -1,18 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- /// <amd-module name="@angular/core/schematics/migrations/renderer-to-renderer2/migration" />
9
- import ts from 'typescript';
10
- import { HelperFunction } from './helpers';
11
- /**
12
- * Migrates a function call expression from `Renderer` to `Renderer2`.
13
- * Returns null if the expression should be dropped.
14
- */
15
- export declare function migrateExpression(node: ts.CallExpression, typeChecker: ts.TypeChecker): {
16
- node: ts.Node | null;
17
- requiredHelpers?: HelperFunction[];
18
- };