@angular/compiler-cli 8.0.3 → 8.1.0-beta.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 (131) hide show
  1. package/ngcc/index.d.ts +1 -0
  2. package/ngcc/index.js +1 -1
  3. package/ngcc/main-ngcc.js +4 -4
  4. package/ngcc/src/analysis/decoration_analyzer.d.ts +5 -1
  5. package/ngcc/src/analysis/decoration_analyzer.js +12 -12
  6. package/ngcc/src/analysis/module_with_providers_analyzer.js +2 -2
  7. package/ngcc/src/analysis/private_declarations_analyzer.d.ts +3 -2
  8. package/ngcc/src/analysis/private_declarations_analyzer.js +8 -7
  9. package/ngcc/src/dependencies/commonjs_dependency_host.d.ts +46 -0
  10. package/ngcc/src/dependencies/commonjs_dependency_host.js +133 -0
  11. package/ngcc/src/dependencies/dependency_host.d.ts +17 -0
  12. package/ngcc/src/dependencies/dependency_host.js +20 -0
  13. package/ngcc/src/{packages → dependencies}/dependency_resolver.d.ts +13 -8
  14. package/ngcc/src/dependencies/dependency_resolver.js +138 -0
  15. package/ngcc/src/dependencies/esm_dependency_host.d.ts +62 -0
  16. package/ngcc/src/dependencies/esm_dependency_host.js +122 -0
  17. package/ngcc/src/dependencies/module_resolver.d.ts +139 -0
  18. package/ngcc/src/dependencies/module_resolver.js +297 -0
  19. package/ngcc/src/dependencies/umd_dependency_host.d.ts +46 -0
  20. package/ngcc/src/dependencies/umd_dependency_host.js +114 -0
  21. package/ngcc/src/file_system/file_system.d.ts +36 -0
  22. package/ngcc/src/file_system/file_system.js +20 -0
  23. package/ngcc/src/file_system/node_js_file_system.d.ts +27 -0
  24. package/ngcc/src/file_system/node_js_file_system.js +44 -0
  25. package/ngcc/src/host/commonjs_host.d.ts +43 -0
  26. package/ngcc/src/host/commonjs_host.js +187 -0
  27. package/ngcc/src/host/esm2015_host.d.ts +8 -10
  28. package/ngcc/src/host/esm2015_host.js +70 -40
  29. package/ngcc/src/host/esm5_host.js +3 -3
  30. package/ngcc/src/host/umd_host.d.ts +51 -0
  31. package/ngcc/src/host/umd_host.js +250 -0
  32. package/ngcc/src/main.d.ts +7 -8
  33. package/ngcc/src/main.js +64 -48
  34. package/ngcc/src/packages/build_marker.d.ts +3 -2
  35. package/ngcc/src/packages/build_marker.js +5 -6
  36. package/ngcc/src/packages/bundle_program.d.ts +13 -4
  37. package/ngcc/src/packages/bundle_program.js +11 -12
  38. package/ngcc/src/packages/entry_point.d.ts +6 -10
  39. package/ngcc/src/packages/entry_point.js +28 -24
  40. package/ngcc/src/packages/entry_point_bundle.d.ts +3 -1
  41. package/ngcc/src/packages/entry_point_bundle.js +10 -21
  42. package/ngcc/src/packages/entry_point_finder.d.ts +33 -3
  43. package/ngcc/src/packages/entry_point_finder.js +80 -18
  44. package/ngcc/src/packages/ngcc_compiler_host.d.ts +31 -0
  45. package/ngcc/src/packages/ngcc_compiler_host.js +108 -0
  46. package/ngcc/src/packages/transformer.d.ts +7 -5
  47. package/ngcc/src/packages/transformer.js +36 -12
  48. package/ngcc/src/rendering/commonjs_rendering_formatter.d.ts +25 -0
  49. package/ngcc/src/rendering/commonjs_rendering_formatter.js +89 -0
  50. package/ngcc/src/rendering/dts_renderer.d.ts +51 -0
  51. package/ngcc/src/rendering/dts_renderer.js +135 -0
  52. package/ngcc/src/rendering/esm5_rendering_formatter.d.ts +21 -0
  53. package/ngcc/src/rendering/esm5_rendering_formatter.js +44 -0
  54. package/ngcc/src/rendering/esm_rendering_formatter.d.ts +63 -0
  55. package/ngcc/src/rendering/esm_rendering_formatter.js +202 -0
  56. package/ngcc/src/rendering/renderer.d.ts +16 -112
  57. package/ngcc/src/rendering/renderer.js +38 -285
  58. package/ngcc/src/rendering/rendering_formatter.d.ts +35 -0
  59. package/ngcc/src/rendering/rendering_formatter.js +14 -0
  60. package/ngcc/src/rendering/source_maps.d.ts +45 -0
  61. package/ngcc/src/rendering/source_maps.js +129 -0
  62. package/ngcc/src/rendering/umd_rendering_formatter.d.ts +28 -0
  63. package/ngcc/src/rendering/umd_rendering_formatter.js +222 -0
  64. package/ngcc/src/rendering/utils.d.ts +25 -0
  65. package/ngcc/src/rendering/utils.js +34 -0
  66. package/ngcc/src/utils.d.ts +12 -0
  67. package/ngcc/src/utils.js +10 -1
  68. package/ngcc/src/writing/file_writer.d.ts +2 -2
  69. package/ngcc/src/writing/file_writer.js +1 -1
  70. package/ngcc/src/writing/in_place_file_writer.d.ts +6 -10
  71. package/ngcc/src/writing/in_place_file_writer.js +18 -19
  72. package/ngcc/src/writing/new_entry_point_file_writer.d.ts +4 -4
  73. package/ngcc/src/writing/new_entry_point_file_writer.js +24 -25
  74. package/package.json +2 -2
  75. package/src/ngtsc/annotations/src/base_def.d.ts +5 -4
  76. package/src/ngtsc/annotations/src/base_def.js +12 -3
  77. package/src/ngtsc/annotations/src/component.d.ts +0 -1
  78. package/src/ngtsc/annotations/src/component.js +2 -5
  79. package/src/ngtsc/annotations/src/directive.d.ts +2 -1
  80. package/src/ngtsc/annotations/src/directive.js +5 -4
  81. package/src/ngtsc/annotations/src/injectable.js +1 -3
  82. package/src/ngtsc/annotations/src/ng_module.d.ts +2 -1
  83. package/src/ngtsc/annotations/src/ng_module.js +17 -10
  84. package/src/ngtsc/annotations/src/pipe.js +1 -1
  85. package/src/ngtsc/annotations/src/util.js +7 -4
  86. package/src/ngtsc/imports/src/emitter.d.ts +8 -6
  87. package/src/ngtsc/imports/src/emitter.js +10 -38
  88. package/src/ngtsc/imports/src/resolver.js +4 -5
  89. package/src/ngtsc/incremental/src/state.d.ts +15 -3
  90. package/src/ngtsc/incremental/src/state.js +72 -52
  91. package/src/ngtsc/metadata/src/api.d.ts +18 -1
  92. package/src/ngtsc/metadata/src/api.js +1 -1
  93. package/src/ngtsc/metadata/src/util.d.ts +2 -2
  94. package/src/ngtsc/metadata/src/util.js +28 -9
  95. package/src/ngtsc/partial_evaluator/index.d.ts +1 -1
  96. package/src/ngtsc/partial_evaluator/index.js +1 -1
  97. package/src/ngtsc/partial_evaluator/src/dynamic.d.ts +2 -1
  98. package/src/ngtsc/partial_evaluator/src/dynamic.js +1 -1
  99. package/src/ngtsc/partial_evaluator/src/interface.d.ts +10 -3
  100. package/src/ngtsc/partial_evaluator/src/interface.js +6 -7
  101. package/src/ngtsc/partial_evaluator/src/interpreter.d.ts +4 -3
  102. package/src/ngtsc/partial_evaluator/src/interpreter.js +11 -9
  103. package/src/ngtsc/path/src/logical.js +4 -3
  104. package/src/ngtsc/path/src/types.d.ts +19 -7
  105. package/src/ngtsc/path/src/types.js +48 -9
  106. package/src/ngtsc/program.js +13 -12
  107. package/src/ngtsc/scope/src/local.d.ts +23 -5
  108. package/src/ngtsc/scope/src/local.js +34 -11
  109. package/src/ngtsc/shims/src/factory_generator.js +4 -2
  110. package/src/ngtsc/transform/src/api.d.ts +0 -1
  111. package/src/ngtsc/transform/src/api.js +1 -1
  112. package/src/ngtsc/transform/src/compilation.d.ts +4 -2
  113. package/src/ngtsc/transform/src/compilation.js +22 -20
  114. package/src/ngtsc/translator/index.d.ts +1 -1
  115. package/src/ngtsc/translator/index.js +1 -1
  116. package/src/ngtsc/translator/src/translator.d.ts +21 -8
  117. package/src/ngtsc/translator/src/translator.js +3 -12
  118. package/src/ngtsc/typecheck/src/api.d.ts +2 -1
  119. package/src/ngtsc/typecheck/src/api.js +1 -1
  120. package/src/ngtsc/typecheck/src/expression.js +104 -88
  121. package/src/ngtsc/typecheck/src/type_check_block.js +17 -11
  122. package/src/ngtsc/util/src/typescript.d.ts +7 -0
  123. package/src/ngtsc/util/src/typescript.js +17 -1
  124. package/src/version.js +1 -1
  125. package/ngcc/src/packages/dependency_host.d.ts +0 -84
  126. package/ngcc/src/packages/dependency_host.js +0 -164
  127. package/ngcc/src/packages/dependency_resolver.js +0 -126
  128. package/ngcc/src/rendering/esm5_renderer.d.ts +0 -14
  129. package/ngcc/src/rendering/esm5_renderer.js +0 -47
  130. package/ngcc/src/rendering/esm_renderer.d.ts +0 -30
  131. package/ngcc/src/rendering/esm_renderer.js +0 -141
@@ -4,7 +4,7 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define("@angular/compiler-cli/ngcc/src/packages/entry_point_finder", ["require", "exports", "tslib", "canonical-path", "fs", "@angular/compiler-cli/src/ngtsc/path", "@angular/compiler-cli/ngcc/src/packages/entry_point"], factory);
7
+ define("@angular/compiler-cli/ngcc/src/packages/entry_point_finder", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngtsc/path", "@angular/compiler-cli/ngcc/src/packages/entry_point"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
@@ -17,12 +17,11 @@
17
17
  * Use of this source code is governed by an MIT-style license that can be
18
18
  * found in the LICENSE file at https://angular.io/license
19
19
  */
20
- var path = require("canonical-path");
21
- var fs = require("fs");
22
20
  var path_1 = require("@angular/compiler-cli/src/ngtsc/path");
23
21
  var entry_point_1 = require("@angular/compiler-cli/ngcc/src/packages/entry_point");
24
22
  var EntryPointFinder = /** @class */ (function () {
25
- function EntryPointFinder(logger, resolver) {
23
+ function EntryPointFinder(fs, logger, resolver) {
24
+ this.fs = fs;
26
25
  this.logger = logger;
27
26
  this.resolver = resolver;
28
27
  }
@@ -30,13 +29,45 @@
30
29
  * Search the given directory, and sub-directories, for Angular package entry points.
31
30
  * @param sourceDirectory An absolute path to the directory to search for entry points.
32
31
  */
33
- EntryPointFinder.prototype.findEntryPoints = function (sourceDirectory, targetEntryPointPath) {
34
- var unsortedEntryPoints = this.walkDirectoryForEntryPoints(sourceDirectory);
32
+ EntryPointFinder.prototype.findEntryPoints = function (sourceDirectory, targetEntryPointPath, pathMappings) {
33
+ var _this = this;
34
+ var basePaths = this.getBasePaths(sourceDirectory, pathMappings);
35
+ var unsortedEntryPoints = basePaths.reduce(function (entryPoints, basePath) { return entryPoints.concat(_this.walkDirectoryForEntryPoints(basePath)); }, []);
35
36
  var targetEntryPoint = targetEntryPointPath ?
36
37
  unsortedEntryPoints.find(function (entryPoint) { return entryPoint.path === targetEntryPointPath; }) :
37
38
  undefined;
38
39
  return this.resolver.sortEntryPointsByDependency(unsortedEntryPoints, targetEntryPoint);
39
40
  };
41
+ /**
42
+ * Extract all the base-paths that we need to search for entry-points.
43
+ *
44
+ * This always contains the standard base-path (`sourceDirectory`).
45
+ * But it also parses the `paths` mappings object to guess additional base-paths.
46
+ *
47
+ * For example:
48
+ *
49
+ * ```
50
+ * getBasePaths('/node_modules', {baseUrl: '/dist', paths: {'*': ['lib/*', 'lib/generated/*']}})
51
+ * > ['/node_modules', '/dist/lib']
52
+ * ```
53
+ *
54
+ * Notice that `'/dist'` is not included as there is no `'*'` path,
55
+ * and `'/dist/lib/generated'` is not included as it is covered by `'/dist/lib'`.
56
+ *
57
+ * @param sourceDirectory The standard base-path (e.g. node_modules).
58
+ * @param pathMappings Path mapping configuration, from which to extract additional base-paths.
59
+ */
60
+ EntryPointFinder.prototype.getBasePaths = function (sourceDirectory, pathMappings) {
61
+ var basePaths = [sourceDirectory];
62
+ if (pathMappings) {
63
+ var baseUrl_1 = path_1.AbsoluteFsPath.resolve(pathMappings.baseUrl);
64
+ values(pathMappings.paths).forEach(function (paths) { return paths.forEach(function (path) {
65
+ basePaths.push(path_1.AbsoluteFsPath.join(baseUrl_1, extractPathPrefix(path)));
66
+ }); });
67
+ }
68
+ basePaths.sort(); // Get the paths in order with the shorter ones first.
69
+ return basePaths.filter(removeDeeperPaths);
70
+ };
40
71
  /**
41
72
  * Look for entry points that need to be compiled, starting at the source directory.
42
73
  * The function will recurse into directories that start with `@...`, e.g. `@angular/...`.
@@ -45,28 +76,29 @@
45
76
  EntryPointFinder.prototype.walkDirectoryForEntryPoints = function (sourceDirectory) {
46
77
  var _this = this;
47
78
  var entryPoints = [];
48
- fs.readdirSync(sourceDirectory)
79
+ this.fs
80
+ .readdir(sourceDirectory)
49
81
  // Not interested in hidden files
50
82
  .filter(function (p) { return !p.startsWith('.'); })
51
83
  // Ignore node_modules
52
84
  .filter(function (p) { return p !== 'node_modules'; })
53
85
  // Only interested in directories (and only those that are not symlinks)
54
86
  .filter(function (p) {
55
- var stat = fs.lstatSync(path.resolve(sourceDirectory, p));
87
+ var stat = _this.fs.lstat(path_1.AbsoluteFsPath.resolve(sourceDirectory, p));
56
88
  return stat.isDirectory() && !stat.isSymbolicLink();
57
89
  })
58
90
  .forEach(function (p) {
59
91
  // Either the directory is a potential package or a namespace containing packages (e.g
60
92
  // `@angular`).
61
- var packagePath = path_1.AbsoluteFsPath.from(path.join(sourceDirectory, p));
93
+ var packagePath = path_1.AbsoluteFsPath.join(sourceDirectory, p);
62
94
  if (p.startsWith('@')) {
63
95
  entryPoints.push.apply(entryPoints, tslib_1.__spread(_this.walkDirectoryForEntryPoints(packagePath)));
64
96
  }
65
97
  else {
66
98
  entryPoints.push.apply(entryPoints, tslib_1.__spread(_this.getEntryPointsForPackage(packagePath)));
67
99
  // Also check for any nested node_modules in this package
68
- var nestedNodeModulesPath = path_1.AbsoluteFsPath.from(path.resolve(packagePath, 'node_modules'));
69
- if (fs.existsSync(nestedNodeModulesPath)) {
100
+ var nestedNodeModulesPath = path_1.AbsoluteFsPath.join(packagePath, 'node_modules');
101
+ if (_this.fs.exists(nestedNodeModulesPath)) {
70
102
  entryPoints.push.apply(entryPoints, tslib_1.__spread(_this.walkDirectoryForEntryPoints(nestedNodeModulesPath)));
71
103
  }
72
104
  }
@@ -82,13 +114,13 @@
82
114
  var _this = this;
83
115
  var entryPoints = [];
84
116
  // Try to get an entry point from the top level package directory
85
- var topLevelEntryPoint = entry_point_1.getEntryPointInfo(this.logger, packagePath, packagePath);
117
+ var topLevelEntryPoint = entry_point_1.getEntryPointInfo(this.fs, this.logger, packagePath, packagePath);
86
118
  if (topLevelEntryPoint !== null) {
87
119
  entryPoints.push(topLevelEntryPoint);
88
120
  }
89
121
  // Now search all the directories of this package for possible entry points
90
122
  this.walkDirectory(packagePath, function (subdir) {
91
- var subEntryPoint = entry_point_1.getEntryPointInfo(_this.logger, packagePath, subdir);
123
+ var subEntryPoint = entry_point_1.getEntryPointInfo(_this.fs, _this.logger, packagePath, subdir);
92
124
  if (subEntryPoint !== null) {
93
125
  entryPoints.push(subEntryPoint);
94
126
  }
@@ -103,19 +135,19 @@
103
135
  */
104
136
  EntryPointFinder.prototype.walkDirectory = function (dir, fn) {
105
137
  var _this = this;
106
- return fs
107
- .readdirSync(dir)
138
+ return this.fs
139
+ .readdir(dir)
108
140
  // Not interested in hidden files
109
141
  .filter(function (p) { return !p.startsWith('.'); })
110
142
  // Ignore node_modules
111
143
  .filter(function (p) { return p !== 'node_modules'; })
112
144
  // Only interested in directories (and only those that are not symlinks)
113
145
  .filter(function (p) {
114
- var stat = fs.lstatSync(path.resolve(dir, p));
146
+ var stat = _this.fs.lstat(path_1.AbsoluteFsPath.resolve(dir, p));
115
147
  return stat.isDirectory() && !stat.isSymbolicLink();
116
148
  })
117
149
  .forEach(function (subDir) {
118
- var resolvedSubDir = path_1.AbsoluteFsPath.from(path.resolve(dir, subDir));
150
+ var resolvedSubDir = path_1.AbsoluteFsPath.resolve(dir, subDir);
119
151
  fn(resolvedSubDir);
120
152
  _this.walkDirectory(resolvedSubDir, fn);
121
153
  });
@@ -123,5 +155,35 @@
123
155
  return EntryPointFinder;
124
156
  }());
125
157
  exports.EntryPointFinder = EntryPointFinder;
158
+ /**
159
+ * Extract everything in the `path` up to the first `*`.
160
+ * @param path The path to parse.
161
+ * @returns The extracted prefix.
162
+ */
163
+ function extractPathPrefix(path) {
164
+ return path.split('*', 1)[0];
165
+ }
166
+ /**
167
+ * A filter function that removes paths that are already covered by higher paths.
168
+ *
169
+ * @param value The current path.
170
+ * @param index The index of the current path.
171
+ * @param array The array of paths (sorted alphabetically).
172
+ * @returns true if this path is not already covered by a previous path.
173
+ */
174
+ function removeDeeperPaths(value, index, array) {
175
+ for (var i = 0; i < index; i++) {
176
+ if (value.startsWith(array[i]))
177
+ return false;
178
+ }
179
+ return true;
180
+ }
181
+ /**
182
+ * Extract all the values (not keys) from an object.
183
+ * @param obj The object to process.
184
+ */
185
+ function values(obj) {
186
+ return Object.keys(obj).map(function (key) { return obj[key]; });
187
+ }
126
188
  });
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnlfcG9pbnRfZmluZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL25nY2Mvc3JjL3BhY2thZ2VzL2VudHJ5X3BvaW50X2ZpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCxxQ0FBdUM7SUFDdkMsdUJBQXlCO0lBRXpCLDZEQUF1RDtJQUl2RCxtRkFBNEQ7SUFHNUQ7UUFDRSwwQkFBb0IsTUFBYyxFQUFVLFFBQTRCO1lBQXBELFdBQU0sR0FBTixNQUFNLENBQVE7WUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUFHLENBQUM7UUFDNUU7OztXQUdHO1FBQ0gsMENBQWUsR0FBZixVQUFnQixlQUErQixFQUFFLG9CQUFxQztZQUVwRixJQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM5RSxJQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLENBQUM7Z0JBQzNDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFBLFVBQVUsSUFBSSxPQUFBLFVBQVUsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQXhDLENBQXdDLENBQUMsQ0FBQyxDQUFDO2dCQUNsRixTQUFTLENBQUM7WUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsbUJBQW1CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBRUQ7Ozs7V0FJRztRQUNLLHNEQUEyQixHQUFuQyxVQUFvQyxlQUErQjtZQUFuRSxpQkE4QkM7WUE3QkMsSUFBTSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztZQUNyQyxFQUFFLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztnQkFDM0IsaUNBQWlDO2lCQUNoQyxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FB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QWMsRUFBcEIsQ0FBb0IsQ0FBQztnQkFDbEMsd0VBQXdFO2lCQUN2RSxNQUFNLENBQUMsVUFBQSxDQUFDO2dCQUNQLElBQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEQsQ0FBQyxDQUFDO2lCQUNELE9BQU8sQ0FBQyxVQUFBLE1BQU07Z0JBQ2IsSUFBTSxjQUFjLEdBQUcscUJBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDdEUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNuQixLQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNULENBQUM7UUFDSCx1QkFBQztJQUFELENBQUMsQUFyR0QsSUFxR0M7SUFyR1ksNENBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdjYW5vbmljYWwtcGF0aCc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5cbmltcG9ydCB7QWJzb2x1dGVGc1BhdGh9IGZyb20gJy4uLy4uLy4uL3NyYy9uZ3RzYy9wYXRoJztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnaW5nL2xvZ2dlcic7XG5cbmltcG9ydCB7RGVwZW5kZW5jeVJlc29sdmVyLCBTb3J0ZWRFbnRyeVBvaW50c0luZm99IGZyb20gJy4vZGVwZW5kZW5jeV9yZXNvbHZlcic7XG5pbXBvcnQge0VudHJ5UG9pbnQsIGdldEVudHJ5UG9pbnRJbmZvfSBmcm9tICcuL2VudHJ5X3BvaW50JztcblxuXG5leHBvcnQgY2xhc3MgRW50cnlQb2ludEZpbmRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsIHByaXZhdGUgcmVzb2x2ZXI6IERlcGVuZGVuY3lSZXNvbHZlcikge31cbiAgLyoqXG4gICAqIFNlYXJjaCB0aGUgZ2l2ZW4gZGlyZWN0b3J5LCBhbmQgc3ViLWRpcmVjdG9yaWVzLCBmb3IgQW5ndWxhciBwYWNrYWdlIGVudHJ5IHBvaW50cy5cbiAgICogQHBhcmFtIHNvdXJjZURpcmVjdG9yeSBBbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciBlbnRyeSBwb2ludHMuXG4gICAqL1xuICBmaW5kRW50cnlQb2ludHMoc291cmNlRGlyZWN0b3J5OiBBYnNvbHV0ZUZzUGF0aCwgdGFyZ2V0RW50cnlQb2ludFBhdGg/OiBBYnNvbHV0ZUZzUGF0aCk6XG4gICAgICBTb3J0ZWRFbnRyeVBvaW50c0luZm8ge1xuICAgIGNvbnN0IHVuc29ydGVkRW50cnlQb2ludHMgPSB0aGlzLndhbGtEaXJlY3RvcnlGb3JFbnRyeVBvaW50cyhzb3VyY2VEaXJlY3RvcnkpO1xuICAgIGNvbnN0IHRhcmdldEVudHJ5UG9pbnQgPSB0YXJnZXRFbnRyeVBvaW50UGF0aCA/XG4gICAgICAgIHVuc29ydGVkRW50cnlQb2ludHMuZmluZChlbnRyeVBvaW50ID0+IGVudHJ5UG9pbnQucGF0aCA9PT0gdGFyZ2V0RW50cnlQb2ludFBhdGgpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVyLnNvcnRFbnRyeVBvaW50c0J5RGVwZW5kZW5jeSh1bnNvcnRlZEVudHJ5UG9pbnRzLCB0YXJnZXRFbnRyeVBvaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIGZvciBlbnRyeSBwb2ludHMgdGhhdCBuZWVkIHRvIGJlIGNvbXBpbGVkLCBzdGFydGluZyBhdCB0aGUgc291cmNlIGRpcmVjdG9yeS5cbiAgICogVGhlIGZ1bmN0aW9uIHdpbGwgcmVjdXJzZSBpbnRvIGRpcmVjdG9yaWVzIHRoYXQgc3RhcnQgd2l0aCBgQC4uLmAsIGUuZy4gYEBhbmd1bGFyLy4uLmAuXG4gICAqIEBwYXJhbSBzb3VyY2VEaXJlY3RvcnkgQW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgd2hlcmUgc2VhcmNoaW5nIGJlZ2lucy5cbiAgICovXG4gIHByaXZhdGUgd2Fsa0RpcmVjdG9yeUZvckVudHJ5UG9pbnRzKHNvdXJjZURpcmVjdG9yeTogQWJzb2x1dGVGc1BhdGgpOiBFbnRyeVBvaW50W10ge1xuICAgIGNvbnN0IGVudHJ5UG9pbnRzOiBFbnRyeVBvaW50W10gPSBbXTtcbiAgICBmcy5yZWFkZGlyU3luYyhzb3VyY2VEaXJlY3RvcnkpXG4gICAgICAgIC8vIE5vdCBpbnRlcmVzdGVkIGluIGhpZGRlbiBmaWxlc1xuICAgICAgICAuZmlsdGVyKHAgPT4gIXAuc3RhcnRzV2l0aCgnLicpKVxuICAgICAgICAvLyBJZ25vcmUgbm9kZV9tb2R1bGVzXG4gICAgICAgIC5maWx0ZXIocCA9PiBwICE9PSAnbm9kZV9tb2R1bGVzJylcbiAgICAgICAgLy8gT25seSBpbnRlcmVzdGVkIGluIGRpcmVjdG9yaWVzIChhbmQgb25seSB0aG9zZSB0aGF0IGFyZSBub3Qgc3ltbGlua3MpXG4gICAgICAgIC5maWx0ZXIocCA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGZzLmxzdGF0U3luYyhwYXRoLnJlc29sdmUoc291cmNlRGlyZWN0b3J5LCBwKSk7XG4gICAgICAgICAgcmV0dXJuIHN0YXQuaXNEaXJlY3RvcnkoKSAmJiAhc3RhdC5pc1N5bWJvbGljTGluaygpO1xuICAgICAgICB9KVxuICAgICAgICAuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICAvLyBFaXRoZXIgdGhlIGRpcmVjdG9yeSBpcyBhIHBvdGVudGlhbCBwYWNrYWdlIG9yIGEgbmFtZXNwYWNlIGNvbnRhaW5pbmcgcGFja2FnZXMgKGUuZ1xuICAgICAgICAgIC8vIGBAYW5ndWxhcmApLlxuICAgICAgICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gQWJzb2x1dGVGc1BhdGguZnJvbShwYXRoLmpvaW4oc291cmNlRGlyZWN0b3J5LCBwKSk7XG4gICAgICAgICAgaWYgKHAuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgICAgICBlbnRyeVBvaW50cy5wdXNoKC4uLnRoaXMud2Fsa0RpcmVjdG9yeUZvckVudHJ5UG9pbnRzKHBhY2thZ2VQYXRoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVudHJ5UG9pbnRzLnB1c2goLi4udGhpcy5nZXRFbnRyeVBvaW50c0ZvclBhY2thZ2UocGFja2FnZVBhdGgpKTtcblxuICAgICAgICAgICAgLy8gQWxzbyBjaGVjayBmb3IgYW55IG5lc3RlZCBub2RlX21vZHVsZXMgaW4gdGhpcyBwYWNrYWdlXG4gICAgICAgICAgICBjb25zdCBuZXN0ZWROb2RlTW9kdWxlc1BhdGggPVxuICAgICAgICAgICAgICAgIEFic29sdXRlRnNQYXRoLmZyb20ocGF0aC5yZXNvbHZlKHBhY2thZ2VQYXRoLCAnbm9kZV9tb2R1bGVzJykpO1xuICAgICAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMobmVzdGVkTm9kZU1vZHVsZXNQYXRoKSkge1xuICAgICAgICAgICAgICBlbnRyeVBvaW50cy5wdXNoKC4uLnRoaXMud2Fsa0RpcmVjdG9yeUZvckVudHJ5UG9pbnRzKG5lc3RlZE5vZGVNb2R1bGVzUGF0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgcmV0dXJuIGVudHJ5UG9pbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2UgdGhlIGZvbGRlciBzdHJ1Y3R1cmUgbG9va2luZyBmb3IgYWxsIHRoZSBlbnRyeSBwb2ludHNcbiAgICogQHBhcmFtIHBhY2thZ2VQYXRoIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIGFuIG5wbSBwYWNrYWdlIHRoYXQgbWF5IGNvbnRhaW4gZW50cnkgcG9pbnRzXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGVudHJ5IHBvaW50cyB0aGF0IHdlcmUgZGlzY292ZXJlZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0RW50cnlQb2ludHNGb3JQYWNrYWdlKHBhY2thZ2VQYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IEVudHJ5UG9pbnRbXSB7XG4gICAgY29uc3QgZW50cnlQb2ludHM6IEVudHJ5UG9pbnRbXSA9IFtdO1xuXG4gICAgLy8gVHJ5IHRvIGdldCBhbiBlbnRyeSBwb2ludCBmcm9tIHRoZSB0b3AgbGV2ZWwgcGFja2FnZSBkaXJlY3RvcnlcbiAgICBjb25zdCB0b3BMZXZlbEVudHJ5UG9pbnQgPSBnZXRFbnRyeVBvaW50SW5mbyh0aGlzLmxvZ2dlciwgcGFja2FnZVBhdGgsIHBhY2thZ2VQYXRoKTtcbiAgICBpZiAodG9wTGV2ZWxFbnRyeVBvaW50ICE9PSBudWxsKSB7XG4gICAgICBlbnRyeVBvaW50cy5wdXNoKHRvcExldmVsRW50cnlQb2ludCk7XG4gICAgfVxuXG4gICAgLy8gTm93IHNlYXJjaCBhbGwgdGhlIGRpcmVjdG9yaWVzIG9mIHRoaXMgcGFja2FnZSBmb3IgcG9zc2libGUgZW50cnkgcG9pbnRzXG4gICAgdGhpcy53YWxrRGlyZWN0b3J5KHBhY2thZ2VQYXRoLCBzdWJkaXIgPT4ge1xuICAgICAgY29uc3Qgc3ViRW50cnlQb2ludCA9IGdldEVudHJ5UG9pbnRJbmZvKHRoaXMubG9nZ2VyLCBwYWNrYWdlUGF0aCwgc3ViZGlyKTtcbiAgICAgIGlmIChzdWJFbnRyeVBvaW50ICE9PSBudWxsKSB7XG4gICAgICAgIGVudHJ5UG9pbnRzLnB1c2goc3ViRW50cnlQb2ludCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZW50cnlQb2ludHM7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgd2FsayBhIGRpcmVjdG9yeSBhbmQgaXRzIHN1Yi1kaXJlY3RvcmllcywgYXBwbHlpbmcgYSBnaXZlblxuICAgKiBmdW5jdGlvbiB0byBlYWNoIGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIGRpciB0aGUgZGlyZWN0b3J5IHRvIHJlY3Vyc2l2ZWx5IHdhbGsuXG4gICAqIEBwYXJhbSBmbiB0aGUgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBkaXJlY3RvcnkuXG4gICAqL1xuICBwcml2YXRlIHdhbGtEaXJlY3RvcnkoZGlyOiBBYnNvbHV0ZUZzUGF0aCwgZm46IChkaXI6IEFic29sdXRlRnNQYXRoKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIGZzXG4gICAgICAgIC5yZWFkZGlyU3luYyhkaXIpXG4gICAgICAgIC8vIE5vdCBpbnRlcmVzdGVkIGluIGhpZGRlbiBmaWxlc1xuICAgICAgICAuZmlsdGVyKHAgPT4gIXAuc3RhcnRzV2l0aCgnLicpKVxuICAgICAgICAvLyBJZ25vcmUgbm9kZV9tb2R1bGVzXG4gICAgICAgIC5maWx0ZXIocCA9PiBwICE9PSAnbm9kZV9tb2R1bGVzJylcbiAgICAgICAgLy8gT25seSBpbnRlcmVzdGVkIGluIGRpcmVjdG9yaWVzIChhbmQgb25seSB0aG9zZSB0aGF0IGFyZSBub3Qgc3ltbGlua3MpXG4gICAgICAgIC5maWx0ZXIocCA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IGZzLmxzdGF0U3luYyhwYXRoLnJlc29sdmUoZGlyLCBwKSk7XG4gICAgICAgICAgcmV0dXJuIHN0YXQuaXNEaXJlY3RvcnkoKSAmJiAhc3RhdC5pc1N5bWJvbGljTGluaygpO1xuICAgICAgICB9KVxuICAgICAgICAuZm9yRWFjaChzdWJEaXIgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3ViRGlyID0gQWJzb2x1dGVGc1BhdGguZnJvbShwYXRoLnJlc29sdmUoZGlyLCBzdWJEaXIpKTtcbiAgICAgICAgICBmbihyZXNvbHZlZFN1YkRpcik7XG4gICAgICAgICAgdGhpcy53YWxrRGlyZWN0b3J5KHJlc29sdmVkU3ViRGlyLCBmbik7XG4gICAgICAgIH0pO1xuICB9XG59XG4iXX0=
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnlfcG9pbnRfZmluZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL25nY2Mvc3JjL3BhY2thZ2VzL2VudHJ5X3BvaW50X2ZpbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCw2REFBdUQ7SUFLdkQsbUZBQTREO0lBRTVEO1FBQ0UsMEJBQ1ksRUFBYyxFQUFVLE1BQWMsRUFBVSxRQUE0QjtZQUE1RSxPQUFFLEdBQUYsRUFBRSxDQUFZO1lBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtZQUFVLGFBQVEsR0FBUixRQUFRLENBQW9CO1FBQUcsQ0FBQztRQUM1Rjs7O1dBR0c7UUFDSCwwQ0FBZSxHQUFmLFVBQ0ksZUFBK0IsRUFBRSxvQkFBcUMsRUFDdEUsWUFBMkI7WUFGL0IsaUJBV0M7WUFSQyxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUNuRSxJQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQ3hDLFVBQUMsV0FBVyxFQUFFLFFBQVEsSUFBSyxPQUFBLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQTlELENBQThELEVBQ3pGLEVBQUUsQ0FBQyxDQUFDO1lBQ1IsSUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUMzQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsVUFBQSxVQUFVLElBQUksT0FBQSxVQUFVLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUF4QyxDQUF3QyxDQUFDLENBQUMsQ0FBQztnQkFDbEYsU0FBUyxDQUFDO1lBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLG1CQUFtQixFQUFFLGdCQUFnQixDQUFDLENBQUM7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QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL3BhdGgnO1xuaW1wb3J0IHtEZXBlbmRlbmN5UmVzb2x2ZXIsIFNvcnRlZEVudHJ5UG9pbnRzSW5mb30gZnJvbSAnLi4vZGVwZW5kZW5jaWVzL2RlcGVuZGVuY3lfcmVzb2x2ZXInO1xuaW1wb3J0IHtGaWxlU3lzdGVtfSBmcm9tICcuLi9maWxlX3N5c3RlbS9maWxlX3N5c3RlbSc7XG5pbXBvcnQge0xvZ2dlcn0gZnJvbSAnLi4vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtQYXRoTWFwcGluZ3N9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7RW50cnlQb2ludCwgZ2V0RW50cnlQb2ludEluZm99IGZyb20gJy4vZW50cnlfcG9pbnQnO1xuXG5leHBvcnQgY2xhc3MgRW50cnlQb2ludEZpbmRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBmczogRmlsZVN5c3RlbSwgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlciwgcHJpdmF0ZSByZXNvbHZlcjogRGVwZW5kZW5jeVJlc29sdmVyKSB7fVxuICAvKipcbiAgICogU2VhcmNoIHRoZSBnaXZlbiBkaXJlY3RvcnksIGFuZCBzdWItZGlyZWN0b3JpZXMsIGZvciBBbmd1bGFyIHBhY2thZ2UgZW50cnkgcG9pbnRzLlxuICAgKiBAcGFyYW0gc291cmNlRGlyZWN0b3J5IEFuIGFic29sdXRlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB0byBzZWFyY2ggZm9yIGVudHJ5IHBvaW50cy5cbiAgICovXG4gIGZpbmRFbnRyeVBvaW50cyhcbiAgICAgIHNvdXJjZURpcmVjdG9yeTogQWJzb2x1dGVGc1BhdGgsIHRhcmdldEVudHJ5UG9pbnRQYXRoPzogQWJzb2x1dGVGc1BhdGgsXG4gICAgICBwYXRoTWFwcGluZ3M/OiBQYXRoTWFwcGluZ3MpOiBTb3J0ZWRFbnRyeVBvaW50c0luZm8ge1xuICAgIGNvbnN0IGJhc2VQYXRocyA9IHRoaXMuZ2V0QmFzZVBhdGhzKHNvdXJjZURpcmVjdG9yeSwgcGF0aE1hcHBpbmdzKTtcbiAgICBjb25zdCB1bnNvcnRlZEVudHJ5UG9pbnRzID0gYmFzZVBhdGhzLnJlZHVjZTxFbnRyeVBvaW50W10+KFxuICAgICAgICAoZW50cnlQb2ludHMsIGJhc2VQYXRoKSA9PiBlbnRyeVBvaW50cy5jb25jYXQodGhpcy53YWxrRGlyZWN0b3J5Rm9yRW50cnlQb2ludHMoYmFzZVBhdGgpKSxcbiAgICAgICAgW10pO1xuICAgIGNvbnN0IHRhcmdldEVudHJ5UG9pbnQgPSB0YXJnZXRFbnRyeVBvaW50UGF0aCA/XG4gICAgICAgIHVuc29ydGVkRW50cnlQb2ludHMuZmluZChlbnRyeVBvaW50ID0+IGVudHJ5UG9pbnQucGF0aCA9PT0gdGFyZ2V0RW50cnlQb2ludFBhdGgpIDpcbiAgICAgICAgdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVyLnNvcnRFbnRyeVBvaW50c0J5RGVwZW5kZW5jeSh1bnNvcnRlZEVudHJ5UG9pbnRzLCB0YXJnZXRFbnRyeVBvaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IGFsbCB0aGUgYmFzZS1wYXRocyB0aGF0IHdlIG5lZWQgdG8gc2VhcmNoIGZvciBlbnRyeS1wb2ludHMuXG4gICAqXG4gICAqIFRoaXMgYWx3YXlzIGNvbnRhaW5zIHRoZSBzdGFuZGFyZCBiYXNlLXBhdGggKGBzb3VyY2VEaXJlY3RvcnlgKS5cbiAgICogQnV0IGl0IGFsc28gcGFyc2VzIHRoZSBgcGF0aHNgIG1hcHBpbmdzIG9iamVjdCB0byBndWVzcyBhZGRpdGlvbmFsIGJhc2UtcGF0aHMuXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiBgYGBcbiAgICogZ2V0QmFzZVBhdGhzKCcvbm9kZV9tb2R1bGVzJywge2Jhc2VVcmw6ICcvZGlzdCcsIHBhdGhzOiB7JyonOiBbJ2xpYi8qJywgJ2xpYi9nZW5lcmF0ZWQvKiddfX0pXG4gICAqID4gWycvbm9kZV9tb2R1bGVzJywgJy9kaXN0L2xpYiddXG4gICAqIGBgYFxuICAgKlxuICAgKiBOb3RpY2UgdGhhdCBgJy9kaXN0J2AgaXMgbm90IGluY2x1ZGVkIGFzIHRoZXJlIGlzIG5vIGAnKidgIHBhdGgsXG4gICAqIGFuZCBgJy9kaXN0L2xpYi9nZW5lcmF0ZWQnYCBpcyBub3QgaW5jbHVkZWQgYXMgaXQgaXMgY292ZXJlZCBieSBgJy9kaXN0L2xpYidgLlxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlRGlyZWN0b3J5IFRoZSBzdGFuZGFyZCBiYXNlLXBhdGggKGUuZy4gbm9kZV9tb2R1bGVzKS5cbiAgICogQHBhcmFtIHBhdGhNYXBwaW5ncyBQYXRoIG1hcHBpbmcgY29uZmlndXJhdGlvbiwgZnJvbSB3aGljaCB0byBleHRyYWN0IGFkZGl0aW9uYWwgYmFzZS1wYXRocy5cbiAgICovXG4gIHByaXZhdGUgZ2V0QmFzZVBhdGhzKHNvdXJjZURpcmVjdG9yeTogQWJzb2x1dGVGc1BhdGgsIHBhdGhNYXBwaW5ncz86IFBhdGhNYXBwaW5ncyk6XG4gICAgICBBYnNvbHV0ZUZzUGF0aFtdIHtcbiAgICBjb25zdCBiYXNlUGF0aHMgPSBbc291cmNlRGlyZWN0b3J5XTtcbiAgICBpZiAocGF0aE1hcHBpbmdzKSB7XG4gICAgICBjb25zdCBiYXNlVXJsID0gQWJzb2x1dGVGc1BhdGgucmVzb2x2ZShwYXRoTWFwcGluZ3MuYmFzZVVybCk7XG4gICAgICB2YWx1ZXMocGF0aE1hcHBpbmdzLnBhdGhzKS5mb3JFYWNoKHBhdGhzID0+IHBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG4gICAgICAgIGJhc2VQYXRocy5wdXNoKEFic29sdXRlRnNQYXRoLmpvaW4oYmFzZVVybCwgZXh0cmFjdFBhdGhQcmVmaXgocGF0aCkpKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgYmFzZVBhdGhzLnNvcnQoKTsgIC8vIEdldCB0aGUgcGF0aHMgaW4gb3JkZXIgd2l0aCB0aGUgc2hvcnRlciBvbmVzIGZpcnN0LlxuICAgIHJldHVybiBiYXNlUGF0aHMuZmlsdGVyKHJlbW92ZURlZXBlclBhdGhzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIGZvciBlbnRyeSBwb2ludHMgdGhhdCBuZWVkIHRvIGJlIGNvbXBpbGVkLCBzdGFydGluZyBhdCB0aGUgc291cmNlIGRpcmVjdG9yeS5cbiAgICogVGhlIGZ1bmN0aW9uIHdpbGwgcmVjdXJzZSBpbnRvIGRpcmVjdG9yaWVzIHRoYXQgc3RhcnQgd2l0aCBgQC4uLmAsIGUuZy4gYEBhbmd1bGFyLy4uLmAuXG4gICAqIEBwYXJhbSBzb3VyY2VEaXJlY3RvcnkgQW4gYWJzb2x1dGUgcGF0aCB0byB0aGUgcm9vdCBkaXJlY3Rvcnkgd2hlcmUgc2VhcmNoaW5nIGJlZ2lucy5cbiAgICovXG4gIHByaXZhdGUgd2Fsa0RpcmVjdG9yeUZvckVudHJ5UG9pbnRzKHNvdXJjZURpcmVjdG9yeTogQWJzb2x1dGVGc1BhdGgpOiBFbnRyeVBvaW50W10ge1xuICAgIGNvbnN0IGVudHJ5UG9pbnRzOiBFbnRyeVBvaW50W10gPSBbXTtcbiAgICB0aGlzLmZzXG4gICAgICAgIC5yZWFkZGlyKHNvdXJjZURpcmVjdG9yeSlcbiAgICAgICAgLy8gTm90IGludGVyZXN0ZWQgaW4gaGlkZGVuIGZpbGVzXG4gICAgICAgIC5maWx0ZXIocCA9PiAhcC5zdGFydHNXaXRoKCcuJykpXG4gICAgICAgIC8vIElnbm9yZSBub2RlX21vZHVsZXNcbiAgICAgICAgLmZpbHRlcihwID0+IHAgIT09ICdub2RlX21vZHVsZXMnKVxuICAgICAgICAvLyBPbmx5IGludGVyZXN0ZWQgaW4gZGlyZWN0b3JpZXMgKGFuZCBvbmx5IHRob3NlIHRoYXQgYXJlIG5vdCBzeW1saW5rcylcbiAgICAgICAgLmZpbHRlcihwID0+IHtcbiAgICAgICAgICBjb25zdCBzdGF0ID0gdGhpcy5mcy5sc3RhdChBYnNvbHV0ZUZzUGF0aC5yZXNvbHZlKHNvdXJjZURpcmVjdG9yeSwgcCkpO1xuICAgICAgICAgIHJldHVybiBzdGF0LmlzRGlyZWN0b3J5KCkgJiYgIXN0YXQuaXNTeW1ib2xpY0xpbmsoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgLy8gRWl0aGVyIHRoZSBkaXJlY3RvcnkgaXMgYSBwb3RlbnRpYWwgcGFja2FnZSBvciBhIG5hbWVzcGFjZSBjb250YWluaW5nIHBhY2thZ2VzIChlLmdcbiAgICAgICAgICAvLyBgQGFuZ3VsYXJgKS5cbiAgICAgICAgICBjb25zdCBwYWNrYWdlUGF0aCA9IEFic29sdXRlRnNQYXRoLmpvaW4oc291cmNlRGlyZWN0b3J5LCBwKTtcbiAgICAgICAgICBpZiAocC5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgICAgIGVudHJ5UG9pbnRzLnB1c2goLi4udGhpcy53YWxrRGlyZWN0b3J5Rm9yRW50cnlQb2ludHMocGFja2FnZVBhdGgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW50cnlQb2ludHMucHVzaCguLi50aGlzLmdldEVudHJ5UG9pbnRzRm9yUGFja2FnZShwYWNrYWdlUGF0aCkpO1xuXG4gICAgICAgICAgICAvLyBBbHNvIGNoZWNrIGZvciBhbnkgbmVzdGVkIG5vZGVfbW9kdWxlcyBpbiB0aGlzIHBhY2thZ2VcbiAgICAgICAgICAgIGNvbnN0IG5lc3RlZE5vZGVNb2R1bGVzUGF0aCA9IEFic29sdXRlRnNQYXRoLmpvaW4ocGFja2FnZVBhdGgsICdub2RlX21vZHVsZXMnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZzLmV4aXN0cyhuZXN0ZWROb2RlTW9kdWxlc1BhdGgpKSB7XG4gICAgICAgICAgICAgIGVudHJ5UG9pbnRzLnB1c2goLi4udGhpcy53YWxrRGlyZWN0b3J5Rm9yRW50cnlQb2ludHMobmVzdGVkTm9kZU1vZHVsZXNQYXRoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICByZXR1cm4gZW50cnlQb2ludHM7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzZSB0aGUgZm9sZGVyIHN0cnVjdHVyZSBsb29raW5nIGZvciBhbGwgdGhlIGVudHJ5IHBvaW50c1xuICAgKiBAcGFyYW0gcGFja2FnZVBhdGggVGhlIGFic29sdXRlIHBhdGggdG8gYW4gbnBtIHBhY2thZ2UgdGhhdCBtYXkgY29udGFpbiBlbnRyeSBwb2ludHNcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgZW50cnkgcG9pbnRzIHRoYXQgd2VyZSBkaXNjb3ZlcmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbnRyeVBvaW50c0ZvclBhY2thZ2UocGFja2FnZVBhdGg6IEFic29sdXRlRnNQYXRoKTogRW50cnlQb2ludFtdIHtcbiAgICBjb25zdCBlbnRyeVBvaW50czogRW50cnlQb2ludFtdID0gW107XG5cbiAgICAvLyBUcnkgdG8gZ2V0IGFuIGVudHJ5IHBvaW50IGZyb20gdGhlIHRvcCBsZXZlbCBwYWNrYWdlIGRpcmVjdG9yeVxuICAgIGNvbnN0IHRvcExldmVsRW50cnlQb2ludCA9IGdldEVudHJ5UG9pbnRJbmZvKHRoaXMuZnMsIHRoaXMubG9nZ2VyLCBwYWNrYWdlUGF0aCwgcGFja2FnZVBhdGgpO1xuICAgIGlmICh0b3BMZXZlbEVudHJ5UG9pbnQgIT09IG51bGwpIHtcbiAgICAgIGVudHJ5UG9pbnRzLnB1c2godG9wTGV2ZWxFbnRyeVBvaW50KTtcbiAgICB9XG5cbiAgICAvLyBOb3cgc2VhcmNoIGFsbCB0aGUgZGlyZWN0b3JpZXMgb2YgdGhpcyBwYWNrYWdlIGZvciBwb3NzaWJsZSBlbnRyeSBwb2ludHNcbiAgICB0aGlzLndhbGtEaXJlY3RvcnkocGFja2FnZVBhdGgsIHN1YmRpciA9PiB7XG4gICAgICBjb25zdCBzdWJFbnRyeVBvaW50ID0gZ2V0RW50cnlQb2ludEluZm8odGhpcy5mcywgdGhpcy5sb2dnZXIsIHBhY2thZ2VQYXRoLCBzdWJkaXIpO1xuICAgICAgaWYgKHN1YkVudHJ5UG9pbnQgIT09IG51bGwpIHtcbiAgICAgICAgZW50cnlQb2ludHMucHVzaChzdWJFbnRyeVBvaW50KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbnRyeVBvaW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSB3YWxrIGEgZGlyZWN0b3J5IGFuZCBpdHMgc3ViLWRpcmVjdG9yaWVzLCBhcHBseWluZyBhIGdpdmVuXG4gICAqIGZ1bmN0aW9uIHRvIGVhY2ggZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0gZGlyIHRoZSBkaXJlY3RvcnkgdG8gcmVjdXJzaXZlbHkgd2Fsay5cbiAgICogQHBhcmFtIGZuIHRoZSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGRpcmVjdG9yeS5cbiAgICovXG4gIHByaXZhdGUgd2Fsa0RpcmVjdG9yeShkaXI6IEFic29sdXRlRnNQYXRoLCBmbjogKGRpcjogQWJzb2x1dGVGc1BhdGgpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gdGhpcy5mc1xuICAgICAgICAucmVhZGRpcihkaXIpXG4gICAgICAgIC8vIE5vdCBpbnRlcmVzdGVkIGluIGhpZGRlbiBmaWxlc1xuICAgICAgICAuZmlsdGVyKHAgPT4gIXAuc3RhcnRzV2l0aCgnLicpKVxuICAgICAgICAvLyBJZ25vcmUgbm9kZV9tb2R1bGVzXG4gICAgICAgIC5maWx0ZXIocCA9PiBwICE9PSAnbm9kZV9tb2R1bGVzJylcbiAgICAgICAgLy8gT25seSBpbnRlcmVzdGVkIGluIGRpcmVjdG9yaWVzIChhbmQgb25seSB0aG9zZSB0aGF0IGFyZSBub3Qgc3ltbGlua3MpXG4gICAgICAgIC5maWx0ZXIocCA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdCA9IHRoaXMuZnMubHN0YXQoQWJzb2x1dGVGc1BhdGgucmVzb2x2ZShkaXIsIHApKTtcbiAgICAgICAgICByZXR1cm4gc3RhdC5pc0RpcmVjdG9yeSgpICYmICFzdGF0LmlzU3ltYm9saWNMaW5rKCk7XG4gICAgICAgIH0pXG4gICAgICAgIC5mb3JFYWNoKHN1YkRpciA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTdWJEaXIgPSBBYnNvbHV0ZUZzUGF0aC5yZXNvbHZlKGRpciwgc3ViRGlyKTtcbiAgICAgICAgICBmbihyZXNvbHZlZFN1YkRpcik7XG4gICAgICAgICAgdGhpcy53YWxrRGlyZWN0b3J5KHJlc29sdmVkU3ViRGlyLCBmbik7XG4gICAgICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRXh0cmFjdCBldmVyeXRoaW5nIGluIHRoZSBgcGF0aGAgdXAgdG8gdGhlIGZpcnN0IGAqYC5cbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHBhcnNlLlxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RQYXRoUHJlZml4KHBhdGg6IHN0cmluZykge1xuICByZXR1cm4gcGF0aC5zcGxpdCgnKicsIDEpWzBdO1xufVxuXG4vKipcbiAqIEEgZmlsdGVyIGZ1bmN0aW9uIHRoYXQgcmVtb3ZlcyBwYXRocyB0aGF0IGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgaGlnaGVyIHBhdGhzLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgY3VycmVudCBwYXRoLlxuICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBwYXRoLlxuICogQHBhcmFtIGFycmF5IFRoZSBhcnJheSBvZiBwYXRocyAoc29ydGVkIGFscGhhYmV0aWNhbGx5KS5cbiAqIEByZXR1cm5zIHRydWUgaWYgdGhpcyBwYXRoIGlzIG5vdCBhbHJlYWR5IGNvdmVyZWQgYnkgYSBwcmV2aW91cyBwYXRoLlxuICovXG5mdW5jdGlvbiByZW1vdmVEZWVwZXJQYXRocyh2YWx1ZTogQWJzb2x1dGVGc1BhdGgsIGluZGV4OiBudW1iZXIsIGFycmF5OiBBYnNvbHV0ZUZzUGF0aFtdKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKGFycmF5W2ldKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgYWxsIHRoZSB2YWx1ZXMgKG5vdCBrZXlzKSBmcm9tIGFuIG9iamVjdC5cbiAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiB2YWx1ZXM8VD4ob2JqOiB7W2tleTogc3RyaW5nXTogVH0pOiBUW10ge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoa2V5ID0+IG9ialtrZXldKTtcbn1cbiJdfQ==
@@ -0,0 +1,31 @@
1
+ /// <amd-module name="@angular/compiler-cli/ngcc/src/packages/ngcc_compiler_host" />
2
+ import * as ts from 'typescript';
3
+ import { FileSystem } from '../file_system/file_system';
4
+ export declare class NgccCompilerHost implements ts.CompilerHost {
5
+ protected fs: FileSystem;
6
+ protected options: ts.CompilerOptions;
7
+ private _caseSensitive;
8
+ constructor(fs: FileSystem, options: ts.CompilerOptions);
9
+ getSourceFile(fileName: string, languageVersion: ts.ScriptTarget): ts.SourceFile | undefined;
10
+ getDefaultLibFileName(options: ts.CompilerOptions): string;
11
+ getDefaultLibLocation(): string;
12
+ writeFile(fileName: string, data: string): void;
13
+ getCurrentDirectory(): string;
14
+ getCanonicalFileName(fileName: string): string;
15
+ useCaseSensitiveFileNames(): boolean;
16
+ getNewLine(): string;
17
+ fileExists(fileName: string): boolean;
18
+ readFile(fileName: string): string | undefined;
19
+ }
20
+ /**
21
+ * Represents a compiler host that resolves a module import as a JavaScript source file if
22
+ * available, instead of the .d.ts typings file that would have been resolved by TypeScript. This
23
+ * is necessary for packages that have their typings in the same directory as the sources, which
24
+ * would otherwise let TypeScript prefer the .d.ts file instead of the JavaScript source file.
25
+ */
26
+ export declare class NgccSourcesCompilerHost extends NgccCompilerHost {
27
+ protected entryPointPath: string;
28
+ private cache;
29
+ constructor(fs: FileSystem, options: ts.CompilerOptions, entryPointPath: string);
30
+ resolveModuleNames(moduleNames: string[], containingFile: string, reusedNames?: string[], redirectedReference?: ts.ResolvedProjectReference): Array<ts.ResolvedModule | undefined>;
31
+ }
@@ -0,0 +1,108 @@
1
+ (function (factory) {
2
+ if (typeof module === "object" && typeof module.exports === "object") {
3
+ var v = factory(require, exports);
4
+ if (v !== undefined) module.exports = v;
5
+ }
6
+ else if (typeof define === "function" && define.amd) {
7
+ define("@angular/compiler-cli/ngcc/src/packages/ngcc_compiler_host", ["require", "exports", "tslib", "os", "typescript", "@angular/compiler-cli/src/ngtsc/path", "@angular/compiler-cli/ngcc/src/utils"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ var tslib_1 = require("tslib");
13
+ /**
14
+ * @license
15
+ * Copyright Google Inc. All Rights Reserved.
16
+ *
17
+ * Use of this source code is governed by an MIT-style license that can be
18
+ * found in the LICENSE file at https://angular.io/license
19
+ */
20
+ var os = require("os");
21
+ var ts = require("typescript");
22
+ var path_1 = require("@angular/compiler-cli/src/ngtsc/path");
23
+ var utils_1 = require("@angular/compiler-cli/ngcc/src/utils");
24
+ var NgccCompilerHost = /** @class */ (function () {
25
+ function NgccCompilerHost(fs, options) {
26
+ this.fs = fs;
27
+ this.options = options;
28
+ this._caseSensitive = this.fs.exists(path_1.AbsoluteFsPath.fromUnchecked(__filename.toUpperCase()));
29
+ }
30
+ NgccCompilerHost.prototype.getSourceFile = function (fileName, languageVersion) {
31
+ var text = this.readFile(fileName);
32
+ return text !== undefined ? ts.createSourceFile(fileName, text, languageVersion) : undefined;
33
+ };
34
+ NgccCompilerHost.prototype.getDefaultLibFileName = function (options) {
35
+ return this.getDefaultLibLocation() + '/' + ts.getDefaultLibFileName(options);
36
+ };
37
+ NgccCompilerHost.prototype.getDefaultLibLocation = function () {
38
+ var nodeLibPath = path_1.AbsoluteFsPath.from(require.resolve('typescript'));
39
+ return path_1.AbsoluteFsPath.join(nodeLibPath, '..');
40
+ };
41
+ NgccCompilerHost.prototype.writeFile = function (fileName, data) {
42
+ this.fs.writeFile(path_1.AbsoluteFsPath.fromUnchecked(fileName), data);
43
+ };
44
+ NgccCompilerHost.prototype.getCurrentDirectory = function () { return this.fs.pwd(); };
45
+ NgccCompilerHost.prototype.getCanonicalFileName = function (fileName) {
46
+ return this.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase();
47
+ };
48
+ NgccCompilerHost.prototype.useCaseSensitiveFileNames = function () { return this._caseSensitive; };
49
+ NgccCompilerHost.prototype.getNewLine = function () {
50
+ switch (this.options.newLine) {
51
+ case ts.NewLineKind.CarriageReturnLineFeed:
52
+ return '\r\n';
53
+ case ts.NewLineKind.LineFeed:
54
+ return '\n';
55
+ default:
56
+ return os.EOL;
57
+ }
58
+ };
59
+ NgccCompilerHost.prototype.fileExists = function (fileName) {
60
+ return this.fs.exists(path_1.AbsoluteFsPath.fromUnchecked(fileName));
61
+ };
62
+ NgccCompilerHost.prototype.readFile = function (fileName) {
63
+ if (!this.fileExists(fileName)) {
64
+ return undefined;
65
+ }
66
+ return this.fs.readFile(path_1.AbsoluteFsPath.fromUnchecked(fileName));
67
+ };
68
+ return NgccCompilerHost;
69
+ }());
70
+ exports.NgccCompilerHost = NgccCompilerHost;
71
+ /**
72
+ * Represents a compiler host that resolves a module import as a JavaScript source file if
73
+ * available, instead of the .d.ts typings file that would have been resolved by TypeScript. This
74
+ * is necessary for packages that have their typings in the same directory as the sources, which
75
+ * would otherwise let TypeScript prefer the .d.ts file instead of the JavaScript source file.
76
+ */
77
+ var NgccSourcesCompilerHost = /** @class */ (function (_super) {
78
+ tslib_1.__extends(NgccSourcesCompilerHost, _super);
79
+ function NgccSourcesCompilerHost(fs, options, entryPointPath) {
80
+ var _this = _super.call(this, fs, options) || this;
81
+ _this.entryPointPath = entryPointPath;
82
+ _this.cache = ts.createModuleResolutionCache(_this.getCurrentDirectory(), function (file) { return _this.getCanonicalFileName(file); });
83
+ return _this;
84
+ }
85
+ NgccSourcesCompilerHost.prototype.resolveModuleNames = function (moduleNames, containingFile, reusedNames, redirectedReference) {
86
+ var _this = this;
87
+ return moduleNames.map(function (moduleName) {
88
+ var resolvedModule = ts.resolveModuleName(moduleName, containingFile, _this.options, _this, _this.cache, redirectedReference).resolvedModule;
89
+ // If the module request originated from a relative import in a JavaScript source file,
90
+ // TypeScript may have resolved the module to its .d.ts declaration file if the .js source
91
+ // file was in the same directory. This is undesirable, as we need to have the actual
92
+ // JavaScript being present in the program. This logic recognizes this scenario and rewrites
93
+ // the resolved .d.ts declaration file to its .js counterpart, if it exists.
94
+ if (resolvedModule !== undefined && resolvedModule.extension === ts.Extension.Dts &&
95
+ containingFile.endsWith('.js') && utils_1.isRelativePath(moduleName)) {
96
+ var jsFile = resolvedModule.resolvedFileName.replace(/\.d\.ts$/, '.js');
97
+ if (_this.fileExists(jsFile)) {
98
+ return tslib_1.__assign({}, resolvedModule, { resolvedFileName: jsFile, extension: ts.Extension.Js });
99
+ }
100
+ }
101
+ return resolvedModule;
102
+ });
103
+ };
104
+ return NgccSourcesCompilerHost;
105
+ }(NgccCompilerHost));
106
+ exports.NgccSourcesCompilerHost = NgccSourcesCompilerHost;
107
+ });
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdjY19jb21waWxlcl9ob3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL25nY2Mvc3JjL3BhY2thZ2VzL25nY2NfY29tcGlsZXJfaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFBQTs7Ozs7O09BTUc7SUFDSCx1QkFBeUI7SUFDekIsK0JBQWlDO0lBRWpDLDZEQUF1RDtJQUV2RCw4REFBd0M7SUFFeEM7UUFHRSwwQkFBc0IsRUFBYyxFQUFZLE9BQTJCO1lBQXJELE9BQUUsR0FBRixFQUFFLENBQVk7WUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFvQjtZQUZuRSxtQkFBYyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLHFCQUFjLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFbEIsQ0FBQztRQUUvRSx3Q0FBYSxHQUFiLFVBQWMsUUFBZ0IsRUFBRSxlQUFnQztZQUM5RCxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRixDQUFDO1FBRUQsZ0RBQXFCLEdBQXJCLFVBQXNCLE9BQTJCO1lBQy9DLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRixDQUFDO1FBRUQsZ0RBQXFCLEdBQXJCO1lBQ0UsSUFBTSxXQUFXLEdBQUcscUJBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMs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O29CQUMxRSxJQUFJLEtBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQzNCLDRCQUFXLGNBQWMsSUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFFO3FCQUNsRjtpQkFDRjtnQkFDRCxPQUFPLGNBQWMsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDSCw4QkFBQztJQUFELENBQUMsQUE5QkQsQ0FBNkMsZ0JBQWdCLEdBOEI1RDtJQTlCWSwwREFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnLi4vLi4vLi4vc3JjL25ndHNjL3BhdGgnO1xuaW1wb3J0IHtGaWxlU3lzdGVtfSBmcm9tICcuLi9maWxlX3N5c3RlbS9maWxlX3N5c3RlbSc7XG5pbXBvcnQge2lzUmVsYXRpdmVQYXRofSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBOZ2NjQ29tcGlsZXJIb3N0IGltcGxlbWVudHMgdHMuQ29tcGlsZXJIb3N0IHtcbiAgcHJpdmF0ZSBfY2FzZVNlbnNpdGl2ZSA9IHRoaXMuZnMuZXhpc3RzKEFic29sdXRlRnNQYXRoLmZyb21VbmNoZWNrZWQoX19maWxlbmFtZS50b1VwcGVyQ2FzZSgpKSk7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGZzOiBGaWxlU3lzdGVtLCBwcm90ZWN0ZWQgb3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zKSB7fVxuXG4gIGdldFNvdXJjZUZpbGUoZmlsZU5hbWU6IHN0cmluZywgbGFuZ3VhZ2VWZXJzaW9uOiB0cy5TY3JpcHRUYXJnZXQpOiB0cy5Tb3VyY2VGaWxlfHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMucmVhZEZpbGUoZmlsZU5hbWUpO1xuICAgIHJldHVybiB0ZXh0ICE9PSB1bmRlZmluZWQgPyB0cy5jcmVhdGVTb3VyY2VGaWxlKGZpbGVOYW1lLCB0ZXh0LCBsYW5ndWFnZVZlcnNpb24pIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0RGVmYXVsdExpYkZpbGVOYW1lKG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGVmYXVsdExpYkxvY2F0aW9uKCkgKyAnLycgKyB0cy5nZXREZWZhdWx0TGliRmlsZU5hbWUob3B0aW9ucyk7XG4gIH1cblxuICBnZXREZWZhdWx0TGliTG9jYXRpb24oKTogc3RyaW5nIHtcbiAgICBjb25zdCBub2RlTGliUGF0aCA9IEFic29sdXRlRnNQYXRoLmZyb20ocmVxdWlyZS5yZXNvbHZlKCd0eXBlc2NyaXB0JykpO1xuICAgIHJldHVybiBBYnNvbHV0ZUZzUGF0aC5qb2luKG5vZGVMaWJQYXRoLCAnLi4nKTtcbiAgfVxuXG4gIHdyaXRlRmlsZShmaWxlTmFtZTogc3RyaW5nLCBkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZzLndyaXRlRmlsZShBYnNvbHV0ZUZzUGF0aC5mcm9tVW5jaGVja2VkKGZpbGVOYW1lKSwgZGF0YSk7XG4gIH1cblxuICBnZXRDdXJyZW50RGlyZWN0b3J5KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmZzLnB3ZCgpOyB9XG5cbiAgZ2V0Q2Fub25pY2FsRmlsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lcyA/IGZpbGVOYW1lIDogZmlsZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHVzZUNhc2VTZW5zaXRpdmVGaWxlTmFtZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9jYXNlU2Vuc2l0aXZlOyB9XG5cbiAgZ2V0TmV3TGluZSgpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5vcHRpb25zLm5ld0xpbmUpIHtcbiAgICAgIGNhc2UgdHMuTmV3TGluZUtpbmQuQ2FycmlhZ2VSZXR1cm5MaW5lRmVlZDpcbiAgICAgICAgcmV0dXJuICdcXHJcXG4nO1xuICAgICAgY2FzZSB0cy5OZXdMaW5lS2luZC5MaW5lRmVlZDpcbiAgICAgICAgcmV0dXJuICdcXG4nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG9zLkVPTDtcbiAgICB9XG4gIH1cblxuICBmaWxlRXhpc3RzKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mcy5leGlzdHMoQWJzb2x1dGVGc1BhdGguZnJvbVVuY2hlY2tlZChmaWxlTmFtZSkpO1xuICB9XG5cbiAgcmVhZEZpbGUoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZ3x1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5maWxlRXhpc3RzKGZpbGVOYW1lKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZnMucmVhZEZpbGUoQWJzb2x1dGVGc1BhdGguZnJvbVVuY2hlY2tlZChmaWxlTmFtZSkpO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNvbXBpbGVyIGhvc3QgdGhhdCByZXNvbHZlcyBhIG1vZHVsZSBpbXBvcnQgYXMgYSBKYXZhU2NyaXB0IHNvdXJjZSBmaWxlIGlmXG4gKiBhdmFpbGFibGUsIGluc3RlYWQgb2YgdGhlIC5kLnRzIHR5cGluZ3MgZmlsZSB0aGF0IHdvdWxkIGhhdmUgYmVlbiByZXNvbHZlZCBieSBUeXBlU2NyaXB0LiBUaGlzXG4gKiBpcyBuZWNlc3NhcnkgZm9yIHBhY2thZ2VzIHRoYXQgaGF2ZSB0aGVpciB0eXBpbmdzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgc291cmNlcywgd2hpY2hcbiAqIHdvdWxkIG90aGVyd2lzZSBsZXQgVHlwZVNjcmlwdCBwcmVmZXIgdGhlIC5kLnRzIGZpbGUgaW5zdGVhZCBvZiB0aGUgSmF2YVNjcmlwdCBzb3VyY2UgZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5nY2NTb3VyY2VzQ29tcGlsZXJIb3N0IGV4dGVuZHMgTmdjY0NvbXBpbGVySG9zdCB7XG4gIHByaXZhdGUgY2FjaGUgPSB0cy5jcmVhdGVNb2R1bGVSZXNvbHV0aW9uQ2FjaGUoXG4gICAgICB0aGlzLmdldEN1cnJlbnREaXJlY3RvcnkoKSwgZmlsZSA9PiB0aGlzLmdldENhbm9uaWNhbEZpbGVOYW1lKGZpbGUpKTtcblxuICBjb25zdHJ1Y3RvcihmczogRmlsZVN5c3RlbSwgb3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zLCBwcm90ZWN0ZWQgZW50cnlQb2ludFBhdGg6IHN0cmluZykge1xuICAgIHN1cGVyKGZzLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlc29sdmVNb2R1bGVOYW1lcyhcbiAgICAgIG1vZHVsZU5hbWVzOiBzdHJpbmdbXSwgY29udGFpbmluZ0ZpbGU6IHN0cmluZywgcmV1c2VkTmFtZXM/OiBzdHJpbmdbXSxcbiAgICAgIHJlZGlyZWN0ZWRSZWZlcmVuY2U/OiB0cy5SZXNvbHZlZFByb2plY3RSZWZlcmVuY2UpOiBBcnJheTx0cy5SZXNvbHZlZE1vZHVsZXx1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gbW9kdWxlTmFtZXMubWFwKG1vZHVsZU5hbWUgPT4ge1xuICAgICAgY29uc3Qge3Jlc29sdmVkTW9kdWxlfSA9IHRzLnJlc29sdmVNb2R1bGVOYW1lKFxuICAgICAgICAgIG1vZHVsZU5hbWUsIGNvbnRhaW5pbmdGaWxlLCB0aGlzLm9wdGlvbnMsIHRoaXMsIHRoaXMuY2FjaGUsIHJlZGlyZWN0ZWRSZWZlcmVuY2UpO1xuXG4gICAgICAvLyBJZiB0aGUgbW9kdWxlIHJlcXVlc3Qgb3JpZ2luYXRlZCBmcm9tIGEgcmVsYXRpdmUgaW1wb3J0IGluIGEgSmF2YVNjcmlwdCBzb3VyY2UgZmlsZSxcbiAgICAgIC8vIFR5cGVTY3JpcHQgbWF5IGhhdmUgcmVzb2x2ZWQgdGhlIG1vZHVsZSB0byBpdHMgLmQudHMgZGVjbGFyYXRpb24gZmlsZSBpZiB0aGUgLmpzIHNvdXJjZVxuICAgICAgLy8gZmlsZSB3YXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LiBUaGlzIGlzIHVuZGVzaXJhYmxlLCBhcyB3ZSBuZWVkIHRvIGhhdmUgdGhlIGFjdHVhbFxuICAgICAgLy8gSmF2YVNjcmlwdCBiZWluZyBwcmVzZW50IGluIHRoZSBwcm9ncmFtLiBUaGlzIGxvZ2ljIHJlY29nbml6ZXMgdGhpcyBzY2VuYXJpbyBhbmQgcmV3cml0ZXNcbiAgICAgIC8vIHRoZSByZXNvbHZlZCAuZC50cyBkZWNsYXJhdGlvbiBmaWxlIHRvIGl0cyAuanMgY291bnRlcnBhcnQsIGlmIGl0IGV4aXN0cy5cbiAgICAgIGlmIChyZXNvbHZlZE1vZHVsZSAhPT0gdW5kZWZpbmVkICYmIHJlc29sdmVkTW9kdWxlLmV4dGVuc2lvbiA9PT0gdHMuRXh0ZW5zaW9uLkR0cyAmJlxuICAgICAgICAgIGNvbnRhaW5pbmdGaWxlLmVuZHNXaXRoKCcuanMnKSAmJiBpc1JlbGF0aXZlUGF0aChtb2R1bGVOYW1lKSkge1xuICAgICAgICBjb25zdCBqc0ZpbGUgPSByZXNvbHZlZE1vZHVsZS5yZXNvbHZlZEZpbGVOYW1lLnJlcGxhY2UoL1xcLmRcXC50cyQvLCAnLmpzJyk7XG4gICAgICAgIGlmICh0aGlzLmZpbGVFeGlzdHMoanNGaWxlKSkge1xuICAgICAgICAgIHJldHVybiB7Li4ucmVzb2x2ZWRNb2R1bGUsIHJlc29sdmVkRmlsZU5hbWU6IGpzRmlsZSwgZXh0ZW5zaW9uOiB0cy5FeHRlbnNpb24uSnN9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZWRNb2R1bGU7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -11,9 +11,11 @@ import { CompiledFile } from '../analysis/decoration_analyzer';
11
11
  import { ModuleWithProvidersAnalyses } from '../analysis/module_with_providers_analyzer';
12
12
  import { ExportInfo } from '../analysis/private_declarations_analyzer';
13
13
  import { SwitchMarkerAnalyses } from '../analysis/switch_marker_analyzer';
14
+ import { FileSystem } from '../file_system/file_system';
14
15
  import { NgccReflectionHost } from '../host/ngcc_host';
15
16
  import { Logger } from '../logging/logger';
16
- import { FileInfo, Renderer } from '../rendering/renderer';
17
+ import { RenderingFormatter } from '../rendering/rendering_formatter';
18
+ import { FileToWrite } from '../rendering/utils';
17
19
  import { EntryPointBundle } from './entry_point_bundle';
18
20
  /**
19
21
  * A Package is stored in a directory on disk and that directory can contain one or more package
@@ -37,17 +39,17 @@ import { EntryPointBundle } from './entry_point_bundle';
37
39
  * - Some formats may contain multiple "modules" in a single file.
38
40
  */
39
41
  export declare class Transformer {
42
+ private fs;
40
43
  private logger;
41
- private sourcePath;
42
- constructor(logger: Logger, sourcePath: string);
44
+ constructor(fs: FileSystem, logger: Logger);
43
45
  /**
44
46
  * Transform the source (and typings) files of a bundle.
45
47
  * @param bundle the bundle to transform.
46
48
  * @returns information about the files that were transformed.
47
49
  */
48
- transform(bundle: EntryPointBundle): FileInfo[];
50
+ transform(bundle: EntryPointBundle): FileToWrite[];
49
51
  getHost(isCore: boolean, bundle: EntryPointBundle): NgccReflectionHost;
50
- getRenderer(host: NgccReflectionHost, isCore: boolean, bundle: EntryPointBundle): Renderer;
52
+ getRenderingFormatter(host: NgccReflectionHost, isCore: boolean, bundle: EntryPointBundle): RenderingFormatter;
51
53
  analyzeProgram(reflectionHost: NgccReflectionHost, isCore: boolean, bundle: EntryPointBundle): ProgramAnalyses;
52
54
  }
53
55
  interface ProgramAnalyses {
@@ -4,7 +4,7 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define("@angular/compiler-cli/ngcc/src/packages/transformer", ["require", "exports", "@angular/compiler-cli/ngcc/src/analysis/decoration_analyzer", "@angular/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer", "@angular/compiler-cli/ngcc/src/analysis/ngcc_references_registry", "@angular/compiler-cli/ngcc/src/analysis/private_declarations_analyzer", "@angular/compiler-cli/ngcc/src/analysis/switch_marker_analyzer", "@angular/compiler-cli/ngcc/src/host/esm2015_host", "@angular/compiler-cli/ngcc/src/host/esm5_host", "@angular/compiler-cli/ngcc/src/rendering/esm5_renderer", "@angular/compiler-cli/ngcc/src/rendering/esm_renderer"], factory);
7
+ define("@angular/compiler-cli/ngcc/src/packages/transformer", ["require", "exports", "@angular/compiler-cli/ngcc/src/analysis/decoration_analyzer", "@angular/compiler-cli/ngcc/src/analysis/module_with_providers_analyzer", "@angular/compiler-cli/ngcc/src/analysis/ngcc_references_registry", "@angular/compiler-cli/ngcc/src/analysis/private_declarations_analyzer", "@angular/compiler-cli/ngcc/src/analysis/switch_marker_analyzer", "@angular/compiler-cli/ngcc/src/host/commonjs_host", "@angular/compiler-cli/ngcc/src/host/esm2015_host", "@angular/compiler-cli/ngcc/src/host/esm5_host", "@angular/compiler-cli/ngcc/src/host/umd_host", "@angular/compiler-cli/ngcc/src/rendering/commonjs_rendering_formatter", "@angular/compiler-cli/ngcc/src/rendering/dts_renderer", "@angular/compiler-cli/ngcc/src/rendering/esm5_rendering_formatter", "@angular/compiler-cli/ngcc/src/rendering/esm_rendering_formatter", "@angular/compiler-cli/ngcc/src/rendering/renderer", "@angular/compiler-cli/ngcc/src/rendering/umd_rendering_formatter"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
@@ -14,10 +14,16 @@
14
14
  var ngcc_references_registry_1 = require("@angular/compiler-cli/ngcc/src/analysis/ngcc_references_registry");
15
15
  var private_declarations_analyzer_1 = require("@angular/compiler-cli/ngcc/src/analysis/private_declarations_analyzer");
16
16
  var switch_marker_analyzer_1 = require("@angular/compiler-cli/ngcc/src/analysis/switch_marker_analyzer");
17
+ var commonjs_host_1 = require("@angular/compiler-cli/ngcc/src/host/commonjs_host");
17
18
  var esm2015_host_1 = require("@angular/compiler-cli/ngcc/src/host/esm2015_host");
18
19
  var esm5_host_1 = require("@angular/compiler-cli/ngcc/src/host/esm5_host");
19
- var esm5_renderer_1 = require("@angular/compiler-cli/ngcc/src/rendering/esm5_renderer");
20
- var esm_renderer_1 = require("@angular/compiler-cli/ngcc/src/rendering/esm_renderer");
20
+ var umd_host_1 = require("@angular/compiler-cli/ngcc/src/host/umd_host");
21
+ var commonjs_rendering_formatter_1 = require("@angular/compiler-cli/ngcc/src/rendering/commonjs_rendering_formatter");
22
+ var dts_renderer_1 = require("@angular/compiler-cli/ngcc/src/rendering/dts_renderer");
23
+ var esm5_rendering_formatter_1 = require("@angular/compiler-cli/ngcc/src/rendering/esm5_rendering_formatter");
24
+ var esm_rendering_formatter_1 = require("@angular/compiler-cli/ngcc/src/rendering/esm_rendering_formatter");
25
+ var renderer_1 = require("@angular/compiler-cli/ngcc/src/rendering/renderer");
26
+ var umd_rendering_formatter_1 = require("@angular/compiler-cli/ngcc/src/rendering/umd_rendering_formatter");
21
27
  /**
22
28
  * A Package is stored in a directory on disk and that directory can contain one or more package
23
29
  * formats - e.g. fesm2015, UMD, etc. Additionally, each package provides typings (`.d.ts` files).
@@ -40,9 +46,9 @@
40
46
  * - Some formats may contain multiple "modules" in a single file.
41
47
  */
42
48
  var Transformer = /** @class */ (function () {
43
- function Transformer(logger, sourcePath) {
49
+ function Transformer(fs, logger) {
50
+ this.fs = fs;
44
51
  this.logger = logger;
45
- this.sourcePath = sourcePath;
46
52
  }
47
53
  /**
48
54
  * Transform the source (and typings) files of a bundle.
@@ -55,8 +61,15 @@
55
61
  // Parse and analyze the files.
56
62
  var _a = this.analyzeProgram(reflectionHost, isCore, bundle), decorationAnalyses = _a.decorationAnalyses, switchMarkerAnalyses = _a.switchMarkerAnalyses, privateDeclarationsAnalyses = _a.privateDeclarationsAnalyses, moduleWithProvidersAnalyses = _a.moduleWithProvidersAnalyses;
57
63
  // Transform the source files and source maps.
58
- var renderer = this.getRenderer(reflectionHost, isCore, bundle);
59
- var renderedFiles = renderer.renderProgram(decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses, moduleWithProvidersAnalyses);
64
+ var srcFormatter = this.getRenderingFormatter(reflectionHost, isCore, bundle);
65
+ var renderer = new renderer_1.Renderer(srcFormatter, this.fs, this.logger, reflectionHost, isCore, bundle);
66
+ var renderedFiles = renderer.renderProgram(decorationAnalyses, switchMarkerAnalyses, privateDeclarationsAnalyses);
67
+ if (bundle.dts) {
68
+ var dtsFormatter = new esm_rendering_formatter_1.EsmRenderingFormatter(reflectionHost, isCore);
69
+ var dtsRenderer = new dts_renderer_1.DtsRenderer(dtsFormatter, this.fs, this.logger, reflectionHost, isCore, bundle);
70
+ var renderedDtsFiles = dtsRenderer.renderProgram(decorationAnalyses, privateDeclarationsAnalyses, moduleWithProvidersAnalyses);
71
+ renderedFiles = renderedFiles.concat(renderedDtsFiles);
72
+ }
60
73
  return renderedFiles;
61
74
  };
62
75
  Transformer.prototype.getHost = function (isCore, bundle) {
@@ -66,16 +79,27 @@
66
79
  return new esm2015_host_1.Esm2015ReflectionHost(this.logger, isCore, typeChecker, bundle.dts);
67
80
  case 'esm5':
68
81
  return new esm5_host_1.Esm5ReflectionHost(this.logger, isCore, typeChecker, bundle.dts);
82
+ case 'umd':
83
+ return new umd_host_1.UmdReflectionHost(this.logger, isCore, bundle.src.program, bundle.src.host, bundle.dts);
84
+ case 'commonjs':
85
+ return new commonjs_host_1.CommonJsReflectionHost(this.logger, isCore, bundle.src.program, bundle.src.host, bundle.dts);
69
86
  default:
70
87
  throw new Error("Reflection host for \"" + bundle.format + "\" not yet implemented.");
71
88
  }
72
89
  };
73
- Transformer.prototype.getRenderer = function (host, isCore, bundle) {
90
+ Transformer.prototype.getRenderingFormatter = function (host, isCore, bundle) {
74
91
  switch (bundle.format) {
75
92
  case 'esm2015':
76
- return new esm_renderer_1.EsmRenderer(this.logger, host, isCore, bundle, this.sourcePath);
93
+ return new esm_rendering_formatter_1.EsmRenderingFormatter(host, isCore);
77
94
  case 'esm5':
78
- return new esm5_renderer_1.Esm5Renderer(this.logger, host, isCore, bundle, this.sourcePath);
95
+ return new esm5_rendering_formatter_1.Esm5RenderingFormatter(host, isCore);
96
+ case 'umd':
97
+ if (!(host instanceof umd_host_1.UmdReflectionHost)) {
98
+ throw new Error('UmdRenderer requires a UmdReflectionHost');
99
+ }
100
+ return new umd_rendering_formatter_1.UmdRenderingFormatter(host, isCore);
101
+ case 'commonjs':
102
+ return new commonjs_rendering_formatter_1.CommonJsRenderingFormatter(host, isCore);
79
103
  default:
80
104
  throw new Error("Renderer for \"" + bundle.format + "\" not yet implemented.");
81
105
  }
@@ -85,7 +109,7 @@
85
109
  var referencesRegistry = new ngcc_references_registry_1.NgccReferencesRegistry(reflectionHost);
86
110
  var switchMarkerAnalyzer = new switch_marker_analyzer_1.SwitchMarkerAnalyzer(reflectionHost);
87
111
  var switchMarkerAnalyses = switchMarkerAnalyzer.analyzeProgram(bundle.src.program);
88
- var decorationAnalyzer = new decoration_analyzer_1.DecorationAnalyzer(bundle.src.program, bundle.src.options, bundle.src.host, typeChecker, reflectionHost, referencesRegistry, bundle.rootDirs, isCore);
112
+ var decorationAnalyzer = new decoration_analyzer_1.DecorationAnalyzer(this.fs, bundle.src.program, bundle.src.options, bundle.src.host, typeChecker, reflectionHost, referencesRegistry, bundle.rootDirs, isCore);
89
113
  var decorationAnalyses = decorationAnalyzer.analyzeProgram();
90
114
  var moduleWithProvidersAnalyzer = bundle.dts && new module_with_providers_analyzer_1.ModuleWithProvidersAnalyzer(reflectionHost, referencesRegistry);
91
115
  var moduleWithProvidersAnalyses = moduleWithProvidersAnalyzer &&
@@ -99,4 +123,4 @@
99
123
  }());
100
124
  exports.Transformer = Transformer;
101
125
  });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbmdjYy9zcmMvcGFja2FnZXMvdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFTQSxtR0FBaUY7SUFDakYseUhBQW9IO0lBQ3BILDZHQUE0RTtJQUM1RSx1SEFBa0c7SUFDbEcseUdBQThGO0lBQzlGLGlGQUEyRDtJQUMzRCwyRUFBcUQ7SUFHckQsd0ZBQXdEO0lBQ3hELHNGQUFzRDtJQU90RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FvQkc7SUFDSDtRQUNFLHFCQUFvQixNQUFjLEVBQVUsVUFBa0I7WUFBMUMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtZQUFVLGVBQVUsR0FBVixVQUFVLENBQVE7UUFBRyxDQUFDO1FBRWxFOzs7O1dBSUc7UUFDSCwrQkFBUyxHQUFULFVBQVUsTUFBd0I7WUFDaEMsSUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM3QixJQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVwRCwrQkFBK0I7WUFDekIsSUFBQSx3REFDbUYsRUFEbEYsMENBQWtCLEVBQUUsOENBQW9CLEVBQUUsNERBQTJCLEVBQ3JFLDREQUFrRixDQUFDO1lBRTFGLDhDQUE4QztZQUM5QyxJQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbEUsSUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FDeEMsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsMkJBQTJCLEVBQ3JFLDJCQUEyQixDQUFDLENBQUM7WUFFakMsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUVELDZCQUFPLEdBQVAsVUFBUSxNQUFlLEVB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Q3ZDLENBQUM7UUFDSCxrQkFBQztJQUFELENBQUMsQUExRUQsSUEwRUM7SUExRVksa0NBQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtDb21waWxlZEZpbGUsIERlY29yYXRpb25BbmFseXplcn0gZnJvbSAnLi4vYW5hbHlzaXMvZGVjb3JhdGlvbl9hbmFseXplcic7XG5pbXBvcnQge01vZHVsZVdpdGhQcm92aWRlcnNBbmFseXNlcywgTW9kdWxlV2l0aFByb3ZpZGVyc0FuYWx5emVyfSBmcm9tICcuLi9hbmFseXNpcy9tb2R1bGVfd2l0aF9wcm92aWRlcnNfYW5hbHl6ZXInO1xuaW1wb3J0IHtOZ2NjUmVmZXJlbmNlc1JlZ2lzdHJ5fSBmcm9tICcuLi9hbmFseXNpcy9uZ2NjX3JlZmVyZW5jZXNfcmVnaXN0cnknO1xuaW1wb3J0IHtFeHBvcnRJbmZvLCBQcml2YXRlRGVjbGFyYXRpb25zQW5hbHl6ZXJ9IGZyb20gJy4uL2FuYWx5c2lzL3ByaXZhdGVfZGVjbGFyYXRpb25zX2FuYWx5emVyJztcbmltcG9ydCB7U3dpdGNoTWFya2VyQW5hbHlzZXMsIFN3aXRjaE1hcmtlckFuYWx5emVyfSBmcm9tICcuLi9hbmFseXNpcy9zd2l0Y2hfbWFya2VyX2FuYWx5emVyJztcbmltcG9ydCB7RXNtMjAxNVJlZmxlY3Rpb25Ib3N0fSBmcm9tICcuLi9ob3N0L2VzbTIwMTVfaG9zdCc7XG5pbXBvcnQge0VzbTVSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi4vaG9zdC9lc201X2hvc3QnO1xuaW1wb3J0IHtOZ2NjUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uL2hvc3QvbmdjY19ob3N0JztcbmltcG9ydCB7TG9nZ2VyfSBmcm9tICcuLi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQge0VzbTVSZW5kZXJlcn0gZnJvbSAnLi4vcmVuZGVyaW5nL2VzbTVfcmVuZGVyZXInO1xuaW1wb3J0IHtFc21SZW5kZXJlcn0gZnJvbSAnLi4vcmVuZGVyaW5nL2VzbV9yZW5kZXJlcic7XG5pbXBvcnQge0ZpbGVJbmZvLCBSZW5kZXJlcn0gZnJvbSAnLi4vcmVuZGVyaW5nL3JlbmRlcmVyJztcblxuaW1wb3J0IHtFbnRyeVBvaW50QnVuZGxlfSBmcm9tICcuL2VudHJ5X3BvaW50X2J1bmRsZSc7XG5cblxuXG4vKipcbiAqIEEgUGFja2FnZSBpcyBzdG9yZWQgaW4gYSBkaXJlY3Rvcnkgb24gZGlzayBhbmQgdGhhdCBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFja2FnZVxuICogZm9ybWF0cyAtIGUuZy4gZmVzbTIwMTUsIFVNRCwgZXRjLiBBZGRpdGlvbmFsbHksIGVhY2ggcGFja2FnZSBwcm92aWRlcyB0eXBpbmdzIChgLmQudHNgIGZpbGVzKS5cbiAqXG4gKiBFYWNoIG9mIHRoZXNlIGZvcm1hdHMgZXhwb3NlcyBvbmUgb3IgbW9yZSBlbnRyeSBwb2ludHMsIHdoaWNoIGFyZSBzb3VyY2UgZmlsZXMgdGhhdCBuZWVkIHRvIGJlXG4gKiBwYXJzZWQgdG8gaWRlbnRpZnkgdGhlIGRlY29yYXRlZCBleHBvcnRlZCBjbGFzc2VzIHRoYXQgbmVlZCB0byBiZSBhbmFseXplZCBhbmQgY29tcGlsZWQgYnkgb25lIG9yXG4gKiBtb3JlIGBEZWNvcmF0b3JIYW5kbGVyYCBvYmplY3RzLlxuICpcbiAqIEVhY2ggZW50cnkgcG9pbnQgdG8gYSBwYWNrYWdlIGlzIGlkZW50aWZpZWQgYnkgYSBgcGFja2FnZS5qc29uYCB3aGljaCBjb250YWlucyBwcm9wZXJ0aWVzIHRoYXRcbiAqIGluZGljYXRlIHdoYXQgZm9ybWF0dGVkIGJ1bmRsZXMgYXJlIGFjY2Vzc2libGUgdmlhIHRoaXMgZW5kLXBvaW50LlxuICpcbiAqIEVhY2ggYnVuZGxlIGlzIGlkZW50aWZpZWQgYnkgYSByb290IGBTb3VyY2VGaWxlYCB0aGF0IGNhbiBiZSBwYXJzZWQgYW5kIGFuYWx5emVkIHRvXG4gKiBpZGVudGlmeSBjbGFzc2VzIHRoYXQgbmVlZCB0byBiZSB0cmFuc2Zvcm1lZDsgYW5kIHRoZW4gZmluYWxseSByZW5kZXJlZCBhbmQgd3JpdHRlbiB0byBkaXNrLlxuICpcbiAqIEFsb25nIHdpdGggdGhlIHNvdXJjZSBmaWxlcywgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIG1hcHMgKGVpdGhlciBpbmxpbmUgb3IgZXh0ZXJuYWwpIGFuZFxuICogYC5kLnRzYCBmaWxlcyBhcmUgdHJhbnNmb3JtZWQgYWNjb3JkaW5nbHkuXG4gKlxuICogLSBGbGF0IGZpbGUgcGFja2FnZXMgaGF2ZSBhbGwgdGhlIGNsYXNzZXMgaW4gYSBzaW5nbGUgZmlsZS5cbiAqIC0gT3RoZXIgcGFja2FnZXMgbWF5IHJlLWV4cG9ydCBjbGFzc2VzIGZyb20gb3RoZXIgbm9uLWVudHJ5IHBvaW50IGZpbGVzLlxuICogLSBTb21lIGZvcm1hdHMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgXCJtb2R1bGVzXCIgaW4gYSBzaW5nbGUgZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybWVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2dnZXI6IExvZ2dlciwgcHJpdmF0ZSBzb3VyY2VQYXRoOiBzdHJpbmcpIHt9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0aGUgc291cmNlIChhbmQgdHlwaW5ncykgZmlsZXMgb2YgYSBidW5kbGUuXG4gICAqIEBwYXJhbSBidW5kbGUgdGhlIGJ1bmRsZSB0byB0cmFuc2Zvcm0uXG4gICAqIEByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlcyB0aGF0IHdlcmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICB0cmFuc2Zvcm0oYnVuZGxlOiBFbnRyeVBvaW50QnVuZGxlKTogRmlsZUluZm9bXSB7XG4gICAgY29uc3QgaXNDb3JlID0gYnVuZGxlLmlzQ29yZTtcbiAgICBjb25zdCByZWZsZWN0aW9uSG9zdCA9IHRoaXMuZ2V0SG9zdChpc0NvcmUsIGJ1bmRsZSk7XG5cbiAgICAvLyBQYXJzZSBhbmQgYW5hbHl6ZSB0aGUgZmlsZXMuXG4gICAgY29uc3Qge2RlY29yYXRpb25BbmFseXNlcywgc3dpdGNoTWFya2VyQW5hbHlzZXMsIHByaXZhdGVEZWNsYXJhdGlvbnNBbmFseXNlcyxcbiAgICAgICAgICAgbW9kdWxlV2l0aFByb3ZpZGVyc0FuYWx5c2VzfSA9IHRoaXMuYW5hbHl6ZVByb2dyYW0ocmVmbGVjdGlvbkhvc3QsIGlzQ29yZSwgYnVuZGxlKTtcblxuICAgIC8vIFRyYW5zZm9ybSB0aGUgc291cmNlIGZpbGVzIGFuZCBzb3VyY2UgbWFwcy5cbiAgICBjb25zdCByZW5kZXJlciA9IHRoaXMuZ2V0UmVuZGVyZXIocmVmbGVjdGlvbkhvc3QsIGlzQ29yZSwgYnVuZGxlKTtcbiAgICBjb25zdCByZW5kZXJlZEZpbGVzID0gcmVuZGVyZXIucmVuZGVyUHJvZ3JhbShcbiAgICAgICAgZGVjb3JhdGlvbkFuYWx5c2VzLCBzd2l0Y2hNYXJrZXJBbmFseXNlcywgcHJpdmF0ZURlY2xhcmF0aW9uc0FuYWx5c2VzLFxuICAgICAgICBtb2R1bGVXaXRoUHJvdmlkZXJzQW5hbHlzZXMpO1xuXG4gICAgcmV0dXJuIHJlbmRlcmVkRmlsZXM7XG4gIH1cblxuICBnZXRIb3N0KGlzQ29yZTogYm9vbGVhbiwgYnVuZGxlOiBFbnRyeVBvaW50QnVuZGxlKTogTmdjY1JlZmxlY3Rpb25Ib3N0IHtcbiAgICBjb25zdCB0eXBlQ2hlY2tlciA9IGJ1bmRsZS5zcmMucHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICAgIHN3aXRjaCAoYnVuZGxlLmZvcm1hdCkge1xuICAgICAgY2FzZSAnZXNtMjAxNSc6XG4gICAgICAgIHJldHVybiBuZXcgRXNtMjAxNVJlZmxlY3Rpb25Ib3N0KHRoaXMubG9nZ2VyLCBpc0NvcmUsIHR5cGVDaGVja2VyLCBidW5kbGUuZHRzKTtcbiAgICAgIGNhc2UgJ2VzbTUnOlxuICAgICAgICByZXR1cm4gbmV3IEVzbTVSZWZsZWN0aW9uSG9zdCh0aGlzLmxvZ2dlciwgaXNDb3JlLCB0eXBlQ2hlY2tlciwgYnVuZGxlLmR0cyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlZmxlY3Rpb24gaG9zdCBmb3IgXCIke2J1bmRsZS5mb3JtYXR9XCIgbm90IHlldCBpbXBsZW1lbnRlZC5gKTtcbiAgICB9XG4gIH1cblxuICBnZXRSZW5kZXJlcihob3N0OiBOZ2NjUmVmbGVjdGlvbkhvc3QsIGlzQ29yZTogYm9vbGVhbiwgYnVuZGxlOiBFbnRyeVBvaW50QnVuZGxlKTogUmVuZGVyZXIge1xuICAgIHN3aXRjaCAoYnVuZGxlLmZvcm1hdCkge1xuICAgICAgY2FzZSAnZXNtMjAxNSc6XG4gICAgICAgIHJldHVybiBuZXcgRXNtUmVuZGVyZXIodGhpcy5sb2dnZXIsIGhvc3QsIGlzQ29yZSwgYnVuZGxlLCB0aGlzLnNvdXJjZVBhdGgpO1xuICAgICAgY2FzZSAnZXNtNSc6XG4gICAgICAgIHJldHVybiBuZXcgRXNtNVJlbmRlcmVyKHRoaXMubG9nZ2VyLCBob3N0LCBpc0NvcmUsIGJ1bmRsZSwgdGhpcy5zb3VyY2VQYXRoKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVuZGVyZXIgZm9yIFwiJHtidW5kbGUuZm9ybWF0fVwiIG5vdCB5ZXQgaW1wbGVtZW50ZWQuYCk7XG4gICAgfVxuICB9XG5cbiAgYW5hbHl6ZVByb2dyYW0ocmVmbGVjdGlvbkhvc3Q6IE5nY2NSZWZsZWN0aW9uSG9zdCwgaXNDb3JlOiBib29sZWFuLCBidW5kbGU6IEVudHJ5UG9pbnRCdW5kbGUpOlxuICAgICAgUHJvZ3JhbUFuYWx5c2VzIHtcbiAgICBjb25zdCB0eXBlQ2hlY2tlciA9IGJ1bmRsZS5zcmMucHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICAgIGNvbnN0IHJlZmVyZW5jZXNSZWdpc3RyeSA9IG5ldyBOZ2NjUmVmZXJlbmNlc1JlZ2lzdHJ5KHJlZmxlY3Rpb25Ib3N0KTtcblxuICAgIGNvbnN0IHN3aXRjaE1hcmtlckFuYWx5emVyID0gbmV3IFN3aXRjaE1hcmtlckFuYWx5emVyKHJlZmxlY3Rpb25Ib3N0KTtcbiAgICBjb25zdCBzd2l0Y2hNYXJrZXJBbmFseXNlcyA9IHN3aXRjaE1hcmtlckFuYWx5emVyLmFuYWx5emVQcm9ncmFtKGJ1bmRsZS5zcmMucHJvZ3JhbSk7XG5cbiAgICBjb25zdCBkZWNvcmF0aW9uQW5hbHl6ZXIgPSBuZXcgRGVjb3JhdGlvbkFuYWx5emVyKFxuICAgICAgICBidW5kbGUuc3JjLnByb2dyYW0sIGJ1bmRsZS5zcmMub3B0aW9ucywgYnVuZGxlLnNyYy5ob3N0LCB0eXBlQ2hlY2tlciwgcmVmbGVjdGlvbkhvc3QsXG4gICAgICAgIHJlZmVyZW5jZXNSZWdpc3RyeSwgYnVuZGxlLnJvb3REaXJzLCBpc0NvcmUpO1xuICAgIGNvbnN0IGRlY29yYXRpb25BbmFseXNlcyA9IGRlY29yYXRpb25BbmFseXplci5hbmFseXplUHJvZ3JhbSgpO1xuXG4gICAgY29uc3QgbW9kdWxlV2l0aFByb3ZpZGVyc0FuYWx5emVyID1cbiAgICAgICAgYnVuZGxlLmR0cyAmJiBuZXcgTW9kdWxlV2l0aFByb3ZpZGVyc0FuYWx5emVyKHJlZmxlY3Rpb25Ib3N0LCByZWZlcmVuY2VzUmVnaXN0cnkpO1xuICAgIGNvbnN0IG1vZHVsZVdpdGhQcm92aWRlcnNBbmFseXNlcyA9IG1vZHVsZVdpdGhQcm92aWRlcnNBbmFseXplciAmJlxuICAgICAgICBtb2R1bGVXaXRoUHJvdmlkZXJzQW5hbHl6ZXIuYW5hbHl6ZVByb2dyYW0oYnVuZGxlLnNyYy5wcm9ncmFtKTtcblxuICAgIGNvbnN0IHByaXZhdGVEZWNsYXJhdGlvbnNBbmFseXplciA9XG4gICAgICAgIG5ldyBQcml2YXRlRGVjbGFyYXRpb25zQW5hbHl6ZXIocmVmbGVjdGlvbkhvc3QsIHJlZmVyZW5jZXNSZWdpc3RyeSk7XG4gICAgY29uc3QgcHJpdmF0ZURlY2xhcmF0aW9uc0FuYWx5c2VzID1cbiAgICAgICAgcHJpdmF0ZURlY2xhcmF0aW9uc0FuYWx5emVyLmFuYWx5emVQcm9ncmFtKGJ1bmRsZS5zcmMucHJvZ3JhbSk7XG5cbiAgICByZXR1cm4ge2RlY29yYXRpb25BbmFseXNlcywgc3dpdGNoTWFya2VyQW5hbHlzZXMsIHByaXZhdGVEZWNsYXJhdGlvbnNBbmFseXNlcyxcbiAgICAgICAgICAgIG1vZHVsZVdpdGhQcm92aWRlcnNBbmFseXNlc307XG4gIH1cbn1cblxuXG5pbnRlcmZhY2UgUHJvZ3JhbUFuYWx5c2VzIHtcbiAgZGVjb3JhdGlvbkFuYWx5c2VzOiBNYXA8dHMuU291cmNlRmlsZSwgQ29tcGlsZWRGaWxlPjtcbiAgc3dpdGNoTWFya2VyQW5hbHlzZXM6IFN3aXRjaE1hcmtlckFuYWx5c2VzO1xuICBwcml2YXRlRGVjbGFyYXRpb25zQW5hbHlzZXM6IEV4cG9ydEluZm9bXTtcbiAgbW9kdWxlV2l0aFByb3ZpZGVyc0FuYWx5c2VzOiBNb2R1bGVXaXRoUHJvdmlkZXJzQW5hbHlzZXN8bnVsbDtcbn1cbiJdfQ==
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvbmdjYy9zcmMvcGFja2FnZXMvdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7SUFTQSxtR0FBaUY7SUFDakYseUhBQW9IO0lBQ3BILDZHQUE0RTtJQUM1RSx1SEFBa0c7SUFDbEcseUdBQThGO0lBRTlGLG1GQUE2RDtJQUM3RCxpRkFBMkQ7SUFDM0QsMkVBQXFEO0lBRXJELHlFQUFtRDtJQUVuRCxzSEFBcUY7SUFDckYsc0ZBQXNEO0lBQ3RELDhHQUE2RTtJQUM3RSw0R0FBMkU7SUFDM0UsOEVBQStDO0lBRS9DLDRHQUEyRTtJQU8zRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FvQkc7SUFDSDtRQUNFLHFCQUFvQixFQUFjLEVBQVUsTUFBYztZQUF0QyxPQUFFLEdBQUYsRUFBRSxDQUFZO1lBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFHLENBQUM7UUFFOUQ7Ozs7V0FJRztRQUNILCtCQUFTLEdBQVQsVUFBVSxNQUF3QjtZQUNoQyxJQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzdCLElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRXBELCtCQUErQjtZQUN6QixJQUFBLHdEQUNtRixFQURsRiwwQ0FBa0IsRUFBRSw4Q0FBb0IsRUFBRSw0REFBMkIsRUFDckUsNERBQWtGLENBQUM7WUFFMUYsOENBQThDO1lBQzlDLElBQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRWhGLElBQU0sUUFBUSxHQUNWLElBQUksbUJBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMs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QUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFbkUsT0FBTyxFQUFDLGtCQUFrQixvQkFBQSxFQUFFLG9CQUFvQixzQkFBQSxFQUFFLDJCQUEyQiw2QkFBQTtnQkFDckUsMkJBQTJCLDZCQUFBLEVBQUMsQ0FBQztRQUN2QyxDQUFDO1FBQ0gsa0JBQUM7SUFBRCxDQUFDLEFBbkdELElBbUdDO0lBbkdZLGtDQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Q29tcGlsZWRGaWxlLCBEZWNvcmF0aW9uQW5hbHl6ZXJ9IGZyb20gJy4uL2FuYWx5c2lzL2RlY29yYXRpb25fYW5hbHl6ZXInO1xuaW1wb3J0IHtNb2R1bGVXaXRoUHJvdmlkZXJzQW5hbHlzZXMsIE1vZHVsZVdpdGhQcm92aWRlcnNBbmFseXplcn0gZnJvbSAnLi4vYW5hbHlzaXMvbW9kdWxlX3dpdGhfcHJvdmlkZXJzX2FuYWx5emVyJztcbmltcG9ydCB7TmdjY1JlZmVyZW5jZXNSZWdpc3RyeX0gZnJvbSAnLi4vYW5hbHlzaXMvbmdjY19yZWZlcmVuY2VzX3JlZ2lzdHJ5JztcbmltcG9ydCB7RXhwb3J0SW5mbywgUHJpdmF0ZURlY2xhcmF0aW9uc0FuYWx5emVyfSBmcm9tICcuLi9hbmFseXNpcy9wcml2YXRlX2RlY2xhcmF0aW9uc19hbmFseXplcic7XG5pbXBvcnQge1N3aXRjaE1hcmtlckFuYWx5c2VzLCBTd2l0Y2hNYXJrZXJBbmFseXplcn0gZnJvbSAnLi4vYW5hbHlzaXMvc3dpdGNoX21hcmtlcl9hbmFseXplcic7XG5pbXBvcnQge0ZpbGVTeXN0ZW19IGZyb20gJy4uL2ZpbGVfc3lzdGVtL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7Q29tbW9uSnNSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi4vaG9zdC9jb21tb25qc19ob3N0JztcbmltcG9ydCB7RXNtMjAxNVJlZmxlY3Rpb25Ib3N0fSBmcm9tICcuLi9ob3N0L2VzbTIwMTVfaG9zdCc7XG5pbXBvcnQge0VzbTVSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi4vaG9zdC9lc201X2hvc3QnO1xuaW1wb3J0IHtOZ2NjUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uL2hvc3QvbmdjY19ob3N0JztcbmltcG9ydCB7VW1kUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uL2hvc3QvdW1kX2hvc3QnO1xuaW1wb3J0IHtMb2dnZXJ9IGZyb20gJy4uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7Q29tbW9uSnNSZW5kZXJpbmdGb3JtYXR0ZXJ9IGZyb20gJy4uL3JlbmRlcmluZy9jb21tb25qc19yZW5kZXJpbmdfZm9ybWF0dGVyJztcbmltcG9ydCB7RHRzUmVuZGVyZXJ9IGZyb20gJy4uL3JlbmRlcmluZy9kdHNfcmVuZGVyZXInO1xuaW1wb3J0IHtFc201UmVuZGVyaW5nRm9ybWF0dGVyfSBmcm9tICcuLi9yZW5kZXJpbmcvZXNtNV9yZW5kZXJpbmdfZm9ybWF0dGVyJztcbmltcG9ydCB7RXNtUmVuZGVyaW5nRm9ybWF0dGVyfSBmcm9tICcuLi9yZW5kZXJpbmcvZXNtX3JlbmRlcmluZ19mb3JtYXR0ZXInO1xuaW1wb3J0IHtSZW5kZXJlcn0gZnJvbSAnLi4vcmVuZGVyaW5nL3JlbmRlcmVyJztcbmltcG9ydCB7UmVuZGVyaW5nRm9ybWF0dGVyfSBmcm9tICcuLi9yZW5kZXJpbmcvcmVuZGVyaW5nX2Zvcm1hdHRlcic7XG5pbXBvcnQge1VtZFJlbmRlcmluZ0Zvcm1hdHRlcn0gZnJvbSAnLi4vcmVuZGVyaW5nL3VtZF9yZW5kZXJpbmdfZm9ybWF0dGVyJztcbmltcG9ydCB7RmlsZVRvV3JpdGV9IGZyb20gJy4uL3JlbmRlcmluZy91dGlscyc7XG5cbmltcG9ydCB7RW50cnlQb2ludEJ1bmRsZX0gZnJvbSAnLi9lbnRyeV9wb2ludF9idW5kbGUnO1xuXG5cblxuLyoqXG4gKiBBIFBhY2thZ2UgaXMgc3RvcmVkIGluIGEgZGlyZWN0b3J5IG9uIGRpc2sgYW5kIHRoYXQgZGlyZWN0b3J5IGNhbiBjb250YWluIG9uZSBvciBtb3JlIHBhY2thZ2VcbiAqIGZvcm1hdHMgLSBlLmcuIGZlc20yMDE1LCBVTUQsIGV0Yy4gQWRkaXRpb25hbGx5LCBlYWNoIHBhY2thZ2UgcHJvdmlkZXMgdHlwaW5ncyAoYC5kLnRzYCBmaWxlcykuXG4gKlxuICogRWFjaCBvZiB0aGVzZSBmb3JtYXRzIGV4cG9zZXMgb25lIG9yIG1vcmUgZW50cnkgcG9pbnRzLCB3aGljaCBhcmUgc291cmNlIGZpbGVzIHRoYXQgbmVlZCB0byBiZVxuICogcGFyc2VkIHRvIGlkZW50aWZ5IHRoZSBkZWNvcmF0ZWQgZXhwb3J0ZWQgY2xhc3NlcyB0aGF0IG5lZWQgdG8gYmUgYW5hbHl6ZWQgYW5kIGNvbXBpbGVkIGJ5IG9uZSBvclxuICogbW9yZSBgRGVjb3JhdG9ySGFuZGxlcmAgb2JqZWN0cy5cbiAqXG4gKiBFYWNoIGVudHJ5IHBvaW50IHRvIGEgcGFja2FnZSBpcyBpZGVudGlmaWVkIGJ5IGEgYHBhY2thZ2UuanNvbmAgd2hpY2ggY29udGFpbnMgcHJvcGVydGllcyB0aGF0XG4gKiBpbmRpY2F0ZSB3aGF0IGZvcm1hdHRlZCBidW5kbGVzIGFyZSBhY2Nlc3NpYmxlIHZpYSB0aGlzIGVuZC1wb2ludC5cbiAqXG4gKiBFYWNoIGJ1bmRsZSBpcyBpZGVudGlmaWVkIGJ5IGEgcm9vdCBgU291cmNlRmlsZWAgdGhhdCBjYW4gYmUgcGFyc2VkIGFuZCBhbmFseXplZCB0b1xuICogaWRlbnRpZnkgY2xhc3NlcyB0aGF0IG5lZWQgdG8gYmUgdHJhbnNmb3JtZWQ7IGFuZCB0aGVuIGZpbmFsbHkgcmVuZGVyZWQgYW5kIHdyaXR0ZW4gdG8gZGlzay5cbiAqXG4gKiBBbG9uZyB3aXRoIHRoZSBzb3VyY2UgZmlsZXMsIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBtYXBzIChlaXRoZXIgaW5saW5lIG9yIGV4dGVybmFsKSBhbmRcbiAqIGAuZC50c2AgZmlsZXMgYXJlIHRyYW5zZm9ybWVkIGFjY29yZGluZ2x5LlxuICpcbiAqIC0gRmxhdCBmaWxlIHBhY2thZ2VzIGhhdmUgYWxsIHRoZSBjbGFzc2VzIGluIGEgc2luZ2xlIGZpbGUuXG4gKiAtIE90aGVyIHBhY2thZ2VzIG1heSByZS1leHBvcnQgY2xhc3NlcyBmcm9tIG90aGVyIG5vbi1lbnRyeSBwb2ludCBmaWxlcy5cbiAqIC0gU29tZSBmb3JtYXRzIG1heSBjb250YWluIG11bHRpcGxlIFwibW9kdWxlc1wiIGluIGEgc2luZ2xlIGZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2Zvcm1lciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZnM6IEZpbGVTeXN0ZW0sIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIpIHt9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSB0aGUgc291cmNlIChhbmQgdHlwaW5ncykgZmlsZXMgb2YgYSBidW5kbGUuXG4gICAqIEBwYXJhbSBidW5kbGUgdGhlIGJ1bmRsZSB0byB0cmFuc2Zvcm0uXG4gICAqIEByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlcyB0aGF0IHdlcmUgdHJhbnNmb3JtZWQuXG4gICAqL1xuICB0cmFuc2Zvcm0oYnVuZGxlOiBFbnRyeVBvaW50QnVuZGxlKTogRmlsZVRvV3JpdGVbXSB7XG4gICAgY29uc3QgaXNDb3JlID0gYnVuZGxlLmlzQ29yZTtcbiAgICBjb25zdCByZWZsZWN0aW9uSG9zdCA9IHRoaXMuZ2V0SG9zdChpc0NvcmUsIGJ1bmRsZSk7XG5cbiAgICAvLyBQYXJzZSBhbmQgYW5hbHl6ZSB0aGUgZmlsZXMuXG4gICAgY29uc3Qge2RlY29yYXRpb25BbmFseXNlcywgc3dpdGNoTWFya2VyQW5hbHlzZXMsIHByaXZhdGVEZWNsYXJhdGlvbnNBbmFseXNlcyxcbiAgICAgICAgICAgbW9kdWxlV2l0aFByb3ZpZGVyc0FuYWx5c2VzfSA9IHRoaXMuYW5hbHl6ZVByb2dyYW0ocmVmbGVjdGlvbkhvc3QsIGlzQ29yZSwgYnVuZGxlKTtcblxuICAgIC8vIFRyYW5zZm9ybSB0aGUgc291cmNlIGZpbGVzIGFuZCBzb3VyY2UgbWFwcy5cbiAgICBjb25zdCBzcmNGb3JtYXR0ZXIgPSB0aGlzLmdldFJlbmRlcmluZ0Zvcm1hdHRlcihyZWZsZWN0aW9uSG9zdCwgaXNDb3JlLCBidW5kbGUpO1xuXG4gICAgY29uc3QgcmVuZGVyZXIgPVxuICAgICAgICBuZXcgUmVuZGVyZXIoc3JjRm9ybWF0dGVyLCB0aGlzLmZzLCB0aGlzLmxvZ2dlciwgcmVmbGVjdGlvbkhvc3QsIGlzQ29yZSwgYnVuZGxlKTtcbiAgICBsZXQgcmVuZGVyZWRGaWxlcyA9IHJlbmRlcmVyLnJlbmRlclByb2dyYW0oXG4gICAgICAgIGRlY29yYXRpb25BbmFseXNlcywgc3dpdGNoTWFya2VyQW5hbHlzZXMsIHByaXZhdGVEZWNsYXJhdGlvbnNBbmFseXNlcyk7XG5cbiAgICBpZiAoYnVuZGxlLmR0cykge1xuICAgICAgY29uc3QgZHRzRm9ybWF0dGVyID0gbmV3IEVzbVJlbmRlcmluZ0Zvcm1hdHRlcihyZWZsZWN0aW9uSG9zdCwgaXNDb3JlKTtcbiAgICAgIGNvbnN0IGR0c1JlbmRlcmVyID1cbiAgICAgICAgICBuZXcgRHRzUmVuZGVyZXIoZHRzRm9ybWF0dGVyLCB0aGlzLmZzLCB0aGlzLmxvZ2dlciwgcmVmbGVjdGlvbkhvc3QsIGlzQ29yZSwgYnVuZGxlKTtcbiAgICAgIGNvbnN0IHJlbmRlcmVkRHRzRmlsZXMgPSBkdHNSZW5kZXJlci5yZW5kZXJQcm9ncmFtKFxuICAgICAgICAgIGRlY29yYXRpb25BbmFseXNlcywgcHJpdmF0ZURlY2xhcmF0aW9uc0FuYWx5c2VzLCBtb2R1bGVXaXRoUHJvdmlkZXJzQW5hbHlzZXMpO1xuICAgICAgcmVuZGVyZWRGaWxlcyA9IHJlbmRlcmVkRmlsZXMuY29uY2F0KHJlbmRlcmVkRHRzRmlsZXMpO1xuICAgIH1cblxuICAgIHJldHVybiByZW5kZXJlZEZpbGVzO1xuICB9XG5cbiAgZ2V0SG9zdChpc0NvcmU6IGJvb2xlYW4sIGJ1bmRsZTogRW50cnlQb2ludEJ1bmRsZSk6IE5nY2NSZWZsZWN0aW9uSG9zdCB7XG4gICAgY29uc3QgdHlwZUNoZWNrZXIgPSBidW5kbGUuc3JjLnByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgICBzd2l0Y2ggKGJ1bmRsZS5mb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2VzbTIwMTUnOlxuICAgICAgICByZXR1cm4gbmV3IEVzbTIwMTVSZWZsZWN0aW9uSG9zdCh0aGlzLmxvZ2dlciwgaXNDb3JlLCB0eXBlQ2hlY2tlciwgYnVuZGxlLmR0cyk7XG4gICAgICBjYXNlICdlc201JzpcbiAgICAgICAgcmV0dXJuIG5ldyBFc201UmVmbGVjdGlvbkhvc3QodGhpcy5sb2dnZXIsIGlzQ29yZSwgdHlwZUNoZWNrZXIsIGJ1bmRsZS5kdHMpO1xuICAgICAgY2FzZSAndW1kJzpcbiAgICAgICAgcmV0dXJuIG5ldyBVbWRSZWZsZWN0aW9uSG9zdChcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLCBpc0NvcmUsIGJ1bmRsZS5zcmMucHJvZ3JhbSwgYnVuZGxlLnNyYy5ob3N0LCBidW5kbGUuZHRzKTtcbiAgICAgIGNhc2UgJ2NvbW1vbmpzJzpcbiAgICAgICAgcmV0dXJuIG5ldyBDb21tb25Kc1JlZmxlY3Rpb25Ib3N0KFxuICAgICAgICAgICAgdGhpcy5sb2dnZXIsIGlzQ29yZSwgYnVuZGxlLnNyYy5wcm9ncmFtLCBidW5kbGUuc3JjLmhvc3QsIGJ1bmRsZS5kdHMpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWZsZWN0aW9uIGhvc3QgZm9yIFwiJHtidW5kbGUuZm9ybWF0fVwiIG5vdCB5ZXQgaW1wbGVtZW50ZWQuYCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmVuZGVyaW5nRm9ybWF0dGVyKGhvc3Q6IE5nY2NSZWZsZWN0aW9uSG9zdCwgaXNDb3JlOiBib29sZWFuLCBidW5kbGU6IEVudHJ5UG9pbnRCdW5kbGUpOlxuICAgICAgUmVuZGVyaW5nRm9ybWF0dGVyIHtcbiAgICBzd2l0Y2ggKGJ1bmRsZS5mb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2VzbTIwMTUnOlxuICAgICAgICByZXR1cm4gbmV3IEVzbVJlbmRlcmluZ0Zvcm1hdHRlcihob3N0LCBpc0NvcmUpO1xuICAgICAgY2FzZSAnZXNtNSc6XG4gICAgICAgIHJldHVybiBuZXcgRXNtNVJlbmRlcmluZ0Zvcm1hdHRlcihob3N0LCBpc0NvcmUpO1xuICAgICAgY2FzZSAndW1kJzpcbiAgICAgICAgaWYgKCEoaG9zdCBpbnN0YW5jZW9mIFVtZFJlZmxlY3Rpb25Ib3N0KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW1kUmVuZGVyZXIgcmVxdWlyZXMgYSBVbWRSZWZsZWN0aW9uSG9zdCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVW1kUmVuZGVyaW5nRm9ybWF0dGVyKGhvc3QsIGlzQ29yZSk7XG4gICAgICBjYXNlICdjb21tb25qcyc6XG4gICAgICAgIHJldHVybiBuZXcgQ29tbW9uSnNSZW5kZXJpbmdGb3JtYXR0ZXIoaG9zdCwgaXNDb3JlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVuZGVyZXIgZm9yIFwiJHtidW5kbGUuZm9ybWF0fVwiIG5vdCB5ZXQgaW1wbGVtZW50ZWQuYCk7XG4gICAgfVxuICB9XG5cbiAgYW5hbHl6ZVByb2dyYW0ocmVmbGVjdGlvbkhvc3Q6IE5nY2NSZWZsZWN0aW9uSG9zdCwgaXNDb3JlOiBib29sZWFuLCBidW5kbGU6IEVudHJ5UG9pbnRCdW5kbGUpOlxuICAgICAgUHJvZ3JhbUFuYWx5c2VzIHtcbiAgICBjb25zdCB0eXBlQ2hlY2tlciA9IGJ1bmRsZS5zcmMucHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICAgIGNvbnN0IHJlZmVyZW5jZXNSZWdpc3RyeSA9IG5ldyBOZ2NjUmVmZXJlbmNlc1JlZ2lzdHJ5KHJlZmxlY3Rpb25Ib3N0KTtcblxuICAgIGNvbnN0IHN3aXRjaE1hcmtlckFuYWx5emVyID0gbmV3IFN3aXRjaE1hcmtlckFuYWx5emVyKHJlZmxlY3Rpb25Ib3N0KTtcbiAgICBjb25zdCBzd2l0Y2hNYXJrZXJBbmFseXNlcyA9IHN3aXRjaE1hcmtlckFuYWx5emVyLmFuYWx5emVQcm9ncmFtKGJ1bmRsZS5zcmMucHJvZ3JhbSk7XG5cbiAgICBjb25zdCBkZWNvcmF0aW9uQW5hbHl6ZXIgPSBuZXcgRGVjb3JhdGlvbkFuYWx5emVyKFxuICAgICAgICB0aGlzLmZzLCBidW5kbGUuc3JjLnByb2dyYW0sIGJ1bmRsZS5zcmMub3B0aW9ucywgYnVuZGxlLnNyYy5ob3N0LCB0eXBlQ2hlY2tlcixcbiAgICAgICAgcmVmbGVjdGlvbkhvc3QsIHJlZmVyZW5jZXNSZWdpc3RyeSwgYnVuZGxlLnJvb3REaXJzLCBpc0NvcmUpO1xuICAgIGNvbnN0IGRlY29yYXRpb25BbmFseXNlcyA9IGRlY29yYXRpb25BbmFseXplci5hbmFseXplUHJvZ3JhbSgpO1xuXG4gICAgY29uc3QgbW9kdWxlV2l0aFByb3ZpZGVyc0FuYWx5emVyID1cbiAgICAgICAgYnVuZGxlLmR0cyAmJiBuZXcgTW9kdWxlV2l0aFByb3ZpZGVyc0FuYWx5emVyKHJlZmxlY3Rpb25Ib3N0LCByZWZlcmVuY2VzUmVnaXN0cnkpO1xuICAgIGNvbnN0IG1vZHVsZVdpdGhQcm92aWRlcnNBbmFseXNlcyA9IG1vZHVsZVdpdGhQcm92aWRlcnNBbmFseXplciAmJlxuICAgICAgICBtb2R1bGVXaXRoUHJvdmlkZXJzQW5hbHl6ZXIuYW5hbHl6ZVByb2dyYW0oYnVuZGxlLnNyYy5wcm9ncmFtKTtcblxuICAgIGNvbnN0IHByaXZhdGVEZWNsYXJhdGlvbnNBbmFseXplciA9XG4gICAgICAgIG5ldyBQcml2YXRlRGVjbGFyYXRpb25zQW5hbHl6ZXIocmVmbGVjdGlvbkhvc3QsIHJlZmVyZW5jZXNSZWdpc3RyeSk7XG4gICAgY29uc3QgcHJpdmF0ZURlY2xhcmF0aW9uc0FuYWx5c2VzID1cbiAgICAgICAgcHJpdmF0ZURlY2xhcmF0aW9uc0FuYWx5emVyLmFuYWx5emVQcm9ncmFtKGJ1bmRsZS5zcmMucHJvZ3JhbSk7XG5cbiAgICByZXR1cm4ge2RlY29yYXRpb25BbmFseXNlcywgc3dpdGNoTWFya2VyQW5hbHlzZXMsIHByaXZhdGVEZWNsYXJhdGlvbnNBbmFseXNlcyxcbiAgICAgICAgICAgIG1vZHVsZVdpdGhQcm92aWRlcnNBbmFseXNlc307XG4gIH1cbn1cblxuXG5pbnRlcmZhY2UgUHJvZ3JhbUFuYWx5c2VzIHtcbiAgZGVjb3JhdGlvbkFuYWx5c2VzOiBNYXA8dHMuU291cmNlRmlsZSwgQ29tcGlsZWRGaWxlPjtcbiAgc3dpdGNoTWFya2VyQW5hbHlzZXM6IFN3aXRjaE1hcmtlckFuYWx5c2VzO1xuICBwcml2YXRlRGVjbGFyYXRpb25zQW5hbHlzZXM6IEV4cG9ydEluZm9bXTtcbiAgbW9kdWxlV2l0aFByb3ZpZGVyc0FuYWx5c2VzOiBNb2R1bGVXaXRoUHJvdmlkZXJzQW5hbHlzZXN8bnVsbDtcbn1cbiJdfQ==