@angular/core 13.3.0 → 14.0.0-next.10

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 (80) hide show
  1. package/core.d.ts +116 -42
  2. package/esm2020/src/application_tokens.mjs +10 -1
  3. package/esm2020/src/change_detection/change_detection.mjs +2 -3
  4. package/esm2020/src/compiler/compiler_facade_interface.mjs +1 -1
  5. package/esm2020/src/core.mjs +2 -2
  6. package/esm2020/src/core_private_export.mjs +2 -1
  7. package/esm2020/src/core_render3_private_export.mjs +4 -3
  8. package/esm2020/src/debug/debug_node.mjs +11 -10
  9. package/esm2020/src/di/injector_compatibility.mjs +2 -2
  10. package/esm2020/src/di/reflective_provider.mjs +4 -4
  11. package/esm2020/src/linker/ng_module_factory_loader.mjs +2 -2
  12. package/esm2020/src/linker/ng_module_registration.mjs +55 -0
  13. package/esm2020/src/linker/template_ref.mjs +3 -3
  14. package/esm2020/src/linker/view_container_ref.mjs +12 -3
  15. package/esm2020/src/reflection/platform_reflection_capabilities.mjs +1 -1
  16. package/esm2020/src/reflection/reflection_capabilities.mjs +1 -37
  17. package/esm2020/src/render3/component.mjs +3 -3
  18. package/esm2020/src/render3/component_ref.mjs +24 -18
  19. package/esm2020/src/render3/context_discovery.mjs +34 -30
  20. package/esm2020/src/render3/definition.mjs +3 -1
  21. package/esm2020/src/render3/di.mjs +177 -97
  22. package/esm2020/src/render3/hooks.mjs +3 -3
  23. package/esm2020/src/render3/i18n/i18n_parse.mjs +3 -3
  24. package/esm2020/src/render3/index.mjs +2 -2
  25. package/esm2020/src/render3/instructions/lview_debug.mjs +7 -4
  26. package/esm2020/src/render3/instructions/shared.mjs +16 -7
  27. package/esm2020/src/render3/interfaces/context.mjs +35 -2
  28. package/esm2020/src/render3/interfaces/definition.mjs +1 -1
  29. package/esm2020/src/render3/interfaces/injector.mjs +1 -1
  30. package/esm2020/src/render3/interfaces/lview_tracking.mjs +33 -0
  31. package/esm2020/src/render3/interfaces/renderer_dom.mjs +1 -1
  32. package/esm2020/src/render3/interfaces/view.mjs +4 -2
  33. package/esm2020/src/render3/jit/directive.mjs +5 -2
  34. package/esm2020/src/render3/jit/environment.mjs +4 -1
  35. package/esm2020/src/render3/jit/module.mjs +7 -1
  36. package/esm2020/src/render3/jit/module_patch.mjs +11 -0
  37. package/esm2020/src/render3/jit/pipe.mjs +5 -2
  38. package/esm2020/src/render3/ng_module_ref.mjs +1 -29
  39. package/esm2020/src/render3/node_manipulation.mjs +12 -3
  40. package/esm2020/src/render3/state.mjs +16 -2
  41. package/esm2020/src/render3/styling/styling_parser.mjs +2 -2
  42. package/esm2020/src/render3/util/discovery_utils.mjs +33 -22
  43. package/esm2020/src/util/coercion.mjs +12 -0
  44. package/esm2020/src/version.mjs +1 -1
  45. package/esm2020/testing/src/logger.mjs +3 -3
  46. package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
  47. package/esm2020/testing/src/r3_test_bed.mjs +8 -2
  48. package/fesm2015/core.mjs +516 -389
  49. package/fesm2015/core.mjs.map +1 -1
  50. package/fesm2015/testing.mjs +8 -2
  51. package/fesm2015/testing.mjs.map +1 -1
  52. package/fesm2020/core.mjs +516 -389
  53. package/fesm2020/core.mjs.map +1 -1
  54. package/fesm2020/testing.mjs +8 -2
  55. package/fesm2020/testing.mjs.map +1 -1
  56. package/package.json +2 -2
  57. package/schematics/migrations/entry-components/util.js +2 -2
  58. package/schematics/migrations/typed-forms/index.d.ts +1 -5
  59. package/schematics/migrations/typed-forms/index.js +12 -34
  60. package/schematics/migrations/typed-forms/util.d.ts +8 -10
  61. package/schematics/migrations/typed-forms/util.js +99 -52
  62. package/schematics/migrations.json +6 -16
  63. package/schematics/utils/import_manager.js +11 -22
  64. package/schematics/utils/typescript/imports.js +5 -9
  65. package/testing/testing.d.ts +1 -1
  66. package/esm2020/src/di/util.mjs +0 -51
  67. package/esm2020/src/linker/ng_module_factory_registration.mjs +0 -59
  68. package/esm2020/src/reflection/reflection.mjs +0 -16
  69. package/esm2020/src/reflection/reflector.mjs +0 -56
  70. package/esm2020/src/reflection/types.mjs +0 -9
  71. package/schematics/migrations/router-link-empty-expression/analyze_template.d.ts +0 -11
  72. package/schematics/migrations/router-link-empty-expression/analyze_template.js +0 -34
  73. package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.d.ts +0 -20
  74. package/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor.js +0 -47
  75. package/schematics/migrations/router-link-empty-expression/index.d.ts +0 -11
  76. package/schematics/migrations/router-link-empty-expression/index.js +0 -170
  77. package/schematics/migrations/testbed-teardown/index.d.ts +0 -11
  78. package/schematics/migrations/testbed-teardown/index.js +0 -92
  79. package/schematics/migrations/testbed-teardown/util.d.ts +0 -35
  80. package/schematics/migrations/testbed-teardown/util.js +0 -188
@@ -1,47 +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
- (function (factory) {
9
- if (typeof module === "object" && typeof module.exports === "object") {
10
- var v = factory(require, exports);
11
- if (v !== undefined) module.exports = v;
12
- }
13
- else if (typeof define === "function" && define.amd) {
14
- define("@angular/core/schematics/migrations/router-link-empty-expression/angular/html_routerlink_empty_expr_visitor", ["require", "exports", "@angular/core/schematics/utils/template_ast_visitor"], factory);
15
- }
16
- })(function (require, exports) {
17
- "use strict";
18
- Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.RouterLinkEmptyExprVisitor = void 0;
20
- const template_ast_visitor_1 = require("@angular/core/schematics/utils/template_ast_visitor");
21
- /**
22
- * HTML AST visitor that traverses the Render3 HTML AST in order to find all
23
- * undefined routerLink asssignment ([routerLink]="").
24
- */
25
- class RouterLinkEmptyExprVisitor extends template_ast_visitor_1.TemplateAstVisitor {
26
- constructor() {
27
- super(...arguments);
28
- this.emptyRouterLinkExpressions = [];
29
- }
30
- visitElement(element) {
31
- this.visitAll(element.inputs);
32
- this.visitAll(element.children);
33
- }
34
- visitTemplate(t) {
35
- this.visitAll(t.inputs);
36
- this.visitAll(t.children);
37
- }
38
- visitBoundAttribute(node) {
39
- if (node.name === 'routerLink' && node.value instanceof this.compilerModule.ASTWithSource &&
40
- node.value.ast instanceof this.compilerModule.EmptyExpr) {
41
- this.emptyRouterLinkExpressions.push(node);
42
- }
43
- }
44
- }
45
- exports.RouterLinkEmptyExprVisitor = RouterLinkEmptyExprVisitor;
46
- });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbF9yb3V0ZXJsaW5rX2VtcHR5X2V4cHJfdmlzaXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JvdXRlci1saW5rLWVtcHR5LWV4cHJlc3Npb24vYW5ndWxhci9odG1sX3JvdXRlcmxpbmtfZW1wdHlfZXhwcl92aXNpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUdILDhGQUF1RTtJQUV2RTs7O09BR0c7SUFDSCxNQUFhLDBCQUEyQixTQUFRLHlDQUFrQjtRQUFsRTs7WUFDVywrQkFBMEIsR0FBNEIsRUFBRSxDQUFDO1FBa0JwRSxDQUFDO1FBaEJVLFlBQVksQ0FBQyxPQUF1QjtZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRVEsYUFBYSxDQUFDLENBQWtCO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFUSxtQkFBbUIsQ0FBQyxJQUEyQjtZQUN0RCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLFlBQVksSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhO2dCQUNyRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsWUFBWSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRTtnQkFDM0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QztRQUNILENBQUM7S0FDRjtJQW5CRCxnRUFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUge1RtcGxBc3RCb3VuZEF0dHJpYnV0ZSwgVG1wbEFzdEVsZW1lbnQsIFRtcGxBc3RUZW1wbGF0ZX0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0IHtUZW1wbGF0ZUFzdFZpc2l0b3J9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3RlbXBsYXRlX2FzdF92aXNpdG9yJztcblxuLyoqXG4gKiBIVE1MIEFTVCB2aXNpdG9yIHRoYXQgdHJhdmVyc2VzIHRoZSBSZW5kZXIzIEhUTUwgQVNUIGluIG9yZGVyIHRvIGZpbmQgYWxsXG4gKiB1bmRlZmluZWQgcm91dGVyTGluayBhc3NzaWdubWVudCAoW3JvdXRlckxpbmtdPVwiXCIpLlxuICovXG5leHBvcnQgY2xhc3MgUm91dGVyTGlua0VtcHR5RXhwclZpc2l0b3IgZXh0ZW5kcyBUZW1wbGF0ZUFzdFZpc2l0b3Ige1xuICByZWFkb25seSBlbXB0eVJvdXRlckxpbmtFeHByZXNzaW9uczogVG1wbEFzdEJvdW5kQXR0cmlidXRlW10gPSBbXTtcblxuICBvdmVycmlkZSB2aXNpdEVsZW1lbnQoZWxlbWVudDogVG1wbEFzdEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuaW5wdXRzKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuY2hpbGRyZW4pO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaXRUZW1wbGF0ZSh0OiBUbXBsQXN0VGVtcGxhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2l0QWxsKHQuaW5wdXRzKTtcbiAgICB0aGlzLnZpc2l0QWxsKHQuY2hpbGRyZW4pO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaXRCb3VuZEF0dHJpYnV0ZShub2RlOiBUbXBsQXN0Qm91bmRBdHRyaWJ1dGUpIHtcbiAgICBpZiAobm9kZS5uYW1lID09PSAncm91dGVyTGluaycgJiYgbm9kZS52YWx1ZSBpbnN0YW5jZW9mIHRoaXMuY29tcGlsZXJNb2R1bGUuQVNUV2l0aFNvdXJjZSAmJlxuICAgICAgICBub2RlLnZhbHVlLmFzdCBpbnN0YW5jZW9mIHRoaXMuY29tcGlsZXJNb2R1bGUuRW1wdHlFeHByKSB7XG4gICAgICB0aGlzLmVtcHR5Um91dGVyTGlua0V4cHJlc3Npb25zLnB1c2gobm9kZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,11 +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/router-link-empty-expression" />
9
- import { Rule } from '@angular-devkit/schematics';
10
- /** Entry point for the RouterLink empty expression migration. */
11
- export default function (): Rule;
@@ -1,170 +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
- (function (factory) {
18
- if (typeof module === "object" && typeof module.exports === "object") {
19
- var v = factory(require, exports);
20
- if (v !== undefined) module.exports = v;
21
- }
22
- else if (typeof define === "function" && define.amd) {
23
- define("@angular/core/schematics/migrations/router-link-empty-expression", ["require", "exports", "@angular-devkit/core", "@angular-devkit/schematics", "path", "@angular/core/schematics/utils/load_esm", "@angular/core/schematics/utils/ng_component_template", "@angular/core/schematics/utils/project_tsconfig_paths", "@angular/core/schematics/utils/typescript/compiler_host", "@angular/core/schematics/migrations/router-link-empty-expression/analyze_template"], factory);
24
- }
25
- })(function (require, exports) {
26
- "use strict";
27
- Object.defineProperty(exports, "__esModule", { value: true });
28
- const core_1 = require("@angular-devkit/core");
29
- const schematics_1 = require("@angular-devkit/schematics");
30
- const path_1 = require("path");
31
- const load_esm_1 = require("@angular/core/schematics/utils/load_esm");
32
- const ng_component_template_1 = require("@angular/core/schematics/utils/ng_component_template");
33
- const project_tsconfig_paths_1 = require("@angular/core/schematics/utils/project_tsconfig_paths");
34
- const compiler_host_1 = require("@angular/core/schematics/utils/typescript/compiler_host");
35
- const analyze_template_1 = require("@angular/core/schematics/migrations/router-link-empty-expression/analyze_template");
36
- const README_URL = 'https://github.com/angular/angular/blob/master/packages/core/schematics/migrations/router-link-empty-expression/README.md';
37
- /** Entry point for the RouterLink empty expression migration. */
38
- function default_1() {
39
- return (tree, context) => __awaiter(this, void 0, void 0, function* () {
40
- const { buildPaths, testPaths } = yield (0, project_tsconfig_paths_1.getProjectTsConfigPaths)(tree);
41
- const basePath = process.cwd();
42
- if (!buildPaths.length && !testPaths.length) {
43
- throw new schematics_1.SchematicsException('Could not find any tsconfig file. Cannot check templates for empty routerLinks.');
44
- }
45
- let compilerModule;
46
- try {
47
- // Load ESM `@angular/compiler` using the TypeScript dynamic import workaround.
48
- // Once TypeScript provides support for keeping the dynamic import this workaround can be
49
- // changed to a direct dynamic import.
50
- compilerModule = yield (0, load_esm_1.loadEsmModule)('@angular/compiler');
51
- }
52
- catch (e) {
53
- throw new schematics_1.SchematicsException(`Unable to load the '@angular/compiler' package. Details: ${e.message}`);
54
- }
55
- for (const tsconfigPath of [...buildPaths, ...testPaths]) {
56
- runEmptyRouterLinkExpressionMigration(tree, tsconfigPath, basePath, context.logger, compilerModule);
57
- }
58
- });
59
- }
60
- exports.default = default_1;
61
- /**
62
- * Runs the routerLink migration, changing routerLink="" to routerLink="[]" and notifying developers
63
- * which templates received updates.
64
- */
65
- function runEmptyRouterLinkExpressionMigration(tree, tsconfigPath, basePath, logger, compilerModule) {
66
- const { program } = (0, compiler_host_1.createMigrationProgram)(tree, tsconfigPath, basePath);
67
- const typeChecker = program.getTypeChecker();
68
- const templateVisitor = new ng_component_template_1.NgComponentTemplateVisitor(typeChecker, basePath, tree);
69
- const sourceFiles = program.getSourceFiles().filter(sourceFile => (0, compiler_host_1.canMigrateFile)(basePath, sourceFile, program));
70
- // Analyze source files by detecting HTML templates.
71
- sourceFiles.forEach(sourceFile => templateVisitor.visitNode(sourceFile));
72
- const { resolvedTemplates } = templateVisitor;
73
- fixEmptyRouterlinks(resolvedTemplates, tree, logger, compilerModule);
74
- }
75
- function fixEmptyRouterlinks(resolvedTemplates, tree, logger, compilerModule) {
76
- var _a;
77
- const basePath = process.cwd();
78
- const collectedFixes = [];
79
- const fixesByFile = getFixesByFile(resolvedTemplates, compilerModule);
80
- for (const [absFilePath, templateFixes] of fixesByFile) {
81
- const treeFilePath = (0, path_1.relative)((0, core_1.normalize)(basePath), (0, core_1.normalize)(absFilePath));
82
- const originalFileContent = (_a = tree.read(treeFilePath)) === null || _a === void 0 ? void 0 : _a.toString();
83
- if (originalFileContent === undefined) {
84
- logger.error(`Failed to read file containing template; cannot apply fixes for empty routerLink expressions in ${treeFilePath}.`);
85
- continue;
86
- }
87
- const updater = tree.beginUpdate(treeFilePath);
88
- for (const templateFix of templateFixes) {
89
- // Sort backwards so string replacements do not conflict
90
- templateFix.replacements.sort((a, b) => b.start - a.start);
91
- for (const replacement of templateFix.replacements) {
92
- updater.remove(replacement.start, replacement.end - replacement.start);
93
- updater.insertLeft(replacement.start, replacement.newContent);
94
- }
95
- const displayFilePath = (0, core_1.normalize)((0, path_1.relative)(basePath, templateFix.originalTemplate.filePath));
96
- for (const n of templateFix.emptyRouterlinkExpressions) {
97
- const { line, character } = templateFix.originalTemplate.getCharacterAndLineOfPosition(n.sourceSpan.start.offset);
98
- collectedFixes.push(`${displayFilePath}@${line + 1}:${character + 1}`);
99
- }
100
- tree.commitUpdate(updater);
101
- }
102
- }
103
- if (collectedFixes.length > 0) {
104
- logger.info('---- RouterLink empty assignment schematic ----');
105
- logger.info('The behavior of empty/`undefined` inputs for `routerLink` has changed');
106
- logger.info('from linking to the current page to instead completely disable the link.');
107
- logger.info(`Read more about this change here: ${README_URL}`);
108
- logger.info('');
109
- logger.info('The following empty `routerLink` inputs were found and fixed:');
110
- collectedFixes.forEach(fix => logger.warn(`⮑ ${fix}`));
111
- }
112
- }
113
- /**
114
- * Returns fixes for nodes in templates which contain empty routerLink assignments, grouped by file.
115
- */
116
- function getFixesByFile(templates, compilerModule) {
117
- const fixesByFile = new Map();
118
- for (const template of templates) {
119
- const templateFix = fixEmptyRouterlinksInTemplate(template, compilerModule);
120
- if (templateFix === null) {
121
- continue;
122
- }
123
- const file = template.filePath;
124
- if (fixesByFile.has(file)) {
125
- if (template.inline) {
126
- // External templates may be referenced multiple times in the project
127
- // (e.g. if shared between components), but we only want to record them
128
- // once. On the other hand, an inline template resides in a TS file that
129
- // may contain multiple inline templates.
130
- fixesByFile.get(file).push(templateFix);
131
- }
132
- }
133
- else {
134
- fixesByFile.set(file, [templateFix]);
135
- }
136
- }
137
- return fixesByFile;
138
- }
139
- function fixEmptyRouterlinksInTemplate(template, compilerModule) {
140
- const emptyRouterlinkExpressions = (0, analyze_template_1.analyzeResolvedTemplate)(template, compilerModule);
141
- if (!emptyRouterlinkExpressions || emptyRouterlinkExpressions.length === 0) {
142
- return null;
143
- }
144
- const replacements = [];
145
- for (const expr of emptyRouterlinkExpressions) {
146
- let replacement;
147
- if (expr.valueSpan) {
148
- replacement = {
149
- start: template.start + expr.value.sourceSpan.start,
150
- end: template.start + expr.value.sourceSpan.end,
151
- newContent: '[]',
152
- };
153
- }
154
- else {
155
- const spanLength = expr.sourceSpan.end.offset - expr.sourceSpan.start.offset;
156
- // `expr.value.sourceSpan.start` is the start of the very beginning of the binding since there
157
- // is no value
158
- const endOfExpr = template.start + expr.value.sourceSpan.start + spanLength;
159
- replacement = {
160
- start: endOfExpr,
161
- end: endOfExpr,
162
- newContent: '="[]"',
163
- };
164
- }
165
- replacements.push(replacement);
166
- }
167
- return { originalTemplate: template, replacements, emptyRouterlinkExpressions };
168
- }
169
- });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy9yb3V0ZXItbGluay1lbXB0eS1leHByZXNzaW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsK0NBQXdEO0lBQ3hELDJEQUE2RjtJQUU3RiwrQkFBOEI7SUFDOUIsc0VBQW1EO0lBRW5ELGdHQUErRjtJQUMvRixrR0FBMkU7SUFDM0UsMkZBQTRGO0lBRTVGLHdIQUEyRDtJQUkzRCxNQUFNLFVBQVUsR0FDWiwySEFBMkgsQ0FBQztJQWFoSSxpRUFBaUU7SUFDakU7UUFDRSxPQUFPLENBQU8sSUFBVSxFQUFFLE9BQXlCLEVBQUUsRUFBRTtZQUNyRCxNQUFNLEVBQUMsVUFBVSxFQUFFLFNBQVMsRUFBQyxHQUFHLE1BQU0sSUFBQSxnREFBdUIsRUFBQyxJQUFJLENBQUMsQ0FBQztZQUNwRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFFL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUMzQyxNQUFNLElBQUksZ0NBQW1CLENBQ3pCLGlGQUFpRixDQUFDLENBQUM7YUFDeEY7WUFFRCxJQUFJLGNBQWMsQ0FBQztZQUNuQixJQUFJO2dCQUNGLCtFQUErRTtnQkFDL0UseUZBQXlGO2dCQUN6RixzQ0FBc0M7Z0JBQ3RDLGNBQWMsR0FBRyxNQUFNLElBQUEsd0JBQWEsRUFBcUMsbUJBQW1CLENBQUMsQ0FBQzthQUMvRjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE1BQU0sSUFBSSxnQ0FBbUIsQ0FDekIsNERBQTZELENBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ3pGO1lBRUQsS0FBSyxNQUFNLFlBQVksSUFB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SSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSztvQkFDbkQsR0FBRyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRztvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUM3RSw4RkFBOEY7Z0JBQzlGLGNBQWM7Z0JBQ2QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO2dCQUM1RSxXQUFXLEdBQUc7b0JBQ1osS0FBSyxFQUFFLFNBQVM7b0JBQ2hCLEdBQUcsRUFBRSxTQUFTO29CQUNkLFVBQVUsRUFBRSxPQUFPO2lCQUNwQixDQUFDO2FBQ0g7WUFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUMsQ0FBQztJQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7bG9nZ2luZywgbm9ybWFsaXplfSBmcm9tICdAYW5ndWxhci1kZXZraXQvY29yZSc7XG5pbXBvcnQge1J1bGUsIFNjaGVtYXRpY0NvbnRleHQsIFNjaGVtYXRpY3NFeGNlcHRpb24sIFRyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB0eXBlIHtUbXBsQXN0Qm91bmRBdHRyaWJ1dGV9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7cmVsYXRpdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtsb2FkRXNtTW9kdWxlfSBmcm9tICcuLi8uLi91dGlscy9sb2FkX2VzbSc7XG5cbmltcG9ydCB7TmdDb21wb25lbnRUZW1wbGF0ZVZpc2l0b3IsIFJlc29sdmVkVGVtcGxhdGV9IGZyb20gJy4uLy4uL3V0aWxzL25nX2NvbXBvbmVudF90ZW1wbGF0ZSc7XG5pbXBvcnQge2dldFByb2plY3RUc0NvbmZpZ1BhdGhzfSBmcm9tICcuLi8uLi91dGlscy9wcm9qZWN0X3RzY29uZmlnX3BhdGhzJztcbmltcG9ydCB7Y2FuTWlncmF0ZUZpbGUsIGNyZWF0ZU1pZ3JhdGlvblByb2dyYW19IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvY29tcGlsZXJfaG9zdCc7XG5cbmltcG9ydCB7YW5hbHl6ZVJlc29sdmVkVGVtcGxhdGV9IGZyb20gJy4vYW5hbHl6ZV90ZW1wbGF0ZSc7XG5cbnR5cGUgTG9nZ2VyID0gbG9nZ2luZy5Mb2dnZXJBcGk7XG5cbmNvbnN0IFJFQURNRV9VUkwgPVxuICAgICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2Jsb2IvbWFzdGVyL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JvdXRlci1saW5rLWVtcHR5LWV4cHJlc3Npb24vUkVBRE1FLm1kJztcblxuaW50ZXJmYWNlIFJlcGxhY2VtZW50IHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcbn1cbmludGVyZmFjZSBGaXhlZFRlbXBsYXRlIHtcbiAgb3JpZ2luYWxUZW1wbGF0ZTogUmVzb2x2ZWRUZW1wbGF0ZTtcbiAgcmVwbGFjZW1lbnRzOiBSZXBsYWNlbWVudFtdO1xuICBlbXB0eVJvdXRlcmxpbmtFeHByZXNzaW9uczogVG1wbEFzdEJvdW5kQXR0cmlidXRlW107XG59XG5cbi8qKiBFbnRyeSBwb2ludCBmb3IgdGhlIFJvdXRlckxpbmsgZW1wdHkgZXhwcmVzc2lvbiBtaWdyYXRpb24uICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpOiBSdWxlIHtcbiAgcmV0dXJuIGFzeW5jICh0cmVlOiBUcmVlLCBjb250ZXh0OiBTY2hlbWF0aWNDb250ZXh0KSA9PiB7XG4gICAgY29uc3Qge2J1aWxkUGF0aHMsIHRlc3RQYXRoc30gPSBhd2FpdCBnZXRQcm9qZWN0VHNDb25maWdQYXRocyh0cmVlKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuY3dkKCk7XG5cbiAgICBpZiAoIWJ1aWxkUGF0aHMubGVuZ3RoICYmICF0ZXN0UGF0aHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYW55IHRzY29uZmlnIGZpbGUuIENhbm5vdCBjaGVjayB0ZW1wbGF0ZXMgZm9yIGVtcHR5IHJvdXRlckxpbmtzLicpO1xuICAgIH1cblxuICAgIGxldCBjb21waWxlck1vZHVsZTtcbiAgICB0cnkge1xuICAgICAgLy8gTG9hZCBFU00gYEBhbmd1bGFyL2NvbXBpbGVyYCB1c2luZyB0aGUgVHlwZVNjcmlwdCBkeW5hbWljIGltcG9ydCB3b3JrYXJvdW5kLlxuICAgICAgLy8gT25jZSBUeXBlU2NyaXB0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGtlZXBpbmcgdGhlIGR5bmFtaWMgaW1wb3J0IHRoaXMgd29ya2Fyb3VuZCBjYW4gYmVcbiAgICAgIC8vIGNoYW5nZWQgdG8gYSBkaXJlY3QgZHluYW1pYyBpbXBvcnQuXG4gICAgICBjb21waWxlck1vZHVsZSA9IGF3YWl0IGxvYWRFc21Nb2R1bGU8dHlwZW9mIGltcG9ydCgnQGFuZ3VsYXIvY29tcGlsZXInKT4oJ0Bhbmd1bGFyL2NvbXBpbGVyJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oXG4gICAgICAgICAgYFVuYWJsZSB0byBsb2FkIHRoZSAnQGFuZ3VsYXIvY29tcGlsZXInIHBhY2thZ2UuIERldGFpbHM6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0c2NvbmZpZ1BhdGggb2YgWy4uLmJ1aWxkUGF0aHMsIC4uLnRlc3RQYXRoc10pIHtcbiAgICAgIHJ1bkVtcHR5Um91dGVyTGlua0V4cHJlc3Npb25NaWdyYXRpb24oXG4gICAgICAgICAgdHJlZSwgdHNjb25maWdQYXRoLCBiYXNlUGF0aCwgY29udGV4dC5sb2dnZXIsIGNvbXBpbGVyTW9kdWxlKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUnVucyB0aGUgcm91dGVyTGluayBtaWdyYXRpb24sIGNoYW5naW5nIHJvdXRlckxpbms9XCJcIiB0byByb3V0ZXJMaW5rPVwiW11cIiBhbmQgbm90aWZ5aW5nIGRldmVsb3BlcnNcbiAqIHdoaWNoIHRlbXBsYXRlcyByZWNlaXZlZCB1cGRhdGVzLlxuICovXG5mdW5jdGlvbiBydW5FbXB0eVJvdXRlckxpbmtFeHByZXNzaW9uTWlncmF0aW9uKFxuICAgIHRyZWU6IFRyZWUsIHRzY29uZmlnUGF0aDogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nLCBsb2dnZXI6IExvZ2dlcixcbiAgICBjb21waWxlck1vZHVsZTogdHlwZW9mIGltcG9ydCgnQGFuZ3VsYXIvY29tcGlsZXInKSkge1xuICBjb25zdCB7cHJvZ3JhbX0gPSBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICBjb25zdCB0eXBlQ2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgdGVtcGxhdGVWaXNpdG9yID0gbmV3IE5nQ29tcG9uZW50VGVtcGxhdGVWaXNpdG9yKHR5cGVDaGVja2VyLCBiYXNlUGF0aCwgdHJlZSk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzID1cbiAgICAgIHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKS5maWx0ZXIoc291cmNlRmlsZSA9PiBjYW5NaWdyYXRlRmlsZShiYXNlUGF0aCwgc291cmNlRmlsZSwgcHJvZ3JhbSkpO1xuXG4gIC8vIEFuYWx5emUgc291cmNlIGZpbGVzIGJ5IGRldGVjdGluZyBIVE1MIHRlbXBsYXRlcy5cbiAgc291cmNlRmlsZXMuZm9yRWFjaChzb3VyY2VGaWxlID0+IHRlbXBsYXRlVmlzaXRvci52aXNpdE5vZGUoc291cmNlRmlsZSkpO1xuXG4gIGNvbnN0IHtyZXNvbHZlZFRlbXBsYXRlc30gPSB0ZW1wbGF0ZVZpc2l0b3I7XG4gIGZpeEVtcHR5Um91dGVybGlua3MocmVzb2x2ZWRUZW1wbGF0ZXMsIHRyZWUsIGxvZ2dlciwgY29tcGlsZXJNb2R1bGUpO1xufVxuXG5mdW5jdGlvbiBmaXhFbXB0eVJvdXRlcmxpbmtzKFxuICAgIHJlc29sdmVkVGVtcGxhdGVzOiBSZXNvbHZlZFRlbXBsYXRlW10sIHRyZWU6IFRyZWUsIGxvZ2dlcjogTG9nZ2VyLFxuICAgIGNvbXBpbGVyTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9jb21waWxlcicpKSB7XG4gIGNvbnN0IGJhc2VQYXRoID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgY29sbGVjdGVkRml4ZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZpeGVzQnlGaWxlID0gZ2V0Rml4ZXNCeUZpbGUocmVzb2x2ZWRUZW1wbGF0ZXMsIGNvbXBpbGVyTW9kdWxlKTtcblxuICBmb3IgKGNvbnN0IFthYnNGaWxlUGF0aCwgdGVtcGxhdGVGaXhlc10gb2YgZml4ZXNCeUZpbGUpIHtcbiAgICBjb25zdCB0cmVlRmlsZVBhdGggPSByZWxhdGl2ZShub3JtYWxpemUoYmFzZVBhdGgpLCBub3JtYWxpemUoYWJzRmlsZVBhdGgpKTtcbiAgICBjb25zdCBvcmlnaW5hbEZpbGVDb250ZW50ID0gdHJlZS5yZWFkKHRyZWVGaWxlUGF0aCk/LnRvU3RyaW5nKCk7XG4gICAgaWYgKG9yaWdpbmFsRmlsZUNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9nZ2VyLmVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gcmVhZCBmaWxlIGNvbnRhaW5pbmcgdGVtcGxhdGU7IGNhbm5vdCBhcHBseSBmaXhlcyBmb3IgZW1wdHkgcm91dGVyTGluayBleHByZXNzaW9ucyBpbiAke1xuICAgICAgICAgICAgICB0cmVlRmlsZVBhdGh9LmApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlciA9IHRyZWUuYmVnaW5VcGRhdGUodHJlZUZpbGVQYXRoKTtcbiAgICBmb3IgKGNvbnN0IHRlbXBsYXRlRml4IG9mIHRlbXBsYXRlRml4ZXMpIHtcbiAgICAgIC8vIFNvcnQgYmFja3dhcmRzIHNvIHN0cmluZyByZXBsYWNlbWVudHMgZG8gbm90IGNvbmZsaWN0XG4gICAgICB0ZW1wbGF0ZUZpeC5yZXBsYWNlbWVudHMuc29ydCgoYSwgYikgPT4gYi5zdGFydCAtIGEuc3RhcnQpO1xuICAgICAgZm9yIChjb25zdCByZXBsYWNlbWVudCBvZiB0ZW1wbGF0ZUZpeC5yZXBsYWNlbWVudHMpIHtcbiAgICAgICAgdXBkYXRlci5yZW1vdmUocmVwbGFjZW1lbnQuc3RhcnQsIHJlcGxhY2VtZW50LmVuZCAtIHJlcGxhY2VtZW50LnN0YXJ0KTtcbiAgICAgICAgdXBkYXRlci5pbnNlcnRMZWZ0KHJlcGxhY2VtZW50LnN0YXJ0LCByZXBsYWNlbWVudC5uZXdDb250ZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpc3BsYXlGaWxlUGF0aCA9IG5vcm1hbGl6ZShyZWxhdGl2ZShiYXNlUGF0aCwgdGVtcGxhdGVGaXgub3JpZ2luYWxUZW1wbGF0ZS5maWxlUGF0aCkpO1xuICAgICAgZm9yIChjb25zdCBuIG9mIHRlbXBsYXRlRml4LmVtcHR5Um91dGVybGlua0V4cHJlc3Npb25zKSB7XG4gICAgICAgIGNvbnN0IHtsaW5lLCBjaGFyYWN0ZXJ9ID1cbiAgICAgICAgICAgIHRlbXBsYXRlRml4Lm9yaWdpbmFsVGVtcGxhdGUuZ2V0Q2hhcmFjdGVyQW5kTGluZU9mUG9zaXRpb24obi5zb3VyY2VTcGFuLnN0YXJ0Lm9mZnNldCk7XG4gICAgICAgIGNvbGxlY3RlZEZpeGVzLnB1c2goYCR7ZGlzcGxheUZpbGVQYXRofUAke2xpbmUgKyAxfToke2NoYXJhY3RlciArIDF9YCk7XG4gICAgICB9XG4gICAgICB0cmVlLmNvbW1pdFVwZGF0ZSh1cGRhdGVyKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29sbGVjdGVkRml4ZXMubGVuZ3RoID4gMCkge1xuICAgIGxvZ2dlci5pbmZvKCctLS0tIFJvdXRlckxpbmsgZW1wdHkgYXNzaWdubWVudCBzY2hlbWF0aWMgLS0tLScpO1xuICAgIGxvZ2dlci5pbmZvKCdUaGUgYmVoYXZpb3Igb2YgZW1wdHkvYHVuZGVmaW5lZGAgaW5wdXRzIGZvciBgcm91dGVyTGlua2AgaGFzIGNoYW5nZWQnKTtcbiAgICBsb2dnZXIuaW5mbygnZnJvbSBsaW5raW5nIHRvIHRoZSBjdXJyZW50IHBhZ2UgdG8gaW5zdGVhZCBjb21wbGV0ZWx5IGRpc2FibGUgdGhlIGxpbmsuJyk7XG4gICAgbG9nZ2VyLmluZm8oYFJlYWQgbW9yZSBhYm91dCB0aGlzIGNoYW5nZSBoZXJlOiAke1JFQURNRV9VUkx9YCk7XG4gICAgbG9nZ2VyLmluZm8oJycpO1xuICAgIGxvZ2dlci5pbmZvKCdUaGUgZm9sbG93aW5nIGVtcHR5IGByb3V0ZXJMaW5rYCBpbnB1dHMgd2VyZSBmb3VuZCBhbmQgZml4ZWQ6Jyk7XG4gICAgY29sbGVjdGVkRml4ZXMuZm9yRWFjaChmaXggPT4gbG9nZ2VyLndhcm4oYOKukSAgICR7Zml4fWApKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgZml4ZXMgZm9yIG5vZGVzIGluIHRlbXBsYXRlcyB3aGljaCBjb250YWluIGVtcHR5IHJvdXRlckxpbmsgYXNzaWdubWVudHMsIGdyb3VwZWQgYnkgZmlsZS5cbiAqL1xuZnVuY3Rpb24gZ2V0Rml4ZXNCeUZpbGUoXG4gICAgdGVtcGxhdGVzOiBSZXNvbHZlZFRlbXBsYXRlW10sXG4gICAgY29tcGlsZXJNb2R1bGU6IHR5cGVvZiBpbXBvcnQoJ0Bhbmd1bGFyL2NvbXBpbGVyJykpOiBNYXA8c3RyaW5nLCBGaXhlZFRlbXBsYXRlW10+IHtcbiAgY29uc3QgZml4ZXNCeUZpbGUgPSBuZXcgTWFwPHN0cmluZywgRml4ZWRUZW1wbGF0ZVtdPigpO1xuICBmb3IgKGNvbnN0IHRlbXBsYXRlIG9mIHRlbXBsYXRlcykge1xuICAgIGNvbnN0IHRlbXBsYXRlRml4ID0gZml4RW1wdHlSb3V0ZXJsaW5rc0luVGVtcGxhdGUodGVtcGxhdGUsIGNvbXBpbGVyTW9kdWxlKTtcbiAgICBpZiAodGVtcGxhdGVGaXggPT09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSB0ZW1wbGF0ZS5maWxlUGF0aDtcbiAgICBpZiAoZml4ZXNCeUZpbGUuaGFzKGZpbGUpKSB7XG4gICAgICBpZiAodGVtcGxhdGUuaW5saW5lKSB7XG4gICAgICAgIC8vIEV4dGVybmFsIHRlbXBsYXRlcyBtYXkgYmUgcmVmZXJlbmNlZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgcHJvamVjdFxuICAgICAgICAvLyAoZS5nLiBpZiBzaGFyZWQgYmV0d2VlbiBjb21wb25lbnRzKSwgYnV0IHdlIG9ubHkgd2FudCB0byByZWNvcmQgdGhlbVxuICAgICAgICAvLyBvbmNlLiBPbiB0aGUgb3RoZXIgaGFuZCwgYW4gaW5saW5lIHRlbXBsYXRlIHJlc2lkZXMgaW4gYSBUUyBmaWxlIHRoYXRcbiAgICAgICAgLy8gbWF5IGNvbnRhaW4gbXVsdGlwbGUgaW5saW5lIHRlbXBsYXRlcy5cbiAgICAgICAgZml4ZXNCeUZpbGUuZ2V0KGZpbGUpIS5wdXNoKHRlbXBsYXRlRml4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZml4ZXNCeUZpbGUuc2V0KGZpbGUsIFt0ZW1wbGF0ZUZpeF0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmaXhlc0J5RmlsZTtcbn1cblxuZnVuY3Rpb24gZml4RW1wdHlSb3V0ZXJsaW5rc0luVGVtcGxhdGUoXG4gICAgdGVtcGxhdGU6IFJlc29sdmVkVGVtcGxhdGUsIGNvbXBpbGVyTW9kdWxlOiB0eXBlb2YgaW1wb3J0KCdAYW5ndWxhci9jb21waWxlcicpKTogRml4ZWRUZW1wbGF0ZXxcbiAgICBudWxsIHtcbiAgY29uc3QgZW1wdHlSb3V0ZXJsaW5rRXhwcmVzc2lvbnMgPSBhbmFseXplUmVzb2x2ZWRUZW1wbGF0ZSh0ZW1wbGF0ZSwgY29tcGlsZXJNb2R1bGUpO1xuXG4gIGlmICghZW1wdHlSb3V0ZXJsaW5rRXhwcmVzc2lvbnMgfHwgZW1wdHlSb3V0ZXJsaW5rRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByZXBsYWNlbWVudHM6IFJlcGxhY2VtZW50W10gPSBbXTtcbiAgZm9yIChjb25zdCBleHByIG9mIGVtcHR5Um91dGVybGlua0V4cHJlc3Npb25zKSB7XG4gICAgbGV0IHJlcGxhY2VtZW50OiBSZXBsYWNlbWVudDtcbiAgICBpZiAoZXhwci52YWx1ZVNwYW4pIHtcbiAgICAgIHJlcGxhY2VtZW50ID0ge1xuICAgICAgICBzdGFydDogdGVtcGxhdGUuc3RhcnQgKyBleHByLnZhbHVlLnNvdXJjZVNwYW4uc3RhcnQsXG4gICAgICAgIGVuZDogdGVtcGxhdGUuc3RhcnQgKyBleHByLnZhbHVlLnNvdXJjZVNwYW4uZW5kLFxuICAgICAgICBuZXdDb250ZW50OiAnW10nLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3Bhbkxlbmd0aCA9IGV4cHIuc291cmNlU3Bhbi5lbmQub2Zmc2V0IC0gZXhwci5zb3VyY2VTcGFuLnN0YXJ0Lm9mZnNldDtcbiAgICAgIC8vIGBleHByLnZhbHVlLnNvdXJjZVNwYW4uc3RhcnRgIGlzIHRoZSBzdGFydCBvZiB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIGJpbmRpbmcgc2luY2UgdGhlcmVcbiAgICAgIC8vIGlzIG5vIHZhbHVlXG4gICAgICBjb25zdCBlbmRPZkV4cHIgPSB0ZW1wbGF0ZS5zdGFydCArIGV4cHIudmFsdWUuc291cmNlU3Bhbi5zdGFydCArIHNwYW5MZW5ndGg7XG4gICAgICByZXBsYWNlbWVudCA9IHtcbiAgICAgICAgc3RhcnQ6IGVuZE9mRXhwcixcbiAgICAgICAgZW5kOiBlbmRPZkV4cHIsXG4gICAgICAgIG5ld0NvbnRlbnQ6ICc9XCJbXVwiJyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJlcGxhY2VtZW50cy5wdXNoKHJlcGxhY2VtZW50KTtcbiAgfVxuXG4gIHJldHVybiB7b3JpZ2luYWxUZW1wbGF0ZTogdGVtcGxhdGUsIHJlcGxhY2VtZW50cywgZW1wdHlSb3V0ZXJsaW5rRXhwcmVzc2lvbnN9O1xufVxuIl19
@@ -1,11 +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/testbed-teardown" />
9
- import { Rule } from '@angular-devkit/schematics';
10
- /** Migration that adds the `teardown` flag to `TestBed` calls. */
11
- export default function (): Rule;
@@ -1,92 +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/testbed-teardown", ["require", "exports", "@angular-devkit/schematics", "path", "typescript", "@angular/core/schematics/utils/project_tsconfig_paths", "@angular/core/schematics/utils/typescript/compiler_host", "@angular/core/schematics/migrations/testbed-teardown/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 util_1 = require("@angular/core/schematics/migrations/testbed-teardown/util");
37
- /** Migration that adds the `teardown` flag to `TestBed` calls. */
38
- function default_1() {
39
- return (tree) => __awaiter(this, void 0, void 0, function* () {
40
- const { buildPaths, testPaths } = yield (0, project_tsconfig_paths_1.getProjectTsConfigPaths)(tree);
41
- const basePath = process.cwd();
42
- const allPaths = [...buildPaths, ...testPaths];
43
- if (!allPaths.length) {
44
- throw new schematics_1.SchematicsException('Could not find any tsconfig file. Cannot add `teardown` flag to `TestBed`.');
45
- }
46
- for (const tsconfigPath of allPaths) {
47
- runTestbedTeardownMigration(tree, tsconfigPath, basePath);
48
- }
49
- });
50
- }
51
- exports.default = default_1;
52
- function runTestbedTeardownMigration(tree, tsconfigPath, basePath) {
53
- const { program } = (0, compiler_host_1.createMigrationProgram)(tree, tsconfigPath, basePath);
54
- const typeChecker = program.getTypeChecker();
55
- const sourceFiles = program.getSourceFiles().filter(sourceFile => (0, compiler_host_1.canMigrateFile)(basePath, sourceFile, program));
56
- const initTestEnvironmentResult = (0, util_1.findInitTestEnvironmentCalls)(typeChecker, sourceFiles);
57
- const printer = typescript_1.default.createPrinter();
58
- // If we identified at least one call to `initTestEnvironment` (can be migrated or unmigrated),
59
- // we don't need to migrate `configureTestingModule` or `withModule` calls, because they'll take
60
- // the default teardown behavior from the environment. This is preferrable, because it'll result
61
- // in the least number of changes to users' code.
62
- if (initTestEnvironmentResult.totalCalls > 0) {
63
- // Migrate all of the unmigrated calls `initTestEnvironment`. This could be zero
64
- // if the user has already opted into the new teardown behavior themselves.
65
- initTestEnvironmentResult.callsToMigrate.forEach(node => {
66
- const { span, text } = (0, util_1.getInitTestEnvironmentLiteralReplacement)(node, printer);
67
- const update = tree.beginUpdate((0, path_1.relative)(basePath, node.getSourceFile().fileName));
68
- // The update appears to break if we try to call `remove` with a zero length.
69
- if (span.length > 0) {
70
- update.remove(span.start, span.length);
71
- }
72
- update.insertRight(span.start, text);
73
- tree.commitUpdate(update);
74
- });
75
- }
76
- else {
77
- // Otherwise migrate the metadata passed into the `configureTestingModule` and `withModule`
78
- // calls. This scenario is less likely, but it could happen if `initTestEnvironment` has been
79
- // abstracted away or is inside a .js file.
80
- sourceFiles.forEach(sourceFile => {
81
- (0, util_1.findTestModuleMetadataNodes)(typeChecker, sourceFile).forEach(node => {
82
- const migrated = (0, util_1.migrateTestModuleMetadataLiteral)(node);
83
- const update = tree.beginUpdate((0, path_1.relative)(basePath, node.getSourceFile().fileName));
84
- update.remove(node.getStart(), node.getWidth());
85
- update.insertRight(node.getStart(), printer.printNode(typescript_1.default.EmitHint.Unspecified, migrated, node.getSourceFile()));
86
- tree.commitUpdate(update);
87
- });
88
- });
89
- }
90
- }
91
- });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy90ZXN0YmVkLXRlYXJkb3duL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsMkRBQTJFO0lBQzNFLCtCQUE4QjtJQUM5Qiw0REFBNEI7SUFFNUIsa0dBQTJFO0lBQzNFLDJGQUE0RjtJQUM1RixvRkFBNko7SUFHN0osa0VBQWtFO0lBQ2xFO1FBQ0UsT0FBTyxDQUFPLElBQVUsRUFBRSxFQUFFO1lBQzFCLE1BQU0sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLEdBQUcsTUFBTSxJQUFBLGdEQUF1QixFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFFL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BCLE1BQU0sSUFBSSxnQ0FBbUIsQ0FDekIsNEVBQTRFLENBQUMsQ0FBQzthQUNuRjtZQUVELEtBQUssTUFBTSxZQUFZLElBQUksUUFBUSxFQUFFO2dCQUNuQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzNEO1FBQ0gsQ0FBQyxDQUFBLENBQUM7SUFDSixDQUFDO0lBZkQsNEJBZUM7SUFFRCxTQUFTLDJCQUEyQixDQUFDLElBQVUsRUFBRSxZQUFvQixFQUFFLFFBQWdCO1FBQ3JGLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxJQUFBLHNDQUFzQixFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUNiLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFBLDhCQUFjLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pHLE1BQU0seUJBQXlCLEdBQUcsSUFBQSxtQ0FBNEIsRUFBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxPQUFPLEdBQUcsb0JBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVuQywrRkFBK0Y7UUFDL0YsZ0dBQWdHO1FBQ2hHLGdHQUFnRztRQUNoRyxpREFBaUQ7UUFDakQsSUFBSSx5QkFBeUIsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLGdGQUFnRjtZQUNoRiwyRUFBMkU7WUFDM0UseUJBQXlCLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEQsTUFBTSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsR0FBRyxJQUFBLCtDQUF3QyxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0UsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFBLGVBQVEsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ25GLDZFQUE2RTtnQkFDN0UsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDbkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDeEM7Z0JBQ0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLDJGQUEyRjtZQUMzRiw2RkFBNkY7WUFDN0YsMkNBQTJDO1lBQzNDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQy9CLElBQUEsa0NBQTJCLEVBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBQSx1Q0FBZ0MsRUFBQyxJQUFJLENBQUMsQ0FBQztvQkFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFBLGVBQVEsRUFBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQ25GLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUNoRCxNQUFNLENBQUMsV0FBVyxDQUNkLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDZixPQUFPLENBQUMsU0FBUyxDQUFDLG9CQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDaEYsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1J1bGUsIFNjaGVtYXRpY3NFeGNlcHRpb24sIFRyZWV9IGZyb20gJ0Bhbmd1bGFyLWRldmtpdC9zY2hlbWF0aWNzJztcbmltcG9ydCB7cmVsYXRpdmV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldFByb2plY3RUc0NvbmZpZ1BhdGhzfSBmcm9tICcuLi8uLi91dGlscy9wcm9qZWN0X3RzY29uZmlnX3BhdGhzJztcbmltcG9ydCB7Y2FuTWlncmF0ZUZpbGUsIGNyZWF0ZU1pZ3JhdGlvblByb2dyYW19IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzY3JpcHQvY29tcGlsZXJfaG9zdCc7XG5pbXBvcnQge2ZpbmRJbml0VGVzdEVudmlyb25tZW50Q2FsbHMsIGZpbmRUZXN0TW9kdWxlTWV0YWRhdGFOb2RlcywgZ2V0SW5pdFRlc3RFbnZpcm9ubWVudExpdGVyYWxSZXBsYWNlbWVudCwgbWlncmF0ZVRlc3RNb2R1bGVNZXRhZGF0YUxpdGVyYWx9IGZyb20gJy4vdXRpbCc7XG5cblxuLyoqIE1pZ3JhdGlvbiB0aGF0IGFkZHMgdGhlIGB0ZWFyZG93bmAgZmxhZyB0byBgVGVzdEJlZGAgY2FsbHMuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpOiBSdWxlIHtcbiAgcmV0dXJuIGFzeW5jICh0cmVlOiBUcmVlKSA9PiB7XG4gICAgY29uc3Qge2J1aWxkUGF0aHMsIHRlc3RQYXRoc30gPSBhd2FpdCBnZXRQcm9qZWN0VHNDb25maWdQYXRocyh0cmVlKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgYWxsUGF0aHMgPSBbLi4uYnVpbGRQYXRocywgLi4udGVzdFBhdGhzXTtcblxuICAgIGlmICghYWxsUGF0aHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYW55IHRzY29uZmlnIGZpbGUuIENhbm5vdCBhZGQgYHRlYXJkb3duYCBmbGFnIHRvIGBUZXN0QmVkYC4nKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRzY29uZmlnUGF0aCBvZiBhbGxQYXRocykge1xuICAgICAgcnVuVGVzdGJlZFRlYXJkb3duTWlncmF0aW9uKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcnVuVGVzdGJlZFRlYXJkb3duTWlncmF0aW9uKHRyZWU6IFRyZWUsIHRzY29uZmlnUGF0aDogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHtwcm9ncmFtfSA9IGNyZWF0ZU1pZ3JhdGlvblByb2dyYW0odHJlZSwgdHNjb25maWdQYXRoLCBiYXNlUGF0aCk7XG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBzb3VyY2VGaWxlcyA9XG4gICAgICBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkuZmlsdGVyKHNvdXJjZUZpbGUgPT4gY2FuTWlncmF0ZUZpbGUoYmFzZVBhdGgsIHNvdXJjZUZpbGUsIHByb2dyYW0pKTtcbiAgY29uc3QgaW5pdFRlc3RFbnZpcm9ubWVudFJlc3VsdCA9IGZpbmRJbml0VGVzdEVudmlyb25tZW50Q2FsbHModHlwZUNoZWNrZXIsIHNvdXJjZUZpbGVzKTtcbiAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoKTtcblxuICAvLyBJZiB3ZSBpZGVudGlmaWVkIGF0IGxlYXN0IG9uZSBjYWxsIHRvIGBpbml0VGVzdEVudmlyb25tZW50YCAoY2FuIGJlIG1pZ3JhdGVkIG9yIHVubWlncmF0ZWQpLFxuICAvLyB3ZSBkb24ndCBuZWVkIHRvIG1pZ3JhdGUgYGNvbmZpZ3VyZVRlc3RpbmdNb2R1bGVgIG9yIGB3aXRoTW9kdWxlYCBjYWxscywgYmVjYXVzZSB0aGV5J2xsIHRha2VcbiAgLy8gdGhlIGRlZmF1bHQgdGVhcmRvd24gYmVoYXZpb3IgZnJvbSB0aGUgZW52aXJvbm1lbnQuIFRoaXMgaXMgcHJlZmVycmFibGUsIGJlY2F1c2UgaXQnbGwgcmVzdWx0XG4gIC8vIGluIHRoZSBsZWFzdCBudW1iZXIgb2YgY2hhbmdlcyB0byB1c2VycycgY29kZS5cbiAgaWYgKGluaXRUZXN0RW52aXJvbm1lbnRSZXN1bHQudG90YWxDYWxscyA+IDApIHtcbiAgICAvLyBNaWdyYXRlIGFsbCBvZiB0aGUgdW5taWdyYXRlZCBjYWxscyBgaW5pdFRlc3RFbnZpcm9ubWVudGAuIFRoaXMgY291bGQgYmUgemVyb1xuICAgIC8vIGlmIHRoZSB1c2VyIGhhcyBhbHJlYWR5IG9wdGVkIGludG8gdGhlIG5ldyB0ZWFyZG93biBiZWhhdmlvciB0aGVtc2VsdmVzLlxuICAgIGluaXRUZXN0RW52aXJvbm1lbnRSZXN1bHQuY2FsbHNUb01pZ3JhdGUuZm9yRWFjaChub2RlID0+IHtcbiAgICAgIGNvbnN0IHtzcGFuLCB0ZXh0fSA9IGdldEluaXRUZXN0RW52aXJvbm1lbnRMaXRlcmFsUmVwbGFjZW1lbnQobm9kZSwgcHJpbnRlcik7XG4gICAgICBjb25zdCB1cGRhdGUgPSB0cmVlLmJlZ2luVXBkYXRlKHJlbGF0aXZlKGJhc2VQYXRoLCBub2RlLmdldFNvdXJjZUZpbGUoKS5maWxlTmFtZSkpO1xuICAgICAgLy8gVGhlIHVwZGF0ZSBhcHBlYXJzIHRvIGJyZWFrIGlmIHdlIHRyeSB0byBjYWxsIGByZW1vdmVgIHdpdGggYSB6ZXJvIGxlbmd0aC5cbiAgICAgIGlmIChzcGFuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdXBkYXRlLnJlbW92ZShzcGFuLnN0YXJ0LCBzcGFuLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICB1cGRhdGUuaW5zZXJ0UmlnaHQoc3Bhbi5zdGFydCwgdGV4dCk7XG4gICAgICB0cmVlLmNvbW1pdFVwZGF0ZSh1cGRhdGUpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZSBtaWdyYXRlIHRoZSBtZXRhZGF0YSBwYXNzZWQgaW50byB0aGUgYGNvbmZpZ3VyZVRlc3RpbmdNb2R1bGVgIGFuZCBgd2l0aE1vZHVsZWBcbiAgICAvLyBjYWxscy4gVGhpcyBzY2VuYXJpbyBpcyBsZXNzIGxpa2VseSwgYnV0IGl0IGNvdWxkIGhhcHBlbiBpZiBgaW5pdFRlc3RFbnZpcm9ubWVudGAgaGFzIGJlZW5cbiAgICAvLyBhYnN0cmFjdGVkIGF3YXkgb3IgaXMgaW5zaWRlIGEgLmpzIGZpbGUuXG4gICAgc291cmNlRmlsZXMuZm9yRWFjaChzb3VyY2VGaWxlID0+IHtcbiAgICAgIGZpbmRUZXN0TW9kdWxlTWV0YWRhdGFOb2Rlcyh0eXBlQ2hlY2tlciwgc291cmNlRmlsZSkuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgY29uc3QgbWlncmF0ZWQgPSBtaWdyYXRlVGVzdE1vZHVsZU1ldGFkYXRhTGl0ZXJhbChub2RlKTtcbiAgICAgICAgY29uc3QgdXBkYXRlID0gdHJlZS5iZWdpblVwZGF0ZShyZWxhdGl2ZShiYXNlUGF0aCwgbm9kZS5nZXRTb3VyY2VGaWxlKCkuZmlsZU5hbWUpKTtcbiAgICAgICAgdXBkYXRlLnJlbW92ZShub2RlLmdldFN0YXJ0KCksIG5vZGUuZ2V0V2lkdGgoKSk7XG4gICAgICAgIHVwZGF0ZS5pbnNlcnRSaWdodChcbiAgICAgICAgICAgIG5vZGUuZ2V0U3RhcnQoKSxcbiAgICAgICAgICAgIHByaW50ZXIucHJpbnROb2RlKHRzLkVtaXRIaW50LlVuc3BlY2lmaWVkLCBtaWdyYXRlZCwgbm9kZS5nZXRTb3VyY2VGaWxlKCkpKTtcbiAgICAgICAgdHJlZS5jb21taXRVcGRhdGUodXBkYXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -1,35 +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/testbed-teardown/util" />
9
- import ts from 'typescript';
10
- /** Result of a full-program analysis looking for `initTestEnvironment` calls. */
11
- export interface InitTestEnvironmentAnalysis {
12
- /** Total number of calls that were found. */
13
- totalCalls: number;
14
- /** Calls that need to be migrated. */
15
- callsToMigrate: ts.CallExpression[];
16
- }
17
- /** Finds the `initTestEnvironment` calls that need to be migrated. */
18
- export declare function findInitTestEnvironmentCalls(typeChecker: ts.TypeChecker, allSourceFiles: ts.SourceFile[]): InitTestEnvironmentAnalysis;
19
- /** Finds the `configureTestingModule` and `withModule` calls that need to be migrated. */
20
- export declare function findTestModuleMetadataNodes(typeChecker: ts.TypeChecker, sourceFile: ts.SourceFile): ts.ObjectLiteralExpression[];
21
- /**
22
- * Gets data that can be used to migrate a call to `TestBed.initTestEnvironment`.
23
- * The returned `span` is used to mark the text that should be replaced while the `text`
24
- * is the code that should be inserted instead.
25
- */
26
- export declare function getInitTestEnvironmentLiteralReplacement(node: ts.CallExpression, printer: ts.Printer): {
27
- span: {
28
- start: number;
29
- end: number;
30
- length: number;
31
- };
32
- text: string;
33
- };
34
- /** Migrates an object literal that is passed into `configureTestingModule` or `withModule`. */
35
- export declare function migrateTestModuleMetadataLiteral(node: ts.ObjectLiteralExpression): ts.ObjectLiteralExpression;