@angular/cdk 9.2.1 → 9.2.2

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 (171) hide show
  1. package/a11y/focus-monitor/focus-monitor.d.ts +10 -3
  2. package/a11y/high-contrast-mode/high-contrast-mode-detector.d.ts +2 -2
  3. package/a11y/index.metadata.json +1 -1
  4. package/bundles/cdk-a11y.umd.js +62 -27
  5. package/bundles/cdk-a11y.umd.js.map +1 -1
  6. package/bundles/cdk-a11y.umd.min.js +12 -5
  7. package/bundles/cdk-a11y.umd.min.js.map +1 -1
  8. package/bundles/cdk-drag-drop.umd.js +193 -109
  9. package/bundles/cdk-drag-drop.umd.js.map +1 -1
  10. package/bundles/cdk-drag-drop.umd.min.js +17 -10
  11. package/bundles/cdk-drag-drop.umd.min.js.map +1 -1
  12. package/bundles/cdk-overlay.umd.js.map +1 -1
  13. package/bundles/cdk-platform.umd.js +3 -1
  14. package/bundles/cdk-platform.umd.js.map +1 -1
  15. package/bundles/cdk-platform.umd.min.js +4 -4
  16. package/bundles/cdk-platform.umd.min.js.map +1 -1
  17. package/bundles/cdk-scrolling.umd.js +18 -3
  18. package/bundles/cdk-scrolling.umd.js.map +1 -1
  19. package/bundles/cdk-scrolling.umd.min.js +2 -2
  20. package/bundles/cdk-scrolling.umd.min.js.map +1 -1
  21. package/bundles/cdk-testing-testbed.umd.js +62 -10
  22. package/bundles/cdk-testing-testbed.umd.js.map +1 -1
  23. package/bundles/cdk-testing-testbed.umd.min.js +5 -5
  24. package/bundles/cdk-testing-testbed.umd.min.js.map +1 -1
  25. package/bundles/cdk-tree.umd.js +1 -0
  26. package/bundles/cdk-tree.umd.js.map +1 -1
  27. package/bundles/cdk-tree.umd.min.js +1 -1
  28. package/bundles/cdk-tree.umd.min.js.map +1 -1
  29. package/bundles/cdk.umd.js +1 -1
  30. package/bundles/cdk.umd.js.map +1 -1
  31. package/bundles/cdk.umd.min.js +1 -1
  32. package/bundles/cdk.umd.min.js.map +1 -1
  33. package/drag-drop/drag-ref.d.ts +4 -2
  34. package/drag-drop/drop-list-ref.d.ts +9 -8
  35. package/drag-drop/index.metadata.json +1 -1
  36. package/drag-drop/parent-position-tracker.d.ts +31 -0
  37. package/drag-drop/public-api.d.ts +1 -1
  38. package/esm2015/a11y/aria-describer/aria-reference.js +6 -6
  39. package/esm2015/a11y/focus-monitor/focus-monitor.js +84 -26
  40. package/esm2015/a11y/high-contrast-mode/high-contrast-mode-detector.js +3 -3
  41. package/esm2015/drag-drop/drag-drop-module.js +3 -1
  42. package/esm2015/drag-drop/drag-ref.js +55 -35
  43. package/esm2015/drag-drop/drop-list-ref.js +115 -124
  44. package/esm2015/drag-drop/parent-position-tracker.js +141 -0
  45. package/esm2015/drag-drop/public-api.js +1 -1
  46. package/esm2015/overlay/position/flexible-connected-position-strategy.js +1 -1
  47. package/esm2015/platform/features/shadow-dom.js +4 -2
  48. package/esm2015/scrolling/public-api.js +2 -2
  49. package/esm2015/scrolling/scrolling-module.js +15 -4
  50. package/esm2015/testing/testbed/fake-events/dispatch-events.js +11 -4
  51. package/esm2015/testing/testbed/fake-events/event-objects.js +37 -3
  52. package/esm2015/testing/testbed/unit-test-element.js +13 -2
  53. package/esm2015/tree/tree.js +2 -1
  54. package/esm2015/version.js +1 -1
  55. package/esm5/a11y/aria-describer/aria-reference.js +6 -6
  56. package/esm5/a11y/focus-monitor/focus-monitor.js +57 -22
  57. package/esm5/a11y/high-contrast-mode/high-contrast-mode-detector.js +3 -3
  58. package/esm5/drag-drop/drag-drop-module.js +3 -1
  59. package/esm5/drag-drop/drag-ref.js +39 -26
  60. package/esm5/drag-drop/drop-list-ref.js +85 -86
  61. package/esm5/drag-drop/parent-position-tracker.js +74 -0
  62. package/esm5/drag-drop/public-api.js +1 -1
  63. package/esm5/overlay/position/flexible-connected-position-strategy.js +1 -1
  64. package/esm5/platform/features/shadow-dom.js +4 -2
  65. package/esm5/scrolling/scrolling-module.js +19 -4
  66. package/esm5/testing/testbed/fake-events/dispatch-events.js +15 -7
  67. package/esm5/testing/testbed/fake-events/event-objects.js +43 -5
  68. package/esm5/testing/testbed/unit-test-element.js +10 -3
  69. package/esm5/tree/tree.js +2 -1
  70. package/esm5/version.js +1 -1
  71. package/fesm2015/a11y.js +90 -32
  72. package/fesm2015/a11y.js.map +1 -1
  73. package/fesm2015/cdk.js +1 -1
  74. package/fesm2015/cdk.js.map +1 -1
  75. package/fesm2015/drag-drop.js +302 -158
  76. package/fesm2015/drag-drop.js.map +1 -1
  77. package/fesm2015/overlay.js.map +1 -1
  78. package/fesm2015/platform.js +3 -1
  79. package/fesm2015/platform.js.map +1 -1
  80. package/fesm2015/scrolling.js +15 -4
  81. package/fesm2015/scrolling.js.map +1 -1
  82. package/fesm2015/testing/testbed.js +56 -4
  83. package/fesm2015/testing/testbed.js.map +1 -1
  84. package/fesm2015/tree.js +1 -0
  85. package/fesm2015/tree.js.map +1 -1
  86. package/fesm5/a11y.js +63 -28
  87. package/fesm5/a11y.js.map +1 -1
  88. package/fesm5/cdk.js +1 -1
  89. package/fesm5/cdk.js.map +1 -1
  90. package/fesm5/drag-drop.js +195 -111
  91. package/fesm5/drag-drop.js.map +1 -1
  92. package/fesm5/overlay.js.map +1 -1
  93. package/fesm5/platform.js +3 -1
  94. package/fesm5/platform.js.map +1 -1
  95. package/fesm5/scrolling.js +18 -4
  96. package/fesm5/scrolling.js.map +1 -1
  97. package/fesm5/testing/testbed.js +63 -11
  98. package/fesm5/testing/testbed.js.map +1 -1
  99. package/fesm5/tree.js +1 -0
  100. package/fesm5/tree.js.map +1 -1
  101. package/overlay/position/flexible-connected-position-strategy.d.ts +1 -1
  102. package/package.json +1 -1
  103. package/schematics/ng-add/index.js +1 -1
  104. package/schematics/ng-update/devkit-file-system.d.ts +29 -0
  105. package/schematics/ng-update/devkit-file-system.js +67 -0
  106. package/schematics/ng-update/devkit-migration-rule.d.ts +25 -0
  107. package/schematics/ng-update/devkit-migration-rule.js +152 -0
  108. package/schematics/ng-update/devkit-migration.d.ts +37 -0
  109. package/schematics/ng-update/devkit-migration.js +29 -0
  110. package/schematics/ng-update/index.js +7 -7
  111. package/schematics/ng-update/{upgrade-rules/attribute-selectors-rule.d.ts → migrations/attribute-selectors.d.ts} +6 -6
  112. package/schematics/ng-update/migrations/attribute-selectors.js +76 -0
  113. package/schematics/ng-update/{upgrade-rules/class-inheritance-rule.d.ts → migrations/class-inheritance.d.ts} +6 -6
  114. package/schematics/ng-update/migrations/class-inheritance.js +67 -0
  115. package/schematics/ng-update/{upgrade-rules/class-names-rule.d.ts → migrations/class-names.d.ts} +6 -6
  116. package/schematics/ng-update/migrations/class-names.js +98 -0
  117. package/schematics/ng-update/{upgrade-rules/constructor-signature-rule.d.ts → migrations/constructor-signature.d.ts} +6 -6
  118. package/schematics/ng-update/migrations/constructor-signature.js +144 -0
  119. package/schematics/ng-update/{upgrade-rules/css-selectors-rule.d.ts → migrations/css-selectors.d.ts} +6 -6
  120. package/schematics/ng-update/migrations/css-selectors.js +83 -0
  121. package/schematics/ng-update/{upgrade-rules/element-selectors-rule.d.ts → migrations/element-selectors.d.ts} +6 -6
  122. package/schematics/ng-update/migrations/element-selectors.js +74 -0
  123. package/schematics/ng-update/{upgrade-rules/input-names-rule.d.ts → migrations/input-names.d.ts} +6 -6
  124. package/schematics/ng-update/migrations/input-names.js +69 -0
  125. package/schematics/ng-update/{upgrade-rules/method-call-arguments-rule.d.ts → migrations/method-call-arguments.d.ts} +6 -6
  126. package/schematics/ng-update/migrations/method-call-arguments.js +70 -0
  127. package/schematics/ng-update/{upgrade-rules/misc-template-rule.d.ts → migrations/misc-template.d.ts} +6 -6
  128. package/schematics/ng-update/migrations/misc-template.js +47 -0
  129. package/schematics/ng-update/{upgrade-rules/output-names-rule.d.ts → migrations/output-names.d.ts} +6 -6
  130. package/schematics/ng-update/migrations/output-names.js +56 -0
  131. package/schematics/ng-update/{upgrade-rules/property-names-rule.d.ts → migrations/property-names.d.ts} +6 -6
  132. package/schematics/ng-update/migrations/property-names.js +56 -0
  133. package/schematics/ng-update/public-api.d.ts +3 -2
  134. package/schematics/ng-update/public-api.js +5 -4
  135. package/schematics/ng-update/upgrade-data.d.ts +7 -8
  136. package/schematics/ng-update/upgrade-data.js +6 -7
  137. package/schematics/update-tool/component-resource-collector.d.ts +3 -1
  138. package/schematics/update-tool/component-resource-collector.js +8 -8
  139. package/schematics/update-tool/file-system.d.ts +38 -0
  140. package/schematics/update-tool/file-system.js +20 -0
  141. package/schematics/update-tool/index.d.ts +41 -11
  142. package/schematics/update-tool/index.js +135 -106
  143. package/schematics/update-tool/logger.d.ts +16 -0
  144. package/schematics/update-tool/logger.js +27 -0
  145. package/schematics/update-tool/{migration-rule.d.ts → migration.d.ts} +23 -45
  146. package/schematics/update-tool/migration.js +76 -0
  147. package/schematics/update-tool/public-api.d.ts +5 -4
  148. package/schematics/update-tool/public-api.js +6 -6
  149. package/schematics/update-tool/update-recorder.d.ts +14 -0
  150. package/schematics/update-tool/update-recorder.js +20 -0
  151. package/schematics/update-tool/utils/parse-tsconfig.js +1 -1
  152. package/schematics/update-tool/version-changes.js +3 -4
  153. package/scrolling/index.metadata.json +1 -1
  154. package/scrolling/scrolling-module.d.ts +2 -0
  155. package/testing/testbed/fake-events/dispatch-events.d.ts +8 -3
  156. package/testing/testbed/fake-events/event-objects.d.ts +12 -1
  157. package/tree/index.metadata.json +1 -1
  158. package/schematics/ng-update/upgrade-rules/attribute-selectors-rule.js +0 -76
  159. package/schematics/ng-update/upgrade-rules/class-inheritance-rule.js +0 -67
  160. package/schematics/ng-update/upgrade-rules/class-names-rule.js +0 -98
  161. package/schematics/ng-update/upgrade-rules/constructor-signature-rule.js +0 -144
  162. package/schematics/ng-update/upgrade-rules/css-selectors-rule.js +0 -83
  163. package/schematics/ng-update/upgrade-rules/element-selectors-rule.js +0 -74
  164. package/schematics/ng-update/upgrade-rules/index.d.ts +0 -22
  165. package/schematics/ng-update/upgrade-rules/index.js +0 -116
  166. package/schematics/ng-update/upgrade-rules/input-names-rule.js +0 -69
  167. package/schematics/ng-update/upgrade-rules/method-call-arguments-rule.js +0 -70
  168. package/schematics/ng-update/upgrade-rules/misc-template-rule.js +0 -47
  169. package/schematics/ng-update/upgrade-rules/output-names-rule.js +0 -56
  170. package/schematics/ng-update/upgrade-rules/property-names-rule.js +0 -56
  171. package/schematics/update-tool/migration-rule.js +0 -101
@@ -11,125 +11,154 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/cdk/schematics/update-tool", ["require", "exports", "@angular-devkit/core", "glob", "path", "typescript", "@angular/cdk/schematics/update-tool/component-resource-collector", "@angular/cdk/schematics/update-tool/utils/parse-tsconfig"], factory);
14
+ define("@angular/cdk/schematics/update-tool", ["require", "exports", "path", "typescript", "@angular/cdk/schematics/update-tool/component-resource-collector", "@angular/cdk/schematics/update-tool/logger", "@angular/cdk/schematics/update-tool/utils/parse-tsconfig"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- const core_1 = require("@angular-devkit/core");
20
- const glob_1 = require("glob");
21
19
  const path_1 = require("path");
22
20
  const ts = require("typescript");
23
21
  const component_resource_collector_1 = require("@angular/cdk/schematics/update-tool/component-resource-collector");
22
+ const logger_1 = require("@angular/cdk/schematics/update-tool/logger");
24
23
  const parse_tsconfig_1 = require("@angular/cdk/schematics/update-tool/utils/parse-tsconfig");
25
- function runMigrationRules(project, tree, logger, tsconfigPath, isTestTarget, targetVersion, ruleTypes, upgradeData, analyzedFiles) {
26
- // The CLI uses the working directory as the base directory for the
27
- // virtual file system tree.
28
- const basePath = process.cwd();
29
- const parsed = parse_tsconfig_1.parseTsconfigFile(tsconfigPath, path_1.dirname(tsconfigPath));
30
- const host = ts.createCompilerHost(parsed.options, true);
31
- const projectFsPath = path_1.join(basePath, project.root);
32
- // We need to overwrite the host "readFile" method, as we want the TypeScript
33
- // program to be based on the file contents in the virtual file tree.
34
- host.readFile = fileName => {
35
- const buffer = tree.read(getProjectRelativePath(fileName));
36
- // Strip BOM as otherwise TSC methods (e.g. "getWidth") will return an offset which
37
- // which breaks the CLI UpdateRecorder. https://github.com/angular/angular/pull/30719
38
- return buffer ? buffer.toString().replace(/^\uFEFF/, '') : undefined;
39
- };
40
- const program = ts.createProgram(parsed.fileNames, parsed.options, host);
41
- const typeChecker = program.getTypeChecker();
42
- const rules = [];
43
- // Create instances of all specified migration rules.
44
- for (const ruleCtor of ruleTypes) {
45
- const rule = new ruleCtor(project, program, typeChecker, targetVersion, upgradeData, tree, getUpdateRecorder, basePath, logger, isTestTarget, tsconfigPath);
46
- rule.init();
47
- if (rule.ruleEnabled) {
48
- rules.push(rule);
49
- }
24
+ /**
25
+ * An update project that can be run against individual migrations. An update project
26
+ * accepts a TypeScript program and a context that is provided to all migrations. The
27
+ * context is usually not used by migrations, but in some cases migrations rely on
28
+ * specifics from the tool that performs the update (e.g. the Angular CLI). In those cases,
29
+ * the context can provide the necessary specifics to the migrations in a type-safe way.
30
+ */
31
+ class UpdateProject {
32
+ constructor(_context, _program, _fileSystem, _analyzedFiles = new Set(), _logger = logger_1.defaultLogger) {
33
+ this._context = _context;
34
+ this._program = _program;
35
+ this._fileSystem = _fileSystem;
36
+ this._analyzedFiles = _analyzedFiles;
37
+ this._logger = _logger;
38
+ this._typeChecker = this._program.getTypeChecker();
50
39
  }
51
- const sourceFiles = program.getSourceFiles().filter(f => !f.isDeclarationFile && !program.isSourceFileFromExternalLibrary(f));
52
- const resourceCollector = new component_resource_collector_1.ComponentResourceCollector(typeChecker);
53
- const updateRecorderCache = new Map();
54
- sourceFiles.forEach(sourceFile => {
55
- const relativePath = getProjectRelativePath(sourceFile.fileName);
56
- // Do not visit source files which have been checked as part of a
57
- // previously migrated TypeScript project.
58
- if (!analyzedFiles.has(relativePath)) {
59
- _visitTypeScriptNode(sourceFile);
60
- analyzedFiles.add(relativePath);
61
- }
62
- });
63
- resourceCollector.resolvedTemplates.forEach(template => {
64
- const relativePath = getProjectRelativePath(template.filePath);
65
- // Do not visit the template if it has been checked before. Inline
66
- // templates cannot be referenced multiple times.
67
- if (template.inline || !analyzedFiles.has(relativePath)) {
68
- rules.forEach(r => r.visitTemplate(template));
69
- analyzedFiles.add(relativePath);
70
- }
71
- });
72
- resourceCollector.resolvedStylesheets.forEach(stylesheet => {
73
- const relativePath = getProjectRelativePath(stylesheet.filePath);
74
- // Do not visit the stylesheet if it has been checked before. Inline
75
- // stylesheets cannot be referenced multiple times.
76
- if (stylesheet.inline || !analyzedFiles.has(relativePath)) {
77
- rules.forEach(r => r.visitStylesheet(stylesheet));
78
- analyzedFiles.add(relativePath);
79
- }
80
- });
81
- // In some applications, developers will have global stylesheets which are not specified in any
82
- // Angular component. Therefore we glob up all CSS and SCSS files outside of node_modules and
83
- // dist. The files will be read by the individual stylesheet rules and checked.
84
- // TODO: rework this to collect external/global stylesheets from the workspace config. COMP-280.
85
- glob_1.sync('!(node_modules|dist)/**/*.+(css|scss)', { absolute: true, cwd: projectFsPath, nodir: true })
86
- .filter(filePath => !resourceCollector.resolvedStylesheets.some(s => s.filePath === filePath))
87
- .forEach(filePath => {
88
- const stylesheet = resourceCollector.resolveExternalStylesheet(filePath, null);
89
- const relativePath = getProjectRelativePath(filePath);
90
- // do not visit stylesheets which have been referenced from a component.
91
- if (!analyzedFiles.has(relativePath)) {
92
- rules.forEach(r => r.visitStylesheet(stylesheet));
93
- }
94
- });
95
- // Call the "postAnalysis" method for each migration rule.
96
- rules.forEach(r => r.postAnalysis());
97
- // Commit all recorded updates in the update recorder. We need to perform the
98
- // replacements per source file in order to ensure that offsets in the TypeScript
99
- // program are not incorrectly shifted.
100
- updateRecorderCache.forEach(recorder => tree.commitUpdate(recorder));
101
- // Collect all failures reported by individual migration rules.
102
- const ruleFailures = rules.reduce((res, rule) => res.concat(rule.failures), []);
103
- // In case there are rule failures, print these to the CLI logger as warnings.
104
- if (ruleFailures.length) {
105
- ruleFailures.forEach(({ filePath, message, position }) => {
106
- const normalizedFilePath = core_1.normalize(getProjectRelativePath(filePath));
107
- const lineAndCharacter = position ? `@${position.line + 1}:${position.character + 1}` : '';
108
- logger.warn(`${normalizedFilePath}${lineAndCharacter} - ${message}`);
40
+ /**
41
+ * Migrates the project to the specified target version.
42
+ * @param migrationTypes Migrations that should be run.
43
+ * @param target Version the project should be updated to.
44
+ * @param data Upgrade data that is passed to all migration rules.
45
+ * @param additionalStylesheetPaths Additional stylesheets that should be migrated, if not
46
+ * referenced in an Angular component. This is helpful for global stylesheets in a project.
47
+ */
48
+ migrate(migrationTypes, target, data, additionalStylesheetPaths) {
49
+ // Create instances of the specified migrations.
50
+ const migrations = this._createMigrations(migrationTypes, target, data);
51
+ // Creates the component resource collector. The collector can visit arbitrary
52
+ // TypeScript nodes and will find Angular component resources. Resources include
53
+ // templates and stylesheets. It also captures inline stylesheets and templates.
54
+ const resourceCollector = new component_resource_collector_1.ComponentResourceCollector(this._typeChecker, this._fileSystem);
55
+ // Collect all of the TypeScript source files we want to migrate. We don't
56
+ // migrate type definition files, or source files from external libraries.
57
+ const sourceFiles = this._program.getSourceFiles().filter(f => !f.isDeclarationFile && !this._program.isSourceFileFromExternalLibrary(f));
58
+ // Helper function that visits a given TypeScript node and collects all referenced
59
+ // component resources (i.e. stylesheets or templates). Additionally, the helper
60
+ // visits the node in each instantiated migration.
61
+ const visitNodeAndCollectResources = (node) => {
62
+ migrations.forEach(r => r.visitNode(node));
63
+ ts.forEachChild(node, visitNodeAndCollectResources);
64
+ resourceCollector.visitNode(node);
65
+ };
66
+ // Walk through all source file, if it has not been visited before, and
67
+ // visit found nodes while collecting potential resources.
68
+ sourceFiles.forEach(sourceFile => {
69
+ const resolvedPath = this._fileSystem.resolve(sourceFile.fileName);
70
+ // Do not visit source files which have been checked as part of a
71
+ // previously migrated TypeScript project.
72
+ if (!this._analyzedFiles.has(resolvedPath)) {
73
+ visitNodeAndCollectResources(sourceFile);
74
+ this._analyzedFiles.add(resolvedPath);
75
+ }
109
76
  });
110
- }
111
- return {
112
- hasFailures: !!ruleFailures.length,
113
- };
114
- function getUpdateRecorder(filePath) {
115
- const treeFilePath = getProjectRelativePath(filePath);
116
- if (updateRecorderCache.has(treeFilePath)) {
117
- return updateRecorderCache.get(treeFilePath);
77
+ // Walk through all resolved templates and visit them in each instantiated
78
+ // migration. Note that this can only happen after source files have been
79
+ // visited because we find templates through the TypeScript source files.
80
+ resourceCollector.resolvedTemplates.forEach(template => {
81
+ const resolvedPath = this._fileSystem.resolve(template.filePath);
82
+ // Do not visit the template if it has been checked before. Inline
83
+ // templates cannot be referenced multiple times.
84
+ if (template.inline || !this._analyzedFiles.has(resolvedPath)) {
85
+ migrations.forEach(m => m.visitTemplate(template));
86
+ this._analyzedFiles.add(resolvedPath);
87
+ }
88
+ });
89
+ // Walk through all resolved stylesheets and visit them in each instantiated
90
+ // migration. Note that this can only happen after source files have been
91
+ // visited because we find stylesheets through the TypeScript source files.
92
+ resourceCollector.resolvedStylesheets.forEach(stylesheet => {
93
+ const resolvedPath = this._fileSystem.resolve(stylesheet.filePath);
94
+ // Do not visit the stylesheet if it has been checked before. Inline
95
+ // stylesheets cannot be referenced multiple times.
96
+ if (stylesheet.inline || !this._analyzedFiles.has(resolvedPath)) {
97
+ migrations.forEach(r => r.visitStylesheet(stylesheet));
98
+ this._analyzedFiles.add(resolvedPath);
99
+ }
100
+ });
101
+ // In some applications, developers will have global stylesheets which are not
102
+ // specified in any Angular component. Therefore we allow for additional stylesheets
103
+ // being specified. We visit them in each migration unless they have been already
104
+ // discovered before as actual component resource.
105
+ additionalStylesheetPaths.forEach(filePath => {
106
+ const stylesheet = resourceCollector.resolveExternalStylesheet(filePath, null);
107
+ const resolvedPath = this._fileSystem.resolve(filePath);
108
+ // Do not visit stylesheets which have been referenced from a component.
109
+ if (!this._analyzedFiles.has(resolvedPath)) {
110
+ migrations.forEach(r => r.visitStylesheet(stylesheet));
111
+ this._analyzedFiles.add(resolvedPath);
112
+ }
113
+ });
114
+ // Call the "postAnalysis" method for each migration.
115
+ migrations.forEach(r => r.postAnalysis());
116
+ // Collect all failures reported by individual migrations.
117
+ const failures = migrations.reduce((res, m) => res.concat(m.failures), []);
118
+ // In case there are failures, print these to the CLI logger as warnings.
119
+ if (failures.length) {
120
+ failures.forEach(({ filePath, message, position }) => {
121
+ const posixFilePath = this._fileSystem.resolve(filePath).replace(/\\/g, '/');
122
+ const lineAndCharacter = position ? `@${position.line + 1}:${position.character + 1}` : '';
123
+ this._logger.warn(`${posixFilePath}${lineAndCharacter} - ${message}`);
124
+ });
118
125
  }
119
- const treeRecorder = tree.beginUpdate(treeFilePath);
120
- updateRecorderCache.set(treeFilePath, treeRecorder);
121
- return treeRecorder;
126
+ return {
127
+ hasFailures: !!failures.length,
128
+ };
122
129
  }
123
- function _visitTypeScriptNode(node) {
124
- rules.forEach(r => r.visitNode(node));
125
- ts.forEachChild(node, _visitTypeScriptNode);
126
- resourceCollector.visitNode(node);
130
+ /**
131
+ * Creates instances of the given migrations with the specified target
132
+ * version and data.
133
+ */
134
+ _createMigrations(types, target, data) {
135
+ const result = [];
136
+ for (const ctor of types) {
137
+ const instance = new ctor(this._program, this._typeChecker, target, this._context, data, this._fileSystem, this._logger);
138
+ instance.init();
139
+ if (instance.enabled) {
140
+ result.push(instance);
141
+ }
142
+ }
143
+ return result;
127
144
  }
128
- /** Gets the specified path relative to the project root in POSIX format. */
129
- function getProjectRelativePath(filePath) {
130
- return path_1.relative(basePath, filePath).replace(/\\/g, '/');
145
+ /**
146
+ * Creates a program form the specified tsconfig and patches the host
147
+ * to read files through the given file system.
148
+ */
149
+ static createProgramFromTsconfig(tsconfigFsPath, fs) {
150
+ const parsed = parse_tsconfig_1.parseTsconfigFile(tsconfigFsPath, path_1.dirname(tsconfigFsPath));
151
+ const host = ts.createCompilerHost(parsed.options, true);
152
+ // Patch the host to read files through the specified file system.
153
+ host.readFile = fileName => {
154
+ const fileContent = fs.read(fileName);
155
+ // Strip BOM as otherwise TSC methods (e.g. "getWidth") will return an offset which
156
+ // which breaks the CLI UpdateRecorder. https://github.com/angular/angular/pull/30719
157
+ return fileContent !== null ? fileContent.replace(/^\uFEFF/, '') : undefined;
158
+ };
159
+ return ts.createProgram(parsed.fileNames, parsed.options, host);
131
160
  }
132
161
  }
133
- exports.runMigrationRules = runMigrationRules;
162
+ exports.UpdateProject = UpdateProject;
134
163
  });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvdXBkYXRlLXRvb2wvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCwrQ0FBd0Q7SUFHeEQsK0JBQXNDO0lBQ3RDLCtCQUE2QztJQUM3QyxpQ0FBaUM7SUFFakMsbUhBQTBFO0lBRzFFLDZGQUF5RDtJQU96RCxTQUFnQixpQkFBaUIsQ0FDN0IsT0FBeUIsRUFBRSxJQUFVLEVBQUUsTUFBeUIsRUFBRSxZQUFvQixFQUN0RixZQUFxQixFQUFFLGFBQTRCLEVBQUUsU0FBaUMsRUFDdEYsV0FBYyxFQUFFLGFBQTBCO1FBQzVDLG1FQUFtRTtRQUNuRSw0QkFBNEI7UUFDNUIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLGtDQUFpQixDQUFDLFlBQVksRUFBRSxjQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxNQUFNLGFBQWEsR0FBRyxXQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuRCw2RUFBNkU7UUFDN0UscUVBQXFFO1FBQ3JFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUU7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzNELG1GQUFtRjtZQUNuRixxRkFBcUY7WUFDckYsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVB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LEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztZQUM1QyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELDRFQUE0RTtRQUM1RSxTQUFTLHNCQUFzQixDQUFDLFFBQWdCO1lBQzlDLE9BQU8sZUFBUSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBbklELDhDQW1JQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2xvZ2dpbmcsIG5vcm1hbGl6ZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0IHtUcmVlLCBVcGRhdGVSZWNvcmRlcn0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuaW1wb3J0IHtXb3Jrc3BhY2VQcm9qZWN0fSBmcm9tICdAc2NoZW1hdGljcy9hbmd1bGFyL3V0aWxpdHkvd29ya3NwYWNlLW1vZGVscyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHtkaXJuYW1lLCBqb2luLCByZWxhdGl2ZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtDb21wb25lbnRSZXNvdXJjZUNvbGxlY3Rvcn0gZnJvbSAnLi9jb21wb25lbnQtcmVzb3VyY2UtY29sbGVjdG9yJztcbmltcG9ydCB7TWlncmF0aW9uRmFpbHVyZSwgTWlncmF0aW9uUnVsZX0gZnJvbSAnLi9taWdyYXRpb24tcnVsZSc7XG5pbXBvcnQge1RhcmdldFZlcnNpb259IGZyb20gJy4vdGFyZ2V0LXZlcnNpb24nO1xuaW1wb3J0IHtwYXJzZVRzY29uZmlnRmlsZX0gZnJvbSAnLi91dGlscy9wYXJzZS10c2NvbmZpZyc7XG5cbmV4cG9ydCB0eXBlIENvbnN0cnVjdG9yPFQ+ID0gKG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpO1xuZXhwb3J0IHR5cGUgTWlncmF0aW9uUnVsZVR5cGU8VD4gPVxuICAgIENvbnN0cnVjdG9yPE1pZ3JhdGlvblJ1bGU8VD4+JntbbSBpbiBrZXlvZiB0eXBlb2YgTWlncmF0aW9uUnVsZV06ICh0eXBlb2YgTWlncmF0aW9uUnVsZSlbbV19O1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBydW5NaWdyYXRpb25SdWxlczxUPihcbiAgICBwcm9qZWN0OiBXb3Jrc3BhY2VQcm9qZWN0LCB0cmVlOiBUcmVlLCBsb2dnZXI6IGxvZ2dpbmcuTG9nZ2VyQXBpLCB0c2NvbmZpZ1BhdGg6IHN0cmluZyxcbiAgICBpc1Rlc3RUYXJnZXQ6IGJvb2xlYW4sIHRhcmdldFZlcnNpb246IFRhcmdldFZlcnNpb24sIHJ1bGVUeXBlczogTWlncmF0aW9uUnVsZVR5cGU8VD5bXSxcbiAgICB1cGdyYWRlRGF0YTogVCwgYW5hbHl6ZWRGaWxlczogU2V0PHN0cmluZz4pOiB7aGFzRmFpbHVyZXM6IGJvb2xlYW59IHtcbiAgLy8gVGhlIENMSSB1c2VzIHRoZSB3b3JraW5nIGRpcmVjdG9yeSBhcyB0aGUgYmFzZSBkaXJlY3RvcnkgZm9yIHRoZVxuICAvLyB2aXJ0dWFsIGZpbGUgc3lzdGVtIHRyZWUuXG4gIGNvbnN0IGJhc2VQYXRoID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VUc2NvbmZpZ0ZpbGUodHNjb25maWdQYXRoLCBkaXJuYW1lKHRzY29uZmlnUGF0aCkpO1xuICBjb25zdCBob3N0ID0gdHMuY3JlYXRlQ29tcGlsZXJIb3N0KHBhcnNlZC5vcHRpb25zLCB0cnVlKTtcbiAgY29uc3QgcHJvamVjdEZzUGF0aCA9IGpvaW4oYmFzZVBhdGgsIHByb2plY3Qucm9vdCk7XG5cbiAgLy8gV2UgbmVlZCB0byBvdmVyd3JpdGUgdGhlIGhvc3QgXCJyZWFkRmlsZVwiIG1ldGhvZCwgYXMgd2Ugd2FudCB0aGUgVHlwZVNjcmlwdFxuICAvLyBwcm9ncmFtIHRvIGJlIGJhc2VkIG9uIHRoZSBmaWxlIGNvbnRlbnRzIGluIHRoZSB2aXJ0dWFsIGZpbGUgdHJlZS5cbiAgaG9zdC5yZWFkRmlsZSA9IGZpbGVOYW1lID0+IHtcbiAgICBjb25zdCBidWZmZXIgPSB0cmVlLnJlYWQoZ2V0UHJvamVjdFJlbGF0aXZlUGF0aChmaWxlTmFtZSkpO1xuICAgIC8vIFN0cmlwIEJPTSBhcyBvdGhlcndpc2UgVFNDIG1ldGhvZHMgKGUuZy4gXCJnZXRXaWR0aFwiKSB3aWxsIHJldHVybiBhbiBvZmZzZXQgd2hpY2hcbiAgICAvLyB3aGljaCBicmVha3MgdGhlIENMSSBVcGRhdGVSZWNvcmRlci4gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9wdWxsLzMwNzE5XG4gICAgcmV0dXJuIGJ1ZmZlciA/IGJ1ZmZlci50b1N0cmluZygpLnJlcGxhY2UoL15cXHVGRUZGLywgJycpIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHBhcnNlZC5maWxlTmFtZXMsIHBhcnNlZC5vcHRpb25zLCBob3N0KTtcbiAgY29uc3QgdHlwZUNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IHJ1bGVzOiBNaWdyYXRpb25SdWxlPFQ+W10gPSBbXTtcblxuICAvLyBDcmVhdGUgaW5zdGFuY2VzIG9mIGFsbCBzcGVjaWZpZWQgbWlncmF0aW9uIHJ1bGVzLlxuICBmb3IgKGNvbnN0IHJ1bGVDdG9yIG9mIHJ1bGVUeXBlcykge1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgcnVsZUN0b3IoXG4gICAgICAgIHByb2plY3QsIHByb2dyYW0sIHR5cGVDaGVja2VyLCB0YXJnZXRWZXJzaW9uLCB1cGdyYWRlRGF0YSwgdHJlZSwgZ2V0VXBkYXRlUmVjb3JkZXIsXG4gICAgICAgIGJhc2VQYXRoLCBsb2dnZXIsIGlzVGVzdFRhcmdldCwgdHNjb25maWdQYXRoKTtcbiAgICBydWxlLmluaXQoKTtcbiAgICBpZiAocnVsZS5ydWxlRW5hYmxlZCkge1xuICAgICAgcnVsZXMucHVzaChydWxlKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzb3VyY2VGaWxlcyA9IHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKS5maWx0ZXIoXG4gICAgICBmID0+ICFmLmlzRGVjbGFyYXRpb25GaWxlICYmICFwcm9ncmFtLmlzU291cmNlRmlsZUZyb21FeHRlcm5hbExpYnJhcnkoZikpO1xuICBjb25zdCByZXNvdXJjZUNvbGxlY3RvciA9IG5ldyBDb21wb25lbnRSZXNvdXJjZUNvbGxlY3Rvcih0eXBlQ2hlY2tlcik7XG4gIGNvbnN0IHVwZGF0ZVJlY29yZGVyQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgVXBkYXRlUmVjb3JkZXI+KCk7XG5cbiAgc291cmNlRmlsZXMuZm9yRWFjaChzb3VyY2VGaWxlID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRQcm9qZWN0UmVsYXRpdmVQYXRoKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgIC8vIERvIG5vdCB2aXNpdCBzb3VyY2UgZmlsZXMgd2hpY2ggaGF2ZSBiZWVuIGNoZWNrZWQgYXMgcGFydCBvZiBhXG4gICAgLy8gcHJldmlvdXNseSBtaWdyYXRlZCBUeXBlU2NyaXB0IHByb2plY3QuXG4gICAgaWYgKCFhbmFseXplZEZpbGVzLmhhcyhyZWxhdGl2ZVBhdGgpKSB7XG4gICAgICBfdmlzaXRUeXBlU2NyaXB0Tm9kZShzb3VyY2VGaWxlKTtcbiAgICAgIGFuYWx5emVkRmlsZXMuYWRkKHJlbGF0aXZlUGF0aCk7XG4gICAgfVxuICB9KTtcblxuICByZXNvdXJjZUNvbGxlY3Rvci5yZXNvbHZlZFRlbXBsYXRlcy5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRQcm9qZWN0UmVsYXRpdmVQYXRoKHRlbXBsYXRlLmZpbGVQYXRoKTtcbiAgICAvLyBEbyBub3QgdmlzaXQgdGhlIHRlbXBsYXRlIGlmIGl0IGhhcyBiZWVuIGNoZWNrZWQgYmVmb3JlLiBJbmxpbmVcbiAgICAvLyB0ZW1wbGF0ZXMgY2Fubm90IGJlIHJlZmVyZW5jZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgaWYgKHRlbXBsYXRlLmlubGluZSB8fCAhYW5hbHl6ZWRGaWxlcy5oYXMocmVsYXRpdmVQYXRoKSkge1xuICAgICAgcnVsZXMuZm9yRWFjaChyID0+IHIudmlzaXRUZW1wbGF0ZSh0ZW1wbGF0ZSkpO1xuICAgICAgYW5hbHl6ZWRGaWxlcy5hZGQocmVsYXRpdmVQYXRoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJlc291cmNlQ29sbGVjdG9yLnJlc29sdmVkU3R5bGVzaGVldHMuZm9yRWFjaChzdHlsZXNoZWV0ID0+IHtcbiAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRQcm9qZWN0UmVsYXRpdmVQYXRoKHN0eWxlc2hlZXQuZmlsZVBhdGgpO1xuICAgIC8vIERvIG5vdCB2aXNpdCB0aGUgc3R5bGVzaGVldCBpZiBpdCBoYXMgYmVlbiBjaGVja2VkIGJlZm9yZS4gSW5saW5lXG4gICAgLy8gc3R5bGVzaGVldHMgY2Fubm90IGJlIHJlZmVyZW5jZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgaWYgKHN0eWxlc2hlZXQuaW5saW5lIHx8ICFhbmFseXplZEZpbGVzLmhhcyhyZWxhdGl2ZVBhdGgpKSB7XG4gICAgICBydWxlcy5mb3JFYWNoKHIgPT4gci52aXNpdFN0eWxlc2hlZXQoc3R5bGVzaGVldCkpO1xuICAgICAgYW5hbHl6ZWRGaWxlcy5hZGQocmVsYXRpdmVQYXRoKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEluIHNvbWUgYXBwbGljYXRpb25zLCBkZXZlbG9wZXJzIHdpbGwgaGF2ZSBnbG9iYWwgc3R5bGVzaGVldHMgd2hpY2ggYXJlIG5vdCBzcGVjaWZpZWQgaW4gYW55XG4gIC8vIEFuZ3VsYXIgY29tcG9uZW50LiBUaGVyZWZvcmUgd2UgZ2xvYiB1cCBhbGwgQ1NTIGFuZCBTQ1NTIGZpbGVzIG91dHNpZGUgb2Ygbm9kZV9tb2R1bGVzIGFuZFxuICAvLyBkaXN0LiBUaGUgZmlsZXMgd2lsbCBiZSByZWFkIGJ5IHRoZSBpbmRpdmlkdWFsIHN0eWxlc2hlZXQgcnVsZXMgYW5kIGNoZWNrZWQuXG4gIC8vIFRPRE86IHJld29yayB0aGlzIHRvIGNvbGxlY3QgZXh0ZXJuYWwvZ2xvYmFsIHN0eWxlc2hlZXRzIGZyb20gdGhlIHdvcmtzcGFjZSBjb25maWcuIENPTVAtMjgwLlxuICBnbG9iU3luYyhcbiAgICAgICchKG5vZGVfbW9kdWxlc3xkaXN0KS8qKi8qLisoY3NzfHNjc3MpJywge2Fic29sdXRlOiB0cnVlLCBjd2Q6IHByb2plY3RGc1BhdGgsIG5vZGlyOiB0cnVlfSlcbiAgICAgIC5maWx0ZXIoZmlsZVBhdGggPT4gIXJlc291cmNlQ29sbGVjdG9yLnJlc29sdmVkU3R5bGVzaGVldHMuc29tZShzID0+IHMuZmlsZVBhdGggPT09IGZpbGVQYXRoKSlcbiAgICAgIC5mb3JFYWNoKGZpbGVQYXRoID0+IHtcbiAgICAgICAgY29uc3Qgc3R5bGVzaGVldCA9IHJlc291cmNlQ29sbGVjdG9yLnJlc29sdmVFeHRlcm5hbFN0eWxlc2hlZXQoZmlsZVBhdGgsIG51bGwpO1xuICAgICAgICBjb25zdCByZWxhdGl2ZVBhdGggPSBnZXRQcm9qZWN0UmVsYXRpdmVQYXRoKGZpbGVQYXRoKTtcbiAgICAgICAgLy8gZG8gbm90IHZpc2l0IHN0eWxlc2hlZXRzIHdoaWNoIGhhdmUgYmVlbiByZWZlcmVuY2VkIGZyb20gYSBjb21wb25lbnQuXG4gICAgICAgIGlmICghYW5hbHl6ZWRGaWxlcy5oYXMocmVsYXRpdmVQYXRoKSkge1xuICAgICAgICAgIHJ1bGVzLmZvckVhY2gociA9PiByLnZpc2l0U3R5bGVzaGVldChzdHlsZXNoZWV0KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gIC8vIENhbGwgdGhlIFwicG9zdEFuYWx5c2lzXCIgbWV0aG9kIGZvciBlYWNoIG1pZ3JhdGlvbiBydWxlLlxuICBydWxlcy5mb3JFYWNoKHIgPT4gci5wb3N0QW5hbHlzaXMoKSk7XG5cbiAgLy8gQ29tbWl0IGFsbCByZWNvcmRlZCB1cGRhdGVzIGluIHRoZSB1cGRhdGUgcmVjb3JkZXIuIFdlIG5lZWQgdG8gcGVyZm9ybSB0aGVcbiAgLy8gcmVwbGFjZW1lbnRzIHBlciBzb3VyY2UgZmlsZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBvZmZzZXRzIGluIHRoZSBUeXBlU2NyaXB0XG4gIC8vIHByb2dyYW0gYXJlIG5vdCBpbmNvcnJlY3RseSBzaGlmdGVkLlxuICB1cGRhdGVSZWNvcmRlckNhY2hlLmZvckVhY2gocmVjb3JkZXIgPT4gdHJlZS5jb21taXRVcGRhdGUocmVjb3JkZXIpKTtcblxuICAvLyBDb2xsZWN0IGFsbCBmYWlsdXJlcyByZXBvcnRlZCBieSBpbmRpdmlkdWFsIG1pZ3JhdGlvbiBydWxlcy5cbiAgY29uc3QgcnVsZUZhaWx1cmVzID1cbiAgICAgIHJ1bGVzLnJlZHVjZSgocmVzLCBydWxlKSA9PiByZXMuY29uY2F0KHJ1bGUuZmFpbHVyZXMpLCBbXSBhcyBNaWdyYXRpb25GYWlsdXJlW10pO1xuXG4gIC8vIEluIGNhc2UgdGhlcmUgYXJlIHJ1bGUgZmFpbHVyZXMsIHByaW50IHRoZXNlIHRvIHRoZSBDTEkgbG9nZ2VyIGFzIHdhcm5pbmdzLlxuICBpZiAocnVsZUZhaWx1cmVzLmxlbmd0aCkge1xuICAgIHJ1bGVGYWlsdXJlcy5mb3JFYWNoKCh7ZmlsZVBhdGgsIG1lc3NhZ2UsIHBvc2l0aW9ufSkgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGVQYXRoID0gbm9ybWFsaXplKGdldFByb2plY3RSZWxhdGl2ZVBhdGgoZmlsZVBhdGgpKTtcbiAgICAgIGNvbnN0IGxpbmVBbmRDaGFyYWN0ZXIgPSBwb3NpdGlvbiA/IGBAJHtwb3NpdGlvbi5saW5lICsgMX06JHtwb3NpdGlvbi5jaGFyYWN0ZXIgKyAxfWAgOiAnJztcbiAgICAgIGxvZ2dlci53YXJuKGAke25vcm1hbGl6ZWRGaWxlUGF0aH0ke2xpbmVBbmRDaGFyYWN0ZXJ9IC0gJHttZXNzYWdlfWApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoYXNGYWlsdXJlczogISFydWxlRmFpbHVyZXMubGVuZ3RoLFxuICB9O1xuXG4gIGZ1bmN0aW9uIGdldFVwZGF0ZVJlY29yZGVyKGZpbGVQYXRoOiBzdHJpbmcpOiBVcGRhdGVSZWNvcmRlciB7XG4gICAgY29uc3QgdHJlZUZpbGVQYXRoID0gZ2V0UHJvamVjdFJlbGF0aXZlUGF0aChmaWxlUGF0aCk7XG4gICAgaWYgKHVwZGF0ZVJlY29yZGVyQ2FjaGUuaGFzKHRyZWVGaWxlUGF0aCkpIHtcbiAgICAgIHJldHVybiB1cGRhdGVSZWNvcmRlckNhY2hlLmdldCh0cmVlRmlsZVBhdGgpITtcbiAgICB9XG4gICAgY29uc3QgdHJlZVJlY29yZGVyID0gdHJlZS5iZWdpblVwZGF0ZSh0cmVlRmlsZVBhdGgpO1xuICAgIHVwZGF0ZVJlY29yZGVyQ2FjaGUuc2V0KHRyZWVGaWxlUGF0aCwgdHJlZVJlY29yZGVyKTtcbiAgICByZXR1cm4gdHJlZVJlY29yZGVyO1xuICB9XG5cbiAgZnVuY3Rpb24gX3Zpc2l0VHlwZVNjcmlwdE5vZGUobm9kZTogdHMuTm9kZSkge1xuICAgIHJ1bGVzLmZvckVhY2gociA9PiByLnZpc2l0Tm9kZShub2RlKSk7XG4gICAgdHMuZm9yRWFjaENoaWxkKG5vZGUsIF92aXNpdFR5cGVTY3JpcHROb2RlKTtcbiAgICByZXNvdXJjZUNvbGxlY3Rvci52aXNpdE5vZGUobm9kZSk7XG4gIH1cblxuICAvKiogR2V0cyB0aGUgc3BlY2lmaWVkIHBhdGggcmVsYXRpdmUgdG8gdGhlIHByb2plY3Qgcm9vdCBpbiBQT1NJWCBmb3JtYXQuICovXG4gIGZ1bmN0aW9uIGdldFByb2plY3RSZWxhdGl2ZVBhdGgoZmlsZVBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiByZWxhdGl2ZShiYXNlUGF0aCwgZmlsZVBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfVxufVxuIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvdXBkYXRlLXRvb2wvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCwrQkFBNkI7SUFDN0IsaUNBQWlDO0lBRWpDLG1IQUEwRTtJQUUxRSx1RUFBcUQ7SUFHckQsNkZBQXlEO0lBRXpEOzs7Ozs7T0FNRztJQUNILE1BQWEsYUFBYTtRQUd4QixZQUFvQixRQUFpQixFQUNqQixRQUFvQixFQUNwQixXQUF1QixFQUN2QixpQkFBOEIsSUFBSSxHQUFHLEVBQUUsRUFDdkMsVUFBd0Isc0JBQWE7WUFKckMsYUFBUSxHQUFSLFFBQVEsQ0FBUztZQUNqQixhQUFRLEdBQVIsUUFBUSxDQUFZO1lBQ3BCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1lBQ3ZCLG1CQUFjLEdBQWQsY0FBYyxDQUF5QjtZQUN2QyxZQUFPLEdBQVAsT0FBTyxDQUE4QjtZQU54QyxpQkFBWSxHQUFtQixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBTW5CLENBQUM7UUFFN0Q7Ozs7Ozs7V0FPRztRQUNILE9BQU8sQ0FBTyxjQUE4QyxFQUFFLE1BQXFCLEVBQUUsSUFBVSxFQUMzRix5QkFBb0M7WUFDdEMsZ0RBQWdEO1lBQ2hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hFLDhFQUE4RTtZQUM5RSxnRkFBZ0Y7WUFDaEYsZ0ZBQWdGO1lBQ2hGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSx5REFBMEIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5RiwwRUFBMEU7WUFDMUUsMEVBQTBFO1lBQzFFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFR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QyxFQUFFO2dCQUN6QixNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QyxtRkFBbUY7Z0JBQ25GLHFGQUFxRjtnQkFDckYsT0FBTyxXQUFXLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQy9FLENBQUMsQ0FBQztZQUNGLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbEUsQ0FBQztLQUNGO0lBbEpELHNDQWtKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge2Rpcm5hbWV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Q29tcG9uZW50UmVzb3VyY2VDb2xsZWN0b3J9IGZyb20gJy4vY29tcG9uZW50LXJlc291cmNlLWNvbGxlY3Rvcic7XG5pbXBvcnQge0ZpbGVTeXN0ZW19IGZyb20gJy4vZmlsZS1zeXN0ZW0nO1xuaW1wb3J0IHtkZWZhdWx0TG9nZ2VyLCBVcGRhdGVMb2dnZXJ9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7TWlncmF0aW9uLCBNaWdyYXRpb25DdG9yLCBNaWdyYXRpb25GYWlsdXJlfSBmcm9tICcuL21pZ3JhdGlvbic7XG5pbXBvcnQge1RhcmdldFZlcnNpb259IGZyb20gJy4vdGFyZ2V0LXZlcnNpb24nO1xuaW1wb3J0IHtwYXJzZVRzY29uZmlnRmlsZX0gZnJvbSAnLi91dGlscy9wYXJzZS10c2NvbmZpZyc7XG5cbi8qKlxuICogQW4gdXBkYXRlIHByb2plY3QgdGhhdCBjYW4gYmUgcnVuIGFnYWluc3QgaW5kaXZpZHVhbCBtaWdyYXRpb25zLiBBbiB1cGRhdGUgcHJvamVjdFxuICogYWNjZXB0cyBhIFR5cGVTY3JpcHQgcHJvZ3JhbSBhbmQgYSBjb250ZXh0IHRoYXQgaXMgcHJvdmlkZWQgdG8gYWxsIG1pZ3JhdGlvbnMuIFRoZVxuICogY29udGV4dCBpcyB1c3VhbGx5IG5vdCB1c2VkIGJ5IG1pZ3JhdGlvbnMsIGJ1dCBpbiBzb21lIGNhc2VzIG1pZ3JhdGlvbnMgcmVseSBvblxuICogc3BlY2lmaWNzIGZyb20gdGhlIHRvb2wgdGhhdCBwZXJmb3JtcyB0aGUgdXBkYXRlIChlLmcuIHRoZSBBbmd1bGFyIENMSSkuIEluIHRob3NlIGNhc2VzLFxuICogdGhlIGNvbnRleHQgY2FuIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBzcGVjaWZpY3MgdG8gdGhlIG1pZ3JhdGlvbnMgaW4gYSB0eXBlLXNhZmUgd2F5LlxuICovXG5leHBvcnQgY2xhc3MgVXBkYXRlUHJvamVjdDxDb250ZXh0PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3R5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciA9IHRoaXMuX3Byb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBDb250ZXh0LFxuICAgICAgICAgICAgICBwcml2YXRlIF9wcm9ncmFtOiB0cy5Qcm9ncmFtLFxuICAgICAgICAgICAgICBwcml2YXRlIF9maWxlU3lzdGVtOiBGaWxlU3lzdGVtLFxuICAgICAgICAgICAgICBwcml2YXRlIF9hbmFseXplZEZpbGVzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoKSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyOiBVcGRhdGVMb2dnZXIgPSBkZWZhdWx0TG9nZ2VyKSB7fVxuXG4gIC8qKlxuICAgKiBNaWdyYXRlcyB0aGUgcHJvamVjdCB0byB0aGUgc3BlY2lmaWVkIHRhcmdldCB2ZXJzaW9uLlxuICAgKiBAcGFyYW0gbWlncmF0aW9uVHlwZXMgTWlncmF0aW9ucyB0aGF0IHNob3VsZCBiZSBydW4uXG4gICAqIEBwYXJhbSB0YXJnZXQgVmVyc2lvbiB0aGUgcHJvamVjdCBzaG91bGQgYmUgdXBkYXRlZCB0by5cbiAgICogQHBhcmFtIGRhdGEgVXBncmFkZSBkYXRhIHRoYXQgaXMgcGFzc2VkIHRvIGFsbCBtaWdyYXRpb24gcnVsZXMuXG4gICAqIEBwYXJhbSBhZGRpdGlvbmFsU3R5bGVzaGVldFBhdGhzIEFkZGl0aW9uYWwgc3R5bGVzaGVldHMgdGhhdCBzaG91bGQgYmUgbWlncmF0ZWQsIGlmIG5vdFxuICAgKiAgIHJlZmVyZW5jZWQgaW4gYW4gQW5ndWxhciBjb21wb25lbnQuIFRoaXMgaXMgaGVscGZ1bCBmb3IgZ2xvYmFsIHN0eWxlc2hlZXRzIGluIGEgcHJvamVjdC5cbiAgICovXG4gIG1pZ3JhdGU8RGF0YT4obWlncmF0aW9uVHlwZXM6IE1pZ3JhdGlvbkN0b3I8RGF0YSwgQ29udGV4dD5bXSwgdGFyZ2V0OiBUYXJnZXRWZXJzaW9uLCBkYXRhOiBEYXRhLFxuICAgICAgYWRkaXRpb25hbFN0eWxlc2hlZXRQYXRocz86IHN0cmluZ1tdKToge2hhc0ZhaWx1cmVzOiBib29sZWFufSB7XG4gICAgLy8gQ3JlYXRlIGluc3RhbmNlcyBvZiB0aGUgc3BlY2lmaWVkIG1pZ3JhdGlvbnMuXG4gICAgY29uc3QgbWlncmF0aW9ucyA9IHRoaXMuX2NyZWF0ZU1pZ3JhdGlvbnMobWlncmF0aW9uVHlwZXMsIHRhcmdldCwgZGF0YSk7XG4gICAgLy8gQ3JlYXRlcyB0aGUgY29tcG9uZW50IHJlc291cmNlIGNvbGxlY3Rvci4gVGhlIGNvbGxlY3RvciBjYW4gdmlzaXQgYXJiaXRyYXJ5XG4gICAgLy8gVHlwZVNjcmlwdCBub2RlcyBhbmQgd2lsbCBmaW5kIEFuZ3VsYXIgY29tcG9uZW50IHJlc291cmNlcy4gUmVzb3VyY2VzIGluY2x1ZGVcbiAgICAvLyB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzLiBJdCBhbHNvIGNhcHR1cmVzIGlubGluZSBzdHlsZXNoZWV0cyBhbmQgdGVtcGxhdGVzLlxuICAgIGNvbnN0IHJlc291cmNlQ29sbGVjdG9yID0gbmV3IENvbXBvbmVudFJlc291cmNlQ29sbGVjdG9yKHRoaXMuX3R5cGVDaGVja2VyLCB0aGlzLl9maWxlU3lzdGVtKTtcbiAgICAvLyBDb2xsZWN0IGFsbCBvZiB0aGUgVHlwZVNjcmlwdCBzb3VyY2UgZmlsZXMgd2Ugd2FudCB0byBtaWdyYXRlLiBXZSBkb24ndFxuICAgIC8vIG1pZ3JhdGUgdHlwZSBkZWZpbml0aW9uIGZpbGVzLCBvciBzb3VyY2UgZmlsZXMgZnJvbSBleHRlcm5hbCBsaWJyYXJpZXMuXG4gICAgY29uc3Qgc291cmNlRmlsZXMgPSB0aGlzLl9wcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkuZmlsdGVyKFxuICAgICAgZiA9PiAhZi5pc0RlY2xhcmF0aW9uRmlsZSAmJiAhdGhpcy5fcHJvZ3JhbS5pc1NvdXJjZUZpbGVGcm9tRXh0ZXJuYWxMaWJyYXJ5KGYpKTtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0aGF0IHZpc2l0cyBhIGdpdmVuIFR5cGVTY3JpcHQgbm9kZSBhbmQgY29sbGVjdHMgYWxsIHJlZmVyZW5jZWRcbiAgICAvLyBjb21wb25lbnQgcmVzb3VyY2VzIChpLmUuIHN0eWxlc2hlZXRzIG9yIHRlbXBsYXRlcykuIEFkZGl0aW9uYWxseSwgdGhlIGhlbHBlclxuICAgIC8vIHZpc2l0cyB0aGUgbm9kZSBpbiBlYWNoIGluc3RhbnRpYXRlZCBtaWdyYXRpb24uXG4gICAgY29uc3QgdmlzaXROb2RlQW5kQ29sbGVjdFJlc291cmNlcyA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgICBtaWdyYXRpb25zLmZvckVhY2gociA9PiByLnZpc2l0Tm9kZShub2RlKSk7XG4gICAgICB0cy5mb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlQW5kQ29sbGVjdFJlc291cmNlcyk7XG4gICAgICByZXNvdXJjZUNvbGxlY3Rvci52aXNpdE5vZGUobm9kZSk7XG4gICAgfTtcblxuICAgIC8vIFdhbGsgdGhyb3VnaCBhbGwgc291cmNlIGZpbGUsIGlmIGl0IGhhcyBub3QgYmVlbiB2aXNpdGVkIGJlZm9yZSwgYW5kXG4gICAgLy8gdmlzaXQgZm91bmQgbm9kZXMgd2hpbGUgY29sbGVjdGluZyBwb3RlbnRpYWwgcmVzb3VyY2VzLlxuICAgIHNvdXJjZUZpbGVzLmZvckVhY2goc291cmNlRmlsZSA9PiB7XG4gICAgICBjb25zdCByZXNvbHZlZFBhdGggPSB0aGlzLl9maWxlU3lzdGVtLnJlc29sdmUoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gICAgICAvLyBEbyBub3QgdmlzaXQgc291cmNlIGZpbGVzIHdoaWNoIGhhdmUgYmVlbiBjaGVja2VkIGFzIHBhcnQgb2YgYVxuICAgICAgLy8gcHJldmlvdXNseSBtaWdyYXRlZCBUeXBlU2NyaXB0IHByb2plY3QuXG4gICAgICBpZiAoIXRoaXMuX2FuYWx5emVkRmlsZXMuaGFzKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgdmlzaXROb2RlQW5kQ29sbGVjdFJlc291cmNlcyhzb3VyY2VGaWxlKTtcbiAgICAgICAgdGhpcy5fYW5hbHl6ZWRGaWxlcy5hZGQocmVzb2x2ZWRQYXRoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFdhbGsgdGhyb3VnaCBhbGwgcmVzb2x2ZWQgdGVtcGxhdGVzIGFuZCB2aXNpdCB0aGVtIGluIGVhY2ggaW5zdGFudGlhdGVkXG4gICAgLy8gbWlncmF0aW9uLiBOb3RlIHRoYXQgdGhpcyBjYW4gb25seSBoYXBwZW4gYWZ0ZXIgc291cmNlIGZpbGVzIGhhdmUgYmVlblxuICAgIC8vIHZpc2l0ZWQgYmVjYXVzZSB3ZSBmaW5kIHRlbXBsYXRlcyB0aHJvdWdoIHRoZSBUeXBlU2NyaXB0IHNvdXJjZSBmaWxlcy5cbiAgICByZXNvdXJjZUNvbGxlY3Rvci5yZXNvbHZlZFRlbXBsYXRlcy5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHRoaXMuX2ZpbGVTeXN0ZW0ucmVzb2x2ZSh0ZW1wbGF0ZS5maWxlUGF0aCk7XG4gICAgICAvLyBEbyBub3QgdmlzaXQgdGhlIHRlbXBsYXRlIGlmIGl0IGhhcyBiZWVuIGNoZWNrZWQgYmVmb3JlLiBJbmxpbmVcbiAgICAgIC8vIHRlbXBsYXRlcyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgIGlmICh0ZW1wbGF0ZS5pbmxpbmUgfHwgIXRoaXMuX2FuYWx5emVkRmlsZXMuaGFzKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgbWlncmF0aW9ucy5mb3JFYWNoKG0gPT4gbS52aXNpdFRlbXBsYXRlKHRlbXBsYXRlKSk7XG4gICAgICAgIHRoaXMuX2FuYWx5emVkRmlsZXMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBXYWxrIHRocm91Z2ggYWxsIHJlc29sdmVkIHN0eWxlc2hlZXRzIGFuZCB2aXNpdCB0aGVtIGluIGVhY2ggaW5zdGFudGlhdGVkXG4gICAgLy8gbWlncmF0aW9uLiBOb3RlIHRoYXQgdGhpcyBjYW4gb25seSBoYXBwZW4gYWZ0ZXIgc291cmNlIGZpbGVzIGhhdmUgYmVlblxuICAgIC8vIHZpc2l0ZWQgYmVjYXVzZSB3ZSBmaW5kIHN0eWxlc2hlZXRzIHRocm91Z2ggdGhlIFR5cGVTY3JpcHQgc291cmNlIGZpbGVzLlxuICAgIHJlc291cmNlQ29sbGVjdG9yLnJlc29sdmVkU3R5bGVzaGVldHMuZm9yRWFjaChzdHlsZXNoZWV0ID0+IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHRoaXMuX2ZpbGVTeXN0ZW0ucmVzb2x2ZShzdHlsZXNoZWV0LmZpbGVQYXRoKTtcbiAgICAgIC8vIERvIG5vdCB2aXNpdCB0aGUgc3R5bGVzaGVldCBpZiBpdCBoYXMgYmVlbiBjaGVja2VkIGJlZm9yZS4gSW5saW5lXG4gICAgICAvLyBzdHlsZXNoZWV0cyBjYW5ub3QgYmUgcmVmZXJlbmNlZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgIGlmIChzdHlsZXNoZWV0LmlubGluZSB8fCAhdGhpcy5fYW5hbHl6ZWRGaWxlcy5oYXMocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICBtaWdyYXRpb25zLmZvckVhY2gociA9PiByLnZpc2l0U3R5bGVzaGVldChzdHlsZXNoZWV0KSk7XG4gICAgICAgIHRoaXMuX2FuYWx5emVkRmlsZXMuYWRkKHJlc29sdmVkUGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBJbiBzb21lIGFwcGxpY2F0aW9ucywgZGV2ZWxvcGVycyB3aWxsIGhhdmUgZ2xvYmFsIHN0eWxlc2hlZXRzIHdoaWNoIGFyZSBub3RcbiAgICAvLyBzcGVjaWZpZWQgaW4gYW55IEFuZ3VsYXIgY29tcG9uZW50LiBUaGVyZWZvcmUgd2UgYWxsb3cgZm9yIGFkZGl0aW9uYWwgc3R5bGVzaGVldHNcbiAgICAvLyBiZWluZyBzcGVjaWZpZWQuIFdlIHZpc2l0IHRoZW0gaW4gZWFjaCBtaWdyYXRpb24gdW5sZXNzIHRoZXkgaGF2ZSBiZWVuIGFscmVhZHlcbiAgICAvLyBkaXNjb3ZlcmVkIGJlZm9yZSBhcyBhY3R1YWwgY29tcG9uZW50IHJlc291cmNlLlxuICAgIGFkZGl0aW9uYWxTdHlsZXNoZWV0UGF0aHMuZm9yRWFjaChmaWxlUGF0aCA9PiB7XG4gICAgICBjb25zdCBzdHlsZXNoZWV0ID0gcmVzb3VyY2VDb2xsZWN0b3IucmVzb2x2ZUV4dGVybmFsU3R5bGVzaGVldChmaWxlUGF0aCwgbnVsbCk7XG4gICAgICBjb25zdCByZXNvbHZlZFBhdGggPSB0aGlzLl9maWxlU3lzdGVtLnJlc29sdmUoZmlsZVBhdGgpO1xuICAgICAgLy8gRG8gbm90IHZpc2l0IHN0eWxlc2hlZXRzIHdoaWNoIGhhdmUgYmVlbiByZWZlcmVuY2VkIGZyb20gYSBjb21wb25lbnQuXG4gICAgICBpZiAoIXRoaXMuX2FuYWx5emVkRmlsZXMuaGFzKHJlc29sdmVkUGF0aCkpIHtcbiAgICAgICAgbWlncmF0aW9ucy5mb3JFYWNoKHIgPT4gci52aXNpdFN0eWxlc2hlZXQoc3R5bGVzaGVldCkpO1xuICAgICAgICB0aGlzLl9hbmFseXplZEZpbGVzLmFkZChyZXNvbHZlZFBhdGgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQ2FsbCB0aGUgXCJwb3N0QW5hbHlzaXNcIiBtZXRob2QgZm9yIGVhY2ggbWlncmF0aW9uLlxuICAgIG1pZ3JhdGlvbnMuZm9yRWFjaChyID0+IHIucG9zdEFuYWx5c2lzKCkpO1xuXG4gICAgLy8gQ29sbGVjdCBhbGwgZmFpbHVyZXMgcmVwb3J0ZWQgYnkgaW5kaXZpZHVhbCBtaWdyYXRpb25zLlxuICAgIGNvbnN0IGZhaWx1cmVzID0gbWlncmF0aW9ucy5yZWR1Y2UoKHJlcywgbSkgPT5cbiAgICAgICAgcmVzLmNvbmNhdChtLmZhaWx1cmVzKSwgW10gYXMgTWlncmF0aW9uRmFpbHVyZVtdKTtcblxuICAgIC8vIEluIGNhc2UgdGhlcmUgYXJlIGZhaWx1cmVzLCBwcmludCB0aGVzZSB0byB0aGUgQ0xJIGxvZ2dlciBhcyB3YXJuaW5ncy5cbiAgICBpZiAoZmFpbHVyZXMubGVuZ3RoKSB7XG4gICAgICBmYWlsdXJlcy5mb3JFYWNoKCh7ZmlsZVBhdGgsIG1lc3NhZ2UsIHBvc2l0aW9ufSkgPT4ge1xuICAgICAgICBjb25zdCBwb3NpeEZpbGVQYXRoID0gdGhpcy5fZmlsZVN5c3RlbS5yZXNvbHZlKGZpbGVQYXRoKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICAgIGNvbnN0IGxpbmVBbmRDaGFyYWN0ZXIgPSBwb3NpdGlvbiA/IGBAJHtwb3NpdGlvbi5saW5lICsgMX06JHtwb3NpdGlvbi5jaGFyYWN0ZXIgKyAxfWAgOiAnJztcbiAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oYCR7cG9zaXhGaWxlUGF0aH0ke2xpbmVBbmRDaGFyYWN0ZXJ9IC0gJHttZXNzYWdlfWApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc0ZhaWx1cmVzOiAhIWZhaWx1cmVzLmxlbmd0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgaW5zdGFuY2VzIG9mIHRoZSBnaXZlbiBtaWdyYXRpb25zIHdpdGggdGhlIHNwZWNpZmllZCB0YXJnZXRcbiAgICogdmVyc2lvbiBhbmQgZGF0YS5cbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZU1pZ3JhdGlvbnM8RGF0YT4odHlwZXM6IE1pZ3JhdGlvbkN0b3I8RGF0YSwgQ29udGV4dD5bXSwgdGFyZ2V0OiBUYXJnZXRWZXJzaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IERhdGEpOiBNaWdyYXRpb248RGF0YSwgQ29udGV4dD5bXSB7XG4gICAgY29uc3QgcmVzdWx0OiBNaWdyYXRpb248RGF0YSwgQ29udGV4dD5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY3RvciBvZiB0eXBlcykge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgY3Rvcih0aGlzLl9wcm9ncmFtLCB0aGlzLl90eXBlQ2hlY2tlciwgdGFyZ2V0LCB0aGlzLl9jb250ZXh0LFxuICAgICAgICBkYXRhLCB0aGlzLl9maWxlU3lzdGVtLCB0aGlzLl9sb2dnZXIpO1xuICAgICAgaW5zdGFuY2UuaW5pdCgpO1xuICAgICAgaWYgKGluc3RhbmNlLmVuYWJsZWQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwcm9ncmFtIGZvcm0gdGhlIHNwZWNpZmllZCB0c2NvbmZpZyBhbmQgcGF0Y2hlcyB0aGUgaG9zdFxuICAgKiB0byByZWFkIGZpbGVzIHRocm91Z2ggdGhlIGdpdmVuIGZpbGUgc3lzdGVtLlxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVByb2dyYW1Gcm9tVHNjb25maWcodHNjb25maWdGc1BhdGg6IHN0cmluZywgZnM6IEZpbGVTeXN0ZW0pOiB0cy5Qcm9ncmFtIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVRzY29uZmlnRmlsZSh0c2NvbmZpZ0ZzUGF0aCwgZGlybmFtZSh0c2NvbmZpZ0ZzUGF0aCkpO1xuICAgIGNvbnN0IGhvc3QgPSB0cy5jcmVhdGVDb21waWxlckhvc3QocGFyc2VkLm9wdGlvbnMsIHRydWUpO1xuICAgIC8vIFBhdGNoIHRoZSBob3N0IHRvIHJlYWQgZmlsZXMgdGhyb3VnaCB0aGUgc3BlY2lmaWVkIGZpbGUgc3lzdGVtLlxuICAgIGhvc3QucmVhZEZpbGUgPSBmaWxlTmFtZSA9PiB7XG4gICAgICBjb25zdCBmaWxlQ29udGVudCA9IGZzLnJlYWQoZmlsZU5hbWUpO1xuICAgICAgLy8gU3RyaXAgQk9NIGFzIG90aGVyd2lzZSBUU0MgbWV0aG9kcyAoZS5nLiBcImdldFdpZHRoXCIpIHdpbGwgcmV0dXJuIGFuIG9mZnNldCB3aGljaFxuICAgICAgLy8gd2hpY2ggYnJlYWtzIHRoZSBDTEkgVXBkYXRlUmVjb3JkZXIuIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvcHVsbC8zMDcxOVxuICAgICAgcmV0dXJuIGZpbGVDb250ZW50ICE9PSBudWxsID8gZmlsZUNvbnRlbnQucmVwbGFjZSgvXlxcdUZFRkYvLCAnJykgOiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICByZXR1cm4gdHMuY3JlYXRlUHJvZ3JhbShwYXJzZWQuZmlsZU5hbWVzLCBwYXJzZWQub3B0aW9ucywgaG9zdCk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,16 @@
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/cdk/schematics/update-tool/logger" />
9
+ export interface UpdateLogger {
10
+ debug(message: string): void;
11
+ error(message: string): void;
12
+ fatal(message: string): void;
13
+ info(message: string): void;
14
+ warn(message: string): void;
15
+ }
16
+ export declare const defaultLogger: UpdateLogger;
@@ -0,0 +1,27 @@
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/cdk/schematics/update-tool/logger", ["require", "exports"], factory);
15
+ }
16
+ })(function (require, exports) {
17
+ "use strict";
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.defaultLogger = {
20
+ debug: m => console.debug(m),
21
+ error: m => console.error(m),
22
+ fatal: m => console.error(m),
23
+ info: m => console.info(m),
24
+ warn: m => console.warn(m),
25
+ };
26
+ });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9zY2hlbWF0aWNzL3VwZGF0ZS10b29sL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQVVVLFFBQUEsYUFBYSxHQUFpQjtRQUN6QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1QixJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTG9nZ2VyIHtcbiAgZGVidWcobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcbiAgZmF0YWwobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0TG9nZ2VyOiBVcGRhdGVMb2dnZXIgPSB7XG4gIGRlYnVnOiBtID0+IGNvbnNvbGUuZGVidWcobSksXG4gIGVycm9yOiBtID0+IGNvbnNvbGUuZXJyb3IobSksXG4gIGZhdGFsOiBtID0+IGNvbnNvbGUuZXJyb3IobSksXG4gIGluZm86IG0gPT4gY29uc29sZS5pbmZvKG0pLFxuICB3YXJuOiBtID0+IGNvbnNvbGUud2FybihtKSxcbn07XG4iXX0=
@@ -5,12 +5,11 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- /// <amd-module name="@angular/cdk/schematics/update-tool/migration-rule" />
9
- import { logging } from '@angular-devkit/core';
10
- import { SchematicContext, Tree, UpdateRecorder } from '@angular-devkit/schematics';
11
- import { WorkspaceProject } from '@schematics/angular/utility/workspace-models';
8
+ /// <amd-module name="@angular/cdk/schematics/update-tool/migration" />
12
9
  import * as ts from 'typescript';
13
10
  import { ResolvedResource } from './component-resource-collector';
11
+ import { FileSystem } from './file-system';
12
+ import { UpdateLogger } from './logger';
14
13
  import { TargetVersion } from './target-version';
15
14
  import { LineAndCharacter } from './utils/line-mappings';
16
15
  export interface MigrationFailure {
@@ -22,56 +21,44 @@ export declare type PostMigrationAction = void | {
22
21
  /** Whether the package manager should run upon migration completion. */
23
22
  runPackageManager: boolean;
24
23
  };
25
- export declare class MigrationRule<T> {
26
- /** Workspace project the migration rule runs against. */
27
- project: WorkspaceProject;
24
+ /** Creates a constructor type for the specified type. */
25
+ export declare type Constructor<T> = (new (...args: any[]) => T);
26
+ /** Gets a constructor type for the passed migration data. */
27
+ export declare type MigrationCtor<Data, Context = never> = Constructor<Migration<Data, Context>>;
28
+ export declare abstract class Migration<Data, Context = never> {
28
29
  /** TypeScript program for the migration. */
29
30
  program: ts.Program;
30
31
  /** TypeChecker instance for the analysis program. */
31
32
  typeChecker: ts.TypeChecker;
32
33
  /** Version for which the migration rule should run. */
33
34
  targetVersion: TargetVersion;
35
+ /** Context data for the migration. */
36
+ context: Context;
34
37
  /** Upgrade data passed to the migration. */
35
- upgradeData: T;
36
- /** Devkit tree for the current migration. Can be used to insert/remove files. */
37
- tree: Tree;
38
- /** Gets the update recorder for a given source file or resolved template. */
39
- getUpdateRecorder: (filePath: string) => UpdateRecorder;
40
- /** Base directory of the virtual file system tree. */
41
- basePath: string;
38
+ upgradeData: Data;
39
+ /** File system that can be used for modifying files. */
40
+ fileSystem: FileSystem;
42
41
  /** Logger that can be used to print messages as part of the migration. */
43
- logger: logging.LoggerApi;
44
- /** Whether the migration runs for a test target. */
45
- isTestTarget: boolean;
46
- /** Path to the tsconfig that is migrated. */
47
- tsconfigPath: string;
42
+ logger: UpdateLogger;
48
43
  /** List of migration failures that need to be reported. */
49
44
  failures: MigrationFailure[];
50
- /** Whether the migration rule is enabled or not. */
51
- ruleEnabled: boolean;
45
+ /** Whether the migration is enabled or not. */
46
+ abstract enabled: boolean;
52
47
  constructor(
53
- /** Workspace project the migration rule runs against. */
54
- project: WorkspaceProject,
55
48
  /** TypeScript program for the migration. */
56
49
  program: ts.Program,
57
50
  /** TypeChecker instance for the analysis program. */
58
51
  typeChecker: ts.TypeChecker,
59
52
  /** Version for which the migration rule should run. */
60
53
  targetVersion: TargetVersion,
54
+ /** Context data for the migration. */
55
+ context: Context,
61
56
  /** Upgrade data passed to the migration. */
62
- upgradeData: T,
63
- /** Devkit tree for the current migration. Can be used to insert/remove files. */
64
- tree: Tree,
65
- /** Gets the update recorder for a given source file or resolved template. */
66
- getUpdateRecorder: (filePath: string) => UpdateRecorder,
67
- /** Base directory of the virtual file system tree. */
68
- basePath: string,
57
+ upgradeData: Data,
58
+ /** File system that can be used for modifying files. */
59
+ fileSystem: FileSystem,
69
60
  /** Logger that can be used to print messages as part of the migration. */
70
- logger: logging.LoggerApi,
71
- /** Whether the migration runs for a test target. */
72
- isTestTarget: boolean,
73
- /** Path to the tsconfig that is migrated. */
74
- tsconfigPath: string);
61
+ logger: UpdateLogger);
75
62
  /** Method can be used to perform global analysis of the program. */
76
63
  init(): void;
77
64
  /**
@@ -91,14 +78,5 @@ export declare class MigrationRule<T> {
91
78
  /** Method that will be called for each stylesheet in the program. */
92
79
  visitStylesheet(stylesheet: ResolvedResource): void;
93
80
  /** Creates a failure with a specified message at the given node location. */
94
- createFailureAtNode(node: ts.Node, message: string): void;
95
- /** Prints the specified message with "info" loglevel. */
96
- printInfo(text: string): void;
97
- /**
98
- * Static method that will be called once the migration of all project targets
99
- * has been performed. This method can be used to make changes respecting the
100
- * migration result of all individual targets. e.g. removing HammerJS if it
101
- * is not needed in any project target.
102
- */
103
- static globalPostMigration(tree: Tree, context: SchematicContext): PostMigrationAction;
81
+ protected createFailureAtNode(node: ts.Node, message: string): void;
104
82
  }
@@ -0,0 +1,76 @@
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/cdk/schematics/update-tool/migration", ["require", "exports", "typescript"], factory);
15
+ }
16
+ })(function (require, exports) {
17
+ "use strict";
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ const ts = require("typescript");
20
+ class Migration {
21
+ constructor(
22
+ /** TypeScript program for the migration. */
23
+ program,
24
+ /** TypeChecker instance for the analysis program. */
25
+ typeChecker,
26
+ /** Version for which the migration rule should run. */
27
+ targetVersion,
28
+ /** Context data for the migration. */
29
+ context,
30
+ /** Upgrade data passed to the migration. */
31
+ upgradeData,
32
+ /** File system that can be used for modifying files. */
33
+ fileSystem,
34
+ /** Logger that can be used to print messages as part of the migration. */
35
+ logger) {
36
+ this.program = program;
37
+ this.typeChecker = typeChecker;
38
+ this.targetVersion = targetVersion;
39
+ this.context = context;
40
+ this.upgradeData = upgradeData;
41
+ this.fileSystem = fileSystem;
42
+ this.logger = logger;
43
+ /** List of migration failures that need to be reported. */
44
+ this.failures = [];
45
+ }
46
+ /** Method can be used to perform global analysis of the program. */
47
+ init() { }
48
+ /**
49
+ * Method that will be called once all nodes, templates and stylesheets
50
+ * have been visited.
51
+ */
52
+ postAnalysis() { }
53
+ /**
54
+ * Method that will be called for each node in a given source file. Unlike tslint, this
55
+ * function will only retrieve TypeScript nodes that need to be casted manually. This
56
+ * allows us to only walk the program source files once per program and not per
57
+ * migration rule (significant performance boost).
58
+ */
59
+ visitNode(node) { }
60
+ /** Method that will be called for each Angular template in the program. */
61
+ visitTemplate(template) { }
62
+ /** Method that will be called for each stylesheet in the program. */
63
+ visitStylesheet(stylesheet) { }
64
+ /** Creates a failure with a specified message at the given node location. */
65
+ createFailureAtNode(node, message) {
66
+ const sourceFile = node.getSourceFile();
67
+ this.failures.push({
68
+ filePath: sourceFile.fileName,
69
+ position: ts.getLineAndCharacterOfPosition(sourceFile, node.getStart()),
70
+ message: message,
71
+ });
72
+ }
73
+ }
74
+ exports.Migration = Migration;
75
+ });
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9zY2hlbWF0aWNzL3VwZGF0ZS10b29sL21pZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILGlDQUFpQztJQXVCakMsTUFBc0IsU0FBUztRQU83QjtRQUNJLDRDQUE0QztRQUNyQyxPQUFtQjtRQUMxQixxREFBcUQ7UUFDOUMsV0FBMkI7UUFDbEMsdURBQXVEO1FBQ2hELGFBQTRCO1FBQ25DLHNDQUFzQztRQUMvQixPQUFnQjtRQUN2Qiw0Q0FBNEM7UUFDckMsV0FBaUI7UUFDeEIsd0RBQXdEO1FBQ2pELFVBQXNCO1FBQzdCLDBFQUEwRTtRQUNuRSxNQUFvQjtZQVpwQixZQUFPLEdBQVAsT0FBTyxDQUFZO1lBRW5CLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtZQUUzQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtZQUU1QixZQUFPLEdBQVAsT0FBTyxDQUFTO1lBRWhCLGdCQUFXLEdBQVgsV0FBVyxDQUFNO1lBRWpCLGVBQVUsR0FBVixVQUFVLENBQVk7WUFFdEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztZQXBCL0IsMkRBQTJEO1lBQzNELGFBQVEsR0FBdUIsRUFBRSxDQUFDO1FBbUJBLENBQUM7UUFFbkMsb0VBQW9FO1FBQ3BFLElBQUksS0FBVSxDQUFDO1FBRWY7OztXQUdHO1FBQ0gsWUFBWSxLQUFVLENBQUM7UUFFdkI7Ozs7O1dBS0c7UUFDSCxTQUFTLENBQUMsSUFBYSxJQUFTLENBQUM7UUFFakMsMkVBQTJFO1FBQzNFLGFBQWEsQ0FBQyxRQUEwQixJQUFTLENBQUM7UUFFbEQscUVBQXFFO1FBQ3JFLGVBQWUsQ0FBQyxVQUE0QixJQUFTLENBQUM7UUFFdEQsNkVBQTZFO1FBQ25FLG1CQUFtQixDQUFDLElBQWEsRUFBRSxPQUFlO1lBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDakIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO2dCQUM3QixRQUFRLEVBQUUsRUFBRSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZFLE9BQU8sRUFBRSxPQUFPO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRjtJQXZERCw4QkF1REMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge1Jlc29sdmVkUmVzb3VyY2V9IGZyb20gJy4vY29tcG9uZW50LXJlc291cmNlLWNvbGxlY3Rvcic7XG5pbXBvcnQge0ZpbGVTeXN0ZW19IGZyb20gJy4vZmlsZS1zeXN0ZW0nO1xuaW1wb3J0IHtVcGRhdGVMb2dnZXJ9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7VGFyZ2V0VmVyc2lvbn0gZnJvbSAnLi90YXJnZXQtdmVyc2lvbic7XG5pbXBvcnQge0xpbmVBbmRDaGFyYWN0ZXJ9IGZyb20gJy4vdXRpbHMvbGluZS1tYXBwaW5ncyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uRmFpbHVyZSB7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcG9zaXRpb24/OiBMaW5lQW5kQ2hhcmFjdGVyO1xufVxuXG5leHBvcnQgdHlwZSBQb3N0TWlncmF0aW9uQWN0aW9uID0gdm9pZCB8IHtcbiAgLyoqIFdoZXRoZXIgdGhlIHBhY2thZ2UgbWFuYWdlciBzaG91bGQgcnVuIHVwb24gbWlncmF0aW9uIGNvbXBsZXRpb24uICovXG4gIHJ1blBhY2thZ2VNYW5hZ2VyOiBib29sZWFuO1xufTtcblxuLyoqIENyZWF0ZXMgYSBjb25zdHJ1Y3RvciB0eXBlIGZvciB0aGUgc3BlY2lmaWVkIHR5cGUuICovXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvcjxUPiA9IChuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUKTtcbi8qKiBHZXRzIGEgY29uc3RydWN0b3IgdHlwZSBmb3IgdGhlIHBhc3NlZCBtaWdyYXRpb24gZGF0YS4gKi9cbmV4cG9ydCB0eXBlIE1pZ3JhdGlvbkN0b3I8RGF0YSwgQ29udGV4dCA9IG5ldmVyPiA9IENvbnN0cnVjdG9yPE1pZ3JhdGlvbjxEYXRhLCBDb250ZXh0Pj47XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNaWdyYXRpb248RGF0YSwgQ29udGV4dCA9IG5ldmVyPiB7XG4gIC8qKiBMaXN0IG9mIG1pZ3JhdGlvbiBmYWlsdXJlcyB0aGF0IG5lZWQgdG8gYmUgcmVwb3J0ZWQuICovXG4gIGZhaWx1cmVzOiBNaWdyYXRpb25GYWlsdXJlW10gPSBbXTtcblxuICAvKiogV2hldGhlciB0aGUgbWlncmF0aW9uIGlzIGVuYWJsZWQgb3Igbm90LiAqL1xuICBhYnN0cmFjdCBlbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgLyoqIFR5cGVTY3JpcHQgcHJvZ3JhbSBmb3IgdGhlIG1pZ3JhdGlvbi4gKi9cbiAgICAgIHB1YmxpYyBwcm9ncmFtOiB0cy5Qcm9ncmFtLFxuICAgICAgLyoqIFR5cGVDaGVja2VyIGluc3RhbmNlIGZvciB0aGUgYW5hbHlzaXMgcHJvZ3JhbS4gKi9cbiAgICAgIHB1YmxpYyB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgICAvKiogVmVyc2lvbiBmb3Igd2hpY2ggdGhlIG1pZ3JhdGlvbiBydWxlIHNob3VsZCBydW4uICovXG4gICAgICBwdWJsaWMgdGFyZ2V0VmVyc2lvbjogVGFyZ2V0VmVyc2lvbixcbiAgICAgIC8qKiBDb250ZXh0IGRhdGEgZm9yIHRoZSBtaWdyYXRpb24uICovXG4gICAgICBwdWJsaWMgY29udGV4dDogQ29udGV4dCxcbiAgICAgIC8qKiBVcGdyYWRlIGRhdGEgcGFzc2VkIHRvIHRoZSBtaWdyYXRpb24uICovXG4gICAgICBwdWJsaWMgdXBncmFkZURhdGE6IERhdGEsXG4gICAgICAvKiogRmlsZSBzeXN0ZW0gdGhhdCBjYW4gYmUgdXNlZCBmb3IgbW9kaWZ5aW5nIGZpbGVzLiAqL1xuICAgICAgcHVibGljIGZpbGVTeXN0ZW06IEZpbGVTeXN0ZW0sXG4gICAgICAvKiogTG9nZ2VyIHRoYXQgY2FuIGJlIHVzZWQgdG8gcHJpbnQgbWVzc2FnZXMgYXMgcGFydCBvZiB0aGUgbWlncmF0aW9uLiAqL1xuICAgICAgcHVibGljIGxvZ2dlcjogVXBkYXRlTG9nZ2VyKSB7fVxuXG4gIC8qKiBNZXRob2QgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBnbG9iYWwgYW5hbHlzaXMgb2YgdGhlIHByb2dyYW0uICovXG4gIGluaXQoKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbmNlIGFsbCBub2RlcywgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0c1xuICAgKiBoYXZlIGJlZW4gdmlzaXRlZC5cbiAgICovXG4gIHBvc3RBbmFseXNpcygpOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0aGF0IHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIG5vZGUgaW4gYSBnaXZlbiBzb3VyY2UgZmlsZS4gVW5saWtlIHRzbGludCwgdGhpc1xuICAgKiBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0cmlldmUgVHlwZVNjcmlwdCBub2RlcyB0aGF0IG5lZWQgdG8gYmUgY2FzdGVkIG1hbnVhbGx5LiBUaGlzXG4gICAqIGFsbG93cyB1cyB0byBvbmx5IHdhbGsgdGhlIHByb2dyYW0gc291cmNlIGZpbGVzIG9uY2UgcGVyIHByb2dyYW0gYW5kIG5vdCBwZXJcbiAgICogbWlncmF0aW9uIHJ1bGUgKHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvb3N0KS5cbiAgICovXG4gIHZpc2l0Tm9kZShub2RlOiB0cy5Ob2RlKTogdm9pZCB7fVxuXG4gIC8qKiBNZXRob2QgdGhhdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBBbmd1bGFyIHRlbXBsYXRlIGluIHRoZSBwcm9ncmFtLiAqL1xuICB2aXNpdFRlbXBsYXRlKHRlbXBsYXRlOiBSZXNvbHZlZFJlc291cmNlKTogdm9pZCB7fVxuXG4gIC8qKiBNZXRob2QgdGhhdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBzdHlsZXNoZWV0IGluIHRoZSBwcm9ncmFtLiAqL1xuICB2aXNpdFN0eWxlc2hlZXQoc3R5bGVzaGVldDogUmVzb2x2ZWRSZXNvdXJjZSk6IHZvaWQge31cblxuICAvKiogQ3JlYXRlcyBhIGZhaWx1cmUgd2l0aCBhIHNwZWNpZmllZCBtZXNzYWdlIGF0IHRoZSBnaXZlbiBub2RlIGxvY2F0aW9uLiAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlRmFpbHVyZUF0Tm9kZShub2RlOiB0cy5Ob2RlLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gICAgdGhpcy5mYWlsdXJlcy5wdXNoKHtcbiAgICAgIGZpbGVQYXRoOiBzb3VyY2VGaWxlLmZpbGVOYW1lLFxuICAgICAgcG9zaXRpb246IHRzLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKHNvdXJjZUZpbGUsIG5vZGUuZ2V0U3RhcnQoKSksXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -6,10 +6,11 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  /// <amd-module name="@angular/cdk/schematics/update-tool/public-api" />
9
+ export * from './component-resource-collector';
10
+ export * from './file-system';
9
11
  export * from './index';
12
+ export * from './migration';
10
13
  export * from './target-version';
11
- export * from './version-changes';
12
- export * from './migration-rule';
13
- export * from './component-resource-collector';
14
- export * from './utils/imports';
15
14
  export * from './utils/decorators';
15
+ export * from './utils/imports';
16
+ export * from './version-changes';