@angular/core 15.1.0-next.2 → 15.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/esm2020/src/application_init.mjs +2 -1
  2. package/esm2020/src/application_ref.mjs +10 -3
  3. package/esm2020/src/di/injector_compatibility.mjs +2 -2
  4. package/esm2020/src/di/r3_injector.mjs +2 -2
  5. package/esm2020/src/errors.mjs +1 -1
  6. package/esm2020/src/linker/view_ref.mjs +1 -1
  7. package/esm2020/src/render3/i18n/i18n_parse.mjs +17 -2
  8. package/esm2020/src/util/global.mjs +1 -1
  9. package/esm2020/src/version.mjs +1 -1
  10. package/esm2020/testing/src/component_fixture.mjs +1 -1
  11. package/esm2020/testing/src/logger.mjs +7 -7
  12. package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
  13. package/esm2020/testing/src/test_bed.mjs +1 -1
  14. package/fesm2015/core.mjs +111 -1560
  15. package/fesm2015/core.mjs.map +1 -1
  16. package/fesm2015/testing.mjs +79 -1334
  17. package/fesm2015/testing.mjs.map +1 -1
  18. package/fesm2020/core.mjs +113 -1584
  19. package/fesm2020/core.mjs.map +1 -1
  20. package/fesm2020/testing.mjs +81 -1358
  21. package/fesm2020/testing.mjs.map +1 -1
  22. package/index.d.ts +4 -4
  23. package/package.json +1 -1
  24. package/schematics/migrations/relative-link-resolution/bundle.js +265 -0
  25. package/schematics/migrations/relative-link-resolution/bundle.js.map +7 -0
  26. package/schematics/migrations/relative-link-resolution/bundle_metadata.json +1 -0
  27. package/schematics/migrations/router-link-with-href/bundle.js +350 -0
  28. package/schematics/migrations/router-link-with-href/bundle.js.map +7 -0
  29. package/schematics/migrations/router-link-with-href/bundle_metadata.json +1 -0
  30. package/schematics/migrations.json +5 -20
  31. package/testing/index.d.ts +4 -1
  32. package/esm2020/src/render3/util/debug_utils.mjs +0 -40
  33. package/esm2020/testing/src/lang_utils.mjs +0 -14
  34. package/schematics/migrations/entry-components/index.d.ts +0 -11
  35. package/schematics/migrations/entry-components/index.js +0 -71
  36. package/schematics/migrations/entry-components/util.d.ts +0 -16
  37. package/schematics/migrations/entry-components/util.js +0 -57
  38. package/schematics/migrations/path-match-type/index.d.ts +0 -11
  39. package/schematics/migrations/path-match-type/index.js +0 -95
  40. package/schematics/migrations/path-match-type/transform.d.ts +0 -19
  41. package/schematics/migrations/path-match-type/transform.js +0 -48
  42. package/schematics/migrations/path-match-type/update_recorder.d.ts +0 -18
  43. package/schematics/migrations/path-match-type/update_recorder.js +0 -20
  44. package/schematics/migrations/path-match-type/util.d.ts +0 -11
  45. package/schematics/migrations/path-match-type/util.js +0 -106
  46. package/schematics/migrations/relative-link-resolution/index.d.ts +0 -10
  47. package/schematics/migrations/relative-link-resolution/index.js +0 -68
  48. package/schematics/migrations/relative-link-resolution/util.d.ts +0 -20
  49. package/schematics/migrations/relative-link-resolution/util.js +0 -82
  50. package/schematics/migrations/router-link-with-href/index.d.ts +0 -10
  51. package/schematics/migrations/router-link-with-href/index.js +0 -70
  52. package/schematics/migrations/router-link-with-href/util.d.ts +0 -19
  53. package/schematics/migrations/router-link-with-href/util.js +0 -111
  54. package/schematics/migrations/typed-forms/index.d.ts +0 -10
  55. package/schematics/migrations/typed-forms/index.js +0 -68
  56. package/schematics/migrations/typed-forms/util.d.ts +0 -19
  57. package/schematics/migrations/typed-forms/util.js +0 -134
  58. package/schematics/utils/import_manager.d.ts +0 -57
  59. package/schematics/utils/import_manager.js +0 -234
  60. package/schematics/utils/line_mappings.d.ts +0 -18
  61. package/schematics/utils/line_mappings.js +0 -75
  62. package/schematics/utils/load_esm.d.ts +0 -32
  63. package/schematics/utils/load_esm.js +0 -79
  64. package/schematics/utils/ng_component_template.d.ts +0 -44
  65. package/schematics/utils/ng_component_template.js +0 -131
  66. package/schematics/utils/ng_decorators.d.ts +0 -23
  67. package/schematics/utils/ng_decorators.js +0 -37
  68. package/schematics/utils/parse_html.d.ts +0 -14
  69. package/schematics/utils/parse_html.js +0 -37
  70. package/schematics/utils/project_tsconfig_paths.d.ts +0 -17
  71. package/schematics/utils/project_tsconfig_paths.js +0 -122
  72. package/schematics/utils/template_ast_visitor.d.ts +0 -55
  73. package/schematics/utils/template_ast_visitor.js +0 -73
  74. package/schematics/utils/typescript/class_declaration.d.ts +0 -15
  75. package/schematics/utils/typescript/class_declaration.js +0 -52
  76. package/schematics/utils/typescript/compiler_host.d.ts +0 -34
  77. package/schematics/utils/typescript/compiler_host.js +0 -85
  78. package/schematics/utils/typescript/decorators.d.ts +0 -11
  79. package/schematics/utils/typescript/decorators.js +0 -37
  80. package/schematics/utils/typescript/find_base_classes.d.ts +0 -14
  81. package/schematics/utils/typescript/find_base_classes.js +0 -47
  82. package/schematics/utils/typescript/functions.d.ts +0 -17
  83. package/schematics/utils/typescript/functions.js +0 -46
  84. package/schematics/utils/typescript/imports.d.ts +0 -53
  85. package/schematics/utils/typescript/imports.js +0 -128
  86. package/schematics/utils/typescript/nodes.d.ts +0 -20
  87. package/schematics/utils/typescript/nodes.js +0 -77
  88. package/schematics/utils/typescript/parse_tsconfig.d.ts +0 -10
  89. package/schematics/utils/typescript/parse_tsconfig.js +0 -66
  90. package/schematics/utils/typescript/property_name.d.ts +0 -19
  91. package/schematics/utils/typescript/property_name.js +0 -41
  92. package/schematics/utils/typescript/symbol.d.ts +0 -19
  93. package/schematics/utils/typescript/symbol.js +0 -93
@@ -1,82 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- (function (factory) {
12
- if (typeof module === "object" && typeof module.exports === "object") {
13
- var v = factory(require, exports);
14
- if (v !== undefined) module.exports = v;
15
- }
16
- else if (typeof define === "function" && define.amd) {
17
- define("@angular/core/schematics/migrations/relative-link-resolution/util", ["require", "exports", "typescript"], factory);
18
- }
19
- })(function (require, exports) {
20
- "use strict";
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.migrateFile = void 0;
23
- const typescript_1 = __importDefault(require("typescript"));
24
- const relativeLinkResolution = 'relativeLinkResolution';
25
- const knownConfigValues = new Set([`'legacy'`, `'corrected'`]);
26
- function migrateFile(sourceFile, rewriteFn) {
27
- let rewrites = [];
28
- const usages = getUsages(sourceFile);
29
- for (const { objectLiteral, property } of usages) {
30
- const replacementNode = typescript_1.default.factory.updateObjectLiteralExpression(objectLiteral, objectLiteral.properties.filter(prop => prop !== property));
31
- const printer = typescript_1.default.createPrinter();
32
- const replacementText = printer.printNode(typescript_1.default.EmitHint.Unspecified, replacementNode, sourceFile);
33
- rewrites.push({
34
- startPos: objectLiteral.getStart(),
35
- width: objectLiteral.getWidth(),
36
- replacement: replacementText,
37
- });
38
- }
39
- // Process rewrites last-to-first (based on start pos) to avoid offset shifts during rewrites.
40
- rewrites = sortByStartPosDescending(rewrites);
41
- for (const rewrite of rewrites) {
42
- rewriteFn(rewrite.startPos, rewrite.width, rewrite.replacement);
43
- }
44
- }
45
- exports.migrateFile = migrateFile;
46
- function getUsages(sourceFile) {
47
- const usages = [];
48
- const visitNode = (node) => {
49
- if (typescript_1.default.isObjectLiteralExpression(node)) {
50
- // Look for patterns like the following:
51
- // ```
52
- // { ... relativeLinkResolution: 'legacy', ... }
53
- // ```
54
- // or:
55
- // ```
56
- // { ... relativeLinkResolution: 'corrected', ... }
57
- // ```
58
- // If the value is unknown (i.e. not 'legacy' or 'corrected'),
59
- // do not attempt to rewrite (this might be an application-specific
60
- // configuration, not a part of Router).
61
- const property = node.properties.find(prop => typescript_1.default.isPropertyAssignment(prop) && typescript_1.default.isIdentifier(prop.name) &&
62
- prop.name.text === relativeLinkResolution &&
63
- knownConfigValues.has(prop.initializer.getText()));
64
- if (property) {
65
- usages.push({ objectLiteral: node, property });
66
- }
67
- }
68
- typescript_1.default.forEachChild(node, visitNode);
69
- };
70
- typescript_1.default.forEachChild(sourceFile, visitNode);
71
- return usages;
72
- }
73
- /**
74
- * Sort all found usages based on their start positions in the source file in descending order (i.e.
75
- * last usage goes first on the list, etc). This is needed to avoid shifting offsets in the source
76
- * file (in case there are multiple usages) as we rewrite symbols.
77
- */
78
- function sortByStartPosDescending(rewrites) {
79
- return rewrites.sort((entityA, entityB) => entityB.startPos - entityA.startPos);
80
- }
81
- });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JlbGF0aXZlLWxpbmstcmVzb2x1dGlvbi91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDREQUE0QjtJQUU1QixNQUFNLHNCQUFzQixHQUFHLHdCQUF3QixDQUFDO0lBQ3hELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQWUvRCxTQUFnQixXQUFXLENBQUMsVUFBeUIsRUFBRSxTQUFvQjtRQUN6RSxJQUFJLFFBQVEsR0FBb0IsRUFBRSxDQUFDO1FBQ25DLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxLQUFLLE1BQU0sRUFBQyxhQUFhLEVBQUUsUUFBUSxFQUFDLElBQUksTUFBTSxFQUFFO1lBQzlDLE1BQU0sZUFBZSxHQUFHLG9CQUFFLENBQUMsT0FBTyxDQUFDLDZCQUE2QixDQUM1RCxhQUFhLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMvRSxNQUFNLE9BQU8sR0FBRyxvQkFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsb0JBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNaLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUSxFQUFFO2dCQUNsQyxLQUFLLEVBQUUsYUFBYSxDQUFDLFFBQVEsRUFBRTtnQkFDL0IsV0FBVyxFQUFFLGVBQWU7YUFDN0IsQ0FBQyxDQUFDO1NBQ0o7UUFFRCw4RkFBOEY7UUFDOUYsUUFBUSxHQUFHLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO1lBQzlCLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2pFO0lBQ0gsQ0FBQztJQXBCRCxrQ0FvQkM7SUFFRCxTQUFTLFNBQVMsQ0FBQyxVQUF5QjtRQUMxQyxNQUFNLE1BQU0sR0FBcUIsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxvQkFBRSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0Qyx3Q0FBd0M7Z0JBQ3hDLE1BQU07Z0JBQ04sZ0RBQWdEO2dCQUNoRCxNQUFNO2dCQUNOLE1BQU07Z0JBQ04sTUFBTTtnQkFDTixtREFBbUQ7Z0JBQ25ELE1BQU07Z0JBQ04sOERBQThEO2dCQUM5RCxtRUFBbUU7Z0JBQ25FLHdDQUF3QztnQkFDeEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2pDLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxvQkFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO29CQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxzQkFBc0I7b0JBQ3pDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxRQUFRLEVBQUU7b0JBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztpQkFDOUM7YUFDRjtZQUNELG9CQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7UUFDRixvQkFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLHdCQUF3QixDQUFDLFFBQXlCO1FBQ3pELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5jb25zdCByZWxhdGl2ZUxpbmtSZXNvbHV0aW9uID0gJ3JlbGF0aXZlTGlua1Jlc29sdXRpb24nO1xuY29uc3Qga25vd25Db25maWdWYWx1ZXMgPSBuZXcgU2V0KFtgJ2xlZ2FjeSdgLCBgJ2NvcnJlY3RlZCdgXSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmV3cml0ZUVudGl0eSB7XG4gIHN0YXJ0UG9zOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG4gIHJlcGxhY2VtZW50OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0YWJsZU5vZGUge1xuICBvYmplY3RMaXRlcmFsOiB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbjtcbiAgcHJvcGVydHk6IHRzLk9iamVjdExpdGVyYWxFbGVtZW50TGlrZTtcbn1cblxuZXhwb3J0IHR5cGUgUmV3cml0ZUZuID0gKHN0YXJ0UG9zOiBudW1iZXIsIG9yaWdMZW5ndGg6IG51bWJlciwgdGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZUZpbGUoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgcmV3cml0ZUZuOiBSZXdyaXRlRm4pIHtcbiAgbGV0IHJld3JpdGVzOiBSZXdyaXRlRW50aXR5W10gPSBbXTtcbiAgY29uc3QgdXNhZ2VzID0gZ2V0VXNhZ2VzKHNvdXJjZUZpbGUpO1xuICBmb3IgKGNvbnN0IHtvYmplY3RMaXRlcmFsLCBwcm9wZXJ0eX0gb2YgdXNhZ2VzKSB7XG4gICAgY29uc3QgcmVwbGFjZW1lbnROb2RlID0gdHMuZmFjdG9yeS51cGRhdGVPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihcbiAgICAgICAgb2JqZWN0TGl0ZXJhbCwgb2JqZWN0TGl0ZXJhbC5wcm9wZXJ0aWVzLmZpbHRlcihwcm9wID0+IHByb3AgIT09IHByb3BlcnR5KSk7XG4gICAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoKTtcbiAgICBjb25zdCByZXBsYWNlbWVudFRleHQgPSBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgcmVwbGFjZW1lbnROb2RlLCBzb3VyY2VGaWxlKTtcbiAgICByZXdyaXRlcy5wdXNoKHtcbiAgICAgIHN0YXJ0UG9zOiBvYmplY3RMaXRlcmFsLmdldFN0YXJ0KCksXG4gICAgICB3aWR0aDogb2JqZWN0TGl0ZXJhbC5nZXRXaWR0aCgpLFxuICAgICAgcmVwbGFjZW1lbnQ6IHJlcGxhY2VtZW50VGV4dCxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgcmV3cml0ZXMgbGFzdC10by1maXJzdCAoYmFzZWQgb24gc3RhcnQgcG9zKSB0byBhdm9pZCBvZmZzZXQgc2hpZnRzIGR1cmluZyByZXdyaXRlcy5cbiAgcmV3cml0ZXMgPSBzb3J0QnlTdGFydFBvc0Rlc2NlbmRpbmcocmV3cml0ZXMpO1xuICBmb3IgKGNvbnN0IHJld3JpdGUgb2YgcmV3cml0ZXMpIHtcbiAgICByZXdyaXRlRm4ocmV3cml0ZS5zdGFydFBvcywgcmV3cml0ZS53aWR0aCwgcmV3cml0ZS5yZXBsYWNlbWVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VXNhZ2VzKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpOiBNaWdyYXRhYmxlTm9kZVtdIHtcbiAgY29uc3QgdXNhZ2VzOiBNaWdyYXRhYmxlTm9kZVtdID0gW107XG4gIGNvbnN0IHZpc2l0Tm9kZSA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24obm9kZSkpIHtcbiAgICAgIC8vIExvb2sgZm9yIHBhdHRlcm5zIGxpa2UgdGhlIGZvbGxvd2luZzpcbiAgICAgIC8vIGBgYFxuICAgICAgLy8geyAuLi4gcmVsYXRpdmVMaW5rUmVzb2x1dGlvbjogJ2xlZ2FjeScsIC4uLiB9XG4gICAgICAvLyBgYGBcbiAgICAgIC8vIG9yOlxuICAgICAgLy8gYGBgXG4gICAgICAvLyB7IC4uLiByZWxhdGl2ZUxpbmtSZXNvbHV0aW9uOiAnY29ycmVjdGVkJywgLi4uIH1cbiAgICAgIC8vIGBgYFxuICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIHVua25vd24gKGkuZS4gbm90ICdsZWdhY3knIG9yICdjb3JyZWN0ZWQnKSxcbiAgICAgIC8vIGRvIG5vdCBhdHRlbXB0IHRvIHJld3JpdGUgKHRoaXMgbWlnaHQgYmUgYW4gYXBwbGljYXRpb24tc3BlY2lmaWNcbiAgICAgIC8vIGNvbmZpZ3VyYXRpb24sIG5vdCBhIHBhcnQgb2YgUm91dGVyKS5cbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gbm9kZS5wcm9wZXJ0aWVzLmZpbmQoXG4gICAgICAgICAgcHJvcCA9PiB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wKSAmJiB0cy5pc0lkZW50aWZpZXIocHJvcC5uYW1lKSAmJlxuICAgICAgICAgICAgICBwcm9wLm5hbWUudGV4dCA9PT0gcmVsYXRpdmVMaW5rUmVzb2x1dGlvbiAmJlxuICAgICAgICAgICAgICBrbm93bkNvbmZpZ1ZhbHVlcy5oYXMocHJvcC5pbml0aWFsaXplci5nZXRUZXh0KCkpKTtcbiAgICAgIGlmIChwcm9wZXJ0eSkge1xuICAgICAgICB1c2FnZXMucHVzaCh7b2JqZWN0TGl0ZXJhbDogbm9kZSwgcHJvcGVydHl9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSk7XG4gIH07XG4gIHRzLmZvckVhY2hDaGlsZChzb3VyY2VGaWxlLCB2aXNpdE5vZGUpO1xuICByZXR1cm4gdXNhZ2VzO1xufVxuXG4vKipcbiAqIFNvcnQgYWxsIGZvdW5kIHVzYWdlcyBiYXNlZCBvbiB0aGVpciBzdGFydCBwb3NpdGlvbnMgaW4gdGhlIHNvdXJjZSBmaWxlIGluIGRlc2NlbmRpbmcgb3JkZXIgKGkuZS5cbiAqIGxhc3QgdXNhZ2UgZ29lcyBmaXJzdCBvbiB0aGUgbGlzdCwgZXRjKS4gVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgc2hpZnRpbmcgb2Zmc2V0cyBpbiB0aGUgc291cmNlXG4gKiBmaWxlIChpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSB1c2FnZXMpIGFzIHdlIHJld3JpdGUgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gc29ydEJ5U3RhcnRQb3NEZXNjZW5kaW5nKHJld3JpdGVzOiBSZXdyaXRlRW50aXR5W10pOiBSZXdyaXRlRW50aXR5W10ge1xuICByZXR1cm4gcmV3cml0ZXMuc29ydCgoZW50aXR5QSwgZW50aXR5QikgPT4gZW50aXR5Qi5zdGFydFBvcyAtIGVudGl0eUEuc3RhcnRQb3MpO1xufVxuIl19
@@ -1,10 +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-with-href" />
9
- import { Rule } from '@angular-devkit/schematics';
10
- export default function (): Rule;
@@ -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
- 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-with-href", ["require", "exports", "@angular-devkit/schematics", "path", "@angular/core/schematics/utils/project_tsconfig_paths", "@angular/core/schematics/utils/typescript/compiler_host", "@angular/core/schematics/migrations/router-link-with-href/util"], factory);
24
- }
25
- })(function (require, exports) {
26
- "use strict";
27
- Object.defineProperty(exports, "__esModule", { value: true });
28
- const schematics_1 = require("@angular-devkit/schematics");
29
- const path_1 = require("path");
30
- const project_tsconfig_paths_1 = require("@angular/core/schematics/utils/project_tsconfig_paths");
31
- const compiler_host_1 = require("@angular/core/schematics/utils/typescript/compiler_host");
32
- const util_1 = require("@angular/core/schematics/migrations/router-link-with-href/util");
33
- function default_1() {
34
- return (tree) => __awaiter(this, void 0, void 0, function* () {
35
- const { buildPaths, testPaths } = yield (0, project_tsconfig_paths_1.getProjectTsConfigPaths)(tree);
36
- const basePath = process.cwd();
37
- const allPaths = [...buildPaths, ...testPaths];
38
- if (!allPaths.length) {
39
- throw new schematics_1.SchematicsException('Could not find any tsconfig file. Cannot run the `RouterLinkWithHref` migration.');
40
- }
41
- for (const tsconfigPath of allPaths) {
42
- runRouterLinkWithHrefMigration(tree, tsconfigPath, basePath);
43
- }
44
- });
45
- }
46
- exports.default = default_1;
47
- function runRouterLinkWithHrefMigration(tree, tsconfigPath, basePath) {
48
- const { program } = (0, compiler_host_1.createMigrationProgram)(tree, tsconfigPath, basePath);
49
- const typeChecker = program.getTypeChecker();
50
- const sourceFiles = program.getSourceFiles().filter(sourceFile => (0, compiler_host_1.canMigrateFile)(basePath, sourceFile, program));
51
- for (const sourceFile of sourceFiles) {
52
- let update = null;
53
- const rewriter = (startPos, width, text) => {
54
- if (update === null) {
55
- // Lazily initialize update, because most files will not require migration.
56
- update = tree.beginUpdate((0, path_1.relative)(basePath, sourceFile.fileName));
57
- }
58
- update.remove(startPos, width);
59
- if (text !== null) {
60
- update.insertLeft(startPos, text);
61
- }
62
- };
63
- (0, util_1.migrateFile)(sourceFile, typeChecker, rewriter);
64
- if (update !== null) {
65
- tree.commitUpdate(update);
66
- }
67
- }
68
- }
69
- });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy9yb3V0ZXItbGluay13aXRoLWhyZWYvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFFSCwyREFBMkY7SUFDM0YsK0JBQThCO0lBRTlCLGtHQUEyRTtJQUMzRSwyRkFBNEY7SUFFNUYseUZBQW1DO0lBRW5DO1FBQ0UsT0FBTyxDQUFPLElBQVUsRUFBRSxFQUFFO1lBQzFCLE1BQU0sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLEdBQUcsTUFBTSxJQUFBLGdEQUF1QixFQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUMvQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFFL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3BCLE1BQU0sSUFBSSxnQ0FBbUIsQ0FDekIsa0ZBQWtGLENBQUMsQ0FBQzthQUN6RjtZQUVELEtBQUssTUFBTSxZQUFZLElBQUksUUFBUSxFQUFFO2dCQUNuQyw4QkFBOEIsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQzlEO1FBQ0gsQ0FBQyxDQUFBLENBQUM7SUFDSixDQUFDO0lBZkQsNEJBZUM7SUFFRCxTQUFTLDhCQUE4QixDQUFDLElBQVUsRUFBRSxZQUFvQixFQUFFLFFBQWdCO1FBQ3hGLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxJQUFBLHNDQUFzQixFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUNiLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFBLDhCQUFjLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBRWpHLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO1lBQ3BDLElBQUksTUFBTSxHQUF3QixJQUFJLENBQUM7WUFFdkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEtBQWEsRUFBRSxJQUFpQixFQUFFLEVBQUU7Z0JBQ3RFLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtvQkFDbkIsMkVBQTJFO29CQUMzRSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFBLGVBQVEsRUFBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ3BFO2dCQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvQixJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7b0JBQ2pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNuQztZQUNILENBQUMsQ0FBQztZQUVGLElBQUEsa0JBQVcsRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRS9DLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzQjtTQUNGO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1J1bGUsIFNjaGVtYXRpY3NFeGNlcHRpb24sIFRyZWUsIFVwZGF0ZVJlY29yZGVyfSBmcm9tICdAYW5ndWxhci1kZXZraXQvc2NoZW1hdGljcyc7XG5pbXBvcnQge3JlbGF0aXZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtnZXRQcm9qZWN0VHNDb25maWdQYXRoc30gZnJvbSAnLi4vLi4vdXRpbHMvcHJvamVjdF90c2NvbmZpZ19wYXRocyc7XG5pbXBvcnQge2Nhbk1pZ3JhdGVGaWxlLCBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtfSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L2NvbXBpbGVyX2hvc3QnO1xuXG5pbXBvcnQge21pZ3JhdGVGaWxlfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpOiBSdWxlIHtcbiAgcmV0dXJuIGFzeW5jICh0cmVlOiBUcmVlKSA9PiB7XG4gICAgY29uc3Qge2J1aWxkUGF0aHMsIHRlc3RQYXRoc30gPSBhd2FpdCBnZXRQcm9qZWN0VHNDb25maWdQYXRocyh0cmVlKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgYWxsUGF0aHMgPSBbLi4uYnVpbGRQYXRocywgLi4udGVzdFBhdGhzXTtcblxuICAgIGlmICghYWxsUGF0aHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYW55IHRzY29uZmlnIGZpbGUuIENhbm5vdCBydW4gdGhlIGBSb3V0ZXJMaW5rV2l0aEhyZWZgIG1pZ3JhdGlvbi4nKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRzY29uZmlnUGF0aCBvZiBhbGxQYXRocykge1xuICAgICAgcnVuUm91dGVyTGlua1dpdGhIcmVmTWlncmF0aW9uKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcnVuUm91dGVyTGlua1dpdGhIcmVmTWlncmF0aW9uKHRyZWU6IFRyZWUsIHRzY29uZmlnUGF0aDogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IHtwcm9ncmFtfSA9IGNyZWF0ZU1pZ3JhdGlvblByb2dyYW0odHJlZSwgdHNjb25maWdQYXRoLCBiYXNlUGF0aCk7XG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBzb3VyY2VGaWxlcyA9XG4gICAgICBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkuZmlsdGVyKHNvdXJjZUZpbGUgPT4gY2FuTWlncmF0ZUZpbGUoYmFzZVBhdGgsIHNvdXJjZUZpbGUsIHByb2dyYW0pKTtcblxuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2Ygc291cmNlRmlsZXMpIHtcbiAgICBsZXQgdXBkYXRlOiBVcGRhdGVSZWNvcmRlcnxudWxsID0gbnVsbDtcblxuICAgIGNvbnN0IHJld3JpdGVyID0gKHN0YXJ0UG9zOiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIHRleHQ6IHN0cmluZ3xudWxsKSA9PiB7XG4gICAgICBpZiAodXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgIC8vIExhemlseSBpbml0aWFsaXplIHVwZGF0ZSwgYmVjYXVzZSBtb3N0IGZpbGVzIHdpbGwgbm90IHJlcXVpcmUgbWlncmF0aW9uLlxuICAgICAgICB1cGRhdGUgPSB0cmVlLmJlZ2luVXBkYXRlKHJlbGF0aXZlKGJhc2VQYXRoLCBzb3VyY2VGaWxlLmZpbGVOYW1lKSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUucmVtb3ZlKHN0YXJ0UG9zLCB3aWR0aCk7XG4gICAgICBpZiAodGV4dCAhPT0gbnVsbCkge1xuICAgICAgICB1cGRhdGUuaW5zZXJ0TGVmdChzdGFydFBvcywgdGV4dCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIG1pZ3JhdGVGaWxlKHNvdXJjZUZpbGUsIHR5cGVDaGVja2VyLCByZXdyaXRlcik7XG5cbiAgICBpZiAodXBkYXRlICE9PSBudWxsKSB7XG4gICAgICB0cmVlLmNvbW1pdFVwZGF0ZSh1cGRhdGUpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,19 +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-with-href/util" />
9
- import ts from 'typescript';
10
- export declare const routerLink = "RouterLink";
11
- export declare const routerLinkWithHref = "RouterLinkWithHref";
12
- export declare const routerModule = "@angular/router";
13
- export interface RewriteEntity {
14
- startPos: number;
15
- width: number;
16
- replacement: string;
17
- }
18
- export type RewriteFn = (startPos: number, width: number, text: string) => void;
19
- export declare function migrateFile(sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker, rewrite: RewriteFn): void;
@@ -1,111 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- (function (factory) {
12
- if (typeof module === "object" && typeof module.exports === "object") {
13
- var v = factory(require, exports);
14
- if (v !== undefined) module.exports = v;
15
- }
16
- else if (typeof define === "function" && define.amd) {
17
- define("@angular/core/schematics/migrations/router-link-with-href/util", ["require", "exports", "typescript", "@angular/core/schematics/utils/typescript/imports", "@angular/core/schematics/utils/typescript/nodes"], factory);
18
- }
19
- })(function (require, exports) {
20
- "use strict";
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.migrateFile = exports.routerModule = exports.routerLinkWithHref = exports.routerLink = void 0;
23
- const typescript_1 = __importDefault(require("typescript"));
24
- const imports_1 = require("@angular/core/schematics/utils/typescript/imports");
25
- const nodes_1 = require("@angular/core/schematics/utils/typescript/nodes");
26
- exports.routerLink = 'RouterLink';
27
- exports.routerLinkWithHref = 'RouterLinkWithHref';
28
- exports.routerModule = '@angular/router';
29
- function migrateFile(sourceFile, typeChecker, rewrite) {
30
- const routerLinkWithHrefSpec = (0, imports_1.getImportSpecifier)(sourceFile, exports.routerModule, exports.routerLinkWithHref);
31
- // No `RouterLinkWithHref` found, nothing to migrate, exit early.
32
- if (routerLinkWithHrefSpec === null)
33
- return;
34
- let rewrites = findUsages(sourceFile, typeChecker);
35
- // There are some usages of the `RouterLinkWithHref` symbol, which need to
36
- // be rewritten to `RouterLink` instead. Let's check if the `RouterLink` is
37
- // already imported.
38
- const routerLinkSpec = (0, imports_1.getImportSpecifier)(sourceFile, exports.routerModule, exports.routerLink);
39
- if (routerLinkSpec) {
40
- // The `RouterLink` symbol is already imported, just drop the `RouterLinkWithHref` one.
41
- const routerLinkNamedImports = routerLinkWithHrefSpec ?
42
- (0, nodes_1.closestNode)(routerLinkWithHrefSpec, typescript_1.default.SyntaxKind.NamedImports) :
43
- null;
44
- if (routerLinkNamedImports !== null) {
45
- // Given an original import like this one:
46
- // ```
47
- // import {RouterModule, RouterLinkWithHref, RouterLink} from '@angular/router';
48
- // ```
49
- // The code below removes the `RouterLinkWithHref` from the named imports section
50
- // (i.e. `{RouterModule, RouterLinkWithHref, RouterLink}`) and prints an updated
51
- // version (`{RouterModule, RouterLink}`) to a string, which is used as a
52
- // replacement.
53
- const rewrittenNamedImports = (0, imports_1.removeSymbolFromNamedImports)(routerLinkNamedImports, routerLinkWithHrefSpec);
54
- const printer = typescript_1.default.createPrinter();
55
- const replacement = printer.printNode(typescript_1.default.EmitHint.Unspecified, rewrittenNamedImports, sourceFile);
56
- rewrites.push({
57
- startPos: routerLinkNamedImports.getStart(),
58
- width: routerLinkNamedImports.getWidth(),
59
- replacement: replacement,
60
- });
61
- }
62
- }
63
- else {
64
- // The `RouterLink` symbol is not imported, but the `RouterLinkWithHref` is imported,
65
- // so rewrite `RouterLinkWithHref` -> `RouterLink`.
66
- rewrites.push({
67
- startPos: routerLinkWithHrefSpec.getStart(),
68
- width: routerLinkWithHrefSpec.getWidth(),
69
- replacement: exports.routerLink,
70
- });
71
- }
72
- // Process rewrites last-to-first (based on start pos) to avoid offset shifts during rewrites.
73
- rewrites = sortByStartPosDescending(rewrites);
74
- for (const usage of rewrites) {
75
- rewrite(usage.startPos, usage.width, usage.replacement);
76
- }
77
- }
78
- exports.migrateFile = migrateFile;
79
- function findUsages(sourceFile, typeChecker) {
80
- const usages = [];
81
- const visitNode = (node) => {
82
- if (typescript_1.default.isImportSpecifier(node)) {
83
- // Skip this node and all of its children; imports are a special case.
84
- return;
85
- }
86
- if (typescript_1.default.isIdentifier(node)) {
87
- const importIdentifier = (0, imports_1.getImportOfIdentifier)(typeChecker, node);
88
- if ((importIdentifier === null || importIdentifier === void 0 ? void 0 : importIdentifier.importModule) === exports.routerModule &&
89
- importIdentifier.name === exports.routerLinkWithHref) {
90
- usages.push({
91
- startPos: node.getStart(),
92
- width: node.getWidth(),
93
- replacement: exports.routerLink,
94
- });
95
- }
96
- }
97
- typescript_1.default.forEachChild(node, visitNode);
98
- };
99
- typescript_1.default.forEachChild(sourceFile, visitNode);
100
- return usages;
101
- }
102
- /**
103
- * Sort all found usages based on their start positions in the source file in descending order (i.e.
104
- * last usage goes first on the list, etc). This is needed to avoid shifting offsets in the source
105
- * file (in case there are multiple usages) as we rewrite symbols.
106
- */
107
- function sortByStartPosDescending(rewrites) {
108
- return rewrites.sort((entityA, entityB) => entityB.startPos - entityA.startPos);
109
- }
110
- });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3JvdXRlci1saW5rLXdpdGgtaHJlZi91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDREQUE0QjtJQUU1QiwrRUFBdUg7SUFDdkgsMkVBQXlEO0lBRTVDLFFBQUEsVUFBVSxHQUFHLFlBQVksQ0FBQztJQUMxQixRQUFBLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDO0lBQzFDLFFBQUEsWUFBWSxHQUFHLGlCQUFpQixDQUFDO0lBVTlDLFNBQWdCLFdBQVcsQ0FDdkIsVUFBeUIsRUFBRSxXQUEyQixFQUFFLE9BQWtCO1FBQzVFLE1BQU0sc0JBQXNCLEdBQUcsSUFBQSw0QkFBa0IsRUFBQyxVQUFVLEVBQUUsb0JBQVksRUFBRSwwQkFBa0IsQ0FBQyxDQUFDO1FBRWhHLGlFQUFpRTtRQUNqRSxJQUFJLHNCQUFzQixLQUFLLElBQUk7WUFBRSxPQUFPO1FBRTVDLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFbkQsMEVBQTBFO1FBQzFFLDJFQUEyRTtRQUMzRSxvQkFBb0I7UUFDcEIsTUFBTSxjQUFjLEdBQUcsSUFBQSw0QkFBa0IsRUFBQyxVQUFVLEVBQUUsb0JBQVksRUFBRSxrQkFBVSxDQUFDLENBQUM7UUFFaEYsSUFBSSxjQUFjLEVBQUU7WUFDbEIsdUZBQXVGO1lBQ3ZGLE1BQU0sc0JBQXNCLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztnQkFDbkQsSUFBQSxtQkFBVyxFQUFrQixzQkFBc0IsRUFBRSxvQkFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixJQUFJLENBQUM7WUFDVCxJQUFJLHNCQUFzQixLQUFLLElBQUksRUFBRTtnQkFDbkMsMENBQTBDO2dCQUMxQyxNQUFNO2dCQUNOLGdGQUFnRjtnQkFDaEYsTUFBTTtnQkFDTixpRkFBaUY7Z0JBQ2pGLGdGQUFnRjtnQkFDaEYseUVBQXlFO2dCQUN6RSxlQUFlO2dCQUNmLE1BQU0scUJBQXFCLEdBQ3ZCLElBQUEsc0NBQTRCLEVBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztnQkFDakYsTUFBTSxPQUFPLEdBQUcsb0JBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxXQUFXLEdBQ2IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxvQkFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ2xGLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQ1osUUFBUSxFQUFFLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtvQkFDM0MsS0FBSyxFQUFFLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtvQkFDeEMsV0FBVyxFQUFFLFdBQVc7aUJBQ3pCLENBQUMsQ0FBQzthQUNKO1NBQ0Y7YUFBTTtZQUNMLHFGQUFxRjtZQUNyRixtREFBbUQ7WUFDbkQsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDWixRQUFRLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxFQUFFO2dCQUMzQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsUUFBUSxFQUFFO2dCQUN4QyxXQUFXLEVBQUUsa0JBQVU7YUFDeEIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCw4RkFBOEY7UUFDOUYsUUFBUSxHQUFHLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLEtBQUssTUFBTSxLQUFLLElBQUksUUFBUSxFQUFFO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pEO0lBQ0gsQ0FBQztJQXRERCxrQ0FzREM7SUFFRCxTQUFTLFVBQVUsQ0FBQyxVQUF5QixFQUFFLFdBQTJCO1FBQ3hFLE1BQU0sTUFBTSxHQUFvQixFQUFFLENBQUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRTtZQUNsQyxJQUFJLG9CQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLHNFQUFzRTtnQkFDdEUsT0FBTzthQUNSO1lBQ0QsSUFBSSxvQkFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLCtCQUFxQixFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFBLGdCQUFnQixhQUFoQixnQkFBZ0IsdUJBQWhCLGdCQUFnQixDQUFFLFlBQVksTUFBSyxvQkFBWTtvQkFDL0MsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLDBCQUFrQixFQUFFO29CQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUNWLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUN6QixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTt3QkFDdEIsV0FBVyxFQUFFLGtCQUFVO3FCQUN4QixDQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUNELG9CQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUM7UUFDRixvQkFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLHdCQUF3QixDQUFDLFFBQXlCO1FBQ3pELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldEltcG9ydE9mSWRlbnRpZmllciwgZ2V0SW1wb3J0U3BlY2lmaWVyLCByZW1vdmVTeW1ib2xGcm9tTmFtZWRJbXBvcnRzfSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L2ltcG9ydHMnO1xuaW1wb3J0IHtjbG9zZXN0Tm9kZX0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9ub2Rlcyc7XG5cbmV4cG9ydCBjb25zdCByb3V0ZXJMaW5rID0gJ1JvdXRlckxpbmsnO1xuZXhwb3J0IGNvbnN0IHJvdXRlckxpbmtXaXRoSHJlZiA9ICdSb3V0ZXJMaW5rV2l0aEhyZWYnO1xuZXhwb3J0IGNvbnN0IHJvdXRlck1vZHVsZSA9ICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJld3JpdGVFbnRpdHkge1xuICBzdGFydFBvczogbnVtYmVyO1xuICB3aWR0aDogbnVtYmVyO1xuICByZXBsYWNlbWVudDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBSZXdyaXRlRm4gPSAoc3RhcnRQb3M6IG51bWJlciwgd2lkdGg6IG51bWJlciwgdGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZUZpbGUoXG4gICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCByZXdyaXRlOiBSZXdyaXRlRm4pIHtcbiAgY29uc3Qgcm91dGVyTGlua1dpdGhIcmVmU3BlYyA9IGdldEltcG9ydFNwZWNpZmllcihzb3VyY2VGaWxlLCByb3V0ZXJNb2R1bGUsIHJvdXRlckxpbmtXaXRoSHJlZik7XG5cbiAgLy8gTm8gYFJvdXRlckxpbmtXaXRoSHJlZmAgZm91bmQsIG5vdGhpbmcgdG8gbWlncmF0ZSwgZXhpdCBlYXJseS5cbiAgaWYgKHJvdXRlckxpbmtXaXRoSHJlZlNwZWMgPT09IG51bGwpIHJldHVybjtcblxuICBsZXQgcmV3cml0ZXMgPSBmaW5kVXNhZ2VzKHNvdXJjZUZpbGUsIHR5cGVDaGVja2VyKTtcblxuICAvLyBUaGVyZSBhcmUgc29tZSB1c2FnZXMgb2YgdGhlIGBSb3V0ZXJMaW5rV2l0aEhyZWZgIHN5bWJvbCwgd2hpY2ggbmVlZCB0b1xuICAvLyBiZSByZXdyaXR0ZW4gdG8gYFJvdXRlckxpbmtgIGluc3RlYWQuIExldCdzIGNoZWNrIGlmIHRoZSBgUm91dGVyTGlua2AgaXNcbiAgLy8gYWxyZWFkeSBpbXBvcnRlZC5cbiAgY29uc3Qgcm91dGVyTGlua1NwZWMgPSBnZXRJbXBvcnRTcGVjaWZpZXIoc291cmNlRmlsZSwgcm91dGVyTW9kdWxlLCByb3V0ZXJMaW5rKTtcblxuICBpZiAocm91dGVyTGlua1NwZWMpIHtcbiAgICAvLyBUaGUgYFJvdXRlckxpbmtgIHN5bWJvbCBpcyBhbHJlYWR5IGltcG9ydGVkLCBqdXN0IGRyb3AgdGhlIGBSb3V0ZXJMaW5rV2l0aEhyZWZgIG9uZS5cbiAgICBjb25zdCByb3V0ZXJMaW5rTmFtZWRJbXBvcnRzID0gcm91dGVyTGlua1dpdGhIcmVmU3BlYyA/XG4gICAgICAgIGNsb3Nlc3ROb2RlPHRzLk5hbWVkSW1wb3J0cz4ocm91dGVyTGlua1dpdGhIcmVmU3BlYywgdHMuU3ludGF4S2luZC5OYW1lZEltcG9ydHMpIDpcbiAgICAgICAgbnVsbDtcbiAgICBpZiAocm91dGVyTGlua05hbWVkSW1wb3J0cyAhPT0gbnVsbCkge1xuICAgICAgLy8gR2l2ZW4gYW4gb3JpZ2luYWwgaW1wb3J0IGxpa2UgdGhpcyBvbmU6XG4gICAgICAvLyBgYGBcbiAgICAgIC8vIGltcG9ydCB7Um91dGVyTW9kdWxlLCBSb3V0ZXJMaW5rV2l0aEhyZWYsIFJvdXRlckxpbmt9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG4gICAgICAvLyBgYGBcbiAgICAgIC8vIFRoZSBjb2RlIGJlbG93IHJlbW92ZXMgdGhlIGBSb3V0ZXJMaW5rV2l0aEhyZWZgIGZyb20gdGhlIG5hbWVkIGltcG9ydHMgc2VjdGlvblxuICAgICAgLy8gKGkuZS4gYHtSb3V0ZXJNb2R1bGUsIFJvdXRlckxpbmtXaXRoSHJlZiwgUm91dGVyTGlua31gKSBhbmQgcHJpbnRzIGFuIHVwZGF0ZWRcbiAgICAgIC8vIHZlcnNpb24gKGB7Um91dGVyTW9kdWxlLCBSb3V0ZXJMaW5rfWApIHRvIGEgc3RyaW5nLCB3aGljaCBpcyB1c2VkIGFzIGFcbiAgICAgIC8vIHJlcGxhY2VtZW50LlxuICAgICAgY29uc3QgcmV3cml0dGVuTmFtZWRJbXBvcnRzID1cbiAgICAgICAgICByZW1vdmVTeW1ib2xGcm9tTmFtZWRJbXBvcnRzKHJvdXRlckxpbmtOYW1lZEltcG9ydHMsIHJvdXRlckxpbmtXaXRoSHJlZlNwZWMpO1xuICAgICAgY29uc3QgcHJpbnRlciA9IHRzLmNyZWF0ZVByaW50ZXIoKTtcbiAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID1cbiAgICAgICAgICBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgcmV3cml0dGVuTmFtZWRJbXBvcnRzLCBzb3VyY2VGaWxlKTtcbiAgICAgIHJld3JpdGVzLnB1c2goe1xuICAgICAgICBzdGFydFBvczogcm91dGVyTGlua05hbWVkSW1wb3J0cy5nZXRTdGFydCgpLFxuICAgICAgICB3aWR0aDogcm91dGVyTGlua05hbWVkSW1wb3J0cy5nZXRXaWR0aCgpLFxuICAgICAgICByZXBsYWNlbWVudDogcmVwbGFjZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlIGBSb3V0ZXJMaW5rYCBzeW1ib2wgaXMgbm90IGltcG9ydGVkLCBidXQgdGhlIGBSb3V0ZXJMaW5rV2l0aEhyZWZgIGlzIGltcG9ydGVkLFxuICAgIC8vIHNvIHJld3JpdGUgYFJvdXRlckxpbmtXaXRoSHJlZmAgLT4gYFJvdXRlckxpbmtgLlxuICAgIHJld3JpdGVzLnB1c2goe1xuICAgICAgc3RhcnRQb3M6IHJvdXRlckxpbmtXaXRoSHJlZlNwZWMuZ2V0U3RhcnQoKSxcbiAgICAgIHdpZHRoOiByb3V0ZXJMaW5rV2l0aEhyZWZTcGVjLmdldFdpZHRoKCksXG4gICAgICByZXBsYWNlbWVudDogcm91dGVyTGluayxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFByb2Nlc3MgcmV3cml0ZXMgbGFzdC10by1maXJzdCAoYmFzZWQgb24gc3RhcnQgcG9zKSB0byBhdm9pZCBvZmZzZXQgc2hpZnRzIGR1cmluZyByZXdyaXRlcy5cbiAgcmV3cml0ZXMgPSBzb3J0QnlTdGFydFBvc0Rlc2NlbmRpbmcocmV3cml0ZXMpO1xuICBmb3IgKGNvbnN0IHVzYWdlIG9mIHJld3JpdGVzKSB7XG4gICAgcmV3cml0ZSh1c2FnZS5zdGFydFBvcywgdXNhZ2Uud2lkdGgsIHVzYWdlLnJlcGxhY2VtZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kVXNhZ2VzKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcik6IFJld3JpdGVFbnRpdHlbXSB7XG4gIGNvbnN0IHVzYWdlczogUmV3cml0ZUVudGl0eVtdID0gW107XG4gIGNvbnN0IHZpc2l0Tm9kZSA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgaWYgKHRzLmlzSW1wb3J0U3BlY2lmaWVyKG5vZGUpKSB7XG4gICAgICAvLyBTa2lwIHRoaXMgbm9kZSBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbjsgaW1wb3J0cyBhcmUgYSBzcGVjaWFsIGNhc2UuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0cy5pc0lkZW50aWZpZXIobm9kZSkpIHtcbiAgICAgIGNvbnN0IGltcG9ydElkZW50aWZpZXIgPSBnZXRJbXBvcnRPZklkZW50aWZpZXIodHlwZUNoZWNrZXIsIG5vZGUpO1xuICAgICAgaWYgKGltcG9ydElkZW50aWZpZXI/LmltcG9ydE1vZHVsZSA9PT0gcm91dGVyTW9kdWxlICYmXG4gICAgICAgICAgaW1wb3J0SWRlbnRpZmllci5uYW1lID09PSByb3V0ZXJMaW5rV2l0aEhyZWYpIHtcbiAgICAgICAgdXNhZ2VzLnB1c2goe1xuICAgICAgICAgIHN0YXJ0UG9zOiBub2RlLmdldFN0YXJ0KCksXG4gICAgICAgICAgd2lkdGg6IG5vZGUuZ2V0V2lkdGgoKSxcbiAgICAgICAgICByZXBsYWNlbWVudDogcm91dGVyTGluayxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRzLmZvckVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUpO1xuICB9O1xuICB0cy5mb3JFYWNoQ2hpbGQoc291cmNlRmlsZSwgdmlzaXROb2RlKTtcbiAgcmV0dXJuIHVzYWdlcztcbn1cblxuLyoqXG4gKiBTb3J0IGFsbCBmb3VuZCB1c2FnZXMgYmFzZWQgb24gdGhlaXIgc3RhcnQgcG9zaXRpb25zIGluIHRoZSBzb3VyY2UgZmlsZSBpbiBkZXNjZW5kaW5nIG9yZGVyIChpLmUuXG4gKiBsYXN0IHVzYWdlIGdvZXMgZmlyc3Qgb24gdGhlIGxpc3QsIGV0YykuIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHNoaWZ0aW5nIG9mZnNldHMgaW4gdGhlIHNvdXJjZVxuICogZmlsZSAoaW4gY2FzZSB0aGVyZSBhcmUgbXVsdGlwbGUgdXNhZ2VzKSBhcyB3ZSByZXdyaXRlIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIHNvcnRCeVN0YXJ0UG9zRGVzY2VuZGluZyhyZXdyaXRlczogUmV3cml0ZUVudGl0eVtdKTogUmV3cml0ZUVudGl0eVtdIHtcbiAgcmV0dXJuIHJld3JpdGVzLnNvcnQoKGVudGl0eUEsIGVudGl0eUIpID0+IGVudGl0eUIuc3RhcnRQb3MgLSBlbnRpdHlBLnN0YXJ0UG9zKTtcbn1cbiJdfQ==
@@ -1,10 +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/typed-forms" />
9
- import { Rule } from '@angular-devkit/schematics';
10
- export default function (): Rule;
@@ -1,68 +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/typed-forms", ["require", "exports", "@angular-devkit/schematics", "path", "@angular/core/schematics/utils/project_tsconfig_paths", "@angular/core/schematics/utils/typescript/compiler_host", "@angular/core/schematics/migrations/typed-forms/util"], factory);
24
- }
25
- })(function (require, exports) {
26
- "use strict";
27
- Object.defineProperty(exports, "__esModule", { value: true });
28
- const schematics_1 = require("@angular-devkit/schematics");
29
- const path_1 = require("path");
30
- const project_tsconfig_paths_1 = require("@angular/core/schematics/utils/project_tsconfig_paths");
31
- const compiler_host_1 = require("@angular/core/schematics/utils/typescript/compiler_host");
32
- const util_1 = require("@angular/core/schematics/migrations/typed-forms/util");
33
- function default_1() {
34
- return (tree) => __awaiter(this, void 0, void 0, function* () {
35
- const { buildPaths, testPaths } = yield (0, project_tsconfig_paths_1.getProjectTsConfigPaths)(tree);
36
- const basePath = process.cwd();
37
- const allPaths = [...buildPaths, ...testPaths];
38
- if (!allPaths.length) {
39
- throw new schematics_1.SchematicsException('Could not find any tsconfig file. Cannot migrate to Typed Forms.');
40
- }
41
- for (const tsconfigPath of allPaths) {
42
- runTypedFormsMigration(tree, tsconfigPath, basePath);
43
- }
44
- });
45
- }
46
- exports.default = default_1;
47
- function runTypedFormsMigration(tree, tsconfigPath, basePath) {
48
- const { program } = (0, compiler_host_1.createMigrationProgram)(tree, tsconfigPath, basePath);
49
- const typeChecker = program.getTypeChecker();
50
- const sourceFiles = program.getSourceFiles().filter(sourceFile => (0, compiler_host_1.canMigrateFile)(basePath, sourceFile, program));
51
- for (const sourceFile of sourceFiles) {
52
- let update = null;
53
- const rewriter = (startPos, origLength, text) => {
54
- if (update === null) {
55
- // Lazily initialize update, because most files will not require migration.
56
- update = tree.beginUpdate((0, path_1.relative)(basePath, sourceFile.fileName));
57
- }
58
- update.remove(startPos, origLength);
59
- update.insertLeft(startPos, text);
60
- };
61
- (0, util_1.migrateFile)(sourceFile, typeChecker, rewriter);
62
- if (update !== null) {
63
- tree.commitUpdate(update);
64
- }
65
- }
66
- }
67
- });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NjaGVtYXRpY3MvbWlncmF0aW9ucy90eXBlZC1mb3Jtcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVILDJEQUEyRjtJQUMzRiwrQkFBOEI7SUFFOUIsa0dBQTJFO0lBQzNFLDJGQUE0RjtJQUU1RiwrRUFBbUM7SUFFbkM7UUFDRSxPQUFPLENBQU8sSUFBVSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsR0FBRyxNQUFNLElBQUEsZ0RBQXVCLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxVQUFVLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUUvQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDcEIsTUFBTSxJQUFJLGdDQUFtQixDQUN6QixrRUFBa0UsQ0FBQyxDQUFDO2FBQ3pFO1lBRUQsS0FBSyxNQUFNLFlBQVksSUFBSSxRQUFRLEVBQUU7Z0JBQ25DLHNCQUFzQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDdEQ7UUFDSCxDQUFDLENBQUEsQ0FBQztJQUNKLENBQUM7SUFmRCw0QkFlQztJQUVELFNBQVMsc0JBQXNCLENBQUMsSUFBVSxFQUFFLFlBQW9CLEVBQUUsUUFBZ0I7UUFDaEYsTUFBTSxFQUFDLE9BQU8sRUFBQyxHQUFHLElBQUEsc0NBQXNCLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDN0MsTUFBTSxXQUFXLEdBQ2IsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUEsOEJBQWMsRUFBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFakcsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUU7WUFDcEMsSUFBSSxNQUFNLEdBQXdCLElBQUksQ0FBQztZQUV2QyxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQWdCLEVBQUUsVUFBa0IsRUFBRSxJQUFZLEVBQUUsRUFBRTtnQkFDdEUsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO29CQUNuQiwyRUFBMkU7b0JBQzNFLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUEsZUFBUSxFQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDcEU7Z0JBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQztZQUVGLElBQUEsa0JBQVcsRUFBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBRS9DLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUMzQjtTQUNGO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1J1bGUsIFNjaGVtYXRpY3NFeGNlcHRpb24sIFRyZWUsIFVwZGF0ZVJlY29yZGVyfSBmcm9tICdAYW5ndWxhci1kZXZraXQvc2NoZW1hdGljcyc7XG5pbXBvcnQge3JlbGF0aXZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtnZXRQcm9qZWN0VHNDb25maWdQYXRoc30gZnJvbSAnLi4vLi4vdXRpbHMvcHJvamVjdF90c2NvbmZpZ19wYXRocyc7XG5pbXBvcnQge2Nhbk1pZ3JhdGVGaWxlLCBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtfSBmcm9tICcuLi8uLi91dGlscy90eXBlc2NyaXB0L2NvbXBpbGVyX2hvc3QnO1xuXG5pbXBvcnQge21pZ3JhdGVGaWxlfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpOiBSdWxlIHtcbiAgcmV0dXJuIGFzeW5jICh0cmVlOiBUcmVlKSA9PiB7XG4gICAgY29uc3Qge2J1aWxkUGF0aHMsIHRlc3RQYXRoc30gPSBhd2FpdCBnZXRQcm9qZWN0VHNDb25maWdQYXRocyh0cmVlKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgYWxsUGF0aHMgPSBbLi4uYnVpbGRQYXRocywgLi4udGVzdFBhdGhzXTtcblxuICAgIGlmICghYWxsUGF0aHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2NoZW1hdGljc0V4Y2VwdGlvbihcbiAgICAgICAgICAnQ291bGQgbm90IGZpbmQgYW55IHRzY29uZmlnIGZpbGUuIENhbm5vdCBtaWdyYXRlIHRvIFR5cGVkIEZvcm1zLicpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdHNjb25maWdQYXRoIG9mIGFsbFBhdGhzKSB7XG4gICAgICBydW5UeXBlZEZvcm1zTWlncmF0aW9uKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcnVuVHlwZWRGb3Jtc01pZ3JhdGlvbih0cmVlOiBUcmVlLCB0c2NvbmZpZ1BhdGg6IHN0cmluZywgYmFzZVBhdGg6IHN0cmluZykge1xuICBjb25zdCB7cHJvZ3JhbX0gPSBjcmVhdGVNaWdyYXRpb25Qcm9ncmFtKHRyZWUsIHRzY29uZmlnUGF0aCwgYmFzZVBhdGgpO1xuICBjb25zdCB0eXBlQ2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3Qgc291cmNlRmlsZXMgPVxuICAgICAgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpLmZpbHRlcihzb3VyY2VGaWxlID0+IGNhbk1pZ3JhdGVGaWxlKGJhc2VQYXRoLCBzb3VyY2VGaWxlLCBwcm9ncmFtKSk7XG5cbiAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgbGV0IHVwZGF0ZTogVXBkYXRlUmVjb3JkZXJ8bnVsbCA9IG51bGw7XG5cbiAgICBjb25zdCByZXdyaXRlciA9IChzdGFydFBvczogbnVtYmVyLCBvcmlnTGVuZ3RoOiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBMYXppbHkgaW5pdGlhbGl6ZSB1cGRhdGUsIGJlY2F1c2UgbW9zdCBmaWxlcyB3aWxsIG5vdCByZXF1aXJlIG1pZ3JhdGlvbi5cbiAgICAgICAgdXBkYXRlID0gdHJlZS5iZWdpblVwZGF0ZShyZWxhdGl2ZShiYXNlUGF0aCwgc291cmNlRmlsZS5maWxlTmFtZSkpO1xuICAgICAgfVxuICAgICAgdXBkYXRlLnJlbW92ZShzdGFydFBvcywgb3JpZ0xlbmd0aCk7XG4gICAgICB1cGRhdGUuaW5zZXJ0TGVmdChzdGFydFBvcywgdGV4dCk7XG4gICAgfTtcblxuICAgIG1pZ3JhdGVGaWxlKHNvdXJjZUZpbGUsIHR5cGVDaGVja2VyLCByZXdyaXRlcik7XG5cbiAgICBpZiAodXBkYXRlICE9PSBudWxsKSB7XG4gICAgICB0cmVlLmNvbW1pdFVwZGF0ZSh1cGRhdGUpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,19 +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/typed-forms/util" />
9
- import ts from 'typescript';
10
- export declare const classes: Set<string>;
11
- export declare const formControl = "FormControl";
12
- export declare const untypedPrefix = "Untyped";
13
- export declare const forms = "@angular/forms";
14
- export interface MigratableNode {
15
- node: ts.Node;
16
- importName: string;
17
- }
18
- export type rewriteFn = (startPos: number, origLength: number, text: string) => void;
19
- export declare function migrateFile(sourceFile: ts.SourceFile, typeChecker: ts.TypeChecker, rewrite: rewriteFn): void;
@@ -1,134 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
- (function (factory) {
12
- if (typeof module === "object" && typeof module.exports === "object") {
13
- var v = factory(require, exports);
14
- if (v !== undefined) module.exports = v;
15
- }
16
- else if (typeof define === "function" && define.amd) {
17
- define("@angular/core/schematics/migrations/typed-forms/util", ["require", "exports", "typescript", "@angular/core/schematics/utils/typescript/imports"], factory);
18
- }
19
- })(function (require, exports) {
20
- "use strict";
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.migrateFile = exports.forms = exports.untypedPrefix = exports.formControl = exports.classes = void 0;
23
- const typescript_1 = __importDefault(require("typescript"));
24
- const imports_1 = require("@angular/core/schematics/utils/typescript/imports");
25
- exports.classes = new Set(['FormArray', 'FormBuilder', 'FormControl', 'FormGroup']);
26
- exports.formControl = 'FormControl';
27
- exports.untypedPrefix = 'Untyped';
28
- exports.forms = '@angular/forms';
29
- function migrateFile(sourceFile, typeChecker, rewrite) {
30
- const imports = getImports(sourceFile);
31
- // If no relevant classes are imported, we can exit early.
32
- if (imports.length === 0)
33
- return;
34
- // For each control class, migrate all of its uses.
35
- for (let i = imports.length; i >= 0; i--) {
36
- const imp = imports[i];
37
- const usages = getUsages(sourceFile, typeChecker, imp);
38
- if (usages.length === 0) {
39
- // Since there are no usages of this class we need to migrate it, we should completely
40
- // skip it for the subsequent migration steps.
41
- imports.splice(i, 1);
42
- }
43
- for (const usage of usages) {
44
- const newName = getUntypedVersionOfImportOrName(usage.importName);
45
- if (newName === null) {
46
- // This should never happen.
47
- console.error(`Typed forms migration error: unknown replacement for usage ${usage.node.getText()}`);
48
- continue;
49
- }
50
- rewrite(usage.node.getStart(), usage.node.getWidth(), newName);
51
- }
52
- }
53
- // For each imported control class, migrate to the corresponding uptyped import.
54
- for (const imp of imports) {
55
- const untypedClass = getUntypedVersionOfImportOrName(imp.getText());
56
- if (untypedClass === null) {
57
- // This should never happen.
58
- console.error(`Typed forms migration error: unknown untyped version of import ${imp.getText()}`);
59
- continue;
60
- }
61
- if ((0, imports_1.getImportSpecifier)(sourceFile, exports.forms, untypedClass)) {
62
- // In order to make the migration idempotent, we must check whether the untyped version of the
63
- // class is already present. If present, immediately continue.
64
- continue;
65
- }
66
- rewrite(imp.getStart(), imp.getWidth(), untypedClass);
67
- }
68
- }
69
- exports.migrateFile = migrateFile;
70
- function getImports(sourceFile) {
71
- let imports = [];
72
- for (const cc of exports.classes) {
73
- const specifier = (0, imports_1.getImportSpecifier)(sourceFile, exports.forms, cc);
74
- if (!specifier)
75
- continue;
76
- imports.push(specifier);
77
- }
78
- return imports;
79
- }
80
- function getUntypedVersionOfImportOrName(name) {
81
- for (const cc of exports.classes) {
82
- if (name.includes(cc)) {
83
- return `${exports.untypedPrefix}${cc}`;
84
- }
85
- }
86
- return null;
87
- }
88
- function getUsages(sourceFile, typeChecker, importSpecifier) {
89
- const usages = [];
90
- const visitNode = (node) => {
91
- if (typescript_1.default.isImportSpecifier(node)) {
92
- // Skip this node and all of its children; imports are a special case.
93
- return;
94
- }
95
- if (typescript_1.default.isIdentifier(node) && isUsageOfFormsImport(typeChecker, node, importSpecifier)) {
96
- usages.push({ node, importName: importSpecifier.getText() });
97
- }
98
- typescript_1.default.forEachChild(node, visitNode);
99
- };
100
- typescript_1.default.forEachChild(sourceFile, visitNode);
101
- return usages;
102
- }
103
- function isUsageOfFormsImport(typeChecker, node, importSpecifier) {
104
- var _a, _b;
105
- const symbol = typeChecker.getSymbolAtLocation(node);
106
- // We check symbol.declarations because we actually care about the name at the declaration site,
107
- // not the usage site. These could be different in the case of overridden constructors.
108
- if (!symbol || symbol.declarations === undefined || !symbol.declarations.length)
109
- return false;
110
- const decl = symbol.declarations[0];
111
- if (!typescript_1.default.isImportSpecifier(decl))
112
- return false;
113
- // As per `typescript/imports.ts`, we must walk up the tree to find the enclosing import
114
- // declaration. For reasons specific to the TS AST, this is always 3 levels up from an import
115
- // specifier node.
116
- const importDecl = decl.parent.parent.parent;
117
- if (!typescript_1.default.isStringLiteral(importDecl.moduleSpecifier))
118
- return false;
119
- const importName = (_b = (_a = typeChecker.getTypeAtLocation(importSpecifier)) === null || _a === void 0 ? void 0 : _a.getSymbol()) === null || _b === void 0 ? void 0 : _b.getName();
120
- if (!importName)
121
- return false;
122
- // Handles aliased imports: e.g. "import {Component as myComp} from ...";
123
- const declName = decl.propertyName ? decl.propertyName.text : decl.name.text;
124
- if (importName === declName)
125
- return true;
126
- // In the case of FormControl's overridden exported constructor, the value name and declaration
127
- // name are not exactly the same. For our purposes, it's enough to check whether the latter is a
128
- // substring of the former.
129
- if (declName === exports.formControl && importName.includes(declName))
130
- return true;
131
- return false;
132
- }
133
- });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc2NoZW1hdGljcy9taWdyYXRpb25zL3R5cGVkLWZvcm1zL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7Ozs7O0lBRUgsNERBQTRCO0lBRTVCLCtFQUFrRTtJQUVyRCxRQUFBLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUUsUUFBQSxXQUFXLEdBQUcsYUFBYSxDQUFDO0lBQzVCLFFBQUEsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUMxQixRQUFBLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztJQVN0QyxTQUFnQixXQUFXLENBQ3ZCLFVBQXlCLEVBQUUsV0FBMkIsRUFBRSxPQUFrQjtRQUM1RSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkMsMERBQTBEO1FBQzFELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUVqQyxtREFBbUQ7UUFDbkQsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3ZCLHNGQUFzRjtnQkFDdEYsOENBQThDO2dCQUM5QyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN0QjtZQUNELEtB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UUFDaEcsMkJBQTJCO1FBQzNCLElBQUksUUFBUSxLQUFLLG1CQUFXLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUzRSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldEltcG9ydFNwZWNpZmllcn0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXNjcmlwdC9pbXBvcnRzJztcblxuZXhwb3J0IGNvbnN0IGNsYXNzZXMgPSBuZXcgU2V0KFsnRm9ybUFycmF5JywgJ0Zvcm1CdWlsZGVyJywgJ0Zvcm1Db250cm9sJywgJ0Zvcm1Hcm91cCddKTtcbmV4cG9ydCBjb25zdCBmb3JtQ29udHJvbCA9ICdGb3JtQ29udHJvbCc7XG5leHBvcnQgY29uc3QgdW50eXBlZFByZWZpeCA9ICdVbnR5cGVkJztcbmV4cG9ydCBjb25zdCBmb3JtcyA9ICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0YWJsZU5vZGUge1xuICBub2RlOiB0cy5Ob2RlO1xuICBpbXBvcnROYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIHJld3JpdGVGbiA9IChzdGFydFBvczogbnVtYmVyLCBvcmlnTGVuZ3RoOiBudW1iZXIsIHRleHQ6IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGVGaWxlKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgcmV3cml0ZTogcmV3cml0ZUZuKSB7XG4gIGNvbnN0IGltcG9ydHMgPSBnZXRJbXBvcnRzKHNvdXJjZUZpbGUpO1xuXG4gIC8vIElmIG5vIHJlbGV2YW50IGNsYXNzZXMgYXJlIGltcG9ydGVkLCB3ZSBjYW4gZXhpdCBlYXJseS5cbiAgaWYgKGltcG9ydHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgLy8gRm9yIGVhY2ggY29udHJvbCBjbGFzcywgbWlncmF0ZSBhbGwgb2YgaXRzIHVzZXMuXG4gIGZvciAobGV0IGkgPSBpbXBvcnRzLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBpbXAgPSBpbXBvcnRzW2ldO1xuICAgIGNvbnN0IHVzYWdlcyA9IGdldFVzYWdlcyhzb3VyY2VGaWxlLCB0eXBlQ2hlY2tlciwgaW1wKTtcbiAgICBpZiAodXNhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2luY2UgdGhlcmUgYXJlIG5vIHVzYWdlcyBvZiB0aGlzIGNsYXNzIHdlIG5lZWQgdG8gbWlncmF0ZSBpdCwgd2Ugc2hvdWxkIGNvbXBsZXRlbHlcbiAgICAgIC8vIHNraXAgaXQgZm9yIHRoZSBzdWJzZXF1ZW50IG1pZ3JhdGlvbiBzdGVwcy5cbiAgICAgIGltcG9ydHMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHVzYWdlIG9mIHVzYWdlcykge1xuICAgICAgY29uc3QgbmV3TmFtZSA9IGdldFVudHlwZWRWZXJzaW9uT2ZJbXBvcnRPck5hbWUodXNhZ2UuaW1wb3J0TmFtZSk7XG4gICAgICBpZiAobmV3TmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgVHlwZWQgZm9ybXMgbWlncmF0aW9uIGVycm9yOiB1bmtub3duIHJlcGxhY2VtZW50IGZvciB1c2FnZSAke3VzYWdlLm5vZGUuZ2V0VGV4dCgpfWApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJld3JpdGUodXNhZ2Uubm9kZS5nZXRTdGFydCgpLCB1c2FnZS5ub2RlLmdldFdpZHRoKCksIG5ld05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvciBlYWNoIGltcG9ydGVkIGNvbnRyb2wgY2xhc3MsIG1pZ3JhdGUgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdXB0eXBlZCBpbXBvcnQuXG4gIGZvciAoY29uc3QgaW1wIG9mIGltcG9ydHMpIHtcbiAgICBjb25zdCB1bnR5cGVkQ2xhc3MgPSBnZXRVbnR5cGVkVmVyc2lvbk9mSW1wb3J0T3JOYW1lKGltcC5nZXRUZXh0KCkpO1xuICAgIGlmICh1bnR5cGVkQ2xhc3MgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi5cbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFR5cGVkIGZvcm1zIG1pZ3JhdGlvbiBlcnJvcjogdW5rbm93biB1bnR5cGVkIHZlcnNpb24gb2YgaW1wb3J0ICR7aW1wLmdldFRleHQoKX1gKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZ2V0SW1wb3J0U3BlY2lmaWVyKHNvdXJjZUZpbGUsIGZvcm1zLCB1bnR5cGVkQ2xhc3MpKSB7XG4gICAgICAvLyBJbiBvcmRlciB0byBtYWtlIHRoZSBtaWdyYXRpb24gaWRlbXBvdGVudCwgd2UgbXVzdCBjaGVjayB3aGV0aGVyIHRoZSB1bnR5cGVkIHZlcnNpb24gb2YgdGhlXG4gICAgICAvLyBjbGFzcyBpcyBhbHJlYWR5IHByZXNlbnQuIElmIHByZXNlbnQsIGltbWVkaWF0ZWx5IGNvbnRpbnVlLlxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHJld3JpdGUoaW1wLmdldFN0YXJ0KCksIGltcC5nZXRXaWR0aCgpLCB1bnR5cGVkQ2xhc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydHMoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLkltcG9ydFNwZWNpZmllcltdIHtcbiAgbGV0IGltcG9ydHM6IHRzLkltcG9ydFNwZWNpZmllcltdID0gW107XG4gIGZvciAoY29uc3QgY2Mgb2YgY2xhc3Nlcykge1xuICAgIGNvbnN0IHNwZWNpZmllciA9IGdldEltcG9ydFNwZWNpZmllcihzb3VyY2VGaWxlLCBmb3JtcywgY2MpO1xuICAgIGlmICghc3BlY2lmaWVyKSBjb250aW51ZTtcbiAgICBpbXBvcnRzLnB1c2goc3BlY2lmaWVyKTtcbiAgfVxuICByZXR1cm4gaW1wb3J0cztcbn1cblxuZnVuY3Rpb24gZ2V0VW50eXBlZFZlcnNpb25PZkltcG9ydE9yTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmd8bnVsbCB7XG4gIGZvciAoY29uc3QgY2Mgb2YgY2xhc3Nlcykge1xuICAgIGlmIChuYW1lLmluY2x1ZGVzKGNjKSkge1xuICAgICAgcmV0dXJuIGAke3VudHlwZWRQcmVmaXh9JHtjY31gO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VXNhZ2VzKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcixcbiAgICBpbXBvcnRTcGVjaWZpZXI6IHRzLkltcG9ydFNwZWNpZmllcik6IE1pZ3JhdGFibGVOb2RlW10ge1xuICBjb25zdCB1c2FnZXM6IE1pZ3JhdGFibGVOb2RlW10gPSBbXTtcbiAgY29uc3QgdmlzaXROb2RlID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICBpZiAodHMuaXNJbXBvcnRTcGVjaWZpZXIobm9kZSkpIHtcbiAgICAgIC8vIFNraXAgdGhpcyBub2RlIGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuOyBpbXBvcnRzIGFyZSBhIHNwZWNpYWwgY2FzZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRzLmlzSWRlbnRpZmllcihub2RlKSAmJiBpc1VzYWdlT2ZGb3Jtc0ltcG9ydCh0eXBlQ2hlY2tlciwgbm9kZSwgaW1wb3J0U3BlY2lmaWVyKSkge1xuICAgICAgdXNhZ2VzLnB1c2goe25vZGUsIGltcG9ydE5hbWU6IGltcG9ydFNwZWNpZmllci5nZXRUZXh0KCl9KTtcbiAgICB9XG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSk7XG4gIH07XG4gIHRzLmZvckVhY2hDaGlsZChzb3VyY2VGaWxlLCB2aXNpdE5vZGUpO1xuICByZXR1cm4gdXNhZ2VzO1xufVxuXG5mdW5jdGlvbiBpc1VzYWdlT2ZGb3Jtc0ltcG9ydChcbiAgICB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIG5vZGU6IHRzLklkZW50aWZpZXIsXG4gICAgaW1wb3J0U3BlY2lmaWVyOiB0cy5JbXBvcnRTcGVjaWZpZXIpOiBib29sZWFuIHtcbiAgY29uc3Qgc3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcblxuICAvLyBXZSBjaGVjayBzeW1ib2wuZGVjbGFyYXRpb25zIGJlY2F1c2Ugd2UgYWN0dWFsbHkgY2FyZSBhYm91dCB0aGUgbmFtZSBhdCB0aGUgZGVjbGFyYXRpb24gc2l0ZSxcbiAgLy8gbm90IHRoZSB1c2FnZSBzaXRlLiBUaGVzZSBjb3VsZCBiZSBkaWZmZXJlbnQgaW4gdGhlIGNhc2Ugb2Ygb3ZlcnJpZGRlbiBjb25zdHJ1Y3RvcnMuXG4gIGlmICghc3ltYm9sIHx8IHN5bWJvbC5kZWNsYXJhdGlvbnMgPT09IHVuZGVmaW5lZCB8fCAhc3ltYm9sLmRlY2xhcmF0aW9ucy5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCBkZWNsID0gc3ltYm9sLmRlY2xhcmF0aW9uc1swXTtcbiAgaWYgKCF0cy5pc0ltcG9ydFNwZWNpZmllcihkZWNsKSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIEFzIHBlciBgdHlwZXNjcmlwdC9pbXBvcnRzLnRzYCwgd2UgbXVzdCB3YWxrIHVwIHRoZSB0cmVlIHRvIGZpbmQgdGhlIGVuY2xvc2luZyBpbXBvcnRcbiAgLy8gZGVjbGFyYXRpb24uIEZvciByZWFzb25zIHNwZWNpZmljIHRvIHRoZSBUUyBBU1QsIHRoaXMgaXMgYWx3YXlzIDMgbGV2ZWxzIHVwIGZyb20gYW4gaW1wb3J0XG4gIC8vIHNwZWNpZmllciBub2RlLlxuICBjb25zdCBpbXBvcnREZWNsID0gZGVjbC5wYXJlbnQucGFyZW50LnBhcmVudDtcbiAgaWYgKCF0cy5pc1N0cmluZ0xpdGVyYWwoaW1wb3J0RGVjbC5tb2R1bGVTcGVjaWZpZXIpKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgaW1wb3J0TmFtZSA9IHR5cGVDaGVja2VyLmdldFR5cGVBdExvY2F0aW9uKGltcG9ydFNwZWNpZmllcik/LmdldFN5bWJvbCgpPy5nZXROYW1lKCk7XG4gIGlmICghaW1wb3J0TmFtZSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIEhhbmRsZXMgYWxpYXNlZCBpbXBvcnRzOiBlLmcuIFwiaW1wb3J0IHtDb21wb25lbnQgYXMgbXlDb21wfSBmcm9tIC4uLlwiO1xuICBjb25zdCBkZWNsTmFtZSA9IGRlY2wucHJvcGVydHlOYW1lID8gZGVjbC5wcm9wZXJ0eU5hbWUudGV4dCA6IGRlY2wubmFtZS50ZXh0O1xuXG4gIGlmIChpbXBvcnROYW1lID09PSBkZWNsTmFtZSkgcmV0dXJuIHRydWU7XG5cbiAgLy8gSW4gdGhlIGNhc2Ugb2YgRm9ybUNvbnRyb2wncyBvdmVycmlkZGVuIGV4cG9ydGVkIGNvbnN0cnVjdG9yLCB0aGUgdmFsdWUgbmFtZSBhbmQgZGVjbGFyYXRpb25cbiAgLy8gbmFtZSBhcmUgbm90IGV4YWN0bHkgdGhlIHNhbWUuIEZvciBvdXIgcHVycG9zZXMsIGl0J3MgZW5vdWdoIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGxhdHRlciBpcyBhXG4gIC8vIHN1YnN0cmluZyBvZiB0aGUgZm9ybWVyLlxuICBpZiAoZGVjbE5hbWUgPT09IGZvcm1Db250cm9sICYmIGltcG9ydE5hbWUuaW5jbHVkZXMoZGVjbE5hbWUpKSByZXR1cm4gdHJ1ZTtcblxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=