@angular/core 12.1.1 → 12.1.5

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 +12 -12
  6. package/core.metadata.json +1 -1
  7. package/esm2015/src/application_init.js +5 -5
  8. package/esm2015/src/application_ref.js +6 -2
  9. package/esm2015/src/change_detection/differs/iterable_differs.js +1 -1
  10. package/esm2015/src/compiler/compiler_facade.js +31 -8
  11. package/esm2015/src/compiler/compiler_facade_interface.js +1 -1
  12. package/esm2015/src/di/jit/injectable.js +4 -3
  13. package/esm2015/src/di/r3_injector.js +5 -2
  14. package/esm2015/src/error_handler.js +4 -8
  15. package/esm2015/src/errors.js +2 -2
  16. package/esm2015/src/event_emitter.js +1 -1
  17. package/esm2015/src/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,211 +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
- /**
10
- * Migrates a function call expression from `Renderer` to `Renderer2`.
11
- * Returns null if the expression should be dropped.
12
- */
13
- export function migrateExpression(node, typeChecker) {
14
- if (isPropertyAccessCallExpression(node)) {
15
- switch (node.expression.name.getText()) {
16
- case 'setElementProperty':
17
- return { node: renameMethodCall(node, 'setProperty') };
18
- case 'setText':
19
- return { node: renameMethodCall(node, 'setValue') };
20
- case 'listenGlobal':
21
- return { node: renameMethodCall(node, 'listen') };
22
- case 'selectRootElement':
23
- return { node: migrateSelectRootElement(node) };
24
- case 'setElementClass':
25
- return { node: migrateSetElementClass(node) };
26
- case 'setElementStyle':
27
- return { node: migrateSetElementStyle(node, typeChecker) };
28
- case 'invokeElementMethod':
29
- return { node: migrateInvokeElementMethod(node) };
30
- case 'setBindingDebugInfo':
31
- return { node: null };
32
- case 'createViewRoot':
33
- return { node: migrateCreateViewRoot(node) };
34
- case 'setElementAttribute':
35
- return {
36
- node: switchToHelperCall(node, "__ngRendererSetElementAttributeHelper" /* setElementAttribute */, node.arguments),
37
- requiredHelpers: [
38
- "AnyDuringRendererMigration" /* any */, "__ngRendererSplitNamespaceHelper" /* splitNamespace */, "__ngRendererSetElementAttributeHelper" /* setElementAttribute */
39
- ]
40
- };
41
- case 'createElement':
42
- return {
43
- node: switchToHelperCall(node, "__ngRendererCreateElementHelper" /* createElement */, node.arguments.slice(0, 2)),
44
- requiredHelpers: ["AnyDuringRendererMigration" /* any */, "__ngRendererSplitNamespaceHelper" /* splitNamespace */, "__ngRendererCreateElementHelper" /* createElement */]
45
- };
46
- case 'createText':
47
- return {
48
- node: switchToHelperCall(node, "__ngRendererCreateTextHelper" /* createText */, node.arguments.slice(0, 2)),
49
- requiredHelpers: ["AnyDuringRendererMigration" /* any */, "__ngRendererCreateTextHelper" /* createText */]
50
- };
51
- case 'createTemplateAnchor':
52
- return {
53
- node: switchToHelperCall(node, "__ngRendererCreateTemplateAnchorHelper" /* createTemplateAnchor */, node.arguments.slice(0, 1)),
54
- requiredHelpers: ["AnyDuringRendererMigration" /* any */, "__ngRendererCreateTemplateAnchorHelper" /* createTemplateAnchor */]
55
- };
56
- case 'projectNodes':
57
- return {
58
- node: switchToHelperCall(node, "__ngRendererProjectNodesHelper" /* projectNodes */, node.arguments),
59
- requiredHelpers: ["AnyDuringRendererMigration" /* any */, "__ngRendererProjectNodesHelper" /* projectNodes */]
60
- };
61
- case 'animate':
62
- return {
63
- node: migrateAnimateCall(),
64
- requiredHelpers: ["AnyDuringRendererMigration" /* any */, "__ngRendererAnimateHelper" /* animate */]
65
- };
66
- case 'destroyView':
67
- return {
68
- node: switchToHelperCall(node, "__ngRendererDestroyViewHelper" /* destroyView */, [node.arguments[1]]),
69
- requiredHelpers: ["AnyDuringRendererMigration" /* any */, "__ngRendererDestroyViewHelper" /* destroyView */]
70
- };
71
- case 'detachView':
72
- return {
73
- node: switchToHelperCall(node, "__ngRendererDetachViewHelper" /* detachView */, [node.arguments[0]]),
74
- requiredHelpers: ["AnyDuringRendererMigration" /* any */, "__ngRendererDetachViewHelper" /* detachView */]
75
- };
76
- case 'attachViewAfter':
77
- return {
78
- node: switchToHelperCall(node, "__ngRendererAttachViewAfterHelper" /* attachViewAfter */, node.arguments),
79
- requiredHelpers: ["AnyDuringRendererMigration" /* any */, "__ngRendererAttachViewAfterHelper" /* attachViewAfter */]
80
- };
81
- }
82
- }
83
- return { node };
84
- }
85
- /** Checks whether a node is a PropertyAccessExpression. */
86
- function isPropertyAccessCallExpression(node) {
87
- return ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression);
88
- }
89
- /** Renames a method call while keeping all of the parameters in place. */
90
- function renameMethodCall(node, newName) {
91
- const newExpression = ts.updatePropertyAccess(node.expression, node.expression.expression, ts.createIdentifier(newName));
92
- return ts.updateCall(node, newExpression, node.typeArguments, node.arguments);
93
- }
94
- /**
95
- * Migrates a `selectRootElement` call by removing the last argument which is no longer supported.
96
- */
97
- function migrateSelectRootElement(node) {
98
- // The only thing we need to do is to drop the last argument
99
- // (`debugInfo`), if the consumer was passing it in.
100
- if (node.arguments.length > 1) {
101
- return ts.updateCall(node, node.expression, node.typeArguments, [node.arguments[0]]);
102
- }
103
- return node;
104
- }
105
- /**
106
- * Migrates a call to `setElementClass` either to a call to `addClass` or `removeClass`, or
107
- * to an expression like `isAdd ? addClass(el, className) : removeClass(el, className)`.
108
- */
109
- function migrateSetElementClass(node) {
110
- // Clone so we don't mutate by accident. Note that we assume that
111
- // the user's code is providing all three required arguments.
112
- const outputMethodArgs = node.arguments.slice();
113
- const isAddArgument = outputMethodArgs.pop();
114
- const createRendererCall = (isAdd) => {
115
- const innerExpression = node.expression.expression;
116
- const topExpression = ts.createPropertyAccess(innerExpression, isAdd ? 'addClass' : 'removeClass');
117
- return ts.createCall(topExpression, [], node.arguments.slice(0, 2));
118
- };
119
- // If the call has the `isAdd` argument as a literal boolean, we can map it directly to
120
- // `addClass` or `removeClass`. Note that we can't use the type checker here, because it
121
- // won't tell us whether the value resolves to true or false.
122
- if (isAddArgument.kind === ts.SyntaxKind.TrueKeyword ||
123
- isAddArgument.kind === ts.SyntaxKind.FalseKeyword) {
124
- return createRendererCall(isAddArgument.kind === ts.SyntaxKind.TrueKeyword);
125
- }
126
- // Otherwise create a ternary on the variable.
127
- return ts.createConditional(isAddArgument, createRendererCall(true), createRendererCall(false));
128
- }
129
- /**
130
- * Migrates a call to `setElementStyle` call either to a call to
131
- * `setStyle` or `removeStyle`. or to an expression like
132
- * `value == null ? removeStyle(el, key) : setStyle(el, key, value)`.
133
- */
134
- function migrateSetElementStyle(node, typeChecker) {
135
- const args = node.arguments;
136
- const addMethodName = 'setStyle';
137
- const removeMethodName = 'removeStyle';
138
- const lastArgType = args[2] ?
139
- typeChecker.typeToString(typeChecker.getTypeAtLocation(args[2]), node, ts.TypeFormatFlags.AddUndefined) :
140
- null;
141
- // Note that for a literal null, TS considers it a `NullKeyword`,
142
- // whereas a literal `undefined` is just an Identifier.
143
- if (args.length === 2 || lastArgType === 'null' || lastArgType === 'undefined') {
144
- // If we've got a call with two arguments, or one with three arguments where the last one is
145
- // `undefined` or `null`, we can safely switch to a `removeStyle` call.
146
- const innerExpression = node.expression.expression;
147
- const topExpression = ts.createPropertyAccess(innerExpression, removeMethodName);
148
- return ts.createCall(topExpression, [], args.slice(0, 2));
149
- }
150
- else if (args.length === 3) {
151
- // We need the checks for string literals, because the type of something
152
- // like `"blue"` is the literal `blue`, not `string`.
153
- if (lastArgType === 'string' || lastArgType === 'number' || ts.isStringLiteral(args[2]) ||
154
- ts.isNoSubstitutionTemplateLiteral(args[2]) || ts.isNumericLiteral(args[2])) {
155
- // If we've got three arguments and the last one is a string literal or a number, we
156
- // can safely rename to `setStyle`.
157
- return renameMethodCall(node, addMethodName);
158
- }
159
- else {
160
- // Otherwise migrate to a ternary that looks like:
161
- // `value == null ? removeStyle(el, key) : setStyle(el, key, value)`
162
- const condition = ts.createBinary(args[2], ts.SyntaxKind.EqualsEqualsToken, ts.createNull());
163
- const whenNullCall = renameMethodCall(ts.createCall(node.expression, [], args.slice(0, 2)), removeMethodName);
164
- return ts.createConditional(condition, whenNullCall, renameMethodCall(node, addMethodName));
165
- }
166
- }
167
- return node;
168
- }
169
- /**
170
- * Migrates a call to `invokeElementMethod(target, method, [arg1, arg2])` either to
171
- * `target.method(arg1, arg2)` or `(target as any)[method].apply(target, [arg1, arg2])`.
172
- */
173
- function migrateInvokeElementMethod(node) {
174
- const [target, name, args] = node.arguments;
175
- const isNameStatic = ts.isStringLiteral(name) || ts.isNoSubstitutionTemplateLiteral(name);
176
- const isArgsStatic = !args || ts.isArrayLiteralExpression(args);
177
- if (isNameStatic && isArgsStatic) {
178
- // If the name is a static string and the arguments are an array literal,
179
- // we can safely convert the node into a call expression.
180
- const expression = ts.createPropertyAccess(target, name.text);
181
- const callArguments = args ? args.elements : [];
182
- return ts.createCall(expression, [], callArguments);
183
- }
184
- else {
185
- // Otherwise create an expression in the form of `(target as any)[name].apply(target, args)`.
186
- const asExpression = ts.createParen(ts.createAsExpression(target, ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)));
187
- const elementAccess = ts.createElementAccess(asExpression, name);
188
- const applyExpression = ts.createPropertyAccess(elementAccess, 'apply');
189
- return ts.createCall(applyExpression, [], args ? [target, args] : [target]);
190
- }
191
- }
192
- /** Migrates a call to `createViewRoot` to whatever node was passed in as the first argument. */
193
- function migrateCreateViewRoot(node) {
194
- return node.arguments[0];
195
- }
196
- /** Migrates a call to `migrate` a direct call to the helper. */
197
- function migrateAnimateCall() {
198
- return ts.createCall(ts.createIdentifier("__ngRendererAnimateHelper" /* animate */), [], []);
199
- }
200
- /**
201
- * Switches out a call to the `Renderer` to a call to one of our helper functions.
202
- * Most of the helpers accept an instance of `Renderer2` as the first argument and all
203
- * subsequent arguments differ.
204
- * @param node Node of the original method call.
205
- * @param helper Name of the helper with which to replace the original call.
206
- * @param args Arguments that should be passed into the helper after the renderer argument.
207
- */
208
- function switchToHelperCall(node, helper, args) {
209
- return ts.createCall(ts.createIdentifier(helper), [], [node.expression.expression, ...args]);
210
- }
211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zY2hlbWF0aWNzL21pZ3JhdGlvbnMvcmVuZGVyZXItdG8tcmVuZGVyZXIyL21pZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQU9qQzs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBdUIsRUFBRSxXQUEyQjtJQUVwRixJQUFJLDhCQUE4QixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hDLFFBQVEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdEMsS0FBSyxvQkFBb0I7Z0JBQ3ZCLE9BQU8sRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFDLENBQUM7WUFDdkQsS0FBSyxTQUFTO2dCQUNaLE9BQU8sRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFDLENBQUM7WUFDcEQsS0FBSyxjQUFjO2dCQUNqQixPQUFPLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBQyxDQUFDO1lBQ2xELEtBQUssbUJBQW1CO2dCQUN0QixPQUFPLEVBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFDLENBQUM7WUFDaEQsS0FBSyxpQkFBaUI7Z0JBQ3BCLE9BQU8sRUFBQyxJQUFJLEVBQUUsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQztZQUM5QyxLQUFLLGlCQUFpQjtnQkFDcEIsT0FBTyxFQUFDLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEVBQUMsQ0FBQztZQUMzRCxLQUFLLHFCQUFxQjtn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QyxvQkFBb0IsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEUsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQzdFO0FBQ0gsQ0FBQztBQUVELGdHQUFnRztBQUNoRyxTQUFTLHFCQUFxQixDQUFDLElBQXVCO0lBQ3BELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsZ0VBQWdFO0FBQ2hFLFNBQVMsa0JBQWtCO0lBQ3pCLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLDJDQUF3QixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsa0JBQWtCLENBQ3ZCLElBQWtDLEVBQUUsTUFBc0IsRUFDMUQsSUFBaUQ7SUFDbkQsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtIZWxwZXJGdW5jdGlvbn0gZnJvbSAnLi9oZWxwZXJzJztcblxuLyoqIEEgY2FsbCBleHByZXNzaW9uIHRoYXQgaXMgYmFzZWQgb24gYSBwcm9wZXJ0eSBhY2Nlc3MuICovXG50eXBlIFByb3BlcnR5QWNjZXNzQ2FsbEV4cHJlc3Npb24gPSB0cy5DYWxsRXhwcmVzc2lvbiZ7ZXhwcmVzc2lvbjogdHMuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9ufTtcblxuLyoqXG4gKiBNaWdyYXRlcyBhIGZ1bmN0aW9uIGNhbGwgZXhwcmVzc2lvbiBmcm9tIGBSZW5kZXJlcmAgdG8gYFJlbmRlcmVyMmAuXG4gKiBSZXR1cm5zIG51bGwgaWYgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRlRXhwcmVzc2lvbihub2RlOiB0cy5DYWxsRXhwcmVzc2lvbiwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKTpcbiAgICB7bm9kZTogdHMuTm9kZXxudWxsLCByZXF1aXJlZEhlbHBlcnM/OiBIZWxwZXJGdW5jdGlvbltdfSB7XG4gIGlmIChpc1Byb3BlcnR5QWNjZXNzQ2FsbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICBzd2l0Y2ggKG5vZGUuZXhwcmVzc2lvbi5uYW1lLmdldFRleHQoKSkge1xuICAgICAgY2FzZSAnc2V0RWxlbWVudFByb3BlcnR5JzpcbiAgICAgICAgcmV0dXJuIHtub2RlOiByZW5hbWVNZXRob2RDYWxsKG5vZGUsICdzZXRQcm9wZXJ0eScpfTtcbiAgICAgIGNhc2UgJ3NldFRleHQnOlxuICAgICAgICByZXR1cm4ge25vZGU6IHJlbmFtZU1ldGhvZENhbGwobm9kZSwgJ3NldFZhbHVlJyl9O1xuICAgICAgY2FzZSAnbGlzdGVuR2xvYmFsJzpcbiAgICAgICAgcmV0dXJuIHtub2RlOiByZW5hbWVNZXRob2RDYWxsKG5vZGUsICdsaXN0ZW4nKX07XG4gICAgICBjYXNlICdzZWxlY3RSb290RWxlbWVudCc6XG4gICAgICAgIHJldHVybiB7bm9kZTogbWlncmF0ZVNlbGVjdFJvb3RFbGVtZW50KG5vZGUpfTtcbiAgICAgIGNhc2UgJ3NldEVsZW1lbnRDbGFzcyc6XG4gICAgICAgIHJldHVybiB7bm9kZTogbWlncmF0ZVNldEVsZW1lbnRDbGFzcyhub2RlKX07XG4gICAgICBjYXNlICdzZXRFbGVtZW50U3R5bGUnOlxuICAgICAgICByZXR1cm4ge25vZGU6IG1pZ3JhdGVTZXRFbGVtZW50U3R5bGUobm9kZSwgdHlwZUNoZWNrZXIpfTtcbiAgICAgIGNhc2UgJ2ludm9rZUVsZW1lbnRNZXRob2QnOlxuICAgICAgICByZXR1cm4ge25vZGU6IG1pZ3JhdGVJbnZva2VFbGVtZW50TWV0aG9kKG5vZGUpfTtcbiAgICAgIGNhc2UgJ3NldEJpbmRpbmdEZWJ1Z0luZm8nOlxuICAgICAgICByZXR1cm4ge25vZGU6IG51bGx9O1xuICAgICAgY2FzZSAnY3JlYXRlVmlld1Jvb3QnOlxuICAgICAgICByZXR1cm4ge25vZGU6IG1pZ3JhdGVDcmVhdGVWaWV3Um9vdChub2RlKX07XG4gICAgICBjYXNlICdzZXRFbGVtZW50QXR0cmlidXRlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBzd2l0Y2hUb0hlbHBlckNhbGwobm9kZSwgSGVscGVyRnVuY3Rpb24uc2V0RWxlbWVudEF0dHJpYnV0ZSwgbm9kZS5hcmd1bWVudHMpLFxuICAgICAgICAgIHJlcXVpcmVkSGVscGVyczogW1xuICAgICAgICAgICAgSGVscGVyRnVuY3Rpb24uYW55LCBIZWxwZXJGdW5jdGlvbi5zcGxpdE5hbWVzcGFjZSwgSGVscGVyRnVuY3Rpb24uc2V0RWxlbWVudEF0dHJpYnV0ZVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2NyZWF0ZUVsZW1lbnQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IHN3aXRjaFRvSGVscGVyQ2FsbChub2RlLCBIZWxwZXJGdW5jdGlvbi5jcmVhdGVFbGVtZW50LCBub2RlLmFyZ3VtZW50cy5zbGljZSgwLCAyKSksXG4gICAgICAgICAgcmVxdWlyZWRIZWxwZXJzOlxuICAgICAgICAgICAgICBbSGVscGVyRnVuY3Rpb24uYW55LCBIZWxwZXJGdW5jdGlvbi5zcGxpdE5hbWVzcGFjZSwgSGVscGVyRnVuY3Rpb24uY3JlYXRlRWxlbWVudF1cbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2NyZWF0ZVRleHQnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IHN3aXRjaFRvSGVscGVyQ2FsbChub2RlLCBIZWxwZXJGdW5jdGlvbi5jcmVhdGVUZXh0LCBub2RlLmFyZ3VtZW50cy5zbGljZSgwLCAyKSksXG4gICAgICAgICAgcmVxdWlyZWRIZWxwZXJzOiBbSGVscGVyRnVuY3Rpb24uYW55LCBIZWxwZXJGdW5jdGlvbi5jcmVhdGVUZXh0XVxuICAgICAgICB9O1xuICAgICAgY2FzZSAnY3JlYXRlVGVtcGxhdGVBbmNob3InOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IHN3aXRjaFRvSGVscGVyQ2FsbChcbiAgICAgICAgICAgICAgbm9kZSwgSGVscGVyRnVuY3Rpb24uY3JlYXRlVGVtcGxhdGVBbmNob3IsIG5vZGUuYXJndW1lbnRzLnNsaWNlKDAsIDEpKSxcbiAgICAgICAgICByZXF1aXJlZEhlbHBlcnM6IFtIZWxwZXJGdW5jdGlvbi5hbnksIEhlbHBlckZ1bmN0aW9uLmNyZWF0ZVRlbXBsYXRlQW5jaG9yXVxuICAgICAgICB9O1xuICAgICAgY2FzZSAncHJvamVjdE5vZGVzJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBzd2l0Y2hUb0hlbHBlckNhbGwobm9kZSwgSGVscGVyRnVuY3Rpb24ucHJvamVjdE5vZGVzLCBub2RlLmFyZ3VtZW50cyksXG4gICAgICAgICAgcmVxdWlyZWRIZWxwZXJzOiBbSGVscGVyRnVuY3Rpb24uYW55LCBIZWxwZXJGdW5jdGlvbi5wcm9qZWN0Tm9kZXNdXG4gICAgICAgIH07XG4gICAgICBjYXNlICdhbmltYXRlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBtaWdyYXRlQW5pbWF0ZUNhbGwoKSxcbiAgICAgICAgICByZXF1aXJlZEhlbHBlcnM6IFtIZWxwZXJGdW5jdGlvbi5hbnksIEhlbHBlckZ1bmN0aW9uLmFuaW1hdGVdXG4gICAgICAgIH07XG4gICAgICBjYXNlICdkZXN0cm95Vmlldyc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogc3dpdGNoVG9IZWxwZXJDYWxsKG5vZGUsIEhlbHBlckZ1bmN0aW9uLmRlc3Ryb3lWaWV3LCBbbm9kZS5hcmd1bWVudHNbMV1dKSxcbiAgICAgICAgICByZXF1aXJlZEhlbHBlcnM6IFtIZWxwZXJGdW5jdGlvbi5hbnksIEhlbHBlckZ1bmN0aW9uLmRlc3Ryb3lWaWV3XVxuICAgICAgICB9O1xuICAgICAgY2FzZSAnZGV0YWNoVmlldyc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogc3dpdGNoVG9IZWxwZXJDYWxsKG5vZGUsIEhlbHBlckZ1bmN0aW9uLmRldGFjaFZpZXcsIFtub2RlLmFyZ3VtZW50c1swXV0pLFxuICAgICAgICAgIHJlcXVpcmVkSGVscGVyczogW0hlbHBlckZ1bmN0aW9uLmFueSwgSGVscGVyRnVuY3Rpb24uZGV0YWNoVmlld11cbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2F0dGFjaFZpZXdBZnRlcic6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZTogc3dpdGNoVG9IZWxwZXJDYWxsKG5vZGUsIEhlbHBlckZ1bmN0aW9uLmF0dGFjaFZpZXdBZnRlciwgbm9kZS5hcmd1bWVudHMpLFxuICAgICAgICAgIHJlcXVpcmVkSGVscGVyczogW0hlbHBlckZ1bmN0aW9uLmFueSwgSGVscGVyRnVuY3Rpb24uYXR0YWNoVmlld0FmdGVyXVxuICAgICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7bm9kZX07XG59XG5cbi8qKiBDaGVja3Mgd2hldGhlciBhIG5vZGUgaXMgYSBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uICovXG5mdW5jdGlvbiBpc1Byb3BlcnR5QWNjZXNzQ2FsbEV4cHJlc3Npb24obm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgUHJvcGVydHlBY2Nlc3NDYWxsRXhwcmVzc2lvbiB7XG4gIHJldHVybiB0cy5pc0NhbGxFeHByZXNzaW9uKG5vZGUpICYmIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbik7XG59XG5cbi8qKiBSZW5hbWVzIGEgbWV0aG9kIGNhbGwgd2hpbGUga2VlcGluZyBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgaW4gcGxhY2UuICovXG5mdW5jdGlvbiByZW5hbWVNZXRob2RDYWxsKG5vZGU6IFByb3BlcnR5QWNjZXNzQ2FsbEV4cHJlc3Npb24sIG5ld05hbWU6IHN0cmluZyk6IHRzLkNhbGxFeHByZXNzaW9uIHtcbiAgY29uc3QgbmV3RXhwcmVzc2lvbiA9IHRzLnVwZGF0ZVByb3BlcnR5QWNjZXNzKFxuICAgICAgbm9kZS5leHByZXNzaW9uLCBub2RlLmV4cHJlc3Npb24uZXhwcmVzc2lvbiwgdHMuY3JlYXRlSWRlbnRpZmllcihuZXdOYW1lKSk7XG5cbiAgcmV0dXJuIHRzLnVwZGF0ZUNhbGwobm9kZSwgbmV3RXhwcmVzc2lvbiwgbm9kZS50eXBlQXJndW1lbnRzLCBub2RlLmFyZ3VtZW50cyk7XG59XG5cbi8qKlxuICogTWlncmF0ZXMgYSBgc2VsZWN0Um9vdEVsZW1lbnRgIGNhbGwgYnkgcmVtb3ZpbmcgdGhlIGxhc3QgYXJndW1lbnQgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gbWlncmF0ZVNlbGVjdFJvb3RFbGVtZW50KG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uKTogdHMuTm9kZSB7XG4gIC8vIFRoZSBvbmx5IHRoaW5nIHdlIG5lZWQgdG8gZG8gaXMgdG8gZHJvcCB0aGUgbGFzdCBhcmd1bWVudFxuICAvLyAoYGRlYnVnSW5mb2ApLCBpZiB0aGUgY29uc3VtZXIgd2FzIHBhc3NpbmcgaXQgaW4uXG4gIGlmIChub2RlLmFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIHRzLnVwZGF0ZUNhbGwobm9kZSwgbm9kZS5leHByZXNzaW9uLCBub2RlLnR5cGVBcmd1bWVudHMsIFtub2RlLmFyZ3VtZW50c1swXV0pO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogTWlncmF0ZXMgYSBjYWxsIHRvIGBzZXRFbGVtZW50Q2xhc3NgIGVpdGhlciB0byBhIGNhbGwgdG8gYGFkZENsYXNzYCBvciBgcmVtb3ZlQ2xhc3NgLCBvclxuICogdG8gYW4gZXhwcmVzc2lvbiBsaWtlIGBpc0FkZCA/IGFkZENsYXNzKGVsLCBjbGFzc05hbWUpIDogcmVtb3ZlQ2xhc3MoZWwsIGNsYXNzTmFtZSlgLlxuICovXG5mdW5jdGlvbiBtaWdyYXRlU2V0RWxlbWVudENsYXNzKG5vZGU6IFByb3BlcnR5QWNjZXNzQ2FsbEV4cHJlc3Npb24pOiB0cy5Ob2RlIHtcbiAgLy8gQ2xvbmUgc28gd2UgZG9uJ3QgbXV0YXRlIGJ5IGFjY2lkZW50LiBOb3RlIHRoYXQgd2UgYXNzdW1lIHRoYXRcbiAgLy8gdGhlIHVzZXIncyBjb2RlIGlzIHByb3ZpZGluZyBhbGwgdGhyZWUgcmVxdWlyZWQgYXJndW1lbnRzLlxuICBjb25zdCBvdXRwdXRNZXRob2RBcmdzID0gbm9kZS5hcmd1bWVudHMuc2xpY2UoKTtcbiAgY29uc3QgaXNBZGRBcmd1bWVudCA9IG91dHB1dE1ldGhvZEFyZ3MucG9wKCkhO1xuICBjb25zdCBjcmVhdGVSZW5kZXJlckNhbGwgPSAoaXNBZGQ6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBpbm5lckV4cHJlc3Npb24gPSBub2RlLmV4cHJlc3Npb24uZXhwcmVzc2lvbjtcbiAgICBjb25zdCB0b3BFeHByZXNzaW9uID1cbiAgICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MoaW5uZXJFeHByZXNzaW9uLCBpc0FkZCA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnKTtcbiAgICByZXR1cm4gdHMuY3JlYXRlQ2FsbCh0b3BFeHByZXNzaW9uLCBbXSwgbm9kZS5hcmd1bWVudHMuc2xpY2UoMCwgMikpO1xuICB9O1xuXG4gIC8vIElmIHRoZSBjYWxsIGhhcyB0aGUgYGlzQWRkYCBhcmd1bWVudCBhcyBhIGxpdGVyYWwgYm9vbGVhbiwgd2UgY2FuIG1hcCBpdCBkaXJlY3RseSB0b1xuICAvLyBgYWRkQ2xhc3NgIG9yIGByZW1vdmVDbGFzc2AuIE5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgdGhlIHR5cGUgY2hlY2tlciBoZXJlLCBiZWNhdXNlIGl0XG4gIC8vIHdvbid0IHRlbGwgdXMgd2hldGhlciB0aGUgdmFsdWUgcmVzb2x2ZXMgdG8gdHJ1ZSBvciBmYWxzZS5cbiAgaWYgKGlzQWRkQXJndW1lbnQua2luZCA9PT0gdHMuU3ludGF4S2luZC5UcnVlS2V5d29yZCB8fFxuICAgICAgaXNBZGRBcmd1bWVudC5raW5kID09PSB0cy5TeW50YXhLaW5kLkZhbHNlS2V5d29yZCkge1xuICAgIHJldHVybiBjcmVhdGVSZW5kZXJlckNhbGwoaXNBZGRBcmd1bWVudC5raW5kID09PSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkKTtcbiAgfVxuXG4gIC8vIE90aGVyd2lzZSBjcmVhdGUgYSB0ZXJuYXJ5IG9uIHRoZSB2YXJpYWJsZS5cbiAgcmV0dXJuIHRzLmNyZWF0ZUNvbmRpdGlvbmFsKGlzQWRkQXJndW1lbnQsIGNyZWF0ZVJlbmRlcmVyQ2FsbCh0cnVlKSwgY3JlYXRlUmVuZGVyZXJDYWxsKGZhbHNlKSk7XG59XG5cbi8qKlxuICogTWlncmF0ZXMgYSBjYWxsIHRvIGBzZXRFbGVtZW50U3R5bGVgIGNhbGwgZWl0aGVyIHRvIGEgY2FsbCB0b1xuICogYHNldFN0eWxlYCBvciBgcmVtb3ZlU3R5bGVgLiBvciB0byBhbiBleHByZXNzaW9uIGxpa2VcbiAqIGB2YWx1ZSA9PSBudWxsID8gcmVtb3ZlU3R5bGUoZWwsIGtleSkgOiBzZXRTdHlsZShlbCwga2V5LCB2YWx1ZSlgLlxuICovXG5mdW5jdGlvbiBtaWdyYXRlU2V0RWxlbWVudFN0eWxlKFxuICAgIG5vZGU6IFByb3BlcnR5QWNjZXNzQ2FsbEV4cHJlc3Npb24sIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcik6IHRzLk5vZGUge1xuICBjb25zdCBhcmdzID0gbm9kZS5hcmd1bWVudHM7XG4gIGNvbnN0IGFkZE1ldGhvZE5hbWUgPSAnc2V0U3R5bGUnO1xuICBjb25zdCByZW1vdmVNZXRob2ROYW1lID0gJ3JlbW92ZVN0eWxlJztcbiAgY29uc3QgbGFzdEFyZ1R5cGUgPSBhcmdzWzJdID9cbiAgICAgIHR5cGVDaGVja2VyLnR5cGVUb1N0cmluZyhcbiAgICAgICAgICB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihhcmdzWzJdKSwgbm9kZSwgdHMuVHlwZUZvcm1hdEZsYWdzLkFkZFVuZGVmaW5lZCkgOlxuICAgICAgbnVsbDtcblxuICAvLyBOb3RlIHRoYXQgZm9yIGEgbGl0ZXJhbCBudWxsLCBUUyBjb25zaWRlcnMgaXQgYSBgTnVsbEtleXdvcmRgLFxuICAvLyB3aGVyZWFzIGEgbGl0ZXJhbCBgdW5kZWZpbmVkYCBpcyBqdXN0IGFuIElkZW50aWZpZXIuXG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMiB8fCBsYXN0QXJnVHlwZSA9PT0gJ251bGwnIHx8IGxhc3RBcmdUeXBlID09PSAndW5kZWZpbmVkJykge1xuICAgIC8vIElmIHdlJ3ZlIGdvdCBhIGNhbGwgd2l0aCB0d28gYXJndW1lbnRzLCBvciBvbmUgd2l0aCB0aHJlZSBhcmd1bWVudHMgd2hlcmUgdGhlIGxhc3Qgb25lIGlzXG4gICAgLy8gYHVuZGVmaW5lZGAgb3IgYG51bGxgLCB3ZSBjYW4gc2FmZWx5IHN3aXRjaCB0byBhIGByZW1vdmVTdHlsZWAgY2FsbC5cbiAgICBjb25zdCBpbm5lckV4cHJlc3Npb24gPSBub2RlLmV4cHJlc3Npb24uZXhwcmVzc2lvbjtcbiAgICBjb25zdCB0b3BFeHByZXNzaW9uID0gdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MoaW5uZXJFeHByZXNzaW9uLCByZW1vdmVNZXRob2ROYW1lKTtcbiAgICByZXR1cm4gdHMuY3JlYXRlQ2FsbCh0b3BFeHByZXNzaW9uLCBbXSwgYXJncy5zbGljZSgwLCAyKSk7XG4gIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAvLyBXZSBuZWVkIHRoZSBjaGVja3MgZm9yIHN0cmluZyBsaXRlcmFscywgYmVjYXVzZSB0aGUgdHlwZSBvZiBzb21ldGhpbmdcbiAgICAvLyBsaWtlIGBcImJsdWVcImAgaXMgdGhlIGxpdGVyYWwgYGJsdWVgLCBub3QgYHN0cmluZ2AuXG4gICAgaWYgKGxhc3RBcmdUeXBlID09PSAnc3RyaW5nJyB8fCBsYXN0QXJnVHlwZSA9PT0gJ251bWJlcicgfHwgdHMuaXNTdHJpbmdMaXRlcmFsKGFyZ3NbMl0pIHx8XG4gICAgICAgIHRzLmlzTm9TdWJzdGl0dXRpb25UZW1wbGF0ZUxpdGVyYWwoYXJnc1syXSkgfHwgdHMuaXNOdW1lcmljTGl0ZXJhbChhcmdzWzJdKSkge1xuICAgICAgLy8gSWYgd2UndmUgZ290IHRocmVlIGFyZ3VtZW50cyBhbmQgdGhlIGxhc3Qgb25lIGlzIGEgc3RyaW5nIGxpdGVyYWwgb3IgYSBudW1iZXIsIHdlXG4gICAgICAvLyBjYW4gc2FmZWx5IHJlbmFtZSB0byBgc2V0U3R5bGVgLlxuICAgICAgcmV0dXJuIHJlbmFtZU1ldGhvZENhbGwobm9kZSwgYWRkTWV0aG9kTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZSBtaWdyYXRlIHRvIGEgdGVybmFyeSB0aGF0IGxvb2tzIGxpa2U6XG4gICAgICAvLyBgdmFsdWUgPT0gbnVsbCA/IHJlbW92ZVN0eWxlKGVsLCBrZXkpIDogc2V0U3R5bGUoZWwsIGtleSwgdmFsdWUpYFxuICAgICAgY29uc3QgY29uZGl0aW9uID0gdHMuY3JlYXRlQmluYXJ5KGFyZ3NbMl0sIHRzLlN5bnRheEtpbmQuRXF1YWxzRXF1YWxzVG9rZW4sIHRzLmNyZWF0ZU51bGwoKSk7XG4gICAgICBjb25zdCB3aGVuTnVsbENhbGwgPSByZW5hbWVNZXRob2RDYWxsKFxuICAgICAgICAgIHRzLmNyZWF0ZUNhbGwobm9kZS5leHByZXNzaW9uLCBbXSwgYXJncy5zbGljZSgwLCAyKSkgYXMgUHJvcGVydHlBY2Nlc3NDYWxsRXhwcmVzc2lvbixcbiAgICAgICAgICByZW1vdmVNZXRob2ROYW1lKTtcbiAgICAgIHJldHVybiB0cy5jcmVhdGVDb25kaXRpb25hbChjb25kaXRpb24sIHdoZW5OdWxsQ2FsbCwgcmVuYW1lTWV0aG9kQ2FsbChub2RlLCBhZGRNZXRob2ROYW1lKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogTWlncmF0ZXMgYSBjYWxsIHRvIGBpbnZva2VFbGVtZW50TWV0aG9kKHRhcmdldCwgbWV0aG9kLCBbYXJnMSwgYXJnMl0pYCBlaXRoZXIgdG9cbiAqIGB0YXJnZXQubWV0aG9kKGFyZzEsIGFyZzIpYCBvciBgKHRhcmdldCBhcyBhbnkpW21ldGhvZF0uYXBwbHkodGFyZ2V0LCBbYXJnMSwgYXJnMl0pYC5cbiAqL1xuZnVuY3Rpb24gbWlncmF0ZUludm9rZUVsZW1lbnRNZXRob2Qobm9kZTogdHMuQ2FsbEV4cHJlc3Npb24pOiB0cy5Ob2RlIHtcbiAgY29uc3QgW3RhcmdldCwgbmFtZSwgYXJnc10gPSBub2RlLmFyZ3VtZW50cztcbiAgY29uc3QgaXNOYW1lU3RhdGljID0gdHMuaXNTdHJpbmdMaXRlcmFsKG5hbWUpIHx8IHRzLmlzTm9TdWJzdGl0dXRpb25UZW1wbGF0ZUxpdGVyYWwobmFtZSk7XG4gIGNvbnN0IGlzQXJnc1N0YXRpYyA9ICFhcmdzIHx8IHRzLmlzQXJyYXlMaXRlcmFsRXhwcmVzc2lvbihhcmdzKTtcblxuICBpZiAoaXNOYW1lU3RhdGljICYmIGlzQXJnc1N0YXRpYykge1xuICAgIC8vIElmIHRoZSBuYW1lIGlzIGEgc3RhdGljIHN0cmluZyBhbmQgdGhlIGFyZ3VtZW50cyBhcmUgYW4gYXJyYXkgbGl0ZXJhbCxcbiAgICAvLyB3ZSBjYW4gc2FmZWx5IGNvbnZlcnQgdGhlIG5vZGUgaW50byBhIGNhbGwgZXhwcmVzc2lvbi5cbiAgICBjb25zdCBleHByZXNzaW9uID0gdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MoXG4gICAgICAgIHRhcmdldCwgKG5hbWUgYXMgdHMuU3RyaW5nTGl0ZXJhbCB8IHRzLk5vU3Vic3RpdHV0aW9uVGVtcGxhdGVMaXRlcmFsKS50ZXh0KTtcbiAgICBjb25zdCBjYWxsQXJndW1lbnRzID0gYXJncyA/IChhcmdzIGFzIHRzLkFycmF5TGl0ZXJhbEV4cHJlc3Npb24pLmVsZW1lbnRzIDogW107XG4gICAgcmV0dXJuIHRzLmNyZWF0ZUNhbGwoZXhwcmVzc2lvbiwgW10sIGNhbGxBcmd1bWVudHMpO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSBjcmVhdGUgYW4gZXhwcmVzc2lvbiBpbiB0aGUgZm9ybSBvZiBgKHRhcmdldCBhcyBhbnkpW25hbWVdLmFwcGx5KHRhcmdldCwgYXJncylgLlxuICAgIGNvbnN0IGFzRXhwcmVzc2lvbiA9IHRzLmNyZWF0ZVBhcmVuKFxuICAgICAgICB0cy5jcmVhdGVBc0V4cHJlc3Npb24odGFyZ2V0LCB0cy5jcmVhdGVLZXl3b3JkVHlwZU5vZGUodHMuU3ludGF4S2luZC5BbnlLZXl3b3JkKSkpO1xuICAgIGNvbnN0IGVsZW1lbnRBY2Nlc3MgPSB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKGFzRXhwcmVzc2lvbiwgbmFtZSk7XG4gICAgY29uc3QgYXBwbHlFeHByZXNzaW9uID0gdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3MoZWxlbWVudEFjY2VzcywgJ2FwcGx5Jyk7XG4gICAgcmV0dXJuIHRzLmNyZWF0ZUNhbGwoYXBwbHlFeHByZXNzaW9uLCBbXSwgYXJncyA/IFt0YXJnZXQsIGFyZ3NdIDogW3RhcmdldF0pO1xuICB9XG59XG5cbi8qKiBNaWdyYXRlcyBhIGNhbGwgdG8gYGNyZWF0ZVZpZXdSb290YCB0byB3aGF0ZXZlciBub2RlIHdhcyBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LiAqL1xuZnVuY3Rpb24gbWlncmF0ZUNyZWF0ZVZpZXdSb290KG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uKTogdHMuTm9kZSB7XG4gIHJldHVybiBub2RlLmFyZ3VtZW50c1swXTtcbn1cblxuLyoqIE1pZ3JhdGVzIGEgY2FsbCB0byBgbWlncmF0ZWAgYSBkaXJlY3QgY2FsbCB0byB0aGUgaGVscGVyLiAqL1xuZnVuY3Rpb24gbWlncmF0ZUFuaW1hdGVDYWxsKCkge1xuICByZXR1cm4gdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVJZGVudGlmaWVyKEhlbHBlckZ1bmN0aW9uLmFuaW1hdGUpLCBbXSwgW10pO1xufVxuXG4vKipcbiAqIFN3aXRjaGVzIG91dCBhIGNhbGwgdG8gdGhlIGBSZW5kZXJlcmAgdG8gYSBjYWxsIHRvIG9uZSBvZiBvdXIgaGVscGVyIGZ1bmN0aW9ucy5cbiAqIE1vc3Qgb2YgdGhlIGhlbHBlcnMgYWNjZXB0IGFuIGluc3RhbmNlIG9mIGBSZW5kZXJlcjJgIGFzIHRoZSBmaXJzdCBhcmd1bWVudCBhbmQgYWxsXG4gKiBzdWJzZXF1ZW50IGFyZ3VtZW50cyBkaWZmZXIuXG4gKiBAcGFyYW0gbm9kZSBOb2RlIG9mIHRoZSBvcmlnaW5hbCBtZXRob2QgY2FsbC5cbiAqIEBwYXJhbSBoZWxwZXIgTmFtZSBvZiB0aGUgaGVscGVyIHdpdGggd2hpY2ggdG8gcmVwbGFjZSB0aGUgb3JpZ2luYWwgY2FsbC5cbiAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGUgaGVscGVyIGFmdGVyIHRoZSByZW5kZXJlciBhcmd1bWVudC5cbiAqL1xuZnVuY3Rpb24gc3dpdGNoVG9IZWxwZXJDYWxsKFxuICAgIG5vZGU6IFByb3BlcnR5QWNjZXNzQ2FsbEV4cHJlc3Npb24sIGhlbHBlcjogSGVscGVyRnVuY3Rpb24sXG4gICAgYXJnczogdHMuRXhwcmVzc2lvbltdfHRzLk5vZGVBcnJheTx0cy5FeHByZXNzaW9uPik6IHRzLk5vZGUge1xuICByZXR1cm4gdHMuY3JlYXRlQ2FsbCh0cy5jcmVhdGVJZGVudGlmaWVyKGhlbHBlciksIFtdLCBbbm9kZS5leHByZXNzaW9uLmV4cHJlc3Npb24sIC4uLmFyZ3NdKTtcbn1cbiJdfQ==
@@ -1,69 +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 { getImportSpecifier } from '../../utils/typescript/imports';
10
- import { isReferenceToImport } from '../../utils/typescript/symbol';
11
- /**
12
- * Finds typed nodes (e.g. function parameters or class properties) that are referencing the old
13
- * `Renderer`, as well as calls to the `Renderer` methods.
14
- */
15
- export function findRendererReferences(sourceFile, typeChecker, rendererImportSpecifier) {
16
- const typedNodes = new Set();
17
- const methodCalls = new Set();
18
- const forwardRefs = new Set();
19
- const forwardRefSpecifier = getImportSpecifier(sourceFile, '@angular/core', 'forwardRef');
20
- ts.forEachChild(sourceFile, function visitNode(node) {
21
- if ((ts.isParameter(node) || ts.isPropertyDeclaration(node)) &&
22
- isReferenceToImport(typeChecker, node.name, rendererImportSpecifier)) {
23
- typedNodes.add(node);
24
- }
25
- else if (ts.isAsExpression(node) &&
26
- isReferenceToImport(typeChecker, node.type, rendererImportSpecifier)) {
27
- typedNodes.add(node);
28
- }
29
- else if (ts.isCallExpression(node)) {
30
- if (ts.isPropertyAccessExpression(node.expression) &&
31
- isReferenceToImport(typeChecker, node.expression.expression, rendererImportSpecifier)) {
32
- methodCalls.add(node);
33
- }
34
- else if (
35
- // If we're dealing with a forwardRef that's returning a Renderer.
36
- forwardRefSpecifier && ts.isIdentifier(node.expression) &&
37
- isReferenceToImport(typeChecker, node.expression, forwardRefSpecifier) &&
38
- node.arguments.length) {
39
- const rendererIdentifier = findRendererIdentifierInForwardRef(typeChecker, node, rendererImportSpecifier);
40
- if (rendererIdentifier) {
41
- forwardRefs.add(rendererIdentifier);
42
- }
43
- }
44
- }
45
- ts.forEachChild(node, visitNode);
46
- });
47
- return { typedNodes, methodCalls, forwardRefs };
48
- }
49
- /** Finds the identifier referring to the `Renderer` inside a `forwardRef` call expression. */
50
- function findRendererIdentifierInForwardRef(typeChecker, node, rendererImport) {
51
- const firstArg = node.arguments[0];
52
- if (ts.isArrowFunction(firstArg) && rendererImport) {
53
- // Check if the function is `forwardRef(() => Renderer)`.
54
- if (ts.isIdentifier(firstArg.body) &&
55
- isReferenceToImport(typeChecker, firstArg.body, rendererImport)) {
56
- return firstArg.body;
57
- }
58
- else if (ts.isBlock(firstArg.body) && ts.isReturnStatement(firstArg.body.statements[0])) {
59
- // Otherwise check if the expression is `forwardRef(() => { return Renderer })`.
60
- const returnStatement = firstArg.body.statements[0];
61
- if (returnStatement.expression && ts.isIdentifier(returnStatement.expression) &&
62
- isReferenceToImport(typeChecker, returnStatement.expression, rendererImport)) {
63
- return returnStatement.expression;
64
- }
65
- }
66
- }
67
- return null;
68
- }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JlbmRlcmVyLXRvLXJlbmRlcmVyMi91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRWxFOzs7R0FHRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDbEMsVUFBeUIsRUFBRSxXQUEyQixFQUN0RCx1QkFBMkM7SUFDN0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQWtFLENBQUM7SUFDN0YsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7SUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7SUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRTFGLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFNBQVMsU0FBUyxDQUFDLElBQWE7UUFDMUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hELG1CQUFtQixDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLEVBQUU7WUFDeEUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QjthQUFNLElBQ0gsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDdkIsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsRUFBRTtZQUN4RSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCO2FBQU0sSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxFQUFFLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDOUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLHVCQUF1QixDQUFDLEVBQUU7Z0JBQ3pGLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkI7aUJBQU07WUFDSCxrRUFBa0U7WUFDbEUsbUJBQW1CLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUN2RCxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3pCLE1BQU0sa0JBQWtCLEdBQ3BCLGtDQUFrQyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztnQkFDbkYsSUFBSSxrQkFBa0IsRUFBRTtvQkFDdEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2lCQUNyQzthQUNGO1NBQ0Y7UUFFRCxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCw4RkFBOEY7QUFDOUYsU0FBUyxrQ0FBa0MsQ0FDdkMsV0FBMkIsRUFBRSxJQUF1QixFQUNwRCxjQUF1QztJQUN6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRW5DLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxjQUFjLEVBQUU7UUFDbEQseURBQXlEO1FBQ3pELElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzlCLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxFQUFFO1lBQ25FLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztTQUN0QjthQUFNLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDekYsZ0ZBQWdGO1lBQ2hGLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBdUIsQ0FBQztZQUUxRSxJQUFJLGVBQWUsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO2dCQUN6RSxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsRUFBRTtnQkFDaEYsT0FBTyxlQUFlLENBQUMsVUFBVSxDQUFDO2FBQ25DO1NBQ0Y7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtnZXRJbXBvcnRTcGVjaWZpZXJ9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvaW1wb3J0cyc7XG5pbXBvcnQge2lzUmVmZXJlbmNlVG9JbXBvcnR9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvc3ltYm9sJztcblxuLyoqXG4gKiBGaW5kcyB0eXBlZCBub2RlcyAoZS5nLiBmdW5jdGlvbiBwYXJhbWV0ZXJzIG9yIGNsYXNzIHByb3BlcnRpZXMpIHRoYXQgYXJlIHJlZmVyZW5jaW5nIHRoZSBvbGRcbiAqIGBSZW5kZXJlcmAsIGFzIHdlbGwgYXMgY2FsbHMgdG8gdGhlIGBSZW5kZXJlcmAgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRSZW5kZXJlclJlZmVyZW5jZXMoXG4gICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICAgIHJlbmRlcmVySW1wb3J0U3BlY2lmaWVyOiB0cy5JbXBvcnRTcGVjaWZpZXIpIHtcbiAgY29uc3QgdHlwZWROb2RlcyA9IG5ldyBTZXQ8dHMuUGFyYW1ldGVyRGVjbGFyYXRpb258dHMuUHJvcGVydHlEZWNsYXJhdGlvbnx0cy5Bc0V4cHJlc3Npb24+KCk7XG4gIGNvbnN0IG1ldGhvZENhbGxzID0gbmV3IFNldDx0cy5DYWxsRXhwcmVzc2lvbj4oKTtcbiAgY29uc3QgZm9yd2FyZFJlZnMgPSBuZXcgU2V0PHRzLklkZW50aWZpZXI+KCk7XG4gIGNvbnN0IGZvcndhcmRSZWZTcGVjaWZpZXIgPSBnZXRJbXBvcnRTcGVjaWZpZXIoc291cmNlRmlsZSwgJ0Bhbmd1bGFyL2NvcmUnLCAnZm9yd2FyZFJlZicpO1xuXG4gIHRzLmZvckVhY2hDaGlsZChzb3VyY2VGaWxlLCBmdW5jdGlvbiB2aXNpdE5vZGUobm9kZTogdHMuTm9kZSkge1xuICAgIGlmICgodHMuaXNQYXJhbWV0ZXIobm9kZSkgfHwgdHMuaXNQcm9wZXJ0eURlY2xhcmF0aW9uKG5vZGUpKSAmJlxuICAgICAgICBpc1JlZmVyZW5jZVRvSW1wb3J0KHR5cGVDaGVja2VyLCBub2RlLm5hbWUsIHJlbmRlcmVySW1wb3J0U3BlY2lmaWVyKSkge1xuICAgICAgdHlwZWROb2Rlcy5hZGQobm9kZSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHMuaXNBc0V4cHJlc3Npb24obm9kZSkgJiZcbiAgICAgICAgaXNSZWZlcmVuY2VUb0ltcG9ydCh0eXBlQ2hlY2tlciwgbm9kZS50eXBlLCByZW5kZXJlckltcG9ydFNwZWNpZmllcikpIHtcbiAgICAgIHR5cGVkTm9kZXMuYWRkKG5vZGUpO1xuICAgIH0gZWxzZSBpZiAodHMuaXNDYWxsRXhwcmVzc2lvbihub2RlKSkge1xuICAgICAgaWYgKHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbikgJiZcbiAgICAgICAgICBpc1JlZmVyZW5jZVRvSW1wb3J0KHR5cGVDaGVja2VyLCBub2RlLmV4cHJlc3Npb24uZXhwcmVzc2lvbiwgcmVuZGVyZXJJbXBvcnRTcGVjaWZpZXIpKSB7XG4gICAgICAgIG1ldGhvZENhbGxzLmFkZChub2RlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgLy8gSWYgd2UncmUgZGVhbGluZyB3aXRoIGEgZm9yd2FyZFJlZiB0aGF0J3MgcmV0dXJuaW5nIGEgUmVuZGVyZXIuXG4gICAgICAgICAgZm9yd2FyZFJlZlNwZWNpZmllciAmJiB0cy5pc0lkZW50aWZpZXIobm9kZS5leHByZXNzaW9uKSAmJlxuICAgICAgICAgIGlzUmVmZXJlbmNlVG9JbXBvcnQodHlwZUNoZWNrZXIsIG5vZGUuZXhwcmVzc2lvbiwgZm9yd2FyZFJlZlNwZWNpZmllcikgJiZcbiAgICAgICAgICBub2RlLmFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyZXJJZGVudGlmaWVyID1cbiAgICAgICAgICAgIGZpbmRSZW5kZXJlcklkZW50aWZpZXJJbkZvcndhcmRSZWYodHlwZUNoZWNrZXIsIG5vZGUsIHJlbmRlcmVySW1wb3J0U3BlY2lmaWVyKTtcbiAgICAgICAgaWYgKHJlbmRlcmVySWRlbnRpZmllcikge1xuICAgICAgICAgIGZvcndhcmRSZWZzLmFkZChyZW5kZXJlcklkZW50aWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSk7XG4gIH0pO1xuXG4gIHJldHVybiB7dHlwZWROb2RlcywgbWV0aG9kQ2FsbHMsIGZvcndhcmRSZWZzfTtcbn1cblxuLyoqIEZpbmRzIHRoZSBpZGVudGlmaWVyIHJlZmVycmluZyB0byB0aGUgYFJlbmRlcmVyYCBpbnNpZGUgYSBgZm9yd2FyZFJlZmAgY2FsbCBleHByZXNzaW9uLiAqL1xuZnVuY3Rpb24gZmluZFJlbmRlcmVySWRlbnRpZmllckluRm9yd2FyZFJlZihcbiAgICB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIG5vZGU6IHRzLkNhbGxFeHByZXNzaW9uLFxuICAgIHJlbmRlcmVySW1wb3J0OiB0cy5JbXBvcnRTcGVjaWZpZXJ8bnVsbCk6IHRzLklkZW50aWZpZXJ8bnVsbCB7XG4gIGNvbnN0IGZpcnN0QXJnID0gbm9kZS5hcmd1bWVudHNbMF07XG5cbiAgaWYgKHRzLmlzQXJyb3dGdW5jdGlvbihmaXJzdEFyZykgJiYgcmVuZGVyZXJJbXBvcnQpIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgZnVuY3Rpb24gaXMgYGZvcndhcmRSZWYoKCkgPT4gUmVuZGVyZXIpYC5cbiAgICBpZiAodHMuaXNJZGVudGlmaWVyKGZpcnN0QXJnLmJvZHkpICYmXG4gICAgICAgIGlzUmVmZXJlbmNlVG9JbXBvcnQodHlwZUNoZWNrZXIsIGZpcnN0QXJnLmJvZHksIHJlbmRlcmVySW1wb3J0KSkge1xuICAgICAgcmV0dXJuIGZpcnN0QXJnLmJvZHk7XG4gICAgfSBlbHNlIGlmICh0cy5pc0Jsb2NrKGZpcnN0QXJnLmJvZHkpICYmIHRzLmlzUmV0dXJuU3RhdGVtZW50KGZpcnN0QXJnLmJvZHkuc3RhdGVtZW50c1swXSkpIHtcbiAgICAgIC8vIE90aGVyd2lzZSBjaGVjayBpZiB0aGUgZXhwcmVzc2lvbiBpcyBgZm9yd2FyZFJlZigoKSA9PiB7IHJldHVybiBSZW5kZXJlciB9KWAuXG4gICAgICBjb25zdCByZXR1cm5TdGF0ZW1lbnQgPSBmaXJzdEFyZy5ib2R5LnN0YXRlbWVudHNbMF0gYXMgdHMuUmV0dXJuU3RhdGVtZW50O1xuXG4gICAgICBpZiAocmV0dXJuU3RhdGVtZW50LmV4cHJlc3Npb24gJiYgdHMuaXNJZGVudGlmaWVyKHJldHVyblN0YXRlbWVudC5leHByZXNzaW9uKSAmJlxuICAgICAgICAgIGlzUmVmZXJlbmNlVG9JbXBvcnQodHlwZUNoZWNrZXIsIHJldHVyblN0YXRlbWVudC5leHByZXNzaW9uLCByZW5kZXJlckltcG9ydCkpIHtcbiAgICAgICAgcmV0dXJuIHJldHVyblN0YXRlbWVudC5leHByZXNzaW9uO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIl19
@@ -1,50 +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 { relative } from 'path';
10
- import * as ts from 'typescript';
11
- import { getProjectTsConfigPaths } from '../../utils/project_tsconfig_paths';
12
- import { canMigrateFile, createMigrationProgram } from '../../utils/typescript/compiler_host';
13
- import { findLiteralsToMigrate, migrateLiteral } from './util';
14
- /**
15
- * Migration that switches `NavigationExtras.preserveQueryParams` to set the coresponding value via
16
- * `NavigationExtras`'s `queryParamsHandling` attribute.
17
- */
18
- export default function () {
19
- return (tree) => {
20
- const { buildPaths, testPaths } = getProjectTsConfigPaths(tree);
21
- const basePath = process.cwd();
22
- const allPaths = [...buildPaths, ...testPaths];
23
- if (!allPaths.length) {
24
- throw new SchematicsException('Could not find any tsconfig file. Cannot migrate ' +
25
- 'NavigationExtras.preserveQueryParams usages.');
26
- }
27
- for (const tsconfigPath of allPaths) {
28
- runPreserveQueryParamsMigration(tree, tsconfigPath, basePath);
29
- }
30
- };
31
- }
32
- function runPreserveQueryParamsMigration(tree, tsconfigPath, basePath) {
33
- const { program } = createMigrationProgram(tree, tsconfigPath, basePath);
34
- const typeChecker = program.getTypeChecker();
35
- const printer = ts.createPrinter();
36
- const sourceFiles = program.getSourceFiles().filter(sourceFile => canMigrateFile(basePath, sourceFile, program));
37
- sourceFiles.forEach(sourceFile => {
38
- const literalsToMigrate = findLiteralsToMigrate(sourceFile, typeChecker);
39
- const update = tree.beginUpdate(relative(basePath, sourceFile.fileName));
40
- literalsToMigrate.forEach((instances, methodName) => instances.forEach(instance => {
41
- const migratedNode = migrateLiteral(methodName, instance);
42
- if (migratedNode !== instance) {
43
- update.remove(instance.getStart(), instance.getWidth());
44
- update.insertRight(instance.getStart(), printer.printNode(ts.EmitHint.Unspecified, migratedNode, sourceFile));
45
- }
46
- }));
47
- tree.commitUpdate(update);
48
- });
49
- }
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy9yb3V0ZXItcHJlc2VydmUtcXVlcnktcGFyYW1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBTyxtQkFBbUIsRUFBTyxNQUFNLDRCQUE0QixDQUFDO0FBQzNFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakMsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFDLGNBQWMsRUFBRSxzQkFBc0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQzVGLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxjQUFjLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFHN0Q7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE9BQU87SUFDWixPQUFPLENBQUMsSUFBVSxFQUFFLEVBQUU7UUFDcEIsTUFBTSxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBRS9DLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxtQkFBbUIsQ0FDekIsbURBQW1EO2dCQUNuRCw4Q0FBOEMsQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsS0FBSyxNQUFNLFlBQVksSUFBSSxRQUFRLEVBQUU7WUFDbkMsK0JBQStCLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLCtCQUErQixDQUFDLElBQVUsRUFBRSxZQUFvQixFQUFFLFFBQWdCO0lBQ3pGLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbkMsTUFBTSxXQUFXLEdBQ2IsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFFakcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtRQUMvQixNQUFNLGlCQUFpQixHQUFHLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFekUsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoRixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRTFELElBQUksWUFBWSxLQUFLLFFBQVEsRUFBRTtnQkFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ3hELE1BQU0sQ0FBQyxXQUFXLENBQ2QsUUFBUSxDQUFDLFFBQVEsRUFBRSxFQUNuQixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO2FBQzNFO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7UnVsZSwgU2NoZW1hdGljc0V4Y2VwdGlvbiwgVHJlZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuaW1wb3J0IHtyZWxhdGl2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtnZXRQcm9qZWN0VHNDb25maWdQYXRoc30gZnJvbSAnLi4vLi4vdXRpbHMvcHJvamVjdF90c2NvbmZpZ19wYXRocyc7XG5pbXBvcnQge2Nhbk1pZ3JhdGVGaWxlLCBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtfSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L2NvbXBpbGVyX2hvc3QnO1xuaW1wb3J0IHtmaW5kTGl0ZXJhbHNUb01pZ3JhdGUsIG1pZ3JhdGVMaXRlcmFsfSBmcm9tICcuL3V0aWwnO1xuXG5cbi8qKlxuICogTWlncmF0aW9uIHRoYXQgc3dpdGNoZXMgYE5hdmlnYXRpb25FeHRyYXMucHJlc2VydmVRdWVyeVBhcmFtc2AgdG8gc2V0IHRoZSBjb3Jlc3BvbmRpbmcgdmFsdWUgdmlhXG4gKiBgTmF2aWdhdGlvbkV4dHJhc2AncyBgcXVlcnlQYXJhbXNIYW5kbGluZ2AgYXR0cmlidXRlLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpOiBSdWxlIHtcbiAgcmV0dXJuICh0cmVlOiBUcmVlKSA9PiB7XG4gICAgY29uc3Qge2J1aWxkUGF0aHMsIHRlc3RQYXRoc30gPSBnZXRQcm9qZWN0VHNDb25maWdQYXRocyh0cmVlKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgYWxsUGF0aHMgPSBbLi4uYnVpbGRQYXRocywgLi4udGVzdFBhdGhzXTtcblxuICAgIGlmICghYWxsUGF0aHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYW55IHRzY29uZmlnIGZpbGUuIENhbm5vdCBtaWdyYXRlICcgK1xuICAgICAgICAgICdOYXZpZ2F0aW9uRXh0cmFzLnByZXNlcnZlUXVlcnlQYXJhbXMgdXNhZ2VzLicpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdHNjb25maWdQYXRoIG9mIGFsbFBhdGhzKSB7XG4gICAgICBydW5QcmVzZXJ2ZVF1ZXJ5UGFyYW1zTWlncmF0aW9uKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcnVuUHJlc2VydmVRdWVyeVBhcmFtc01pZ3JhdGlvbih0cmVlOiBUcmVlLCB0c2NvbmZpZ1BhdGg6IHN0cmluZywgYmFzZVBhdGg6IHN0cmluZykge1xuICBjb25zdCB7cHJvZ3JhbX0gPSBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICBjb25zdCB0eXBlQ2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoKTtcbiAgY29uc3Qgc291cmNlRmlsZXMgPVxuICAgICAgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpLmZpbHRlcihzb3VyY2VGaWxlID0+IGNhbk1pZ3JhdGVGaWxlKGJhc2VQYXRoLCBzb3VyY2VGaWxlLCBwcm9ncmFtKSk7XG5cbiAgc291cmNlRmlsZXMuZm9yRWFjaChzb3VyY2VGaWxlID0+IHtcbiAgICBjb25zdCBsaXRlcmFsc1RvTWlncmF0ZSA9IGZpbmRMaXRlcmFsc1RvTWlncmF0ZShzb3VyY2VGaWxlLCB0eXBlQ2hlY2tlcik7XG4gICAgY29uc3QgdXBkYXRlID0gdHJlZS5iZWdpblVwZGF0ZShyZWxhdGl2ZShiYXNlUGF0aCwgc291cmNlRmlsZS5maWxlTmFtZSkpO1xuXG4gICAgbGl0ZXJhbHNUb01pZ3JhdGUuZm9yRWFjaCgoaW5zdGFuY2VzLCBtZXRob2ROYW1lKSA9PiBpbnN0YW5jZXMuZm9yRWFjaChpbnN0YW5jZSA9PiB7XG4gICAgICBjb25zdCBtaWdyYXRlZE5vZGUgPSBtaWdyYXRlTGl0ZXJhbChtZXRob2ROYW1lLCBpbnN0YW5jZSk7XG5cbiAgICAgIGlmIChtaWdyYXRlZE5vZGUgIT09IGluc3RhbmNlKSB7XG4gICAgICAgIHVwZGF0ZS5yZW1vdmUoaW5zdGFuY2UuZ2V0U3RhcnQoKSwgaW5zdGFuY2UuZ2V0V2lkdGgoKSk7XG4gICAgICAgIHVwZGF0ZS5pbnNlcnRSaWdodChcbiAgICAgICAgICAgIGluc3RhbmNlLmdldFN0YXJ0KCksXG4gICAgICAgICAgICBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgbWlncmF0ZWROb2RlLCBzb3VyY2VGaWxlKSk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgdHJlZS5jb21taXRVcGRhdGUodXBkYXRlKTtcbiAgfSk7XG59XG4iXX0=
@@ -1,88 +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 { getImportSpecifier } from '../../utils/typescript/imports';
10
- import { isReferenceToImport } from '../../utils/typescript/symbol';
11
- /**
12
- * Configures the methods that the migration should be looking for
13
- * and the properties from `NavigationExtras` that should be preserved.
14
- */
15
- const methodConfig = new Set(['navigate', 'createUrlTree']);
16
- const preserveQueryParamsKey = 'preserveQueryParams';
17
- export function migrateLiteral(methodName, node) {
18
- var _a;
19
- const isMigratableMethod = methodConfig.has(methodName);
20
- if (!isMigratableMethod) {
21
- throw Error(`Attempting to migrate unconfigured method called ${methodName}.`);
22
- }
23
- const propertiesToKeep = [];
24
- let propertyToMigrate = undefined;
25
- for (const property of node.properties) {
26
- // Only look for regular and shorthand property assignments since resolving things
27
- // like spread operators becomes too complicated for this migration.
28
- if ((ts.isPropertyAssignment(property) || ts.isShorthandPropertyAssignment(property)) &&
29
- (ts.isStringLiteralLike(property.name) || ts.isNumericLiteral(property.name) ||
30
- ts.isIdentifier(property.name)) &&
31
- (property.name.text === preserveQueryParamsKey)) {
32
- propertyToMigrate = property;
33
- continue;
34
- }
35
- propertiesToKeep.push(property);
36
- }
37
- // Don't modify the node if there's nothing to migrate.
38
- if (propertyToMigrate === undefined) {
39
- return node;
40
- }
41
- if ((ts.isShorthandPropertyAssignment(propertyToMigrate) &&
42
- ((_a = propertyToMigrate.objectAssignmentInitializer) === null || _a === void 0 ? void 0 : _a.kind) === ts.SyntaxKind.TrueKeyword) ||
43
- (ts.isPropertyAssignment(propertyToMigrate) &&
44
- propertyToMigrate.initializer.kind === ts.SyntaxKind.TrueKeyword)) {
45
- return ts.updateObjectLiteral(node, propertiesToKeep.concat(ts.createPropertyAssignment('queryParamsHandling', ts.createIdentifier(`'preserve'`))));
46
- }
47
- return ts.updateObjectLiteral(node, propertiesToKeep);
48
- }
49
- export function findLiteralsToMigrate(sourceFile, typeChecker) {
50
- const results = new Map(Array.from(methodConfig.keys(), key => [key, new Set()]));
51
- const routerImport = getImportSpecifier(sourceFile, '@angular/router', 'Router');
52
- const seenLiterals = new Map();
53
- if (routerImport) {
54
- sourceFile.forEachChild(function visitNode(node) {
55
- var _a;
56
- // Look for calls that look like `foo.<method to migrate>` with more than one parameter.
57
- if (ts.isCallExpression(node) && node.arguments.length > 1 &&
58
- ts.isPropertyAccessExpression(node.expression) && ts.isIdentifier(node.expression.name) &&
59
- methodConfig.has(node.expression.name.text)) {
60
- // Check whether the type of the object on which the
61
- // function is called refers to the Router import.
62
- if (isReferenceToImport(typeChecker, node.expression.expression, routerImport)) {
63
- const methodName = node.expression.name.text;
64
- const parameterDeclaration = (_a = typeChecker.getTypeAtLocation(node.arguments[1]).getSymbol()) === null || _a === void 0 ? void 0 : _a.valueDeclaration;
65
- // Find the source of the object literal.
66
- if (parameterDeclaration && ts.isObjectLiteralExpression(parameterDeclaration)) {
67
- if (!seenLiterals.has(parameterDeclaration)) {
68
- results.get(methodName).add(parameterDeclaration);
69
- seenLiterals.set(parameterDeclaration, methodName);
70
- // If the same literal has been passed into multiple different methods, we can't
71
- // migrate it, because the supported properties are different. When we detect such
72
- // a case, we drop it from the results so that it gets ignored. If it's used multiple
73
- // times for the same method, it can still be migrated.
74
- }
75
- else if (seenLiterals.get(parameterDeclaration) !== methodName) {
76
- results.forEach(literals => literals.delete(parameterDeclaration));
77
- }
78
- }
79
- }
80
- }
81
- else {
82
- node.forEachChild(visitNode);
83
- }
84
- });
85
- }
86
- return results;
87
- }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JvdXRlci1wcmVzZXJ2ZS1xdWVyeS1wYXJhbXMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRTs7O0dBR0c7QUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBRXBFLE1BQU0sc0JBQXNCLEdBQUcscUJBQXFCLENBQUM7QUFFckQsTUFBTSxVQUFVLGNBQWMsQ0FDMUIsVUFBa0IsRUFBRSxJQUFnQzs7SUFDdEQsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhELElBQUksQ0FBQyxrQkFBa0IsRUFBRTtRQUN2QixNQUFNLEtBQUssQ0FBQyxvREFBb0QsVUFBVSxHQUFHLENBQUMsQ0FBQztLQUNoRjtJQUdELE1BQU0sZ0JBQWdCLEdBQWtDLEVBQUUsQ0FBQztJQUMzRCxJQUFJLGlCQUFpQixHQUFtRSxTQUFTLENBQUM7SUFFbEcsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQ3RDLGtGQUFrRjtRQUNsRixvRUFBb0U7UUFDcEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsNkJBQTZCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakYsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUks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QkFBb0IsQ0FBQyxFQUFFO3dCQUM5RSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFOzRCQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBRSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDOzRCQUNuRCxZQUFZLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFDOzRCQUNuRCxnRkFBZ0Y7NEJBQ2hGLGtGQUFrRjs0QkFDbEYscUZBQXFGOzRCQUNyRix1REFBdUQ7eUJBQ3hEOzZCQUFNLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLFVBQVUsRUFBRTs0QkFDaEUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO3lCQUNwRTtxQkFDRjtpQkFDRjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDOUI7UUFDSCxDQUFDLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtnZXRJbXBvcnRTcGVjaWZpZXJ9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvaW1wb3J0cyc7XG5pbXBvcnQge2lzUmVmZXJlbmNlVG9JbXBvcnR9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvc3ltYm9sJztcblxuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBtZXRob2RzIHRoYXQgdGhlIG1pZ3JhdGlvbiBzaG91bGQgYmUgbG9va2luZyBmb3JcbiAqIGFuZCB0aGUgcHJvcGVydGllcyBmcm9tIGBOYXZpZ2F0aW9uRXh0cmFzYCB0aGF0IHNob3VsZCBiZSBwcmVzZXJ2ZWQuXG4gKi9cbmNvbnN0IG1ldGhvZENvbmZpZyA9IG5ldyBTZXQ8c3RyaW5nPihbJ25hdmlnYXRlJywgJ2NyZWF0ZVVybFRyZWUnXSk7XG5cbmNvbnN0IHByZXNlcnZlUXVlcnlQYXJhbXNLZXkgPSAncHJlc2VydmVRdWVyeVBhcmFtcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRlTGl0ZXJhbChcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsIG5vZGU6IHRzLk9iamVjdExpdGVyYWxFeHByZXNzaW9uKTogdHMuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24ge1xuICBjb25zdCBpc01pZ3JhdGFibGVNZXRob2QgPSBtZXRob2RDb25maWcuaGFzKG1ldGhvZE5hbWUpO1xuXG4gIGlmICghaXNNaWdyYXRhYmxlTWV0aG9kKSB7XG4gICAgdGhyb3cgRXJyb3IoYEF0dGVtcHRpbmcgdG8gbWlncmF0ZSB1bmNvbmZpZ3VyZWQgbWV0aG9kIGNhbGxlZCAke21ldGhvZE5hbWV9LmApO1xuICB9XG5cblxuICBjb25zdCBwcm9wZXJ0aWVzVG9LZWVwOiB0cy5PYmplY3RMaXRlcmFsRWxlbWVudExpa2VbXSA9IFtdO1xuICBsZXQgcHJvcGVydHlUb01pZ3JhdGU6IHRzLlByb3BlcnR5QXNzaWdubWVudHx0cy5TaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnR8dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3QgcHJvcGVydHkgb2Ygbm9kZS5wcm9wZXJ0aWVzKSB7XG4gICAgLy8gT25seSBsb29rIGZvciByZWd1bGFyIGFuZCBzaG9ydGhhbmQgcHJvcGVydHkgYXNzaWdubWVudHMgc2luY2UgcmVzb2x2aW5nIHRoaW5nc1xuICAgIC8vIGxpa2Ugc3ByZWFkIG9wZXJhdG9ycyBiZWNvbWVzIHRvbyBjb21wbGljYXRlZCBmb3IgdGhpcyBtaWdyYXRpb24uXG4gICAgaWYgKCh0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wZXJ0eSkgfHwgdHMuaXNTaG9ydGhhbmRQcm9wZXJ0eUFzc2lnbm1lbnQocHJvcGVydHkpKSAmJlxuICAgICAgICAodHMuaXNTdHJpbmdMaXRlcmFsTGlrZShwcm9wZXJ0eS5uYW1lKSB8fCB0cy5pc051bWVyaWNMaXRlcmFsKHByb3BlcnR5Lm5hbWUpIHx8XG4gICAgICAgICB0cy5pc0lkZW50aWZpZXIocHJvcGVydHkubmFtZSkpICYmXG4gICAgICAgIChwcm9wZXJ0eS5uYW1lLnRleHQgPT09IHByZXNlcnZlUXVlcnlQYXJhbXNLZXkpKSB7XG4gICAgICBwcm9wZXJ0eVRvTWlncmF0ZSA9IHByb3BlcnR5O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHByb3BlcnRpZXNUb0tlZXAucHVzaChwcm9wZXJ0eSk7XG4gIH1cblxuICAvLyBEb24ndCBtb2RpZnkgdGhlIG5vZGUgaWYgdGhlcmUncyBub3RoaW5nIHRvIG1pZ3JhdGUuXG4gIGlmIChwcm9wZXJ0eVRvTWlncmF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBpZiAoKHRzLmlzU2hvcnRoYW5kUHJvcGVydHlBc3NpZ25tZW50KHByb3BlcnR5VG9NaWdyYXRlKSAmJlxuICAgICAgIHByb3BlcnR5VG9NaWdyYXRlLm9iamVjdEFzc2lnbm1lbnRJbml0aWFsaXplcj8ua2luZCA9PT0gdHMuU3ludGF4S2luZC5UcnVlS2V5d29yZCkgfHxcbiAgICAgICh0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wZXJ0eVRvTWlncmF0ZSkgJiZcbiAgICAgICBwcm9wZXJ0eVRvTWlncmF0ZS5pbml0aWFsaXplci5raW5kID09PSB0cy5TeW50YXhLaW5kLlRydWVLZXl3b3JkKSkge1xuICAgIHJldHVybiB0cy51cGRhdGVPYmplY3RMaXRlcmFsKFxuICAgICAgICBub2RlLFxuICAgICAgICBwcm9wZXJ0aWVzVG9LZWVwLmNvbmNhdChcbiAgICAgICAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudCgncXVlcnlQYXJhbXNIYW5kbGluZycsIHRzLmNyZWF0ZUlkZW50aWZpZXIoYCdwcmVzZXJ2ZSdgKSkpKTtcbiAgfVxuXG4gIHJldHVybiB0cy51cGRhdGVPYmplY3RMaXRlcmFsKG5vZGUsIHByb3BlcnRpZXNUb0tlZXApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZExpdGVyYWxzVG9NaWdyYXRlKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcikge1xuICBjb25zdCByZXN1bHRzID0gbmV3IE1hcDxzdHJpbmcsIFNldDx0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbj4+KFxuICAgICAgQXJyYXkuZnJvbShtZXRob2RDb25maWcua2V5cygpLCBrZXkgPT4gW2tleSwgbmV3IFNldCgpXSkpO1xuICBjb25zdCByb3V0ZXJJbXBvcnQgPSBnZXRJbXBvcnRTcGVjaWZpZXIoc291cmNlRmlsZSwgJ0Bhbmd1bGFyL3JvdXRlcicsICdSb3V0ZXInKTtcbiAgY29uc3Qgc2VlbkxpdGVyYWxzID0gbmV3IE1hcDx0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbiwgc3RyaW5nPigpO1xuXG4gIGlmIChyb3V0ZXJJbXBvcnQpIHtcbiAgICBzb3VyY2VGaWxlLmZvckVhY2hDaGlsZChmdW5jdGlvbiB2aXNpdE5vZGUobm9kZTogdHMuTm9kZSkge1xuICAgICAgLy8gTG9vayBmb3IgY2FsbHMgdGhhdCBsb29rIGxpa2UgYGZvby48bWV0aG9kIHRvIG1pZ3JhdGU+YCB3aXRoIG1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyLlxuICAgICAgaWYgKHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkgJiYgbm9kZS5hcmd1bWVudHMubGVuZ3RoID4gMSAmJlxuICAgICAgICAgIHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbikgJiYgdHMuaXNJZGVudGlmaWVyKG5vZGUuZXhwcmVzc2lvbi5uYW1lKSAmJlxuICAgICAgICAgIG1ldGhvZENvbmZpZy5oYXMobm9kZS5leHByZXNzaW9uLm5hbWUudGV4dCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZVxuICAgICAgICAvLyBmdW5jdGlvbiBpcyBjYWxsZWQgcmVmZXJzIHRvIHRoZSBSb3V0ZXIgaW1wb3J0LlxuICAgICAgICBpZiAoaXNSZWZlcmVuY2VUb0ltcG9ydCh0eXBlQ2hlY2tlciwgbm9kZS5leHByZXNzaW9uLmV4cHJlc3Npb24sIHJvdXRlckltcG9ydCkpIHtcbiAgICAgICAgICBjb25zdCBtZXRob2ROYW1lID0gbm9kZS5leHByZXNzaW9uLm5hbWUudGV4dDtcbiAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJEZWNsYXJhdGlvbiA9XG4gICAgICAgICAgICAgIHR5cGVDaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKG5vZGUuYXJndW1lbnRzWzFdKS5nZXRTeW1ib2woKT8udmFsdWVEZWNsYXJhdGlvbjtcblxuICAgICAgICAgIC8vIEZpbmQgdGhlIHNvdXJjZSBvZiB0aGUgb2JqZWN0IGxpdGVyYWwuXG4gICAgICAgICAgaWYgKHBhcmFtZXRlckRlY2xhcmF0aW9uICYmIHRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24ocGFyYW1ldGVyRGVjbGFyYXRpb24pKSB7XG4gICAgICAgICAgICBpZiAoIXNlZW5MaXRlcmFscy5oYXMocGFyYW1ldGVyRGVjbGFyYXRpb24pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdHMuZ2V0KG1ldGhvZE5hbWUpIS5hZGQocGFyYW1ldGVyRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICBzZWVuTGl0ZXJhbHMuc2V0KHBhcmFtZXRlckRlY2xhcmF0aW9uLCBtZXRob2ROYW1lKTtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIHNhbWUgbGl0ZXJhbCBoYXMgYmVlbiBwYXNzZWQgaW50byBtdWx0aXBsZSBkaWZmZXJlbnQgbWV0aG9kcywgd2UgY2FuJ3RcbiAgICAgICAgICAgICAgLy8gbWlncmF0ZSBpdCwgYmVjYXVzZSB0aGUgc3VwcG9ydGVkIHByb3BlcnRpZXMgYXJlIGRpZmZlcmVudC4gV2hlbiB3ZSBkZXRlY3Qgc3VjaFxuICAgICAgICAgICAgICAvLyBhIGNhc2UsIHdlIGRyb3AgaXQgZnJvbSB0aGUgcmVzdWx0cyBzbyB0aGF0IGl0IGdldHMgaWdub3JlZC4gSWYgaXQncyB1c2VkIG11bHRpcGxlXG4gICAgICAgICAgICAgIC8vIHRpbWVzIGZvciB0aGUgc2FtZSBtZXRob2QsIGl0IGNhbiBzdGlsbCBiZSBtaWdyYXRlZC5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2VlbkxpdGVyYWxzLmdldChwYXJhbWV0ZXJEZWNsYXJhdGlvbikgIT09IG1ldGhvZE5hbWUpIHtcbiAgICAgICAgICAgICAgcmVzdWx0cy5mb3JFYWNoKGxpdGVyYWxzID0+IGxpdGVyYWxzLmRlbGV0ZShwYXJhbWV0ZXJEZWNsYXJhdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5mb3JFYWNoQ2hpbGQodmlzaXROb2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRzO1xufVxuIl19
@@ -1,70 +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 { getAngularDecorators } from '../../../utils/ng_decorators';
10
- import { getPropertyNameText, hasPropertyNameText } from '../../../utils/typescript/property_name';
11
- /** Analyzes the given class and resolves the name of all inputs which are declared. */
12
- export function getInputNamesOfClass(node, typeChecker) {
13
- const resolvedInputSetters = [];
14
- // Determines the names of all inputs defined in the current class declaration by
15
- // checking whether a given property/getter/setter has the "@Input" decorator applied.
16
- node.members.forEach(m => {
17
- if (!m.decorators || !m.decorators.length ||
18
- !ts.isPropertyDeclaration(m) && !ts.isSetAccessor(m) && !ts.isGetAccessor(m)) {
19
- return;
20
- }
21
- const inputDecorator = getAngularDecorators(typeChecker, m.decorators).find(d => d.name === 'Input');
22
- if (inputDecorator && hasPropertyNameText(m.name)) {
23
- resolvedInputSetters.push(m.name.text);
24
- }
25
- });
26
- // Besides looking for immediate setters in the current class declaration, developers
27
- // can also define inputs in the directive metadata using the "inputs" property. We
28
- // also need to determine these inputs which are declared in the directive metadata.
29
- const metadataInputs = getInputNamesFromMetadata(node, typeChecker);
30
- if (metadataInputs) {
31
- resolvedInputSetters.push(...metadataInputs);
32
- }
33
- return resolvedInputSetters;
34
- }
35
- /**
36
- * Determines the names of all inputs declared in the directive/component metadata
37
- * of the given class.
38
- */
39
- function getInputNamesFromMetadata(node, typeChecker) {
40
- if (!node.decorators || !node.decorators.length) {
41
- return null;
42
- }
43
- const decorator = getAngularDecorators(typeChecker, node.decorators)
44
- .find(d => d.name === 'Directive' || d.name === 'Component');
45
- // In case no directive/component decorator could be found for this class, just
46
- // return null as there is no metadata where an input could be declared.
47
- if (!decorator) {
48
- return null;
49
- }
50
- const decoratorCall = decorator.node.expression;
51
- // In case the decorator does define any metadata, there is no metadata
52
- // where inputs could be declared. This is an edge case because there
53
- // always needs to be an object literal, but in case there isn't we just
54
- // want to skip the invalid decorator and return null.
55
- if (decoratorCall.arguments.length !== 1 ||
56
- !ts.isObjectLiteralExpression(decoratorCall.arguments[0])) {
57
- return null;
58
- }
59
- const metadata = decoratorCall.arguments[0];
60
- const inputs = metadata.properties.filter(ts.isPropertyAssignment)
61
- .find(p => getPropertyNameText(p.name) === 'inputs');
62
- // In case there is no "inputs" property in the directive metadata,
63
- // just return "null" as no inputs can be declared for this class.
64
- if (!inputs || !ts.isArrayLiteralExpression(inputs.initializer)) {
65
- return null;
66
- }
67
- return inputs.initializer.elements.filter(ts.isStringLiteralLike)
68
- .map(element => element.text.split(':')[0].trim());
69
- }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlX2lucHV0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3N0YXRpYy1xdWVyaWVzL2FuZ3VsYXIvZGlyZWN0aXZlX2lucHV0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqQyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUVqRyx1RkFBdUY7QUFDdkYsTUFBTSxVQUFVLG9CQUFvQixDQUNoQyxJQUF5QixFQUFFLFdBQTJCO0lBQ3hELE1BQU0sb0JBQW9CLEdBQWEsRUFBRSxDQUFDO0lBRTFDLGlGQUFpRjtJQUNqRixzRkFBc0Y7SUFDdEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU07WUFDckMsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNoRixPQUFPO1NBQ1I7UUFFRCxNQUFNLGNBQWMsR0FDaEIsb0JBQW9CLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxVQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBRW5GLElBQUksY0FBYyxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqRCxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN4QztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgscUZBQXFGO0lBQ3JGLG1GQUFtRjtJQUNuRixvRkFBb0Y7SUFDcEYsTUFBTSxjQUFjLEdBQUcseUJBQXlCLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXBFLElBQUksY0FBYyxFQUFFO1FBQ2xCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO0tBQzlDO0lBRUQsT0FBTyxvQkFBb0IsQ0FBQztBQUM5QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FDOUIsSUFBeUIsRUFBRSxXQUEyQjtJQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQy9DLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxNQUFNLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQztTQUM3QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDO0lBRW5GLCtFQUErRTtJQUMvRSx3RUFBd0U7SUFDeEUsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUVoRCx1RUFBdUU7SUFDdkUscUVBQXFFO0lBQ3JFLHdFQUF3RTtJQUN4RSxzREFBc0Q7SUFDdEQsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQ3BDLENBQUMsRUFBRSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM3RCxPQUFPLElBQUksQ0FBQztLQUNiO0lBRUQsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQStCLENBQUM7SUFDMUUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDO1NBQzlDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUV4RSxtRUFBbUU7SUFDbkUsa0VBQWtFO0lBQ2xFLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQy9ELE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUM7U0FDNUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtnZXRBbmd1bGFyRGVjb3JhdG9yc30gZnJvbSAnLi4vLi4vLi4vdXRpbHMvbmdfZGVjb3JhdG9ycyc7XG5pbXBvcnQge2dldFByb3BlcnR5TmFtZVRleHQsIGhhc1Byb3BlcnR5TmFtZVRleHR9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvcHJvcGVydHlfbmFtZSc7XG5cbi8qKiBBbmFseXplcyB0aGUgZ2l2ZW4gY2xhc3MgYW5kIHJlc29sdmVzIHRoZSBuYW1lIG9mIGFsbCBpbnB1dHMgd2hpY2ggYXJlIGRlY2xhcmVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0TmFtZXNPZkNsYXNzKFxuICAgIG5vZGU6IHRzLkNsYXNzRGVjbGFyYXRpb24sIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzb2x2ZWRJbnB1dFNldHRlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgLy8gRGV0ZXJtaW5lcyB0aGUgbmFtZXMgb2YgYWxsIGlucHV0cyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IGNsYXNzIGRlY2xhcmF0aW9uIGJ5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgYSBnaXZlbiBwcm9wZXJ0eS9nZXR0ZXIvc2V0dGVyIGhhcyB0aGUgXCJASW5wdXRcIiBkZWNvcmF0b3IgYXBwbGllZC5cbiAgbm9kZS5tZW1iZXJzLmZvckVhY2gobSA9PiB7XG4gICAgaWYgKCFtLmRlY29yYXRvcnMgfHwgIW0uZGVjb3JhdG9ycy5sZW5ndGggfHxcbiAgICAgICAgIXRzLmlzUHJvcGVydHlEZWNsYXJhdGlvbihtKSAmJiAhdHMuaXNTZXRBY2Nlc3NvcihtKSAmJiAhdHMuaXNHZXRBY2Nlc3NvcihtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0RGVjb3JhdG9yID1cbiAgICAgICAgZ2V0QW5ndWxhckRlY29yYXRvcnModHlwZUNoZWNrZXIsIG0uZGVjb3JhdG9ycyEpLmZpbmQoZCA9PiBkLm5hbWUgPT09ICdJbnB1dCcpO1xuXG4gICAgaWYgKGlucHV0RGVjb3JhdG9yICYmIGhhc1Byb3BlcnR5TmFtZVRleHQobS5uYW1lKSkge1xuICAgICAgcmVzb2x2ZWRJbnB1dFNldHRlcnMucHVzaChtLm5hbWUudGV4dCk7XG4gICAgfVxuICB9KTtcblxuICAvLyBCZXNpZGVzIGxvb2tpbmcgZm9yIGltbWVkaWF0ZSBzZXR0ZXJzIGluIHRoZSBjdXJyZW50IGNsYXNzIGRlY2xhcmF0aW9uLCBkZXZlbG9wZXJzXG4gIC8vIGNhbiBhbHNvIGRlZmluZSBpbnB1dHMgaW4gdGhlIGRpcmVjdGl2ZSBtZXRhZGF0YSB1c2luZyB0aGUgXCJpbnB1dHNcIiBwcm9wZXJ0eS4gV2VcbiAgLy8gYWxzbyBuZWVkIHRvIGRldGVybWluZSB0aGVzZSBpbnB1dHMgd2hpY2ggYXJlIGRlY2xhcmVkIGluIHRoZSBkaXJlY3RpdmUgbWV0YWRhdGEuXG4gIGNvbnN0IG1ldGFkYXRhSW5wdXRzID0gZ2V0SW5wdXROYW1lc0Zyb21NZXRhZGF0YShub2RlLCB0eXBlQ2hlY2tlcik7XG5cbiAgaWYgKG1ldGFkYXRhSW5wdXRzKSB7XG4gICAgcmVzb2x2ZWRJbnB1dFNldHRlcnMucHVzaCguLi5tZXRhZGF0YUlucHV0cyk7XG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZWRJbnB1dFNldHRlcnM7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgbmFtZXMgb2YgYWxsIGlucHV0cyBkZWNsYXJlZCBpbiB0aGUgZGlyZWN0aXZlL2NvbXBvbmVudCBtZXRhZGF0YVxuICogb2YgdGhlIGdpdmVuIGNsYXNzLlxuICovXG5mdW5jdGlvbiBnZXRJbnB1dE5hbWVzRnJvbU1ldGFkYXRhKFxuICAgIG5vZGU6IHRzLkNsYXNzRGVjbGFyYXRpb24sIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcik6IHN0cmluZ1tdfG51bGwge1xuICBpZiAoIW5vZGUuZGVjb3JhdG9ycyB8fCAhbm9kZS5kZWNvcmF0b3JzLmxlbmd0aCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGVjb3JhdG9yID0gZ2V0QW5ndWxhckRlY29yYXRvcnModHlwZUNoZWNrZXIsIG5vZGUuZGVjb3JhdG9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKGQgPT4gZC5uYW1lID09PSAnRGlyZWN0aXZlJyB8fCBkLm5hbWUgPT09ICdDb21wb25lbnQnKTtcblxuICAvLyBJbiBjYXNlIG5vIGRpcmVjdGl2ZS9jb21wb25lbnQgZGVjb3JhdG9yIGNvdWxkIGJlIGZvdW5kIGZvciB0aGlzIGNsYXNzLCBqdXN0XG4gIC8vIHJldHVybiBudWxsIGFzIHRoZXJlIGlzIG5vIG1ldGFkYXRhIHdoZXJlIGFuIGlucHV0IGNvdWxkIGJlIGRlY2xhcmVkLlxuICBpZiAoIWRlY29yYXRvcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZGVjb3JhdG9yQ2FsbCA9IGRlY29yYXRvci5ub2RlLmV4cHJlc3Npb247XG5cbiAgLy8gSW4gY2FzZSB0aGUgZGVjb3JhdG9yIGRvZXMgZGVmaW5lIGFueSBtZXRhZGF0YSwgdGhlcmUgaXMgbm8gbWV0YWRhdGFcbiAgLy8gd2hlcmUgaW5wdXRzIGNvdWxkIGJlIGRlY2xhcmVkLiBUaGlzIGlzIGFuIGVkZ2UgY2FzZSBiZWNhdXNlIHRoZXJlXG4gIC8vIGFsd2F5cyBuZWVkcyB0byBiZSBhbiBvYmplY3QgbGl0ZXJhbCwgYnV0IGluIGNhc2UgdGhlcmUgaXNuJ3Qgd2UganVzdFxuICAvLyB3YW50IHRvIHNraXAgdGhlIGludmFsaWQgZGVjb3JhdG9yIGFuZCByZXR1cm4gbnVsbC5cbiAgaWYgKGRlY29yYXRvckNhbGwuYXJndW1lbnRzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgIXRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24oZGVjb3JhdG9yQ2FsbC5hcmd1bWVudHNbMF0pKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBtZXRhZGF0YSA9IGRlY29yYXRvckNhbGwuYXJndW1lbnRzWzBdIGFzIHRzLk9iamVjdExpdGVyYWxFeHByZXNzaW9uO1xuICBjb25zdCBpbnB1dHMgPSBtZXRhZGF0YS5wcm9wZXJ0aWVzLmZpbHRlcih0cy5pc1Byb3BlcnR5QXNzaWdubWVudClcbiAgICAgICAgICAgICAgICAgICAgIC5maW5kKHAgPT4gZ2V0UHJvcGVydHlOYW1lVGV4dChwLm5hbWUpID09PSAnaW5wdXRzJyk7XG5cbiAgLy8gSW4gY2FzZSB0aGVyZSBpcyBubyBcImlucHV0c1wiIHByb3BlcnR5IGluIHRoZSBkaXJlY3RpdmUgbWV0YWRhdGEsXG4gIC8vIGp1c3QgcmV0dXJuIFwibnVsbFwiIGFzIG5vIGlucHV0cyBjYW4gYmUgZGVjbGFyZWQgZm9yIHRoaXMgY2xhc3MuXG4gIGlmICghaW5wdXRzIHx8ICF0cy5pc0FycmF5TGl0ZXJhbEV4cHJlc3Npb24oaW5wdXRzLmluaXRpYWxpemVyKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGlucHV0cy5pbml0aWFsaXplci5lbGVtZW50cy5maWx0ZXIodHMuaXNTdHJpbmdMaXRlcmFsTGlrZSlcbiAgICAgIC5tYXAoZWxlbWVudCA9PiBlbGVtZW50LnRleHQuc3BsaXQoJzonKVswXS50cmltKCkpO1xufVxuIl19