@angular/compiler-cli 7.0.0-rc.1 → 7.0.3

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 (49) hide show
  1. package/package.json +3 -3
  2. package/src/diagnostics/symbols.d.ts +10 -10
  3. package/src/diagnostics/symbols.js +2 -2
  4. package/src/ngcc/src/analysis/decoration_analyzer.d.ts +65 -0
  5. package/src/ngcc/src/analysis/decoration_analyzer.js +116 -0
  6. package/src/ngcc/src/analysis/switch_marker_analyzer.d.ts +33 -0
  7. package/src/ngcc/src/analysis/switch_marker_analyzer.js +44 -0
  8. package/src/ngcc/src/{parsing/parsed_class.d.ts → host/decorated_class.d.ts} +4 -4
  9. package/src/ngcc/src/host/decorated_class.js +40 -0
  10. package/src/ngcc/src/host/decorated_file.d.ts +21 -0
  11. package/src/ngcc/src/host/decorated_file.js +34 -0
  12. package/src/ngcc/src/host/esm5_host.d.ts +8 -0
  13. package/src/ngcc/src/host/esm5_host.js +37 -2
  14. package/src/ngcc/src/host/fesm2015_host.d.ts +2 -0
  15. package/src/ngcc/src/host/fesm2015_host.js +41 -2
  16. package/src/ngcc/src/host/ngcc_host.d.ts +8 -0
  17. package/src/ngcc/src/host/ngcc_host.js +1 -1
  18. package/src/ngcc/src/packages/build_marker.d.ts +1 -1
  19. package/src/ngcc/src/packages/build_marker.js +1 -1
  20. package/src/ngcc/src/packages/transformer.d.ts +6 -6
  21. package/src/ngcc/src/packages/transformer.js +32 -82
  22. package/src/ngcc/src/rendering/esm2015_renderer.d.ts +15 -28
  23. package/src/ngcc/src/rendering/esm2015_renderer.js +39 -81
  24. package/src/ngcc/src/rendering/esm5_renderer.d.ts +2 -2
  25. package/src/ngcc/src/rendering/esm5_renderer.js +4 -4
  26. package/src/ngcc/src/rendering/fesm2015_renderer.d.ts +38 -0
  27. package/src/ngcc/src/rendering/fesm2015_renderer.js +112 -0
  28. package/src/ngcc/src/rendering/renderer.d.ts +11 -11
  29. package/src/ngcc/src/rendering/renderer.js +49 -24
  30. package/src/ngtsc/annotations/src/component.js +2 -2
  31. package/src/ngtsc/annotations/src/directive.js +8 -1
  32. package/src/ngtsc/annotations/src/util.js +1 -4
  33. package/src/ngtsc/typecheck/src/type_check_block.js +1 -1
  34. package/src/perform_watch.js +5 -5
  35. package/src/transformers/api.d.ts +1 -1
  36. package/src/transformers/api.js +1 -1
  37. package/src/version.js +1 -1
  38. package/src/ngcc/canonical-path.d.ts +0 -14
  39. package/src/ngcc/src/analyzer.d.ts +0 -53
  40. package/src/ngcc/src/analyzer.js +0 -94
  41. package/src/ngcc/src/parsing/esm2015_parser.d.ts +0 -19
  42. package/src/ngcc/src/parsing/esm2015_parser.js +0 -64
  43. package/src/ngcc/src/parsing/esm5_parser.d.ts +0 -24
  44. package/src/ngcc/src/parsing/esm5_parser.js +0 -65
  45. package/src/ngcc/src/parsing/file_parser.d.ts +0 -35
  46. package/src/ngcc/src/parsing/file_parser.js +0 -13
  47. package/src/ngcc/src/parsing/parsed_class.js +0 -40
  48. package/src/ngcc/src/parsing/parsed_file.d.ts +0 -23
  49. package/src/ngcc/src/parsing/parsed_file.js +0 -36
@@ -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/src/ngcc/src/packages/transformer", ["require", "exports", "tslib", "canonical-path", "fs", "shelljs", "typescript", "@angular/compiler-cli/src/ngtsc/transform", "@angular/compiler-cli/src/ngcc/src/analyzer", "@angular/compiler-cli/src/ngcc/src/constants", "@angular/compiler-cli/src/ngcc/src/host/dts_mapper", "@angular/compiler-cli/src/ngcc/src/host/esm2015_host", "@angular/compiler-cli/src/ngcc/src/host/esm5_host", "@angular/compiler-cli/src/ngcc/src/host/fesm2015_host", "@angular/compiler-cli/src/ngcc/src/parsing/esm2015_parser", "@angular/compiler-cli/src/ngcc/src/parsing/esm5_parser", "@angular/compiler-cli/src/ngcc/src/rendering/esm2015_renderer", "@angular/compiler-cli/src/ngcc/src/rendering/esm5_renderer", "@angular/compiler-cli/src/ngcc/src/packages/build_marker"], factory);
7
+ define("@angular/compiler-cli/src/ngcc/src/packages/transformer", ["require", "exports", "tslib", "canonical-path", "fs", "shelljs", "typescript", "@angular/compiler-cli/src/ngcc/src/analysis/decoration_analyzer", "@angular/compiler-cli/src/ngcc/src/analysis/switch_marker_analyzer", "@angular/compiler-cli/src/ngcc/src/host/dts_mapper", "@angular/compiler-cli/src/ngcc/src/host/esm2015_host", "@angular/compiler-cli/src/ngcc/src/host/esm5_host", "@angular/compiler-cli/src/ngcc/src/host/fesm2015_host", "@angular/compiler-cli/src/ngcc/src/rendering/esm2015_renderer", "@angular/compiler-cli/src/ngcc/src/rendering/esm5_renderer", "@angular/compiler-cli/src/ngcc/src/rendering/fesm2015_renderer", "@angular/compiler-cli/src/ngcc/src/packages/build_marker"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
@@ -21,17 +21,15 @@
21
21
  var fs_1 = require("fs");
22
22
  var shelljs_1 = require("shelljs");
23
23
  var ts = require("typescript");
24
- var transform_1 = require("@angular/compiler-cli/src/ngtsc/transform");
25
- var analyzer_1 = require("@angular/compiler-cli/src/ngcc/src/analyzer");
26
- var constants_1 = require("@angular/compiler-cli/src/ngcc/src/constants");
24
+ var decoration_analyzer_1 = require("@angular/compiler-cli/src/ngcc/src/analysis/decoration_analyzer");
25
+ var switch_marker_analyzer_1 = require("@angular/compiler-cli/src/ngcc/src/analysis/switch_marker_analyzer");
27
26
  var dts_mapper_1 = require("@angular/compiler-cli/src/ngcc/src/host/dts_mapper");
28
27
  var esm2015_host_1 = require("@angular/compiler-cli/src/ngcc/src/host/esm2015_host");
29
28
  var esm5_host_1 = require("@angular/compiler-cli/src/ngcc/src/host/esm5_host");
30
29
  var fesm2015_host_1 = require("@angular/compiler-cli/src/ngcc/src/host/fesm2015_host");
31
- var esm2015_parser_1 = require("@angular/compiler-cli/src/ngcc/src/parsing/esm2015_parser");
32
- var esm5_parser_1 = require("@angular/compiler-cli/src/ngcc/src/parsing/esm5_parser");
33
30
  var esm2015_renderer_1 = require("@angular/compiler-cli/src/ngcc/src/rendering/esm2015_renderer");
34
31
  var esm5_renderer_1 = require("@angular/compiler-cli/src/ngcc/src/rendering/esm5_renderer");
32
+ var fesm2015_renderer_1 = require("@angular/compiler-cli/src/ngcc/src/rendering/fesm2015_renderer");
35
33
  var build_marker_1 = require("@angular/compiler-cli/src/ngcc/src/packages/build_marker");
36
34
  /**
37
35
  * A Package is stored in a directory on disk and that directory can contain one or more package
@@ -62,7 +60,6 @@
62
60
  if (build_marker_1.checkMarkerFile(entryPoint, format)) {
63
61
  return;
64
62
  }
65
- var outputFiles = [];
66
63
  var options = {
67
64
  allowJs: true,
68
65
  maxNodeModuleJsDepth: Infinity,
@@ -71,16 +68,7 @@
71
68
  // Create the TS program and necessary helpers.
72
69
  // TODO : create a custom compiler host that reads from .bak files if available.
73
70
  var host = ts.createCompilerHost(options);
74
- var rootDirs = undefined;
75
- if (options.rootDirs !== undefined) {
76
- rootDirs = options.rootDirs;
77
- }
78
- else if (options.rootDir !== undefined) {
79
- rootDirs = [options.rootDir];
80
- }
81
- else {
82
- rootDirs = [host.getCurrentDirectory()];
83
- }
71
+ var rootDirs = this.getRootDirs(host, options);
84
72
  var entryPointFilePath = entryPoint[format];
85
73
  if (!entryPointFilePath) {
86
74
  throw new Error("Missing entry point file for format, " + format + ", in package, " + entryPoint.path + ".");
@@ -89,30 +77,30 @@
89
77
  var r3SymbolsPath = isCore ? this.findR3SymbolsPath(canonical_path_1.dirname(entryPointFilePath)) : null;
90
78
  var rootPaths = r3SymbolsPath ? [entryPointFilePath, r3SymbolsPath] : [entryPointFilePath];
91
79
  var packageProgram = ts.createProgram(rootPaths, options, host);
92
- var typeChecker = packageProgram.getTypeChecker();
93
80
  var dtsMapper = new dts_mapper_1.DtsMapper(canonical_path_1.dirname(entryPointFilePath), canonical_path_1.dirname(entryPoint.typings));
94
81
  var reflectionHost = this.getHost(isCore, format, packageProgram, dtsMapper);
95
82
  var r3SymbolsFile = r3SymbolsPath && packageProgram.getSourceFile(r3SymbolsPath) || null;
96
- var parser = this.getFileParser(format, packageProgram, reflectionHost);
97
- var analyzer = new analyzer_1.Analyzer(typeChecker, reflectionHost, rootDirs, isCore);
98
- var renderer = this.getRenderer(format, packageProgram, reflectionHost, isCore, r3SymbolsFile);
99
83
  // Parse and analyze the files.
100
- var entryPointFile = packageProgram.getSourceFile(entryPointFilePath);
101
- var parsedFiles = parser.parseFile(entryPointFile);
102
- var analyzedFiles = parsedFiles.map(function (parsedFile) { return analyzer.analyzeFile(parsedFile); });
84
+ var _a = this.analyzeProgram(packageProgram, reflectionHost, rootDirs, isCore), decorationAnalyses = _a.decorationAnalyses, switchMarkerAnalyses = _a.switchMarkerAnalyses;
103
85
  // Transform the source files and source maps.
104
- outputFiles.push.apply(outputFiles, tslib_1.__spread(this.transformSourceFiles(analyzedFiles, this.sourcePath, this.targetPath, renderer)));
105
- // Transform the `.d.ts` files (if necessary).
106
- // TODO(gkalpak): What about `.d.ts` source maps? (See
107
- // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html#new---declarationmap.)
108
- if (format === 'esm2015') {
109
- outputFiles.push.apply(outputFiles, tslib_1.__spread(this.transformDtsFiles(analyzedFiles, this.sourcePath, this.targetPath, dtsMapper)));
110
- }
86
+ var renderer = this.getRenderer(format, packageProgram, reflectionHost, isCore, r3SymbolsFile, dtsMapper);
87
+ var renderedFiles = renderer.renderProgram(packageProgram, decorationAnalyses, switchMarkerAnalyses);
111
88
  // Write out all the transformed files.
112
- outputFiles.forEach(function (file) { return _this.writeFile(file); });
89
+ renderedFiles.forEach(function (file) { return _this.writeFile(file); });
113
90
  // Write the built-with-ngcc marker
114
91
  build_marker_1.writeMarkerFile(entryPoint, format);
115
92
  };
93
+ Transformer.prototype.getRootDirs = function (host, options) {
94
+ if (options.rootDirs !== undefined) {
95
+ return options.rootDirs;
96
+ }
97
+ else if (options.rootDir !== undefined) {
98
+ return [options.rootDir];
99
+ }
100
+ else {
101
+ return [host.getCurrentDirectory()];
102
+ }
103
+ };
116
104
  Transformer.prototype.getHost = function (isCore, format, program, dtsMapper) {
117
105
  switch (format) {
118
106
  case 'esm2015':
@@ -126,64 +114,26 @@
126
114
  throw new Error("Relection host for \"" + format + "\" not yet implemented.");
127
115
  }
128
116
  };
129
- Transformer.prototype.getFileParser = function (format, program, host) {
117
+ Transformer.prototype.getRenderer = function (format, program, host, isCore, rewriteCoreImportsTo, dtsMapper) {
130
118
  switch (format) {
131
119
  case 'esm2015':
120
+ return new esm2015_renderer_1.Esm2015Renderer(host, isCore, rewriteCoreImportsTo, this.sourcePath, this.targetPath, dtsMapper);
132
121
  case 'fesm2015':
133
- return new esm2015_parser_1.Esm2015FileParser(program, host);
122
+ return new fesm2015_renderer_1.Fesm2015Renderer(host, isCore, rewriteCoreImportsTo, this.sourcePath, this.targetPath);
134
123
  case 'esm5':
135
124
  case 'fesm5':
136
- return new esm5_parser_1.Esm5FileParser(program, host);
137
- default:
138
- throw new Error("File parser for \"" + format + "\" not yet implemented.");
139
- }
140
- };
141
- Transformer.prototype.getRenderer = function (format, program, host, isCore, rewriteCoreImportsTo) {
142
- switch (format) {
143
- case 'esm2015':
144
- case 'fesm2015':
145
- return new esm2015_renderer_1.Esm2015Renderer(host, isCore, rewriteCoreImportsTo);
146
- case 'esm5':
147
- case 'fesm5':
148
- return new esm5_renderer_1.Esm5Renderer(host, isCore, rewriteCoreImportsTo);
125
+ return new esm5_renderer_1.Esm5Renderer(host, isCore, rewriteCoreImportsTo, this.sourcePath, this.targetPath);
149
126
  default:
150
127
  throw new Error("Renderer for \"" + format + "\" not yet implemented.");
151
128
  }
152
129
  };
153
- Transformer.prototype.transformDtsFiles = function (analyzedFiles, sourceNodeModules, targetNodeModules, dtsMapper) {
154
- var outputFiles = [];
155
- analyzedFiles.forEach(function (analyzedFile) {
156
- // Create a `DtsFileTransformer` for the source file and record the generated fields, which
157
- // will allow the corresponding `.d.ts` file to be transformed later.
158
- var dtsTransformer = new transform_1.DtsFileTransformer(null, constants_1.IMPORT_PREFIX);
159
- analyzedFile.analyzedClasses.forEach(function (analyzedClass) {
160
- return dtsTransformer.recordStaticField(analyzedClass.name, analyzedClass.compilation);
161
- });
162
- // Find the corresponding `.d.ts` file.
163
- var sourceFileName = analyzedFile.sourceFile.fileName;
164
- var originalDtsFileName = dtsMapper.getDtsFileNameFor(sourceFileName);
165
- var originalDtsContents = fs_1.readFileSync(originalDtsFileName, 'utf8');
166
- // Transform the `.d.ts` file based on the recorded source file changes.
167
- var transformedDtsFileName = canonical_path_1.resolve(targetNodeModules, canonical_path_1.relative(sourceNodeModules, originalDtsFileName));
168
- var transformedDtsContents = dtsTransformer.transform(originalDtsContents, sourceFileName);
169
- // Add the transformed `.d.ts` file to the list of output files.
170
- outputFiles.push({ path: transformedDtsFileName, contents: transformedDtsContents });
171
- });
172
- return outputFiles;
173
- };
174
- Transformer.prototype.transformSourceFiles = function (analyzedFiles, sourceNodeModules, targetNodeModules, renderer) {
175
- var outputFiles = [];
176
- analyzedFiles.forEach(function (analyzedFile) {
177
- // Transform the source file based on the recorded changes.
178
- var targetPath = canonical_path_1.resolve(targetNodeModules, canonical_path_1.relative(sourceNodeModules, analyzedFile.sourceFile.fileName));
179
- var _a = renderer.renderFile(analyzedFile, targetPath), source = _a.source, map = _a.map;
180
- // Add the transformed file (and source map, if available) to the list of output files.
181
- outputFiles.push(source);
182
- if (map) {
183
- outputFiles.push(map);
184
- }
185
- });
186
- return outputFiles;
130
+ Transformer.prototype.analyzeProgram = function (program, reflectionHost, rootDirs, isCore) {
131
+ var decorationAnalyzer = new decoration_analyzer_1.DecorationAnalyzer(program.getTypeChecker(), reflectionHost, rootDirs, isCore);
132
+ var switchMarkerAnalyzer = new switch_marker_analyzer_1.SwitchMarkerAnalyzer(reflectionHost);
133
+ return {
134
+ decorationAnalyses: decorationAnalyzer.analyzeProgram(program),
135
+ switchMarkerAnalyses: switchMarkerAnalyzer.analyzeProgram(program),
136
+ };
187
137
  };
188
138
  Transformer.prototype.writeFile = function (file) {
189
139
  shelljs_1.mkdir('-p', canonical_path_1.dirname(file.path));
@@ -231,4 +181,4 @@
231
181
  }());
232
182
  exports.Transformer = Transformer;
233
183
  });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25nY2Mvc3JjL3BhY2thZ2VzL3RyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILGlEQUEwRDtJQUMxRCx5QkFBbUY7SUFDbkYsbUNBQWtDO0lBQ2xDLCtCQUFpQztJQUVqQyx1RUFBNEQ7SUFDNUQsd0VBQW1EO0lBQ25ELDBFQUEyQztJQUMzQyxpRkFBNkM7SUFDN0MscUZBQTJEO0lBQzNELCtFQUFxRDtJQUNyRCx1RkFBNkQ7SUFFN0QsNEZBQTREO0lBQzVELHNGQUFzRDtJQUV0RCxrR0FBOEQ7SUFDOUQsNEZBQXdEO0lBR3hELHlGQUFnRTtJQUdoRTs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0lBQ0g7UUFDRSxxQkFBb0IsVUFBa0IsRUFBVSxVQUFrQjtZQUE5QyxlQUFVLEdBQVYsVUFBVSxDQUFRO1lBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUFHLENBQUM7UUFFdEUsK0JBQVMsR0FBVCxVQUFVLFVBQXNCLEVBQUUsTUFBd0I7WUFBMUQsaUJBZ0VDO1lBL0RDLElBQUksOEJBQWUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU87YUFDUjtZQUVELElBQU0sV0FBVyxHQUFlLEVBQUUsQ0FBQztZQUNuQyxJQUFNLE9BQU8sR0FBdUI7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJO2dCQUNiLG9CQUFvQixFQUFFLFFBQVE7Z0JBQzlCLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSTthQUN6QixDQUFDO1lBRUYsK0NBQStDO1lBQy9DLGdGQUFnRjtZQUNoRixJQUFNLElBQUksR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsSUFBSSxRQUFRLEdBQXVCLFNBQVMs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Qyx3QkFBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQzs7Z0JBRVgsS0FBMkIsSUFBQSxtQkFBQSxpQkFBQSxjQUFjLENBQUEsOENBQUEsMEVBQUU7b0JBQXRDLElBQU0sWUFBWSwyQkFBQTtvQkFDckIsSUFBTSxtQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsd0JBQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztvQkFDbkYsSUFBSSxtQkFBaUIsRUFBRTt3QkFDckIsT0FBTyxtQkFBaUIsQ0FBQztxQkFDMUI7aUJBQ0Y7Ozs7Ozs7OztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNILGtCQUFDO0lBQUQsQ0FBQyxBQXZNRCxJQXVNQztJQXZNWSxrQ0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7ZGlybmFtZSwgcmVsYXRpdmUsIHJlc29sdmV9IGZyb20gJ2Nhbm9uaWNhbC1wYXRoJztcbmltcG9ydCB7ZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkRmlsZVN5bmMsIHJlYWRkaXJTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge21rZGlyLCBtdn0gZnJvbSAnc2hlbGxqcyc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtEdHNGaWxlVHJhbnNmb3JtZXJ9IGZyb20gJy4uLy4uLy4uL25ndHNjL3RyYW5zZm9ybSc7XG5pbXBvcnQge0FuYWx5emVkRmlsZSwgQW5hbHl6ZXJ9IGZyb20gJy4uL2FuYWx5emVyJztcbmltcG9ydCB7SU1QT1JUX1BSRUZJWH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7RHRzTWFwcGVyfSBmcm9tICcuLi9ob3N0L2R0c19tYXBwZXInO1xuaW1wb3J0IHtFc20yMDE1UmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uL2hvc3QvZXNtMjAxNV9ob3N0JztcbmltcG9ydCB7RXNtNVJlZmxlY3Rpb25Ib3N0fSBmcm9tICcuLi9ob3N0L2VzbTVfaG9zdCc7XG5pbXBvcnQge0Zlc20yMDE1UmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uL2hvc3QvZmVzbTIwMTVfaG9zdCc7XG5pbXBvcnQge05nY2NSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi4vaG9zdC9uZ2NjX2hvc3QnO1xuaW1wb3J0IHtFc20yMDE1RmlsZVBhcnNlcn0gZnJvbSAnLi4vcGFyc2luZy9lc20yMDE1X3BhcnNlcic7XG5pbXBvcnQge0VzbTVGaWxlUGFyc2VyfSBmcm9tICcuLi9wYXJzaW5nL2VzbTVfcGFyc2VyJztcbmltcG9ydCB7RmlsZVBhcnNlcn0gZnJvbSAnLi4vcGFyc2luZy9maWxlX3BhcnNlcic7XG5pbXBvcnQge0VzbTIwMTVSZW5kZXJlcn0gZnJvbSAnLi4vcmVuZGVyaW5nL2VzbTIwMTVfcmVuZGVyZXInO1xuaW1wb3J0IHtFc201UmVuZGVyZXJ9IGZyb20gJy4uL3JlbmRlcmluZy9lc201X3JlbmRlcmVyJztcbmltcG9ydCB7RmlsZUluZm8sIFJlbmRlcmVyfSBmcm9tICcuLi9yZW5kZXJpbmcvcmVuZGVyZXInO1xuXG5pbXBvcnQge2NoZWNrTWFya2VyRmlsZSwgd3JpdGVNYXJrZXJGaWxlfSBmcm9tICcuL2J1aWxkX21hcmtlcic7XG5pbXBvcnQge0VudHJ5UG9pbnQsIEVudHJ5UG9pbnRGb3JtYXR9IGZyb20gJy4vZW50cnlfcG9pbnQnO1xuXG4vKipcbiAqIEEgUGFja2FnZSBpcyBzdG9yZWQgaW4gYSBkaXJlY3Rvcnkgb24gZGlzayBhbmQgdGhhdCBkaXJlY3RvcnkgY2FuIGNvbnRhaW4gb25lIG9yIG1vcmUgcGFja2FnZVxuICogZm9ybWF0cyAtIGUuZy4gZmVzbTIwMTUsIFVNRCwgZXRjLiBBZGRpdGlvbmFsbHksIGVhY2ggcGFja2FnZSBwcm92aWRlcyB0eXBpbmdzIChgLmQudHNgIGZpbGVzKS5cbiAqXG4gKiBFYWNoIG9mIHRoZXNlIGZvcm1hdHMgZXhwb3NlcyBvbmUgb3IgbW9yZSBlbnRyeSBwb2ludHMsIHdoaWNoIGFyZSBzb3VyY2UgZmlsZXMgdGhhdCBuZWVkIHRvIGJlXG4gKiBwYXJzZWQgdG8gaWRlbnRpZnkgdGhlIGRlY29yYXRlZCBleHBvcnRlZCBjbGFzc2VzIHRoYXQgbmVlZCB0byBiZSBhbmFseXplZCBhbmQgY29tcGlsZWQgYnkgb25lIG9yXG4gKiBtb3JlIGBEZWNvcmF0b3JIYW5kbGVyYCBvYmplY3RzLlxuICpcbiAqIEVhY2ggZW50cnkgcG9pbnQgdG8gYSBwYWNrYWdlIGlzIGlkZW50aWZpZWQgYnkgYSBgU291cmNlRmlsZWAgdGhhdCBjYW4gYmUgcGFyc2VkIGFuZCBhbmFseXplZCB0b1xuICogaWRlbnRpZnkgY2xhc3NlcyB0aGF0IG5lZWQgdG8gYmUgdHJhbnNmb3JtZWQ7IGFuZCB0aGVuIGZpbmFsbHkgcmVuZGVyZWQgYW5kIHdyaXR0ZW4gdG8gZGlzay5cbiAqIFRoZSBhY3R1YWwgZmlsZSB3aGljaCBuZWVkcyB0byBiZSB0cmFuc2Zvcm1lZCBkZXBlbmRzIHVwb24gdGhlIHBhY2thZ2UgZm9ybWF0LlxuICpcbiAqIEFsb25nIHdpdGggdGhlIHNvdXJjZSBmaWxlcywgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIG1hcHMgKGVpdGhlciBpbmxpbmUgb3IgZXh0ZXJuYWwpIGFuZFxuICogYC5kLnRzYCBmaWxlcyBhcmUgdHJhbnNmb3JtZWQgYWNjb3JkaW5nbHkuXG4gKlxuICogLSBGbGF0IGZpbGUgcGFja2FnZXMgaGF2ZSBhbGwgdGhlIGNsYXNzZXMgaW4gYSBzaW5nbGUgZmlsZS5cbiAqIC0gT3RoZXIgcGFja2FnZXMgbWF5IHJlLWV4cG9ydCBjbGFzc2VzIGZyb20gb3RoZXIgbm9uLWVudHJ5IHBvaW50IGZpbGVzLlxuICogLSBTb21lIGZvcm1hdHMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgXCJtb2R1bGVzXCIgaW4gYSBzaW5nbGUgZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybWVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzb3VyY2VQYXRoOiBzdHJpbmcsIHByaXZhdGUgdGFyZ2V0UGF0aDogc3RyaW5nKSB7fVxuXG4gIHRyYW5zZm9ybShlbnRyeVBvaW50OiBFbnRyeVBvaW50LCBmb3JtYXQ6IEVudHJ5UG9pbnRGb3JtYXQpOiB2b2lkIHtcbiAgICBpZiAoY2hlY2tNYXJrZXJGaWxlKGVudHJ5UG9pbnQsIGZvcm1hdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRGaWxlczogRmlsZUluZm9bXSA9IFtdO1xuICAgIGNvbnN0IG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyA9IHtcbiAgICAgIGFsbG93SnM6IHRydWUsXG4gICAgICBtYXhOb2RlTW9kdWxlSnNEZXB0aDogSW5maW5pdHksXG4gICAgICByb290RGlyOiBlbnRyeVBvaW50LnBhdGgsXG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSB0aGUgVFMgcHJvZ3JhbSBhbmQgbmVjZXNzYXJ5IGhlbHBlcnMuXG4gICAgLy8gVE9ETyA6IGNyZWF0ZSBhIGN1c3RvbSBjb21waWxlciBob3N0IHRoYXQgcmVhZHMgZnJvbSAuYmFrIGZpbGVzIGlmIGF2YWlsYWJsZS5cbiAgICBjb25zdCBob3N0ID0gdHMuY3JlYXRlQ29tcGlsZXJIb3N0KG9wdGlvbnMpO1xuICAgIGxldCByb290RGlyczogc3RyaW5nW118dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChvcHRpb25zLnJvb3REaXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJvb3REaXJzID0gb3B0aW9ucy5yb290RGlycztcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucm9vdERpciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByb290RGlycyA9IFtvcHRpb25zLnJvb3REaXJdO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290RGlycyA9IFtob3N0LmdldEN1cnJlbnREaXJlY3RvcnkoKV07XG4gICAgfVxuICAgIGNvbnN0IGVudHJ5UG9pbnRGaWxlUGF0aCA9IGVudHJ5UG9pbnRbZm9ybWF0XTtcbiAgICBpZiAoIWVudHJ5UG9pbnRGaWxlUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBNaXNzaW5nIGVudHJ5IHBvaW50IGZpbGUgZm9yIGZvcm1hdCwgJHtmb3JtYXR9LCBpbiBwYWNrYWdlLCAke2VudHJ5UG9pbnQucGF0aH0uYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzQ29yZSA9IGVudHJ5UG9pbnQubmFtZSA9PT0gJ0Bhbmd1bGFyL2NvcmUnO1xuICAgIGNvbnN0IHIzU3ltYm9sc1BhdGggPSBpc0NvcmUgPyB0aGlzLmZpbmRSM1N5bWJvbHNQYXRoKGRpcm5hbWUoZW50cnlQb2ludEZpbGVQYXRoKSkgOiBudWxsO1xuICAgIGNvbnN0IHJvb3RQYXRocyA9IHIzU3ltYm9sc1BhdGggPyBbZW50cnlQb2ludEZpbGVQYXRoLCByM1N5bWJvbHNQYXRoXSA6IFtlbnRyeVBvaW50RmlsZVBhdGhdO1xuICAgIGNvbnN0IHBhY2thZ2VQcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShyb290UGF0aHMsIG9wdGlvbnMsIGhvc3QpO1xuICAgIGNvbnN0IHR5cGVDaGVja2VyID0gcGFja2FnZVByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgICBjb25zdCBkdHNNYXBwZXIgPSBuZXcgRHRzTWFwcGVyKGRpcm5hbWUoZW50cnlQb2ludEZpbGVQYXRoKSwgZGlybmFtZShlbnRyeVBvaW50LnR5cGluZ3MpKTtcbiAgICBjb25zdCByZWZsZWN0aW9uSG9zdCA9IHRoaXMuZ2V0SG9zdChpc0NvcmUsIGZvcm1hdCwgcGFja2FnZVByb2dyYW0sIGR0c01hcHBlcik7XG4gICAgY29uc3QgcjNTeW1ib2xzRmlsZSA9IHIzU3ltYm9sc1BhdGggJiYgcGFja2FnZVByb2dyYW0uZ2V0U291cmNlRmlsZShyM1N5bWJvbHNQYXRoKSB8fCBudWxsO1xuXG4gICAgY29uc3QgcGFyc2VyID0gdGhpcy5nZXRGaWxlUGFyc2VyKGZvcm1hdCwgcGFja2FnZVByb2dyYW0sIHJlZmxlY3Rpb25Ib3N0KTtcbiAgICBjb25zdCBhbmFseXplciA9IG5ldyBBbmFseXplcih0eXBlQ2hlY2tlciwgcmVmbGVjdGlvbkhvc3QsIHJvb3REaXJzLCBpc0NvcmUpO1xuICAgIGNvbnN0IHJlbmRlcmVyID1cbiAgICAgICAgdGhpcy5nZXRSZW5kZXJlcihmb3JtYXQsIHBhY2thZ2VQcm9ncmFtLCByZWZsZWN0aW9uSG9zdCwgaXNDb3JlLCByM1N5bWJvbHNGaWxlKTtcblxuICAgIC8vIFBhcnNlIGFuZCBhbmFseXplIHRoZSBmaWxlcy5cbiAgICBjb25zdCBlbnRyeVBvaW50RmlsZSA9IHBhY2thZ2VQcm9ncmFtLmdldFNvdXJjZUZpbGUoZW50cnlQb2ludEZpbGVQYXRoKSAhO1xuICAgIGNvbnN0IHBhcnNlZEZpbGVzID0gcGFyc2VyLnBhcnNlRmlsZShlbnRyeVBvaW50RmlsZSk7XG4gICAgY29uc3QgYW5hbHl6ZWRGaWxlcyA9IHBhcnNlZEZpbGVzLm1hcChwYXJzZWRGaWxlID0+IGFuYWx5emVyLmFuYWx5emVGaWxlKHBhcnNlZEZpbGUpKTtcblxuICAgIC8vIFRyYW5zZm9ybSB0aGUgc291cmNlIGZpbGVzIGFuZCBzb3VyY2UgbWFwcy5cbiAgICBvdXRwdXRGaWxlcy5wdXNoKFxuICAgICAgICAuLi50aGlzLnRyYW5zZm9ybVNvdXJjZUZpbGVzKGFuYWx5emVkRmlsZXMsIHRoaXMuc291cmNlUGF0aCwgdGhpcy50YXJnZXRQYXRoLCByZW5kZXJlcikpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBgLmQudHNgIGZpbGVzIChpZiBuZWNlc3NhcnkpLlxuICAgIC8vIFRPRE8oZ2thbHBhayk6IFdoYXQgYWJvdXQgYC5kLnRzYCBzb3VyY2UgbWFwcz8gKFNlZVxuICAgIC8vIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL3JlbGVhc2Utbm90ZXMvdHlwZXNjcmlwdC0yLTkuaHRtbCNuZXctLS1kZWNsYXJhdGlvbm1hcC4pXG4gICAgaWYgKGZvcm1hdCA9PT0gJ2VzbTIwMTUnKSB7XG4gICAgICBvdXRwdXRGaWxlcy5wdXNoKFxuICAgICAgICAgIC4uLnRoaXMudHJhbnNmb3JtRHRzRmlsZXMoYW5hbHl6ZWRGaWxlcywgdGhpcy5zb3VyY2VQYXRoLCB0aGlzLnRhcmdldFBhdGgsIGR0c01hcHBlcikpO1xuICAgIH1cblxuICAgIC8vIFdyaXRlIG91dCBhbGwgdGhlIHRyYW5zZm9ybWVkIGZpbGVzLlxuICAgIG91dHB1dEZpbGVzLmZvckVhY2goZmlsZSA9PiB0aGlzLndyaXRlRmlsZShmaWxlKSk7XG5cbiAgICAvLyBXcml0ZSB0aGUgYnVpbHQtd2l0aC1uZ2NjIG1hcmtlclxuICAgIHdyaXRlTWFya2VyRmlsZShlbnRyeVBvaW50LCBmb3JtYXQpO1xuICB9XG5cbiAgZ2V0SG9zdChpc0NvcmU6IGJvb2xlYW4sIGZvcm1hdDogc3RyaW5nLCBwcm9ncmFtOiB0cy5Qcm9ncmFtLCBkdHNNYXBwZXI6IER0c01hcHBlcik6XG4gICAgICBOZ2NjUmVmbGVjdGlvbkhvc3Qge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdlc20yMDE1JzpcbiAgICAgICAgcmV0dXJuIG5ldyBFc20yMDE1UmVmbGVjdGlvbkhvc3QoaXNDb3JlLCBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCksIGR0c01hcHBlcik7XG4gICAgICBjYXNlICdmZXNtMjAxNSc6XG4gICAgICAgIHJldHVybiBuZXcgRmVzbTIwMTVSZWZsZWN0aW9uSG9zdChpc0NvcmUsIHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKSk7XG4gICAgICBjYXNlICdlc201JzpcbiAgICAgIGNhc2UgJ2Zlc201JzpcbiAgICAgICAgcmV0dXJuIG5ldyBFc201UmVmbGVjdGlvbkhvc3QoaXNDb3JlLCBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWxlY3Rpb24gaG9zdCBmb3IgXCIke2Zvcm1hdH1cIiBub3QgeWV0IGltcGxlbWVudGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpbGVQYXJzZXIoZm9ybWF0OiBzdHJpbmcsIHByb2dyYW06IHRzLlByb2dyYW0sIGhvc3Q6IE5nY2NSZWZsZWN0aW9uSG9zdCk6IEZpbGVQYXJzZXIge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdlc20yMDE1JzpcbiAgICAgIGNhc2UgJ2Zlc20yMDE1JzpcbiAgICAgICAgcmV0dXJuIG5ldyBFc20yMDE1RmlsZVBhcnNlcihwcm9ncmFtLCBob3N0KTtcbiAgICAgIGNhc2UgJ2VzbTUnOlxuICAgICAgY2FzZSAnZmVzbTUnOlxuICAgICAgICByZXR1cm4gbmV3IEVzbTVGaWxlUGFyc2VyKHByb2dyYW0sIGhvc3QpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIHBhcnNlciBmb3IgXCIke2Zvcm1hdH1cIiBub3QgeWV0IGltcGxlbWVudGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlbmRlcmVyKFxuICAgICAgZm9ybWF0OiBzdHJpbmcsIHByb2dyYW06IHRzLlByb2dyYW0sIGhvc3Q6IE5nY2NSZWZsZWN0aW9uSG9zdCwgaXNDb3JlOiBib29sZWFuLFxuICAgICAgcmV3cml0ZUNvcmVJbXBvcnRzVG86IHRzLlNvdXJjZUZpbGV8bnVsbCk6IFJlbmRlcmVyIHtcbiAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgY2FzZSAnZXNtMjAxNSc6XG4gICAgICBjYXNlICdmZXNtMjAxNSc6XG4gICAgICAgIHJldHVybiBuZXcgRXNtMjAxNVJlbmRlcmVyKGhvc3QsIGlzQ29yZSwgcmV3cml0ZUNvcmVJbXBvcnRzVG8pO1xuICAgICAgY2FzZSAnZXNtNSc6XG4gICAgICBjYXNlICdmZXNtNSc6XG4gICAgICAgIHJldHVybiBuZXcgRXNtNVJlbmRlcmVyKGhvc3QsIGlzQ29yZSwgcmV3cml0ZUNvcmVJbXBvcnRzVG8pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZW5kZXJlciBmb3IgXCIke2Zvcm1hdH1cIiBub3QgeWV0IGltcGxlbWVudGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zZm9ybUR0c0ZpbGVzKFxuICAgICAgYW5hbHl6ZWRGaWxlczogQW5hbHl6ZWRGaWxlW10sIHNvdXJjZU5vZGVNb2R1bGVzOiBzdHJpbmcsIHRhcmdldE5vZGVNb2R1bGVzOiBzdHJpbmcsXG4gICAgICBkdHNNYXBwZXI6IER0c01hcHBlcik6IEZpbGVJbmZvW10ge1xuICAgIGNvbnN0IG91dHB1dEZpbGVzOiBGaWxlSW5mb1tdID0gW107XG5cbiAgICBhbmFseXplZEZpbGVzLmZvckVhY2goYW5hbHl6ZWRGaWxlID0+IHtcbiAgICAgIC8vIENyZWF0ZSBhIGBEdHNGaWxlVHJhbnNmb3JtZXJgIGZvciB0aGUgc291cmNlIGZpbGUgYW5kIHJlY29yZCB0aGUgZ2VuZXJhdGVkIGZpZWxkcywgd2hpY2hcbiAgICAgIC8vIHdpbGwgYWxsb3cgdGhlIGNvcnJlc3BvbmRpbmcgYC5kLnRzYCBmaWxlIHRvIGJlIHRyYW5zZm9ybWVkIGxhdGVyLlxuICAgICAgY29uc3QgZHRzVHJhbnNmb3JtZXIgPSBuZXcgRHRzRmlsZVRyYW5zZm9ybWVyKG51bGwsIElNUE9SVF9QUkVGSVgpO1xuICAgICAgYW5hbHl6ZWRGaWxlLmFuYWx5emVkQ2xhc3Nlcy5mb3JFYWNoKFxuICAgICAgICAgIGFuYWx5emVkQ2xhc3MgPT5cbiAgICAgICAgICAgICAgZHRzVHJhbnNmb3JtZXIucmVjb3JkU3RhdGljRmllbGQoYW5hbHl6ZWRDbGFzcy5uYW1lLCBhbmFseXplZENsYXNzLmNvbXBpbGF0aW9uKSk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYC5kLnRzYCBmaWxlLlxuICAgICAgY29uc3Qgc291cmNlRmlsZU5hbWUgPSBhbmFseXplZEZpbGUuc291cmNlRmlsZS5maWxlTmFtZTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRHRzRmlsZU5hbWUgPSBkdHNNYXBwZXIuZ2V0RHRzRmlsZU5hbWVGb3Ioc291cmNlRmlsZU5hbWUpO1xuICAgICAgY29uc3Qgb3JpZ2luYWxEdHNDb250ZW50cyA9IHJlYWRGaWxlU3luYyhvcmlnaW5hbER0c0ZpbGVOYW1lLCAndXRmOCcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gdGhlIGAuZC50c2AgZmlsZSBiYXNlZCBvbiB0aGUgcmVjb3JkZWQgc291cmNlIGZpbGUgY2hhbmdlcy5cbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkRHRzRmlsZU5hbWUgPVxuICAgICAgICAgIHJlc29sdmUodGFyZ2V0Tm9kZU1vZHVsZXMsIHJlbGF0aXZlKHNvdXJjZU5vZGVNb2R1bGVzLCBvcmlnaW5hbER0c0ZpbGVOYW1lKSk7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZER0c0NvbnRlbnRzID0gZHRzVHJhbnNmb3JtZXIudHJhbnNmb3JtKG9yaWdpbmFsRHRzQ29udGVudHMsIHNvdXJjZUZpbGVOYW1lKTtcblxuICAgICAgLy8gQWRkIHRoZSB0cmFuc2Zvcm1lZCBgLmQudHNgIGZpbGUgdG8gdGhlIGxpc3Qgb2Ygb3V0cHV0IGZpbGVzLlxuICAgICAgb3V0cHV0RmlsZXMucHVzaCh7cGF0aDogdHJhbnNmb3JtZWREdHNGaWxlTmFtZSwgY29udGVudHM6IHRyYW5zZm9ybWVkRHRzQ29udGVudHN9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXRGaWxlcztcbiAgfVxuXG4gIHRyYW5zZm9ybVNvdXJjZUZpbGVzKFxuICAgICAgYW5hbHl6ZWRGaWxlczogQW5hbHl6ZWRGaWxlW10sIHNvdXJjZU5vZGVNb2R1bGVzOiBzdHJpbmcsIHRhcmdldE5vZGVNb2R1bGVzOiBzdHJpbmcsXG4gICAgICByZW5kZXJlcjogUmVuZGVyZXIpOiBGaWxlSW5mb1tdIHtcbiAgICBjb25zdCBvdXRwdXRGaWxlczogRmlsZUluZm9bXSA9IFtdO1xuXG4gICAgYW5hbHl6ZWRGaWxlcy5mb3JFYWNoKGFuYWx5emVkRmlsZSA9PiB7XG4gICAgICAvLyBUcmFuc2Zvcm0gdGhlIHNvdXJjZSBmaWxlIGJhc2VkIG9uIHRoZSByZWNvcmRlZCBjaGFuZ2VzLlxuICAgICAgY29uc3QgdGFyZ2V0UGF0aCA9XG4gICAgICAgICAgcmVzb2x2ZSh0YXJnZXROb2RlTW9kdWxlcywgcmVsYXRpdmUoc291cmNlTm9kZU1vZHVsZXMsIGFuYWx5emVkRmlsZS5zb3VyY2VGaWxlLmZpbGVOYW1lKSk7XG4gICAgICBjb25zdCB7c291cmNlLCBtYXB9ID0gcmVuZGVyZXIucmVuZGVyRmlsZShhbmFseXplZEZpbGUsIHRhcmdldFBhdGgpO1xuXG4gICAgICAvLyBBZGQgdGhlIHRyYW5zZm9ybWVkIGZpbGUgKGFuZCBzb3VyY2UgbWFwLCBpZiBhdmFpbGFibGUpIHRvIHRoZSBsaXN0IG9mIG91dHB1dCBmaWxlcy5cbiAgICAgIG91dHB1dEZpbGVzLnB1c2goc291cmNlKTtcbiAgICAgIGlmIChtYXApIHtcbiAgICAgICAgb3V0cHV0RmlsZXMucHVzaChtYXApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG91dHB1dEZpbGVzO1xuICB9XG5cbiAgd3JpdGVGaWxlKGZpbGU6IEZpbGVJbmZvKTogdm9pZCB7XG4gICAgbWtkaXIoJy1wJywgZGlybmFtZShmaWxlLnBhdGgpKTtcbiAgICBjb25zdCBiYWNrUGF0aCA9IGZpbGUucGF0aCArICcuYmFrJztcbiAgICBpZiAoZXhpc3RzU3luYyhmaWxlLnBhdGgpICYmICFleGlzdHNTeW5jKGJhY2tQYXRoKSkge1xuICAgICAgbXYoZmlsZS5wYXRoLCBiYWNrUGF0aCk7XG4gICAgfVxuICAgIHdyaXRlRmlsZVN5bmMoZmlsZS5wYXRoLCBmaWxlLmNvbnRlbnRzLCAndXRmOCcpO1xuICB9XG5cbiAgZmluZFIzU3ltYm9sc1BhdGgoZGlyZWN0b3J5OiBzdHJpbmcpOiBzdHJpbmd8bnVsbCB7XG4gICAgY29uc3QgcjNTeW1ib2xzRmlsZVBhdGggPSByZXNvbHZlKGRpcmVjdG9yeSwgJ3IzX3N5bWJvbHMuanMnKTtcbiAgICBpZiAoZXhpc3RzU3luYyhyM1N5bWJvbHNGaWxlUGF0aCkpIHtcbiAgICAgIHJldHVybiByM1N5bWJvbHNGaWxlUGF0aDtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJEaXJlY3RvcmllcyA9XG4gICAgICAgIHJlYWRkaXJTeW5jKGRpcmVjdG9yeSlcbiAgICAgICAgICAgIC8vIE5vdCBpbnRlcmVzdGVkIGluIGhpZGRlbiBmaWxlc1xuICAgICAgICAgICAgLmZpbHRlcihwID0+ICFwLnN0YXJ0c1dpdGgoJy4nKSlcbiAgICAgICAgICAgIC8vIElnbm9yZSBub2RlX21vZHVsZXNcbiAgICAgICAgICAgIC5maWx0ZXIocCA9PiBwICE9PSAnbm9kZV9tb2R1bGVzJylcbiAgICAgICAgICAgIC8vIE9ubHkgaW50ZXJlc3RlZCBpbiBkaXJlY3RvcmllcyAoYW5kIG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90IHN5bWxpbmtzKVxuICAgICAgICAgICAgLmZpbHRlcihwID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdCA9IGxzdGF0U3luYyhyZXNvbHZlKGRpcmVjdG9yeSwgcCkpO1xuICAgICAgICAgICAgICByZXR1cm4gc3RhdC5pc0RpcmVjdG9yeSgpICYmICFzdGF0LmlzU3ltYm9saWNMaW5rKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgc3ViRGlyZWN0b3J5IG9mIHN1YkRpcmVjdG9yaWVzKSB7XG4gICAgICBjb25zdCByM1N5bWJvbHNGaWxlUGF0aCA9IHRoaXMuZmluZFIzU3ltYm9sc1BhdGgocmVzb2x2ZShkaXJlY3RvcnksIHN1YkRpcmVjdG9yeSkpO1xuICAgICAgaWYgKHIzU3ltYm9sc0ZpbGVQYXRoKSB7XG4gICAgICAgIHJldHVybiByM1N5bWJvbHNGaWxlUGF0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25nY2Mvc3JjL3BhY2thZ2VzL3RyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILGlEQUFnRDtJQUNoRCx5QkFBcUU7SUFDckUsbUNBQWtDO0lBQ2xDLCtCQUFpQztJQUVqQyx1R0FBbUU7SUFDbkUsNkdBQXdFO0lBQ3hFLGlGQUE2QztJQUM3QyxxRkFBMkQ7SUFDM0QsK0VBQXFEO0lBQ3JELHVGQUE2RDtJQUU3RCxrR0FBOEQ7SUFDOUQsNEZBQXdEO0lBQ3hELG9HQUFnRTtJQUdoRSx5RkFBZ0U7SUFHaEU7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQWtCRztJQUNIO1FBQ0UscUJBQW9CLFVBQWtCLEVBQVUsVUFBa0I7WUFBOUMsZUFBVSxHQUFWLFVBQVUsQ0FBUTtZQUFVLGVBQVUsR0FBVixVQUFVLENBQVE7UUFBRyxDQUFDO1FBRXRFLCtCQUFTLEdBQVQsVUFBVSxVQUFzQixFQUFFLE1BQXdCO1lBQTFELGlCQTJDQztZQTFDQyxJQUFJLDhCQUFlLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dCQUN2QyxPQUFPO2FBQ1I7WUFFRCxJQUFNLE9BQU8sR0FBdUI7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJO2dCQUNiLG9CQUFvQixFQUFFLFFBQVE7Z0JBQzlCLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSTthQUN6QixDQUFDO1lBRUYsK0NBQStDO1lBQy9DLGdGQUFnRjtZQUNoRixJQUFNLElBQUksR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakQsSUFBTSxrQkFBa0Is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Q3ZFLE1BQU0sQ0FBQyxVQUFBLENBQUM7Z0JBQ1AsSUFBTSxJQUFJLEdBQUcsY0FBUyxDQUFDLHdCQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDOztnQkFFWCxLQUEyQixJQUFBLG1CQUFBLGlCQUFBLGNBQWMsQ0FBQSw4Q0FBQSwwRUFBRTtvQkFBdEMsSUFBTSxZQUFZLDJCQUFBO29CQUNyQixJQUFNLG1CQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBTyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO29CQUNuRixJQUFJLG1CQUFpQixFQUFFO3dCQUNyQixPQUFPLG1CQUFpQixDQUFDO3FCQUMxQjtpQkFDRjs7Ozs7Ozs7O1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0gsa0JBQUM7SUFBRCxDQUFDLEFBNUlELElBNElDO0lBNUlZLGtDQUFXIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtkaXJuYW1lLCByZXNvbHZlfSBmcm9tICdjYW5vbmljYWwtcGF0aCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIGxzdGF0U3luYywgcmVhZGRpclN5bmMsIHdyaXRlRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7bWtkaXIsIG12fSBmcm9tICdzaGVsbGpzJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0RlY29yYXRpb25BbmFseXplcn0gZnJvbSAnLi4vYW5hbHlzaXMvZGVjb3JhdGlvbl9hbmFseXplcic7XG5pbXBvcnQge1N3aXRjaE1hcmtlckFuYWx5emVyfSBmcm9tICcuLi9hbmFseXNpcy9zd2l0Y2hfbWFya2VyX2FuYWx5emVyJztcbmltcG9ydCB7RHRzTWFwcGVyfSBmcm9tICcuLi9ob3N0L2R0c19tYXBwZXInO1xuaW1wb3J0IHtFc20yMDE1UmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uL2hvc3QvZXNtMjAxNV9ob3N0JztcbmltcG9ydCB7RXNtNVJlZmxlY3Rpb25Ib3N0fSBmcm9tICcuLi9ob3N0L2VzbTVfaG9zdCc7XG5pbXBvcnQge0Zlc20yMDE1UmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uL2hvc3QvZmVzbTIwMTVfaG9zdCc7XG5pbXBvcnQge05nY2NSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi4vaG9zdC9uZ2NjX2hvc3QnO1xuaW1wb3J0IHtFc20yMDE1UmVuZGVyZXJ9IGZyb20gJy4uL3JlbmRlcmluZy9lc20yMDE1X3JlbmRlcmVyJztcbmltcG9ydCB7RXNtNVJlbmRlcmVyfSBmcm9tICcuLi9yZW5kZXJpbmcvZXNtNV9yZW5kZXJlcic7XG5pbXBvcnQge0Zlc20yMDE1UmVuZGVyZXJ9IGZyb20gJy4uL3JlbmRlcmluZy9mZXNtMjAxNV9yZW5kZXJlcic7XG5pbXBvcnQge0ZpbGVJbmZvLCBSZW5kZXJlcn0gZnJvbSAnLi4vcmVuZGVyaW5nL3JlbmRlcmVyJztcblxuaW1wb3J0IHtjaGVja01hcmtlckZpbGUsIHdyaXRlTWFya2VyRmlsZX0gZnJvbSAnLi9idWlsZF9tYXJrZXInO1xuaW1wb3J0IHtFbnRyeVBvaW50LCBFbnRyeVBvaW50Rm9ybWF0fSBmcm9tICcuL2VudHJ5X3BvaW50JztcblxuLyoqXG4gKiBBIFBhY2thZ2UgaXMgc3RvcmVkIGluIGEgZGlyZWN0b3J5IG9uIGRpc2sgYW5kIHRoYXQgZGlyZWN0b3J5IGNhbiBjb250YWluIG9uZSBvciBtb3JlIHBhY2thZ2VcbiAqIGZvcm1hdHMgLSBlLmcuIGZlc20yMDE1LCBVTUQsIGV0Yy4gQWRkaXRpb25hbGx5LCBlYWNoIHBhY2thZ2UgcHJvdmlkZXMgdHlwaW5ncyAoYC5kLnRzYCBmaWxlcykuXG4gKlxuICogRWFjaCBvZiB0aGVzZSBmb3JtYXRzIGV4cG9zZXMgb25lIG9yIG1vcmUgZW50cnkgcG9pbnRzLCB3aGljaCBhcmUgc291cmNlIGZpbGVzIHRoYXQgbmVlZCB0byBiZVxuICogcGFyc2VkIHRvIGlkZW50aWZ5IHRoZSBkZWNvcmF0ZWQgZXhwb3J0ZWQgY2xhc3NlcyB0aGF0IG5lZWQgdG8gYmUgYW5hbHl6ZWQgYW5kIGNvbXBpbGVkIGJ5IG9uZSBvclxuICogbW9yZSBgRGVjb3JhdG9ySGFuZGxlcmAgb2JqZWN0cy5cbiAqXG4gKiBFYWNoIGVudHJ5IHBvaW50IHRvIGEgcGFja2FnZSBpcyBpZGVudGlmaWVkIGJ5IGEgYFNvdXJjZUZpbGVgIHRoYXQgY2FuIGJlIHBhcnNlZCBhbmQgYW5hbHl6ZWQgdG9cbiAqIGlkZW50aWZ5IGNsYXNzZXMgdGhhdCBuZWVkIHRvIGJlIHRyYW5zZm9ybWVkOyBhbmQgdGhlbiBmaW5hbGx5IHJlbmRlcmVkIGFuZCB3cml0dGVuIHRvIGRpc2suXG4gKiBUaGUgYWN0dWFsIGZpbGUgd2hpY2ggbmVlZHMgdG8gYmUgdHJhbnNmb3JtZWQgZGVwZW5kcyB1cG9uIHRoZSBwYWNrYWdlIGZvcm1hdC5cbiAqXG4gKiBBbG9uZyB3aXRoIHRoZSBzb3VyY2UgZmlsZXMsIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBtYXBzIChlaXRoZXIgaW5saW5lIG9yIGV4dGVybmFsKSBhbmRcbiAqIGAuZC50c2AgZmlsZXMgYXJlIHRyYW5zZm9ybWVkIGFjY29yZGluZ2x5LlxuICpcbiAqIC0gRmxhdCBmaWxlIHBhY2thZ2VzIGhhdmUgYWxsIHRoZSBjbGFzc2VzIGluIGEgc2luZ2xlIGZpbGUuXG4gKiAtIE90aGVyIHBhY2thZ2VzIG1heSByZS1leHBvcnQgY2xhc3NlcyBmcm9tIG90aGVyIG5vbi1lbnRyeSBwb2ludCBmaWxlcy5cbiAqIC0gU29tZSBmb3JtYXRzIG1heSBjb250YWluIG11bHRpcGxlIFwibW9kdWxlc1wiIGluIGEgc2luZ2xlIGZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2Zvcm1lciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc291cmNlUGF0aDogc3RyaW5nLCBwcml2YXRlIHRhcmdldFBhdGg6IHN0cmluZykge31cblxuICB0cmFuc2Zvcm0oZW50cnlQb2ludDogRW50cnlQb2ludCwgZm9ybWF0OiBFbnRyeVBvaW50Rm9ybWF0KTogdm9pZCB7XG4gICAgaWYgKGNoZWNrTWFya2VyRmlsZShlbnRyeVBvaW50LCBmb3JtYXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zID0ge1xuICAgICAgYWxsb3dKczogdHJ1ZSxcbiAgICAgIG1heE5vZGVNb2R1bGVKc0RlcHRoOiBJbmZpbml0eSxcbiAgICAgIHJvb3REaXI6IGVudHJ5UG9pbnQucGF0aCxcbiAgICB9O1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBUUyBwcm9ncmFtIGFuZCBuZWNlc3NhcnkgaGVscGVycy5cbiAgICAvLyBUT0RPIDogY3JlYXRlIGEgY3VzdG9tIGNvbXBpbGVyIGhvc3QgdGhhdCByZWFkcyBmcm9tIC5iYWsgZmlsZXMgaWYgYXZhaWxhYmxlLlxuICAgIGNvbnN0IGhvc3QgPSB0cy5jcmVhdGVDb21waWxlckhvc3Qob3B0aW9ucyk7XG4gICAgY29uc3Qgcm9vdERpcnMgPSB0aGlzLmdldFJvb3REaXJzKGhvc3QsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGVudHJ5UG9pbnRGaWxlUGF0aCA9IGVudHJ5UG9pbnRbZm9ybWF0XTtcbiAgICBpZiAoIWVudHJ5UG9pbnRGaWxlUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBNaXNzaW5nIGVudHJ5IHBvaW50IGZpbGUgZm9yIGZvcm1hdCwgJHtmb3JtYXR9LCBpbiBwYWNrYWdlLCAke2VudHJ5UG9pbnQucGF0aH0uYCk7XG4gICAgfVxuICAgIGNvbnN0IGlzQ29yZSA9IGVudHJ5UG9pbnQubmFtZSA9PT0gJ0Bhbmd1bGFyL2NvcmUnO1xuICAgIGNvbnN0IHIzU3ltYm9sc1BhdGggPSBpc0NvcmUgPyB0aGlzLmZpbmRSM1N5bWJvbHNQYXRoKGRpcm5hbWUoZW50cnlQb2ludEZpbGVQYXRoKSkgOiBudWxsO1xuICAgIGNvbnN0IHJvb3RQYXRocyA9IHIzU3ltYm9sc1BhdGggPyBbZW50cnlQb2ludEZpbGVQYXRoLCByM1N5bWJvbHNQYXRoXSA6IFtlbnRyeVBvaW50RmlsZVBhdGhdO1xuICAgIGNvbnN0IHBhY2thZ2VQcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbShyb290UGF0aHMsIG9wdGlvbnMsIGhvc3QpO1xuICAgIGNvbnN0IGR0c01hcHBlciA9IG5ldyBEdHNNYXBwZXIoZGlybmFtZShlbnRyeVBvaW50RmlsZVBhdGgpLCBkaXJuYW1lKGVudHJ5UG9pbnQudHlwaW5ncykpO1xuICAgIGNvbnN0IHJlZmxlY3Rpb25Ib3N0ID0gdGhpcy5nZXRIb3N0KGlzQ29yZSwgZm9ybWF0LCBwYWNrYWdlUHJvZ3JhbSwgZHRzTWFwcGVyKTtcbiAgICBjb25zdCByM1N5bWJvbHNGaWxlID0gcjNTeW1ib2xzUGF0aCAmJiBwYWNrYWdlUHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHIzU3ltYm9sc1BhdGgpIHx8IG51bGw7XG5cbiAgICAvLyBQYXJzZSBhbmQgYW5hbHl6ZSB0aGUgZmlsZXMuXG4gICAgY29uc3Qge2RlY29yYXRpb25BbmFseXNlcywgc3dpdGNoTWFya2VyQW5hbHlzZXN9ID1cbiAgICAgICAgdGhpcy5hbmFseXplUHJvZ3JhbShwYWNrYWdlUHJvZ3JhbSwgcmVmbGVjdGlvbkhvc3QsIHJvb3REaXJzLCBpc0NvcmUpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBzb3VyY2UgZmlsZXMgYW5kIHNvdXJjZSBtYXBzLlxuICAgIGNvbnN0IHJlbmRlcmVyID1cbiAgICAgICAgdGhpcy5nZXRSZW5kZXJlcihmb3JtYXQsIHBhY2thZ2VQcm9ncmFtLCByZWZsZWN0aW9uSG9zdCwgaXNDb3JlLCByM1N5bWJvbHNGaWxlLCBkdHNNYXBwZXIpO1xuICAgIGNvbnN0IHJlbmRlcmVkRmlsZXMgPVxuICAgICAgICByZW5kZXJlci5yZW5kZXJQcm9ncmFtKHBhY2thZ2VQcm9ncmFtLCBkZWNvcmF0aW9uQW5hbHlzZXMsIHN3aXRjaE1hcmtlckFuYWx5c2VzKTtcblxuICAgIC8vIFdyaXRlIG91dCBhbGwgdGhlIHRyYW5zZm9ybWVkIGZpbGVzLlxuICAgIHJlbmRlcmVkRmlsZXMuZm9yRWFjaChmaWxlID0+IHRoaXMud3JpdGVGaWxlKGZpbGUpKTtcblxuICAgIC8vIFdyaXRlIHRoZSBidWlsdC13aXRoLW5nY2MgbWFya2VyXG4gICAgd3JpdGVNYXJrZXJGaWxlKGVudHJ5UG9pbnQsIGZvcm1hdCk7XG4gIH1cblxuICBnZXRSb290RGlycyhob3N0OiB0cy5Db21waWxlckhvc3QsIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnJvb3REaXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJvb3REaXJzO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5yb290RGlyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbb3B0aW9ucy5yb290RGlyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtob3N0LmdldEN1cnJlbnREaXJlY3RvcnkoKV07XG4gICAgfVxuICB9XG5cbiAgZ2V0SG9zdChpc0NvcmU6IGJvb2xlYW4sIGZvcm1hdDogc3RyaW5nLCBwcm9ncmFtOiB0cy5Qcm9ncmFtLCBkdHNNYXBwZXI6IER0c01hcHBlcik6XG4gICAgICBOZ2NjUmVmbGVjdGlvbkhvc3Qge1xuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlICdlc20yMDE1JzpcbiAgICAgICAgcmV0dXJuIG5ldyBFc20yMDE1UmVmbGVjdGlvbkhvc3QoaXNDb3JlLCBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCksIGR0c01hcHBlcik7XG4gICAgICBjYXNlICdmZXNtMjAxNSc6XG4gICAgICAgIHJldHVybiBuZXcgRmVzbTIwMTVSZWZsZWN0aW9uSG9zdChpc0NvcmUsIHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKSk7XG4gICAgICBjYXNlICdlc201JzpcbiAgICAgIGNhc2UgJ2Zlc201JzpcbiAgICAgICAgcmV0dXJuIG5ldyBFc201UmVmbGVjdGlvbkhvc3QoaXNDb3JlLCBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZWxlY3Rpb24gaG9zdCBmb3IgXCIke2Zvcm1hdH1cIiBub3QgeWV0IGltcGxlbWVudGVkLmApO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlbmRlcmVyKFxuICAgICAgZm9ybWF0OiBzdHJpbmcsIHByb2dyYW06IHRzLlByb2dyYW0sIGhvc3Q6IE5nY2NSZWZsZWN0aW9uSG9zdCwgaXNDb3JlOiBib29sZWFuLFxuICAgICAgcmV3cml0ZUNvcmVJbXBvcnRzVG86IHRzLlNvdXJjZUZpbGV8bnVsbCwgZHRzTWFwcGVyOiBEdHNNYXBwZXIpOiBSZW5kZXJlciB7XG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ2VzbTIwMTUnOlxuICAgICAgICByZXR1cm4gbmV3IEVzbTIwMTVSZW5kZXJlcihcbiAgICAgICAgICAgIGhvc3QsIGlzQ29yZSwgcmV3cml0ZUNvcmVJbXBvcnRzVG8sIHRoaXMuc291cmNlUGF0aCwgdGhpcy50YXJnZXRQYXRoLCBkdHNNYXBwZXIpO1xuICAgICAgY2FzZSAnZmVzbTIwMTUnOlxuICAgICAgICByZXR1cm4gbmV3IEZlc20yMDE1UmVuZGVyZXIoXG4gICAgICAgICAgICBob3N0LCBpc0NvcmUsIHJld3JpdGVDb3JlSW1wb3J0c1RvLCB0aGlzLnNvdXJjZVBhdGgsIHRoaXMudGFyZ2V0UGF0aCk7XG4gICAgICBjYXNlICdlc201JzpcbiAgICAgIGNhc2UgJ2Zlc201JzpcbiAgICAgICAgcmV0dXJuIG5ldyBFc201UmVuZGVyZXIoXG4gICAgICAgICAgICBob3N0LCBpc0NvcmUsIHJld3JpdGVDb3JlSW1wb3J0c1RvLCB0aGlzLnNvdXJjZVBhdGgsIHRoaXMudGFyZ2V0UGF0aCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlbmRlcmVyIGZvciBcIiR7Zm9ybWF0fVwiIG5vdCB5ZXQgaW1wbGVtZW50ZWQuYCk7XG4gICAgfVxuICB9XG5cbiAgYW5hbHl6ZVByb2dyYW0oXG4gICAgICBwcm9ncmFtOiB0cy5Qcm9ncmFtLCByZWZsZWN0aW9uSG9zdDogTmdjY1JlZmxlY3Rpb25Ib3N0LCByb290RGlyczogc3RyaW5nW10sXG4gICAgICBpc0NvcmU6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBkZWNvcmF0aW9uQW5hbHl6ZXIgPVxuICAgICAgICBuZXcgRGVjb3JhdGlvbkFuYWx5emVyKHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKSwgcmVmbGVjdGlvbkhvc3QsIHJvb3REaXJzLCBpc0NvcmUpO1xuICAgIGNvbnN0IHN3aXRjaE1hcmtlckFuYWx5emVyID0gbmV3IFN3aXRjaE1hcmtlckFuYWx5emVyKHJlZmxlY3Rpb25Ib3N0KTtcbiAgICByZXR1cm4ge1xuICAgICAgZGVjb3JhdGlvbkFuYWx5c2VzOiBkZWNvcmF0aW9uQW5hbHl6ZXIuYW5hbHl6ZVByb2dyYW0ocHJvZ3JhbSksXG4gICAgICBzd2l0Y2hNYXJrZXJBbmFseXNlczogc3dpdGNoTWFya2VyQW5hbHl6ZXIuYW5hbHl6ZVByb2dyYW0ocHJvZ3JhbSksXG4gICAgfTtcbiAgfVxuXG4gIHdyaXRlRmlsZShmaWxlOiBGaWxlSW5mbyk6IHZvaWQge1xuICAgIG1rZGlyKCctcCcsIGRpcm5hbWUoZmlsZS5wYXRoKSk7XG4gICAgY29uc3QgYmFja1BhdGggPSBmaWxlLnBhdGggKyAnLmJhayc7XG4gICAgaWYgKGV4aXN0c1N5bmMoZmlsZS5wYXRoKSAmJiAhZXhpc3RzU3luYyhiYWNrUGF0aCkpIHtcbiAgICAgIG12KGZpbGUucGF0aCwgYmFja1BhdGgpO1xuICAgIH1cbiAgICB3cml0ZUZpbGVTeW5jKGZpbGUucGF0aCwgZmlsZS5jb250ZW50cywgJ3V0ZjgnKTtcbiAgfVxuXG4gIGZpbmRSM1N5bWJvbHNQYXRoKGRpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nfG51bGwge1xuICAgIGNvbnN0IHIzU3ltYm9sc0ZpbGVQYXRoID0gcmVzb2x2ZShkaXJlY3RvcnksICdyM19zeW1ib2xzLmpzJyk7XG4gICAgaWYgKGV4aXN0c1N5bmMocjNTeW1ib2xzRmlsZVBhdGgpKSB7XG4gICAgICByZXR1cm4gcjNTeW1ib2xzRmlsZVBhdGg7XG4gICAgfVxuXG4gICAgY29uc3Qgc3ViRGlyZWN0b3JpZXMgPVxuICAgICAgICByZWFkZGlyU3luYyhkaXJlY3RvcnkpXG4gICAgICAgICAgICAvLyBOb3QgaW50ZXJlc3RlZCBpbiBoaWRkZW4gZmlsZXNcbiAgICAgICAgICAgIC5maWx0ZXIocCA9PiAhcC5zdGFydHNXaXRoKCcuJykpXG4gICAgICAgICAgICAvLyBJZ25vcmUgbm9kZV9tb2R1bGVzXG4gICAgICAgICAgICAuZmlsdGVyKHAgPT4gcCAhPT0gJ25vZGVfbW9kdWxlcycpXG4gICAgICAgICAgICAvLyBPbmx5IGludGVyZXN0ZWQgaW4gZGlyZWN0b3JpZXMgKGFuZCBvbmx5IHRob3NlIHRoYXQgYXJlIG5vdCBzeW1saW5rcylcbiAgICAgICAgICAgIC5maWx0ZXIocCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBsc3RhdFN5bmMocmVzb2x2ZShkaXJlY3RvcnksIHApKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHN0YXQuaXNEaXJlY3RvcnkoKSAmJiAhc3RhdC5pc1N5bWJvbGljTGluaygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IHN1YkRpcmVjdG9yeSBvZiBzdWJEaXJlY3Rvcmllcykge1xuICAgICAgY29uc3QgcjNTeW1ib2xzRmlsZVBhdGggPSB0aGlzLmZpbmRSM1N5bWJvbHNQYXRoKHJlc29sdmUoZGlyZWN0b3J5LCBzdWJEaXJlY3RvcnkpKTtcbiAgICAgIGlmIChyM1N5bWJvbHNGaWxlUGF0aCkge1xuICAgICAgICByZXR1cm4gcjNTeW1ib2xzRmlsZVBhdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -1,31 +1,18 @@
1
1
  /// <amd-module name="@angular/compiler-cli/src/ngcc/src/rendering/esm2015_renderer" />
2
- /**
3
- * @license
4
- * Copyright Google Inc. All Rights Reserved.
5
- *
6
- * Use of this source code is governed by an MIT-style license that can be
7
- * found in the LICENSE file at https://angular.io/license
8
- */
9
2
  import * as ts from 'typescript';
10
- import MagicString from 'magic-string';
11
- import { AnalyzedClass } from '../analyzer';
12
- import { Renderer } from './renderer';
13
- export declare class Esm2015Renderer extends Renderer {
14
- /**
15
- * Add the imports at the top of the file
16
- */
17
- addImports(output: MagicString, imports: {
18
- name: string;
19
- as: string;
20
- }[]): void;
21
- addConstants(output: MagicString, constants: string, file: ts.SourceFile): void;
22
- /**
23
- * Add the definitions to each decorated class
24
- */
25
- addDefinitions(output: MagicString, analyzedClass: AnalyzedClass, definitions: string): void;
26
- /**
27
- * Remove static decorator properties from classes
28
- */
29
- removeDecorators(output: MagicString, decoratorsToRemove: Map<ts.Node, ts.Node[]>): void;
30
- rewriteSwitchableDeclarations(outputText: MagicString, sourceFile: ts.SourceFile): void;
3
+ import { DecorationAnalysis } from '../analysis/decoration_analyzer';
4
+ import { SwitchMarkerAnalysis } from '../analysis/switch_marker_analyzer';
5
+ import { DtsMapper } from '../host/dts_mapper';
6
+ import { NgccReflectionHost } from '../host/ngcc_host';
7
+ import { Fesm2015Renderer } from './fesm2015_renderer';
8
+ import { FileInfo } from './renderer';
9
+ export declare class Esm2015Renderer extends Fesm2015Renderer {
10
+ protected host: NgccReflectionHost;
11
+ protected isCore: boolean;
12
+ protected rewriteCoreImportsTo: ts.SourceFile | null;
13
+ protected sourcePath: string;
14
+ protected targetPath: string;
15
+ protected dtsMapper: DtsMapper;
16
+ constructor(host: NgccReflectionHost, isCore: boolean, rewriteCoreImportsTo: ts.SourceFile | null, sourcePath: string, targetPath: string, dtsMapper: DtsMapper);
17
+ renderFile(sourceFile: ts.SourceFile, decorationAnalysis: DecorationAnalysis | undefined, switchMarkerAnalysis: SwitchMarkerAnalysis | undefined, targetPath: string): FileInfo[];
31
18
  }
@@ -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/src/ngcc/src/rendering/esm2015_renderer", ["require", "exports", "tslib", "typescript", "@angular/compiler-cli/src/ngcc/src/host/ngcc_host", "@angular/compiler-cli/src/ngcc/src/rendering/renderer"], factory);
7
+ define("@angular/compiler-cli/src/ngcc/src/rendering/esm2015_renderer", ["require", "exports", "tslib", "canonical-path", "fs", "@angular/compiler-cli/src/ngtsc/transform", "@angular/compiler-cli/src/ngcc/src/constants", "@angular/compiler-cli/src/ngcc/src/rendering/fesm2015_renderer"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
@@ -17,91 +17,49 @@
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 ts = require("typescript");
21
- var ngcc_host_1 = require("@angular/compiler-cli/src/ngcc/src/host/ngcc_host");
22
- var renderer_1 = require("@angular/compiler-cli/src/ngcc/src/rendering/renderer");
20
+ var canonical_path_1 = require("canonical-path");
21
+ var fs_1 = require("fs");
22
+ var transform_1 = require("@angular/compiler-cli/src/ngtsc/transform");
23
+ var constants_1 = require("@angular/compiler-cli/src/ngcc/src/constants");
24
+ var fesm2015_renderer_1 = require("@angular/compiler-cli/src/ngcc/src/rendering/fesm2015_renderer");
23
25
  var Esm2015Renderer = /** @class */ (function (_super) {
24
26
  tslib_1.__extends(Esm2015Renderer, _super);
25
- function Esm2015Renderer() {
26
- return _super !== null && _super.apply(this, arguments) || this;
27
+ function Esm2015Renderer(host, isCore, rewriteCoreImportsTo, sourcePath, targetPath, dtsMapper) {
28
+ var _this = _super.call(this, host, isCore, rewriteCoreImportsTo, sourcePath, targetPath) || this;
29
+ _this.host = host;
30
+ _this.isCore = isCore;
31
+ _this.rewriteCoreImportsTo = rewriteCoreImportsTo;
32
+ _this.sourcePath = sourcePath;
33
+ _this.targetPath = targetPath;
34
+ _this.dtsMapper = dtsMapper;
35
+ return _this;
27
36
  }
28
- /**
29
- * Add the imports at the top of the file
30
- */
31
- Esm2015Renderer.prototype.addImports = function (output, imports) {
32
- // The imports get inserted at the very top of the file.
33
- imports.forEach(function (i) { output.appendLeft(0, "import * as " + i.as + " from '" + i.name + "';\n"); });
34
- };
35
- Esm2015Renderer.prototype.addConstants = function (output, constants, file) {
36
- if (constants === '') {
37
- return;
38
- }
39
- var insertionPoint = file.statements.reduce(function (prev, stmt) {
40
- if (ts.isImportDeclaration(stmt) || ts.isImportEqualsDeclaration(stmt) ||
41
- ts.isNamespaceImport(stmt)) {
42
- return stmt.getEnd();
43
- }
44
- return prev;
45
- }, 0);
46
- output.appendLeft(insertionPoint, '\n' + constants + '\n');
47
- };
48
- /**
49
- * Add the definitions to each decorated class
50
- */
51
- Esm2015Renderer.prototype.addDefinitions = function (output, analyzedClass, definitions) {
52
- var classSymbol = this.host.getClassSymbol(analyzedClass.declaration);
53
- if (!classSymbol) {
54
- throw new Error("Analyzed class does not have a valid symbol: " + analyzedClass.name);
37
+ Esm2015Renderer.prototype.renderFile = function (sourceFile, decorationAnalysis, switchMarkerAnalysis, targetPath) {
38
+ var renderedFiles = _super.prototype.renderFile.call(this, sourceFile, decorationAnalysis, switchMarkerAnalysis, targetPath);
39
+ // Transform the `.d.ts` files.
40
+ // TODO(gkalpak): What about `.d.ts` source maps? (See
41
+ // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-9.html#new---declarationmap.)
42
+ if (decorationAnalysis) {
43
+ // Create a `DtsFileTransformer` for the source file and record the generated fields, which
44
+ // will allow the corresponding `.d.ts` file to be transformed later.
45
+ var dtsTransformer_1 = new transform_1.DtsFileTransformer(this.rewriteCoreImportsTo, constants_1.IMPORT_PREFIX);
46
+ decorationAnalysis.analyzedClasses.forEach(function (analyzedClass) {
47
+ return dtsTransformer_1.recordStaticField(analyzedClass.name, analyzedClass.compilation);
48
+ });
49
+ // Find the corresponding `.d.ts` file.
50
+ var sourceFileName = sourceFile.fileName;
51
+ var originalDtsFileName = this.dtsMapper.getDtsFileNameFor(sourceFileName);
52
+ var originalDtsContents = fs_1.readFileSync(originalDtsFileName, 'utf8');
53
+ // Transform the `.d.ts` file based on the recorded source file changes.
54
+ var transformedDtsFileName = canonical_path_1.resolve(this.targetPath, canonical_path_1.relative(this.sourcePath, originalDtsFileName));
55
+ var transformedDtsContents = dtsTransformer_1.transform(originalDtsContents, sourceFileName);
56
+ // Add the transformed `.d.ts` file to the list of output files.
57
+ renderedFiles.push({ path: transformedDtsFileName, contents: transformedDtsContents });
55
58
  }
56
- var insertionPoint = classSymbol.valueDeclaration.getEnd();
57
- output.appendLeft(insertionPoint, '\n' + definitions);
58
- };
59
- /**
60
- * Remove static decorator properties from classes
61
- */
62
- Esm2015Renderer.prototype.removeDecorators = function (output, decoratorsToRemove) {
63
- decoratorsToRemove.forEach(function (nodesToRemove, containerNode) {
64
- if (ts.isArrayLiteralExpression(containerNode)) {
65
- var items = containerNode.elements;
66
- if (items.length === nodesToRemove.length) {
67
- // Remove the entire statement
68
- var statement = findStatement(containerNode);
69
- if (statement) {
70
- output.remove(statement.getFullStart(), statement.getEnd());
71
- }
72
- }
73
- else {
74
- nodesToRemove.forEach(function (node) {
75
- // remove any trailing comma
76
- var end = (output.slice(node.getEnd(), node.getEnd() + 1) === ',') ?
77
- node.getEnd() + 1 :
78
- node.getEnd();
79
- output.remove(node.getFullStart(), end);
80
- });
81
- }
82
- }
83
- });
84
- };
85
- Esm2015Renderer.prototype.rewriteSwitchableDeclarations = function (outputText, sourceFile) {
86
- var declarations = this.host.getSwitchableDeclarations(sourceFile);
87
- declarations.forEach(function (declaration) {
88
- var start = declaration.initializer.getStart();
89
- var end = declaration.initializer.getEnd();
90
- var replacement = declaration.initializer.text.replace(ngcc_host_1.PRE_NGCC_MARKER, ngcc_host_1.POST_NGCC_MARKER);
91
- outputText.overwrite(start, end, replacement);
92
- });
59
+ return renderedFiles;
93
60
  };
94
61
  return Esm2015Renderer;
95
- }(renderer_1.Renderer));
62
+ }(fesm2015_renderer_1.Fesm2015Renderer));
96
63
  exports.Esm2015Renderer = Esm2015Renderer;
97
- function findStatement(node) {
98
- while (node) {
99
- if (ts.isExpressionStatement(node)) {
100
- return node;
101
- }
102
- node = node.parent;
103
- }
104
- return undefined;
105
- }
106
64
  });
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNtMjAxNV9yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmdjYy9zcmMvcmVuZGVyaW5nL2VzbTIwMTVfcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gsK0JBQWlDO0lBRWpDLCtFQUFvRTtJQUVwRSxrRkFBb0M7SUFFcEM7UUFBcUMsMkNBQVE7UUFBN0M7O1FBc0VBLENBQUM7UUFyRUM7O1dBRUc7UUFDSCxvQ0FBVSxHQUFWLFVBQVcsTUFBbUIsRUFBRSxPQUFzQztZQUNwRSx3REFBd0Q7WUFDeEQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUMsSUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxpQkFBZSxDQUFDLENBQUMsRUFBRSxlQUFVLENBQUMsQ0FBQyxJQUFJLFNBQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUVELHNDQUFZLEdBQVosVUFBYSxNQUFtQixFQUFFLFNBQWlCLEVBQUUsSUFBbUI7WUFDdEUsSUFBSSxTQUFTLEtBQUssRUFBRSxFQUFFO2dCQUNwQixPQUFPO2FBQ1I7WUFDRCxJQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFDLElBQUksRUFBRSxJQUFJO2dCQUN2RCxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDO29CQUNsRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzlCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUN0QjtnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNkLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNO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WUFDWCxJQUFJLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEMsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1NBQ3BCO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IE1hZ2ljU3RyaW5nIGZyb20gJ21hZ2ljLXN0cmluZyc7XG5pbXBvcnQge1BPU1RfTkdDQ19NQVJLRVIsIFBSRV9OR0NDX01BUktFUn0gZnJvbSAnLi4vaG9zdC9uZ2NjX2hvc3QnO1xuaW1wb3J0IHtBbmFseXplZENsYXNzfSBmcm9tICcuLi9hbmFseXplcic7XG5pbXBvcnQge1JlbmRlcmVyfSBmcm9tICcuL3JlbmRlcmVyJztcblxuZXhwb3J0IGNsYXNzIEVzbTIwMTVSZW5kZXJlciBleHRlbmRzIFJlbmRlcmVyIHtcbiAgLyoqXG4gICAqICBBZGQgdGhlIGltcG9ydHMgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZVxuICAgKi9cbiAgYWRkSW1wb3J0cyhvdXRwdXQ6IE1hZ2ljU3RyaW5nLCBpbXBvcnRzOiB7bmFtZTogc3RyaW5nOyBhczogc3RyaW5nO31bXSk6IHZvaWQge1xuICAgIC8vIFRoZSBpbXBvcnRzIGdldCBpbnNlcnRlZCBhdCB0aGUgdmVyeSB0b3Agb2YgdGhlIGZpbGUuXG4gICAgaW1wb3J0cy5mb3JFYWNoKGkgPT4geyBvdXRwdXQuYXBwZW5kTGVmdCgwLCBgaW1wb3J0ICogYXMgJHtpLmFzfSBmcm9tICcke2kubmFtZX0nO1xcbmApOyB9KTtcbiAgfVxuXG4gIGFkZENvbnN0YW50cyhvdXRwdXQ6IE1hZ2ljU3RyaW5nLCBjb25zdGFudHM6IHN0cmluZywgZmlsZTogdHMuU291cmNlRmlsZSk6IHZvaWQge1xuICAgIGlmIChjb25zdGFudHMgPT09ICcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc2VydGlvblBvaW50ID0gZmlsZS5zdGF0ZW1lbnRzLnJlZHVjZSgocHJldiwgc3RtdCkgPT4ge1xuICAgICAgaWYgKHRzLmlzSW1wb3J0RGVjbGFyYXRpb24oc3RtdCkgfHwgdHMuaXNJbXBvcnRFcXVhbHNEZWNsYXJhdGlvbihzdG10KSB8fFxuICAgICAgICAgIHRzLmlzTmFtZXNwYWNlSW1wb3J0KHN0bXQpKSB7XG4gICAgICAgIHJldHVybiBzdG10LmdldEVuZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwgMCk7XG4gICAgb3V0cHV0LmFwcGVuZExlZnQoaW5zZXJ0aW9uUG9pbnQsICdcXG4nICsgY29uc3RhbnRzICsgJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB0aGUgZGVmaW5pdGlvbnMgdG8gZWFjaCBkZWNvcmF0ZWQgY2xhc3NcbiAgICovXG4gIGFkZERlZmluaXRpb25zKG91dHB1dDogTWFnaWNTdHJpbmcsIGFuYWx5emVkQ2xhc3M6IEFuYWx5emVkQ2xhc3MsIGRlZmluaXRpb25zOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjbGFzc1N5bWJvbCA9IHRoaXMuaG9zdC5nZXRDbGFzc1N5bWJvbChhbmFseXplZENsYXNzLmRlY2xhcmF0aW9uKTtcbiAgICBpZiAoIWNsYXNzU3ltYm9sKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEFuYWx5emVkIGNsYXNzIGRvZXMgbm90IGhhdmUgYSB2YWxpZCBzeW1ib2w6ICR7YW5hbHl6ZWRDbGFzcy5uYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCBpbnNlcnRpb25Qb2ludCA9IGNsYXNzU3ltYm9sLnZhbHVlRGVjbGFyYXRpb24gIS5nZXRFbmQoKTtcbiAgICBvdXRwdXQuYXBwZW5kTGVmdChpbnNlcnRpb25Qb2ludCwgJ1xcbicgKyBkZWZpbml0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHN0YXRpYyBkZWNvcmF0b3IgcHJvcGVydGllcyBmcm9tIGNsYXNzZXNcbiAgICovXG4gIHJlbW92ZURlY29yYXRvcnMob3V0cHV0OiBNYWdpY1N0cmluZywgZGVjb3JhdG9yc1RvUmVtb3ZlOiBNYXA8dHMuTm9kZSwgdHMuTm9kZVtdPik6IHZvaWQge1xuICAgIGRlY29yYXRvcnNUb1JlbW92ZS5mb3JFYWNoKChub2Rlc1RvUmVtb3ZlLCBjb250YWluZXJOb2RlKSA9PiB7XG4gICAgICBpZiAodHMuaXNBcnJheUxpdGVyYWxFeHByZXNzaW9uKGNvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gY29udGFpbmVyTm9kZS5lbGVtZW50cztcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gbm9kZXNUb1JlbW92ZS5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIGVudGlyZSBzdGF0ZW1lbnRcbiAgICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBmaW5kU3RhdGVtZW50KGNvbnRhaW5lck5vZGUpO1xuICAgICAgICAgIGlmIChzdGF0ZW1lbnQpIHtcbiAgICAgICAgICAgIG91dHB1dC5yZW1vdmUoc3RhdGVtZW50LmdldEZ1bGxTdGFydCgpLCBzdGF0ZW1lbnQuZ2V0RW5kKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAvLyByZW1vdmUgYW55IHRyYWlsaW5nIGNvbW1hXG4gICAgICAgICAgICBjb25zdCBlbmQgPSAob3V0cHV0LnNsaWNlKG5vZGUuZ2V0RW5kKCksIG5vZGUuZ2V0RW5kKCkgKyAxKSA9PT0gJywnKSA/XG4gICAgICAgICAgICAgICAgbm9kZS5nZXRFbmQoKSArIDEgOlxuICAgICAgICAgICAgICAgIG5vZGUuZ2V0RW5kKCk7XG4gICAgICAgICAgICBvdXRwdXQucmVtb3ZlKG5vZGUuZ2V0RnVsbFN0YXJ0KCksIGVuZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJld3JpdGVTd2l0Y2hhYmxlRGVjbGFyYXRpb25zKG91dHB1dFRleHQ6IE1hZ2ljU3RyaW5nLCBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogdm9pZCB7XG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gdGhpcy5ob3N0LmdldFN3aXRjaGFibGVEZWNsYXJhdGlvbnMoc291cmNlRmlsZSk7XG4gICAgZGVjbGFyYXRpb25zLmZvckVhY2goZGVjbGFyYXRpb24gPT4ge1xuICAgICAgY29uc3Qgc3RhcnQgPSBkZWNsYXJhdGlvbi5pbml0aWFsaXplci5nZXRTdGFydCgpO1xuICAgICAgY29uc3QgZW5kID0gZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIuZ2V0RW5kKCk7XG4gICAgICBjb25zdCByZXBsYWNlbWVudCA9IGRlY2xhcmF0aW9uLmluaXRpYWxpemVyLnRleHQucmVwbGFjZShQUkVfTkdDQ19NQVJLRVIsIFBPU1RfTkdDQ19NQVJLRVIpO1xuICAgICAgb3V0cHV0VGV4dC5vdmVyd3JpdGUoc3RhcnQsIGVuZCwgcmVwbGFjZW1lbnQpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRTdGF0ZW1lbnQobm9kZTogdHMuTm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmICh0cy5pc0V4cHJlc3Npb25TdGF0ZW1lbnQobm9kZSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBub2RlID0gbm9kZS5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNtMjAxNV9yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmdjYy9zcmMvcmVuZGVyaW5nL2VzbTIwMTVfcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gsaURBQWlEO0lBQ2pELHlCQUFnQztJQUdoQyx1RUFBNEQ7SUFHNUQsMEVBQTJDO0lBSTNDLG9HQUFxRDtJQUdyRDtRQUFxQywyQ0FBZ0I7UUFDbkQseUJBQ2MsSUFBd0IsRUFBWSxNQUFlLEVBQ25ELG9CQUF3QyxFQUFZLFVBQWtCLEVBQ3RFLFVBQWtCLEVBQVksU0FBb0I7WUFIaEUsWUFJRSxrQkFBTSxJQUFJLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsU0FDbEU7WUFKYSxVQUFJLEdBQUosSUFBSSxDQUFvQjtZQUFZLFlBQU0sR0FBTixNQUFNLENBQVM7WUFDbkQsMEJBQW9CLEdBQXBCLG9CQUFvQixDQUFvQjtZQUFZLGdCQUFVLEdBQVYsVUFBVSxDQUFRO1lBQ3RFLGdCQUFVLEdBQVYsVUFBVSxDQUFRO1lBQVksZUFBUyxHQUFULFNBQVMsQ0FBVzs7UUFFaEUsQ0FBQztRQUVELG9DQUFVLEdBQVYsVUFDSSxVQUF5QixFQUFFLGtCQUFnRCxFQUMzRSxvQkFBb0QsRUFBRSxVQUFrQjtZQUMxRSxJQUFNLGFBQWEsR0FDZixpQkFBTSxVQUFVLFlBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRXZGLCtCQUErQjtZQUMvQixzREFBc0Q7WUFDdEQsd0dBQXdHO1lBQ3hHLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3RCLDJGQUEyRjtnQkFDM0YscUVBQXFFO2dCQUNyRSxJQUFNLGdCQUFjLEdBQUcsSUFBSSw4QkFBa0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUseUJBQWEsQ0FBQyxDQUFDO2dCQUN4RixrQkFBa0IsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUN0QyxVQUFBLGFBQWE7b0JBQ1QsT0FBQSxnQkFBYyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQztnQkFBL0UsQ0FBK0UsQ0FBQyxDQUFDO2dCQUV6Rix1Q0FBdUM7Z0JBQ3ZDLElBQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQzNDLElBQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDN0UsSUFBTSxtQkFBbUIsR0FBRyxpQkFBWSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUV0RSx3RUFBd0U7Z0JBQ3hFLElBQU0sc0JBQXNCLEdBQ3hCLHdCQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSx5QkFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUM3RSxJQUFNLHNCQUFzQixHQUFHLGdCQUFjLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUU3RixnRUFBZ0U7Z0JBQ2hFLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFDLENBQUMsQ0FBQzthQUN0RjtZQUVELE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFDSCxzQkFBQztJQUFELENBQUMsQUF6Q0QsQ0FBcUMsb0NBQWdCLEdBeUNwRDtJQXpDWSwwQ0FBZSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7cmVsYXRpdmUsIHJlc29sdmV9IGZyb20gJ2Nhbm9uaWNhbC1wYXRoJztcbmltcG9ydCB7cmVhZEZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtEdHNGaWxlVHJhbnNmb3JtZXJ9IGZyb20gJy4uLy4uLy4uL25ndHNjL3RyYW5zZm9ybSc7XG5pbXBvcnQge0RlY29yYXRpb25BbmFseXNpc30gZnJvbSAnLi4vYW5hbHlzaXMvZGVjb3JhdGlvbl9hbmFseXplcic7XG5pbXBvcnQge1N3aXRjaE1hcmtlckFuYWx5c2lzfSBmcm9tICcuLi9hbmFseXNpcy9zd2l0Y2hfbWFya2VyX2FuYWx5emVyJztcbmltcG9ydCB7SU1QT1JUX1BSRUZJWH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7RHRzTWFwcGVyfSBmcm9tICcuLi9ob3N0L2R0c19tYXBwZXInO1xuaW1wb3J0IHtOZ2NjUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uL2hvc3QvbmdjY19ob3N0JztcblxuaW1wb3J0IHtGZXNtMjAxNVJlbmRlcmVyfSBmcm9tICcuL2Zlc20yMDE1X3JlbmRlcmVyJztcbmltcG9ydCB7RmlsZUluZm99IGZyb20gJy4vcmVuZGVyZXInO1xuXG5leHBvcnQgY2xhc3MgRXNtMjAxNVJlbmRlcmVyIGV4dGVuZHMgRmVzbTIwMTVSZW5kZXJlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIGhvc3Q6IE5nY2NSZWZsZWN0aW9uSG9zdCwgcHJvdGVjdGVkIGlzQ29yZTogYm9vbGVhbixcbiAgICAgIHByb3RlY3RlZCByZXdyaXRlQ29yZUltcG9ydHNUbzogdHMuU291cmNlRmlsZXxudWxsLCBwcm90ZWN0ZWQgc291cmNlUGF0aDogc3RyaW5nLFxuICAgICAgcHJvdGVjdGVkIHRhcmdldFBhdGg6IHN0cmluZywgcHJvdGVjdGVkIGR0c01hcHBlcjogRHRzTWFwcGVyKSB7XG4gICAgc3VwZXIoaG9zdCwgaXNDb3JlLCByZXdyaXRlQ29yZUltcG9ydHNUbywgc291cmNlUGF0aCwgdGFyZ2V0UGF0aCk7XG4gIH1cblxuICByZW5kZXJGaWxlKFxuICAgICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgZGVjb3JhdGlvbkFuYWx5c2lzOiBEZWNvcmF0aW9uQW5hbHlzaXN8dW5kZWZpbmVkLFxuICAgICAgc3dpdGNoTWFya2VyQW5hbHlzaXM6IFN3aXRjaE1hcmtlckFuYWx5c2lzfHVuZGVmaW5lZCwgdGFyZ2V0UGF0aDogc3RyaW5nKTogRmlsZUluZm9bXSB7XG4gICAgY29uc3QgcmVuZGVyZWRGaWxlcyA9XG4gICAgICAgIHN1cGVyLnJlbmRlckZpbGUoc291cmNlRmlsZSwgZGVjb3JhdGlvbkFuYWx5c2lzLCBzd2l0Y2hNYXJrZXJBbmFseXNpcywgdGFyZ2V0UGF0aCk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gdGhlIGAuZC50c2AgZmlsZXMuXG4gICAgLy8gVE9ETyhna2FscGFrKTogV2hhdCBhYm91dCBgLmQudHNgIHNvdXJjZSBtYXBzPyAoU2VlXG4gICAgLy8gaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svcmVsZWFzZS1ub3Rlcy90eXBlc2NyaXB0LTItOS5odG1sI25ldy0tLWRlY2xhcmF0aW9ubWFwLilcbiAgICBpZiAoZGVjb3JhdGlvbkFuYWx5c2lzKSB7XG4gICAgICAvLyBDcmVhdGUgYSBgRHRzRmlsZVRyYW5zZm9ybWVyYCBmb3IgdGhlIHNvdXJjZSBmaWxlIGFuZCByZWNvcmQgdGhlIGdlbmVyYXRlZCBmaWVsZHMsIHdoaWNoXG4gICAgICAvLyB3aWxsIGFsbG93IHRoZSBjb3JyZXNwb25kaW5nIGAuZC50c2AgZmlsZSB0byBiZSB0cmFuc2Zvcm1lZCBsYXRlci5cbiAgICAgIGNvbnN0IGR0c1RyYW5zZm9ybWVyID0gbmV3IER0c0ZpbGVUcmFuc2Zvcm1lcih0aGlzLnJld3JpdGVDb3JlSW1wb3J0c1RvLCBJTVBPUlRfUFJFRklYKTtcbiAgICAgIGRlY29yYXRpb25BbmFseXNpcy5hbmFseXplZENsYXNzZXMuZm9yRWFjaChcbiAgICAgICAgICBhbmFseXplZENsYXNzID0+XG4gICAgICAgICAgICAgIGR0c1RyYW5zZm9ybWVyLnJlY29yZFN0YXRpY0ZpZWxkKGFuYWx5emVkQ2xhc3MubmFtZSwgYW5hbHl6ZWRDbGFzcy5jb21waWxhdGlvbikpO1xuXG4gICAgICAvLyBGaW5kIHRoZSBjb3JyZXNwb25kaW5nIGAuZC50c2AgZmlsZS5cbiAgICAgIGNvbnN0IHNvdXJjZUZpbGVOYW1lID0gc291cmNlRmlsZS5maWxlTmFtZTtcbiAgICAgIGNvbnN0IG9yaWdpbmFsRHRzRmlsZU5hbWUgPSB0aGlzLmR0c01hcHBlci5nZXREdHNGaWxlTmFtZUZvcihzb3VyY2VGaWxlTmFtZSk7XG4gICAgICBjb25zdCBvcmlnaW5hbER0c0NvbnRlbnRzID0gcmVhZEZpbGVTeW5jKG9yaWdpbmFsRHRzRmlsZU5hbWUsICd1dGY4Jyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSB0aGUgYC5kLnRzYCBmaWxlIGJhc2VkIG9uIHRoZSByZWNvcmRlZCBzb3VyY2UgZmlsZSBjaGFuZ2VzLlxuICAgICAgY29uc3QgdHJhbnNmb3JtZWREdHNGaWxlTmFtZSA9XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLnRhcmdldFBhdGgsIHJlbGF0aXZlKHRoaXMuc291cmNlUGF0aCwgb3JpZ2luYWxEdHNGaWxlTmFtZSkpO1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWREdHNDb250ZW50cyA9IGR0c1RyYW5zZm9ybWVyLnRyYW5zZm9ybShvcmlnaW5hbER0c0NvbnRlbnRzLCBzb3VyY2VGaWxlTmFtZSk7XG5cbiAgICAgIC8vIEFkZCB0aGUgdHJhbnNmb3JtZWQgYC5kLnRzYCBmaWxlIHRvIHRoZSBsaXN0IG9mIG91dHB1dCBmaWxlcy5cbiAgICAgIHJlbmRlcmVkRmlsZXMucHVzaCh7cGF0aDogdHJhbnNmb3JtZWREdHNGaWxlTmFtZSwgY29udGVudHM6IHRyYW5zZm9ybWVkRHRzQ29udGVudHN9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVuZGVyZWRGaWxlcztcbiAgfVxufVxuIl19
@@ -6,6 +6,6 @@
6
6
  * Use of this source code is governed by an MIT-style license that can be
7
7
  * found in the LICENSE file at https://angular.io/license
8
8
  */
9
- import { Esm2015Renderer } from './esm2015_renderer';
10
- export declare class Esm5Renderer extends Esm2015Renderer {
9
+ import { Fesm2015Renderer } from './fesm2015_renderer';
10
+ export declare class Esm5Renderer extends Fesm2015Renderer {
11
11
  }
@@ -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/src/ngcc/src/rendering/esm5_renderer", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngcc/src/rendering/esm2015_renderer"], factory);
7
+ define("@angular/compiler-cli/src/ngcc/src/rendering/esm5_renderer", ["require", "exports", "tslib", "@angular/compiler-cli/src/ngcc/src/rendering/fesm2015_renderer"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
@@ -17,14 +17,14 @@
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 esm2015_renderer_1 = require("@angular/compiler-cli/src/ngcc/src/rendering/esm2015_renderer");
20
+ var fesm2015_renderer_1 = require("@angular/compiler-cli/src/ngcc/src/rendering/fesm2015_renderer");
21
21
  var Esm5Renderer = /** @class */ (function (_super) {
22
22
  tslib_1.__extends(Esm5Renderer, _super);
23
23
  function Esm5Renderer() {
24
24
  return _super !== null && _super.apply(this, arguments) || this;
25
25
  }
26
26
  return Esm5Renderer;
27
- }(esm2015_renderer_1.Esm2015Renderer));
27
+ }(fesm2015_renderer_1.Fesm2015Renderer));
28
28
  exports.Esm5Renderer = Esm5Renderer;
29
29
  });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNtNV9yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmdjYy9zcmMvcmVuZGVyaW5nL2VzbTVfcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gsa0dBQW1EO0lBRW5EO1FBQWtDLHdDQUFlO1FBQWpEOztRQUFtRCxDQUFDO1FBQUQsbUJBQUM7SUFBRCxDQUFDLEFBQXBELENBQWtDLGtDQUFlLEdBQUc7SUFBdkMsb0NBQVkiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0VzbTIwMTVSZW5kZXJlcn0gZnJvbSAnLi9lc20yMDE1X3JlbmRlcmVyJztcblxuZXhwb3J0IGNsYXNzIEVzbTVSZW5kZXJlciBleHRlbmRzIEVzbTIwMTVSZW5kZXJlciB7fVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNtNV9yZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmdjYy9zcmMvcmVuZGVyaW5nL2VzbTVfcmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gsb0dBQXFEO0lBRXJEO1FBQWtDLHdDQUFnQjtRQUFsRDs7UUFBb0QsQ0FBQztRQUFELG1CQUFDO0lBQUQsQ0FBQyxBQUFyRCxDQUFrQyxvQ0FBZ0IsR0FBRztJQUF4QyxvQ0FBWSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7RmVzbTIwMTVSZW5kZXJlcn0gZnJvbSAnLi9mZXNtMjAxNV9yZW5kZXJlcic7XG5cbmV4cG9ydCBjbGFzcyBFc201UmVuZGVyZXIgZXh0ZW5kcyBGZXNtMjAxNVJlbmRlcmVyIHt9XG4iXX0=
@@ -0,0 +1,38 @@
1
+ /// <amd-module name="@angular/compiler-cli/src/ngcc/src/rendering/fesm2015_renderer" />
2
+ /**
3
+ * @license
4
+ * Copyright Google Inc. All Rights Reserved.
5
+ *
6
+ * Use of this source code is governed by an MIT-style license that can be
7
+ * found in the LICENSE file at https://angular.io/license
8
+ */
9
+ import * as ts from 'typescript';
10
+ import MagicString from 'magic-string';
11
+ import { NgccReflectionHost, SwitchableVariableDeclaration } from '../host/ngcc_host';
12
+ import { AnalyzedClass } from '../analysis/decoration_analyzer';
13
+ import { Renderer } from './renderer';
14
+ export declare class Fesm2015Renderer extends Renderer {
15
+ protected host: NgccReflectionHost;
16
+ protected isCore: boolean;
17
+ protected rewriteCoreImportsTo: ts.SourceFile | null;
18
+ protected sourcePath: string;
19
+ protected targetPath: string;
20
+ constructor(host: NgccReflectionHost, isCore: boolean, rewriteCoreImportsTo: ts.SourceFile | null, sourcePath: string, targetPath: string);
21
+ /**
22
+ * Add the imports at the top of the file
23
+ */
24
+ addImports(output: MagicString, imports: {
25
+ name: string;
26
+ as: string;
27
+ }[]): void;
28
+ addConstants(output: MagicString, constants: string, file: ts.SourceFile): void;
29
+ /**
30
+ * Add the definitions to each decorated class
31
+ */
32
+ addDefinitions(output: MagicString, analyzedClass: AnalyzedClass, definitions: string): void;
33
+ /**
34
+ * Remove static decorator properties from classes
35
+ */
36
+ removeDecorators(output: MagicString, decoratorsToRemove: Map<ts.Node, ts.Node[]>): void;
37
+ rewriteSwitchableDeclarations(outputText: MagicString, sourceFile: ts.SourceFile, declarations: SwitchableVariableDeclaration[]): void;
38
+ }