@angular/compiler-cli 11.2.4 → 11.2.5

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 (60) hide show
  1. package/linker/src/file_linker/partial_linkers/partial_linker_selector.d.ts +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +4 -4
  3. package/ngcc/src/analysis/decoration_analyzer.d.ts +2 -1
  4. package/ngcc/src/analysis/decoration_analyzer.js +6 -4
  5. package/ngcc/src/analysis/ngcc_trait_compiler.d.ts +3 -2
  6. package/ngcc/src/analysis/ngcc_trait_compiler.js +3 -2
  7. package/ngcc/src/analysis/util.js +1 -3
  8. package/ngcc/src/packages/build_marker.d.ts +1 -1
  9. package/ngcc/src/packages/build_marker.js +1 -1
  10. package/package.json +2 -2
  11. package/src/ngtsc/annotations/src/component.d.ts +18 -4
  12. package/src/ngtsc/annotations/src/component.js +135 -23
  13. package/src/ngtsc/annotations/src/directive.d.ts +22 -3
  14. package/src/ngtsc/annotations/src/directive.js +122 -5
  15. package/src/ngtsc/annotations/src/injectable.d.ts +2 -1
  16. package/src/ngtsc/annotations/src/injectable.js +4 -1
  17. package/src/ngtsc/annotations/src/ng_module.d.ts +16 -5
  18. package/src/ngtsc/annotations/src/ng_module.js +121 -39
  19. package/src/ngtsc/annotations/src/pipe.d.ts +12 -1
  20. package/src/ngtsc/annotations/src/pipe.js +29 -3
  21. package/src/ngtsc/annotations/src/util.js +7 -7
  22. package/src/ngtsc/core/src/compiler.d.ts +0 -5
  23. package/src/ngtsc/core/src/compiler.js +9 -111
  24. package/src/ngtsc/core/src/host.d.ts +1 -0
  25. package/src/ngtsc/core/src/host.js +16 -1
  26. package/src/ngtsc/cycles/src/imports.d.ts +2 -3
  27. package/src/ngtsc/cycles/src/imports.js +28 -14
  28. package/src/ngtsc/imports/index.d.ts +1 -1
  29. package/src/ngtsc/imports/index.js +1 -1
  30. package/src/ngtsc/imports/src/alias.d.ts +2 -2
  31. package/src/ngtsc/imports/src/alias.js +3 -3
  32. package/src/ngtsc/imports/src/emitter.d.ts +51 -10
  33. package/src/ngtsc/imports/src/emitter.js +26 -19
  34. package/src/ngtsc/incremental/api.d.ts +0 -14
  35. package/src/ngtsc/incremental/api.js +1 -1
  36. package/src/ngtsc/incremental/semantic_graph/index.d.ts +12 -0
  37. package/src/ngtsc/incremental/semantic_graph/index.js +34 -0
  38. package/src/ngtsc/incremental/semantic_graph/src/api.d.ts +98 -0
  39. package/src/ngtsc/incremental/semantic_graph/src/api.js +51 -0
  40. package/src/ngtsc/incremental/semantic_graph/src/graph.d.ts +105 -0
  41. package/src/ngtsc/incremental/semantic_graph/src/graph.js +302 -0
  42. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.d.ts +30 -0
  43. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.js +55 -0
  44. package/src/ngtsc/incremental/semantic_graph/src/util.d.ts +29 -0
  45. package/src/ngtsc/incremental/semantic_graph/src/util.js +111 -0
  46. package/src/ngtsc/incremental/src/dependency_tracking.d.ts +0 -3
  47. package/src/ngtsc/incremental/src/dependency_tracking.js +9 -50
  48. package/src/ngtsc/incremental/src/state.d.ts +2 -1
  49. package/src/ngtsc/incremental/src/state.js +61 -16
  50. package/src/ngtsc/modulewithproviders/src/scanner.js +2 -2
  51. package/src/ngtsc/scope/src/local.d.ts +0 -13
  52. package/src/ngtsc/scope/src/local.js +2 -16
  53. package/src/ngtsc/transform/src/api.d.ts +16 -2
  54. package/src/ngtsc/transform/src/api.js +1 -1
  55. package/src/ngtsc/transform/src/compilation.d.ts +7 -4
  56. package/src/ngtsc/transform/src/compilation.js +25 -8
  57. package/src/ngtsc/transform/src/trait.d.ts +14 -11
  58. package/src/ngtsc/transform/src/trait.js +7 -3
  59. package/src/ngtsc/typecheck/src/environment.js +3 -3
  60. package/src/version.js +1 -1
@@ -107,13 +107,19 @@
107
107
  // such a case, the reference's `identities` property would be `[foo]`, which would result in an
108
108
  // invalid emission of a free-standing `foo` identifier, rather than `exports.foo`.
109
109
  if (!typescript_1.isDeclaration(ref.node) && refSf === context) {
110
- return new compiler_1.WrappedNodeExpr(ref.node);
110
+ return {
111
+ expression: new compiler_1.WrappedNodeExpr(ref.node),
112
+ importedFile: null,
113
+ };
111
114
  }
112
115
  // A Reference can have multiple identities in different files, so it may already have an
113
116
  // Identifier in the requested context file.
114
117
  var identifier = ref.getIdentityIn(context);
115
118
  if (identifier !== null) {
116
- return new compiler_1.WrappedNodeExpr(identifier);
119
+ return {
120
+ expression: new compiler_1.WrappedNodeExpr(identifier),
121
+ importedFile: null,
122
+ };
117
123
  }
118
124
  else {
119
125
  return null;
@@ -158,22 +164,17 @@
158
164
  }
159
165
  // Try to find the exported name of the declaration, if one is available.
160
166
  var _a = ref.bestGuessOwningModule, specifier = _a.specifier, resolutionContext = _a.resolutionContext;
161
- var symbolName = this.resolveImportName(specifier, ref.node, resolutionContext);
162
- if (symbolName === null) {
167
+ var exports = this.getExportsOfModule(specifier, resolutionContext);
168
+ if (exports === null || !exports.exportMap.has(ref.node)) {
163
169
  // TODO(alxhub): make this error a ts.Diagnostic pointing at whatever caused this import to be
164
170
  // triggered.
165
171
  throw new Error("Symbol " + ref.debugName + " declared in " + typescript_1.getSourceFile(ref.node).fileName + " is not exported from " + specifier + " (import into " + context.fileName + ")");
166
172
  }
167
- return new compiler_1.ExternalExpr(new compiler_1.ExternalReference(specifier, symbolName));
168
- };
169
- AbsoluteModuleStrategy.prototype.resolveImportName = function (moduleName, target, fromFile) {
170
- var exports = this.getExportsOfModule(moduleName, fromFile);
171
- if (exports !== null && exports.has(target)) {
172
- return exports.get(target);
173
- }
174
- else {
175
- return null;
176
- }
173
+ var symbolName = exports.exportMap.get(ref.node);
174
+ return {
175
+ expression: new compiler_1.ExternalExpr(new compiler_1.ExternalReference(specifier, symbolName)),
176
+ importedFile: exports.module,
177
+ };
177
178
  };
178
179
  AbsoluteModuleStrategy.prototype.getExportsOfModule = function (moduleName, fromFile) {
179
180
  if (!this.moduleExportsCache.has(moduleName)) {
@@ -195,7 +196,7 @@
195
196
  exports.forEach(function (declaration, name) {
196
197
  exportMap.set(declaration.node, name);
197
198
  });
198
- return exportMap;
199
+ return { module: entryPointFile, exportMap: exportMap };
199
200
  };
200
201
  return AbsoluteModuleStrategy;
201
202
  }());
@@ -238,7 +239,10 @@
238
239
  // With both files expressed as LogicalProjectPaths, getting the module specifier as a relative
239
240
  // path is now straightforward.
240
241
  var moduleName = file_system_1.LogicalProjectPath.relativePathBetween(originPath, destPath);
241
- return new compiler_1.ExternalExpr({ moduleName: moduleName, name: name });
242
+ return {
243
+ expression: new compiler_1.ExternalExpr({ moduleName: moduleName, name: name }),
244
+ importedFile: destSf,
245
+ };
242
246
  };
243
247
  return LogicalProjectStrategy;
244
248
  }());
@@ -258,7 +262,7 @@
258
262
  var relativePath = file_system_1.relative(file_system_1.dirname(file_system_1.absoluteFromSourceFile(context)), file_system_1.absoluteFromSourceFile(destSf));
259
263
  var moduleName = file_system_1.toRelativeImport(util_1.stripExtension(relativePath));
260
264
  var name = find_export_1.findExportedNameOfNode(ref.node, destSf, this.reflector);
261
- return new compiler_1.ExternalExpr({ moduleName: moduleName, name: name });
265
+ return { expression: new compiler_1.ExternalExpr({ moduleName: moduleName, name: name }), importedFile: destSf };
262
266
  };
263
267
  return RelativePathStrategy;
264
268
  }());
@@ -279,10 +283,13 @@
279
283
  return null;
280
284
  }
281
285
  var moduleName = this.unifiedModulesHost.fileNameToModuleName(destSf.fileName, context.fileName);
282
- return new compiler_1.ExternalExpr({ moduleName: moduleName, name: name });
286
+ return {
287
+ expression: new compiler_1.ExternalExpr({ moduleName: moduleName, name: name }),
288
+ importedFile: destSf,
289
+ };
283
290
  };
284
291
  return UnifiedModulesStrategy;
285
292
  }());
286
293
  exports.UnifiedModulesStrategy = UnifiedModulesStrategy;
287
294
  });
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvaW1wb3J0cy9zcmMvZW1pdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gsOENBQStGO0lBQy9GLCtCQUFpQztJQUdqQywyRUFBcUk7SUFDckksNkVBQTBEO0lBRTFELGtGQUE0RztJQUU1Ryx1RkFBcUQ7SUFLckQ7O09BRUc7SUFDSCxJQUFZLFdBMkJYO0lBM0JELFdBQVksV0FBVztRQUNyQiw2Q0FBVyxDQUFBO1FBRVg7Ozs7O1dBS0c7UUFDSCxpRUFBcUIsQ0FBQTtRQUVyQjs7Ozs7V0FLRztRQUNILHlEQUFpQixDQUFBO1FBRWpCOzs7Ozs7V0FNRztRQUNILHFFQUF1QixDQUFBO0lBQ3pCLENBQUMsRUEzQlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUEyQnRCO0lBMkJEOzs7OztPQUtHO0lBQ0g7UUFDRSwwQkFBb0IsVUFBbUM7WUFBbkMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFBRyxDQUFDO1FBRTNELCtCQUFJLEdBQUosVUFBSyxHQUFjLEVBQUUsT0FBc0IsRUFBRSxXQUEyQzs7WUFBM0MsNEJBQUEsRUFBQSxjQUEyQixXQUFXLENBQUMsSUFBSTs7Z0JBRXRGLEtBQXVCLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsVUFBVSxDQUFBLGdCQUFBLDRCQUFFO29CQUFuQyxJQUFNLFFBQVEsV0FBQTtvQkFDakIsSUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUN6RCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7d0JBQ3BCLE9BQU8sT0FBTyxDQUFDO3FCQUNoQjtpQkFDRjs7Ozs7Ozs7O1lBQ0QsTUFBTSxJQUFJLEtBQUss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biAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtFeHByZXNzaW9uLCBFeHRlcm5hbEV4cHIsIEV4dGVybmFsUmVmZXJlbmNlLCBXcmFwcGVkTm9kZUV4cHJ9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge1VuaWZpZWRNb2R1bGVzSG9zdH0gZnJvbSAnLi4vLi4vY29yZS9hcGknO1xuaW1wb3J0IHthYnNvbHV0ZUZyb21Tb3VyY2VGaWxlLCBkaXJuYW1lLCBMb2dpY2FsRmlsZVN5c3RlbSwgTG9naWNhbFByb2plY3RQYXRoLCByZWxhdGl2ZSwgdG9SZWxhdGl2ZUltcG9ydH0gZnJvbSAnLi4vLi4vZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtzdHJpcEV4dGVuc2lvbn0gZnJvbSAnLi4vLi4vZmlsZV9zeXN0ZW0vc3JjL3V0aWwnO1xuaW1wb3J0IHtEZWNsYXJhdGlvbk5vZGUsIGlzQ29uY3JldGVEZWNsYXJhdGlvbiwgUmVmbGVjdGlvbkhvc3R9IGZyb20gJy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtnZXRTb3VyY2VGaWxlLCBpc0RlY2xhcmF0aW9uLCBpc1R5cGVEZWNsYXJhdGlvbiwgbm9kZU5hbWVGb3JFcnJvcn0gZnJvbSAnLi4vLi4vdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7ZmluZEV4cG9ydGVkTmFtZU9mTm9kZX0gZnJvbSAnLi9maW5kX2V4cG9ydCc7XG5pbXBvcnQge1JlZmVyZW5jZX0gZnJvbSAnLi9yZWZlcmVuY2VzJztcbmltcG9ydCB7TW9kdWxlUmVzb2x2ZXJ9IGZyb20gJy4vcmVzb2x2ZXInO1xuXG5cbi8qKlxuICogRmxhZ3Mgd2hpY2ggYWx0ZXIgdGhlIGltcG9ydHMgZ2VuZXJhdGVkIGJ5IHRoZSBgUmVmZXJlbmNlRW1pdHRlcmAuXG4gKi9cbmV4cG9ydCBlbnVtIEltcG9ydEZsYWdzIHtcbiAgTm9uZSA9IDB4MDAsXG5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSBnZW5lcmF0aW9uIG9mIGEgbmV3IGltcG9ydCB3aGVuIGdlbmVyYXRpbmcgYSByZWZlcmVuY2UsIGV2ZW4gaWYgYW4gaWRlbnRpZmllciBhbHJlYWR5XG4gICAqIGV4aXN0cyBpbiB0aGUgdGFyZ2V0IGZpbGUgd2hpY2ggY291bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICAgKlxuICAgKiBUaGlzIGlzIHNvbWV0aW1lcyByZXF1aXJlZCBpZiB0aGVyZSdzIGEgcmlzayBUeXBlU2NyaXB0IG1pZ2h0IHJlbW92ZSBpbXBvcnRzIGR1cmluZyBlbWl0LlxuICAgKi9cbiAgRm9yY2VOZXdJbXBvcnQgPSAweDAxLFxuXG4gIC8qKlxuICAgKiBEb24ndCBtYWtlIHVzZSBvZiBhbnkgYWxpYXNpbmcgaW5mb3JtYXRpb24gd2hlbiBlbWl0dGluZyBhIHJlZmVyZW5jZS5cbiAgICpcbiAgICogVGhpcyBpcyBzb21ldGltZXMgcmVxdWlyZWQgaWYgZW1pdHRpbmcgaW50byBhIGNvbnRleHQgd2hlcmUgZ2VuZXJhdGVkIHJlZmVyZW5jZXMgd2lsbCBiZSBmZWRcbiAgICogaW50byBUeXBlU2NyaXB0IGFuZCB0eXBlLWNoZWNrZWQgKHN1Y2ggYXMgaW4gdGVtcGxhdGUgdHlwZS1jaGVja2luZykuXG4gICAqL1xuICBOb0FsaWFzaW5nID0gMHgwMixcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgYW4gaW1wb3J0IHRvIGEgdHlwZS1vbmx5IGRlY2xhcmF0aW9uIGlzIGFsbG93ZWQuXG4gICAqXG4gICAqIEZvciByZWZlcmVuY2VzIHRoYXQgb2NjdXIgaW4gdHlwZS1wb3NpdGlvbnMsIHRoZSByZWZlcnJlZCBkZWNsYXJhdGlvbiBtYXkgYmUgYSB0eXBlLW9ubHlcbiAgICogZGVjbGFyYXRpb24gdGhhdCBpcyBub3QgcmV0YWluZWQgZHVyaW5nIGVtaXQuIEluY2x1ZGluZyB0aGlzIGZsYWcgYWxsb3dzIHRvIGVtaXQgcmVmZXJlbmNlcyB0b1xuICAgKiB0eXBlLW9ubHkgZGVjbGFyYXRpb25zIGFzIHVzZWQgaW4gZS5nLiB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nLlxuICAgKi9cbiAgQWxsb3dUeXBlSW1wb3J0cyA9IDB4MDQsXG59XG5cbi8qKlxuICogQSBwYXJ0aWN1bGFyIHN0cmF0ZWd5IGZvciBnZW5lcmF0aW5nIGFuIGV4cHJlc3Npb24gd2hpY2ggcmVmZXJzIHRvIGEgYFJlZmVyZW5jZWAuXG4gKlxuICogVGhlcmUgYXJlIG1hbnkgcG90ZW50aWFsIHdheXMgYSBnaXZlbiBgUmVmZXJlbmNlYCBjb3VsZCBiZSByZWZlcnJlZCB0byBpbiB0aGUgY29udGV4dCBvZiBhIGdpdmVuXG4gKiBmaWxlLiBBIGxvY2FsIGRlY2xhcmF0aW9uIGNvdWxkIGJlIGF2YWlsYWJsZSwgdGhlIGBSZWZlcmVuY2VgIGNvdWxkIGJlIGltcG9ydGFibGUgdmlhIGEgcmVsYXRpdmVcbiAqIGltcG9ydCB3aXRoaW4gdGhlIHByb2plY3QsIG9yIGFuIGFic29sdXRlIGltcG9ydCBpbnRvIGBub2RlX21vZHVsZXNgIG1pZ2h0IGJlIG5lY2Vzc2FyeS5cbiAqXG4gKiBEaWZmZXJlbnQgYFJlZmVyZW5jZUVtaXRTdHJhdGVneWAgaW1wbGVtZW50YXRpb25zIGltcGxlbWVudCBzcGVjaWZpYyBsb2dpYyBmb3IgZ2VuZXJhdGluZyBzdWNoXG4gKiByZWZlcmVuY2VzLiBBIHNpbmdsZSBzdHJhdGVneSAoc3VjaCBhcyB1c2luZyBhIGxvY2FsIGRlY2xhcmF0aW9uKSBtYXkgbm90IGFsd2F5cyBiZSBhYmxlIHRvXG4gKiBnZW5lcmF0ZSBhbiBleHByZXNzaW9uIGZvciBldmVyeSBgUmVmZXJlbmNlYCAoZm9yIGV4YW1wbGUsIGlmIG5vIGxvY2FsIGlkZW50aWZpZXIgaXMgYXZhaWxhYmxlKSxcbiAqIGFuZCBtYXkgcmV0dXJuIGBudWxsYCBpbiBzdWNoIGEgY2FzZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZlcmVuY2VFbWl0U3RyYXRlZ3kge1xuICAvKipcbiAgICogRW1pdCBhbiBgRXhwcmVzc2lvbmAgd2hpY2ggcmVmZXJzIHRvIHRoZSBnaXZlbiBgUmVmZXJlbmNlYCBpbiB0aGUgY29udGV4dCBvZiBhIHBhcnRpY3VsYXJcbiAgICogc291cmNlIGZpbGUsIGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gcmVmIHRoZSBgUmVmZXJlbmNlYCBmb3Igd2hpY2ggdG8gZ2VuZXJhdGUgYW4gZXhwcmVzc2lvblxuICAgKiBAcGFyYW0gY29udGV4dCB0aGUgc291cmNlIGZpbGUgaW4gd2hpY2ggdGhlIGBFeHByZXNzaW9uYCBtdXN0IGJlIHZhbGlkXG4gICAqIEBwYXJhbSBpbXBvcnRGbGFncyBhIGZsYWcgd2hpY2ggY29udHJvbHMgd2hldGhlciBpbXBvcnRzIHNob3VsZCBiZSBnZW5lcmF0ZWQgb3Igbm90XG4gICAqIEByZXR1cm5zIGFuIGBFeHByZXNzaW9uYCB3aGljaCByZWZlcnMgdG8gdGhlIGBSZWZlcmVuY2VgLCBvciBgbnVsbGAgaWYgbm9uZSBjYW4gYmUgZ2VuZXJhdGVkXG4gICAqL1xuICBlbWl0KHJlZjogUmVmZXJlbmNlLCBjb250ZXh0OiB0cy5Tb3VyY2VGaWxlLCBpbXBvcnRGbGFnczogSW1wb3J0RmxhZ3MpOiBFeHByZXNzaW9ufG51bGw7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGBFeHByZXNzaW9uYHMgd2hpY2ggcmVmZXIgdG8gYFJlZmVyZW5jZWBzIGluIGEgZ2l2ZW4gY29udGV4dC5cbiAqXG4gKiBBIGBSZWZlcmVuY2VFbWl0dGVyYCB1c2VzIG9uZSBvciBtb3JlIGBSZWZlcmVuY2VFbWl0U3RyYXRlZ3lgIGltcGxlbWVudGF0aW9ucyB0byBwcm9kdWNlIGFuXG4gKiBgRXhwcmVzc2lvbmAgd2hpY2ggcmVmZXJzIHRvIGEgYFJlZmVyZW5jZWAgaW4gdGhlIGNvbnRleHQgb2YgYSBwYXJ0aWN1bGFyIGZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VFbWl0dGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdHJhdGVnaWVzOiBSZWZlcmVuY2VFbWl0U3RyYXRlZ3lbXSkge31cblxuICBlbWl0KHJlZjogUmVmZXJlbmNlLCBjb250ZXh0OiB0cy5Tb3VyY2VGaWxlLCBpbXBvcnRGbGFnczogSW1wb3J0RmxhZ3PCoD0gSW1wb3J0RmxhZ3MuTm9uZSk6XG4gICAgICBFeHByZXNzaW9uIHtcbiAgICBmb3IgKGNvbnN0IHN0cmF0ZWd5IG9mIHRoaXMuc3RyYXRlZ2llcykge1xuICAgICAgY29uc3QgZW1pdHRlZCA9IHN0cmF0ZWd5LmVtaXQocmVmLCBjb250ZXh0LCBpbXBvcnRGbGFncyk7XG4gICAgICBpZiAoZW1pdHRlZCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1pdHRlZDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gd3JpdGUgYSByZWZlcmVuY2UgdG8gJHtub2RlTmFtZUZvckVycm9yKHJlZi5ub2RlKX0gaW4gJHtcbiAgICAgICAgcmVmLm5vZGUuZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lfSBmcm9tICR7Y29udGV4dC5maWxlTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgYFJlZmVyZW5jZUVtaXRTdHJhdGVneWAgd2hpY2ggd2lsbCByZWZlciB0byBkZWNsYXJhdGlvbnMgYnkgYW55IGxvY2FsIGB0cy5JZGVudGlmaWVyYHMsIGlmXG4gKiBzdWNoIGlkZW50aWZpZXJzIGFyZSBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbElkZW50aWZpZXJTdHJhdGVneSBpbXBsZW1lbnRzIFJlZmVyZW5jZUVtaXRTdHJhdGVneSB7XG4gIGVtaXQocmVmOiBSZWZlcmVuY2U8dHMuTm9kZT4sIGNvbnRleHQ6IHRzLlNvdXJjZUZpbGUsIGltcG9ydEZsYWdzOiBJbXBvcnRGbGFncyk6IEV4cHJlc3Npb258bnVsbCB7XG4gICAgY29uc3QgcmVmU2YgPSBnZXRTb3VyY2VGaWxlKHJlZi5ub2RlKTtcblxuICAgIC8vIElmIHRoZSBlbWl0dGVyIGhhcyBzcGVjaWZpZWQgRm9yY2VOZXdJbXBvcnQsIHRoZW4gTG9jYWxJZGVudGlmaWVyU3RyYXRlZ3kgc2hvdWxkIG5vdCB1c2UgYVxuICAgIC8vIGxvY2FsIGlkZW50aWZpZXIgYXQgYWxsLCAqZXhjZXB0KiBpbiB0aGUgc291cmNlIGZpbGUgd2hlcmUgdGhlIG5vZGUgaXMgYWN0dWFsbHkgZGVjbGFyZWQuXG4gICAgaWYgKGltcG9ydEZsYWdzICYgSW1wb3J0RmxhZ3MuRm9yY2VOZXdJbXBvcnQgJiYgcmVmU2YgIT09IGNvbnRleHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIElmIHJlZmVyZW5jZWQgbm9kZSBpcyBub3QgYW4gYWN0dWFsIFRTIGRlY2xhcmF0aW9uIChlLmcuIGBjbGFzcyBGb29gIG9yIGBmdW5jdGlvbiBmb28oKSB7fWAsXG4gICAgLy8gZXRjKSBhbmQgaXQgaXMgaW4gdGhlIGN1cnJlbnQgZmlsZSB0aGVuIGp1c3QgdXNlIGl0IGRpcmVjdGx5LlxuICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBjb3VsZCBiZSBhIHByb3BlcnR5IGFjY2VzcyAoZS5nLiBgZXhwb3J0cy5mb29gKS4gSW5cbiAgICAvLyBzdWNoIGEgY2FzZSwgdGhlIHJlZmVyZW5jZSdzIGBpZGVudGl0aWVzYCBwcm9wZXJ0eSB3b3VsZCBiZSBgW2Zvb11gLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYW5cbiAgICAvLyBpbnZhbGlkIGVtaXNzaW9uIG9mIGEgZnJlZS1zdGFuZGluZyBgZm9vYCBpZGVudGlmaWVyLCByYXRoZXIgdGhhbiBgZXhwb3J0cy5mb29gLlxuICAgIGlmICghaXNEZWNsYXJhdGlvbihyZWYubm9kZSkgJiYgcmVmU2YgPT09IGNvbnRleHQpIHtcbiAgICAgIHJldHVybiBuZXcgV3JhcHBlZE5vZGVFeHByKHJlZi5ub2RlKTtcbiAgICB9XG5cbiAgICAvLyBBIFJlZmVyZW5jZSBjYW4gaGF2ZSBtdWx0aXBsZSBpZGVudGl0aWVzIGluIGRpZmZlcmVudCBmaWxlcywgc28gaXQgbWF5IGFscmVhZHkgaGF2ZSBhblxuICAgIC8vIElkZW50aWZpZXIgaW4gdGhlIHJlcXVlc3RlZCBjb250ZXh0IGZpbGUuXG4gICAgY29uc3QgaWRlbnRpZmllciA9IHJlZi5nZXRJZGVudGl0eUluKGNvbnRleHQpO1xuICAgIGlmIChpZGVudGlmaWVyICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IFdyYXBwZWROb2RlRXhwcihpZGVudGlmaWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSBgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5YCB3aGljaCB3aWxsIHJlZmVyIHRvIGRlY2xhcmF0aW9ucyB0aGF0IGNvbWUgZnJvbSBgbm9kZV9tb2R1bGVzYCB1c2luZ1xuICogYW4gYWJzb2x1dGUgaW1wb3J0LlxuICpcbiAqIFBhcnQgb2YgdGhpcyBzdHJhdGVneSBpbnZvbHZlcyBsb29raW5nIGF0IHRoZSB0YXJnZXQgZW50cnkgcG9pbnQgYW5kIGlkZW50aWZ5aW5nIHRoZSBleHBvcnRlZFxuICogbmFtZSBvZiB0aGUgdGFyZ2V0ZWQgZGVjbGFyYXRpb24sIGFzIGl0IG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBkZWNsYXJlZCBuYW1lIChlLmcuIGFcbiAqIGRpcmVjdGl2ZSBtaWdodCBiZSBkZWNsYXJlZCBhcyBGb29EaXJJbXBsLCBidXQgZXhwb3J0ZWQgYXMgRm9vRGlyKS4gSWYgbm8gZXhwb3J0IGNhbiBiZSBmb3VuZFxuICogd2hpY2ggbWFwcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBkaXJlY3RpdmUsIGFuIGVycm9yIGlzIHRocm93bi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFic29sdXRlTW9kdWxlU3RyYXRlZ3kgaW1wbGVtZW50cyBSZWZlcmVuY2VFbWl0U3RyYXRlZ3kge1xuICAvKipcbiAgICogQSBjYWNoZSBvZiB0aGUgZXhwb3J0cyBvZiBzcGVjaWZpYyBtb2R1bGVzLCBiZWNhdXNlIHJlc29sdmluZyBhIG1vZHVsZSB0byBpdHMgZXhwb3J0cyBpcyBhXG4gICAqIGNvc3RseSBvcGVyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIG1vZHVsZUV4cG9ydHNDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8RGVjbGFyYXRpb25Ob2RlLCBzdHJpbmc+fG51bGw+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICBwcm90ZWN0ZWQgcHJvZ3JhbTogdHMuUHJvZ3JhbSwgcHJvdGVjdGVkIGNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICAgICAgcHJvdGVjdGVkIG1vZHVsZVJlc29sdmVyOiBNb2R1bGVSZXNvbHZlciwgcHJpdmF0ZSByZWZsZWN0aW9uSG9zdDogUmVmbGVjdGlvbkhvc3QpIHt9XG5cbiAgZW1pdChyZWY6IFJlZmVyZW5jZTx0cy5Ob2RlPiwgY29udGV4dDogdHMuU291cmNlRmlsZSwgaW1wb3J0RmxhZ3M6IEltcG9ydEZsYWdzKTogRXhwcmVzc2lvbnxudWxsIHtcbiAgICBpZiAocmVmLmJlc3RHdWVzc093bmluZ01vZHVsZSA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlcmUgaXMgbm8gbW9kdWxlIG5hbWUgYXZhaWxhYmxlIGZvciB0aGlzIFJlZmVyZW5jZSwgbWVhbmluZyBpdCB3YXMgYXJyaXZlZCBhdCB2aWEgYVxuICAgICAgLy8gcmVsYXRpdmUgcGF0aC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoIWlzRGVjbGFyYXRpb24ocmVmLm5vZGUpKSB7XG4gICAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSB0byBpbXBvcnQgc29tZXRoaW5nIHdoaWNoIGlzbid0IGEgZGVjbGFyYXRpb24uXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERlYnVnIGFzc2VydDogdW5hYmxlIHRvIGltcG9ydCBhIFJlZmVyZW5jZSB0byBub24tZGVjbGFyYXRpb24gb2YgdHlwZSAke1xuICAgICAgICAgIHRzLlN5bnRheEtpbmRbcmVmLm5vZGUua2luZF19LmApO1xuICAgIH0gZWxzZSBpZiAoKGltcG9ydEZsYWdzICYgSW1wb3J0RmxhZ3MuQWxsb3dUeXBlSW1wb3J0cykgPT09IDAgJiYgaXNUeXBlRGVjbGFyYXRpb24ocmVmLm5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEltcG9ydGluZyBhIHR5cGUtb25seSBkZWNsYXJhdGlvbiBvZiB0eXBlICR7XG4gICAgICAgICAgdHMuU3ludGF4S2luZFtyZWYubm9kZS5raW5kXX0gaW4gYSB2YWx1ZSBwb3NpdGlvbiBpcyBub3QgYWxsb3dlZC5gKTtcbiAgICB9XG5cbiAgICAvLyBUcnkgdG8gZmluZCB0aGUgZXhwb3J0ZWQgbmFtZSBvZiB0aGUgZGVjbGFyYXRpb24sIGlmIG9uZSBpcyBhdmFpbGFibGUuXG4gICAgY29uc3Qge3NwZWNpZmllciwgcmVzb2x1dGlvbkNvbnRleHR9ID0gcmVmLmJlc3RHdWVzc093bmluZ01vZHVsZTtcbiAgICBjb25zdCBzeW1ib2xOYW1lID0gdGhpcy5yZXNvbHZlSW1wb3J0TmFtZShzcGVjaWZpZXIsIHJlZi5ub2RlLCByZXNvbHV0aW9uQ29udGV4dCk7XG4gICAgaWYgKHN5bWJvbE5hbWUgPT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE8oYWx4aHViKTogbWFrZSB0aGlzIGVycm9yIGEgdHMuRGlhZ25vc3RpYyBwb2ludGluZyBhdCB3aGF0ZXZlciBjYXVzZWQgdGhpcyBpbXBvcnQgdG8gYmVcbiAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgU3ltYm9sICR7cmVmLmRlYnVnTmFtZX0gZGVjbGFyZWQgaW4gJHtcbiAgICAgICAgICBnZXRTb3VyY2VGaWxlKHJlZi5ub2RlKS5maWxlTmFtZX0gaXMgbm90IGV4cG9ydGVkIGZyb20gJHtzcGVjaWZpZXJ9IChpbXBvcnQgaW50byAke1xuICAgICAgICAgIGNvbnRleHQuZmlsZU5hbWV9KWApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRXh0ZXJuYWxFeHByKG5ldyBFeHRlcm5hbFJlZmVyZW5jZShzcGVjaWZpZXIsIHN5bWJvbE5hbWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUltcG9ydE5hbWUobW9kdWxlTmFtZTogc3RyaW5nLCB0YXJnZXQ6IERlY2xhcmF0aW9uTm9kZSwgZnJvbUZpbGU6IHN0cmluZyk6IHN0cmluZ1xuICAgICAgfG51bGwge1xuICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLmdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVOYW1lLCBmcm9tRmlsZSk7XG4gICAgaWYgKGV4cG9ydHMgIT09IG51bGwgJiYgZXhwb3J0cy5oYXModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuIGV4cG9ydHMuZ2V0KHRhcmdldCkhO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOlxuICAgICAgTWFwPERlY2xhcmF0aW9uTm9kZSwgc3RyaW5nPnxudWxsIHtcbiAgICBpZiAoIXRoaXMubW9kdWxlRXhwb3J0c0NhY2hlLmhhcyhtb2R1bGVOYW1lKSkge1xuICAgICAgdGhpcy5tb2R1bGVFeHBvcnRzQ2FjaGUuc2V0KG1vZHVsZU5hbWUsIHRoaXMuZW51bWVyYXRlRXhwb3J0c09mTW9kdWxlKG1vZHVsZU5hbWUsIGZyb21GaWxlKSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1vZHVsZUV4cG9ydHNDYWNoZS5nZXQobW9kdWxlTmFtZSkhO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVudW1lcmF0ZUV4cG9ydHNPZk1vZHVsZShzcGVjaWZpZXI6IHN0cmluZywgZnJvbUZpbGU6IHN0cmluZyk6XG4gICAgICBNYXA8RGVjbGFyYXRpb25Ob2RlLCBzdHJpbmc+fG51bGwge1xuICAgIC8vIEZpcnN0LCByZXNvbHZlIHRoZSBtb2R1bGUgc3BlY2lmaWVyIHRvIGl0cyBlbnRyeSBwb2ludCwgYW5kIGdldCB0aGUgdHMuU3ltYm9sIGZvciBpdC5cbiAgICBjb25zdCBlbnRyeVBvaW50RmlsZSA9IHRoaXMubW9kdWxlUmVzb2x2ZXIucmVzb2x2ZU1vZHVsZShzcGVjaWZpZXIsIGZyb21GaWxlKTtcbiAgICBpZiAoZW50cnlQb2ludEZpbGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLnJlZmxlY3Rpb25Ib3N0LmdldEV4cG9ydHNPZk1vZHVsZShlbnRyeVBvaW50RmlsZSk7XG4gICAgaWYgKGV4cG9ydHMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBleHBvcnRNYXAgPSBuZXcgTWFwPERlY2xhcmF0aW9uTm9kZSwgc3RyaW5nPigpO1xuICAgIGV4cG9ydHMuZm9yRWFjaCgoZGVjbGFyYXRpb24sIG5hbWUpID0+IHtcbiAgICAgIGV4cG9ydE1hcC5zZXQoZGVjbGFyYXRpb24ubm9kZSwgbmFtZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGV4cG9ydE1hcDtcbiAgfVxufVxuXG4vKipcbiAqIEEgYFJlZmVyZW5jZUVtaXRTdHJhdGVneWAgd2hpY2ggd2lsbCByZWZlciB0byBkZWNsYXJhdGlvbnMgdmlhIHJlbGF0aXZlIHBhdGhzLCBwcm92aWRlZCB0aGV5J3JlXG4gKiBib3RoIGluIHRoZSBsb2dpY2FsIHByb2plY3QgXCJzcGFjZVwiIG9mIHBhdGhzLlxuICpcbiAqIFRoaXMgaXMgdHJpY2tpZXIgdGhhbiBpdCBzb3VuZHMsIGFzIHRoZSB0d28gZmlsZXMgbWF5IGJlIGluIGRpZmZlcmVudCByb290IGRpcmVjdG9yaWVzIGluIHRoZVxuICogcHJvamVjdC4gU2ltcGx5IGNhbGN1bGF0aW5nIGEgZmlsZSBzeXN0ZW0gcmVsYXRpdmUgcGF0aCBiZXR3ZWVuIHRoZSB0d28gaXMgbm90IHN1ZmZpY2llbnQuXG4gKiBJbnN0ZWFkLCBgTG9naWNhbFByb2plY3RQYXRoYHMgYXJlIHVzZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dpY2FsUHJvamVjdFN0cmF0ZWd5IGltcGxlbWVudHMgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWZsZWN0b3I6IFJlZmxlY3Rpb25Ib3N0LCBwcml2YXRlIGxvZ2ljYWxGczogTG9naWNhbEZpbGVTeXN0ZW0pIHt9XG5cbiAgZW1pdChyZWY6IFJlZmVyZW5jZTx0cy5Ob2RlPiwgY29udGV4dDogdHMuU291cmNlRmlsZSk6IEV4cHJlc3Npb258bnVsbCB7XG4gICAgY29uc3QgZGVzdFNmID0gZ2V0U291cmNlRmlsZShyZWYubm9kZSk7XG5cbiAgICAvLyBDb21wdXRlIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIGltcG9ydGluZyBmaWxlIHRvIHRoZSBmaWxlIGJlaW5nIGltcG9ydGVkLiBUaGlzIGlzIGRvbmVcbiAgICAvLyBhcyBhIGxvZ2ljYWwgcGF0aCBjb21wdXRhdGlvbiwgYmVjYXVzZSB0aGUgdHdvIGZpbGVzIG1pZ2h0IGJlIGluIGRpZmZlcmVudCByb290RGlycy5cbiAgICBjb25zdCBkZXN0UGF0aCA9IHRoaXMubG9naWNhbEZzLmxvZ2ljYWxQYXRoT2ZTZihkZXN0U2YpO1xuICAgIGlmIChkZXN0UGF0aCA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlIGltcG9ydGVkIGZpbGUgaXMgbm90IHdpdGhpbiB0aGUgbG9naWNhbCBwcm9qZWN0IGZpbGVzeXN0ZW0uXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5QYXRoID0gdGhpcy5sb2dpY2FsRnMubG9naWNhbFBhdGhPZlNmKGNvbnRleHQpO1xuICAgIGlmIChvcmlnaW5QYXRoID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYERlYnVnIGFzc2VydDogYXR0ZW1wdCB0byBpbXBvcnQgZnJvbSAke2NvbnRleHQuZmlsZU5hbWV9IGJ1dCBpdCdzIG91dHNpZGUgdGhlIHByb2dyYW0/YCk7XG4gICAgfVxuXG4gICAgLy8gVGhlcmUncyBubyB3YXkgdG8gZW1pdCBhIHJlbGF0aXZlIHJlZmVyZW5jZSBmcm9tIGEgZmlsZSB0byBpdHNlbGYuXG4gICAgaWYgKGRlc3RQYXRoID09PSBvcmlnaW5QYXRoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gZmluZEV4cG9ydGVkTmFtZU9mTm9kZShyZWYubm9kZSwgZGVzdFNmLCB0aGlzLnJlZmxlY3Rvcik7XG4gICAgaWYgKG5hbWUgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoZSB0YXJnZXQgZGVjbGFyYXRpb24gaXNuJ3QgZXhwb3J0ZWQgZnJvbSB0aGUgZmlsZSBpdCdzIGRlY2xhcmVkIGluLiBUaGlzIGlzIGFuIGlzc3VlIVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gV2l0aCBib3RoIGZpbGVzIGV4cHJlc3NlZCBhcyBMb2dpY2FsUHJvamVjdFBhdGhzLCBnZXR0aW5nIHRoZSBtb2R1bGUgc3BlY2lmaWVyIGFzIGEgcmVsYXRpdmVcbiAgICAvLyBwYXRoIGlzIG5vdyBzdHJhaWdodGZvcndhcmQuXG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IExvZ2ljYWxQcm9qZWN0UGF0aC5yZWxhdGl2ZVBhdGhCZXR3ZWVuKG9yaWdpblBhdGgsIGRlc3RQYXRoKTtcbiAgICByZXR1cm4gbmV3IEV4dGVybmFsRXhwcih7bW9kdWxlTmFtZSwgbmFtZX0pO1xuICB9XG59XG5cbi8qKlxuICogQSBgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5YCB3aGljaCBjb25zdHJ1Y3RzIHJlbGF0aXZlcyBwYXRocyBiZXR3ZWVuIGB0cy5Tb3VyY2VGaWxlYHMuXG4gKlxuICogVGhpcyBzdHJhdGVneSBjYW4gYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBgcm9vdERpcmAvYHJvb3REaXJzYCBzdHJ1Y3R1cmUgZm9yIHRoZSBwcm9qZWN0IHdoaWNoXG4gKiBuZWNlc3NpdGF0ZXMgdGhlIHN0cm9uZ2VyIGxvZ2ljIG9mIGBMb2dpY2FsUHJvamVjdFN0cmF0ZWd5YC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGF0aXZlUGF0aFN0cmF0ZWd5IGltcGxlbWVudHMgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWZsZWN0b3I6IFJlZmxlY3Rpb25Ib3N0KSB7fVxuXG4gIGVtaXQocmVmOiBSZWZlcmVuY2U8dHMuTm9kZT4sIGNvbnRleHQ6IHRzLlNvdXJjZUZpbGUpOiBFeHByZXNzaW9ufG51bGwge1xuICAgIGNvbnN0IGRlc3RTZiA9IGdldFNvdXJjZUZpbGUocmVmLm5vZGUpO1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9XG4gICAgICAgIHJlbGF0aXZlKGRpcm5hbWUoYWJzb2x1dGVGcm9tU291cmNlRmlsZShjb250ZXh0KSksIGFic29sdXRlRnJvbVNvdXJjZUZpbGUoZGVzdFNmKSk7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IHRvUmVsYXRpdmVJbXBvcnQoc3RyaXBFeHRlbnNpb24ocmVsYXRpdmVQYXRoKSk7XG5cbiAgICBjb25zdCBuYW1lID0gZmluZEV4cG9ydGVkTmFtZU9mTm9kZShyZWYubm9kZSwgZGVzdFNmLCB0aGlzLnJlZmxlY3Rvcik7XG4gICAgcmV0dXJuIG5ldyBFeHRlcm5hbEV4cHIoe21vZHVsZU5hbWUsIG5hbWV9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgYFJlZmVyZW5jZUVtaXRTdHJhdGVneWAgd2hpY2ggdXNlcyBhIGBVbmlmaWVkTW9kdWxlc0hvc3RgIHRvIGdlbmVyYXRlIGFic29sdXRlIGltcG9ydFxuICogcmVmZXJlbmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFVuaWZpZWRNb2R1bGVzU3RyYXRlZ3kgaW1wbGVtZW50cyBSZWZlcmVuY2VFbWl0U3RyYXRlZ3kge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QsIHByaXZhdGUgdW5pZmllZE1vZHVsZXNIb3N0OiBVbmlmaWVkTW9kdWxlc0hvc3QpIHt9XG5cbiAgZW1pdChyZWY6IFJlZmVyZW5jZTx0cy5Ob2RlPiwgY29udGV4dDogdHMuU291cmNlRmlsZSk6IEV4cHJlc3Npb258bnVsbCB7XG4gICAgY29uc3QgZGVzdFNmID0gZ2V0U291cmNlRmlsZShyZWYubm9kZSk7XG4gICAgY29uc3QgbmFtZSA9IGZpbmRFeHBvcnRlZE5hbWVPZk5vZGUocmVmLm5vZGUsIGRlc3RTZiwgdGhpcy5yZWZsZWN0b3IpO1xuICAgIGlmIChuYW1lID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGVOYW1lID1cbiAgICAgICAgdGhpcy51bmlmaWVkTW9kdWxlc0hvc3QuZmlsZU5hbWVUb01vZHVsZU5hbWUoZGVzdFNmLmZpbGVOYW1lLCBjb250ZXh0LmZpbGVOYW1lKTtcblxuICAgIHJldHVybiBuZXcgRXh0ZXJuYWxFeHByKHttb2R1bGVOYW1lLCBuYW1lfSk7XG4gIH1cbn1cbiJdfQ==
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvaW1wb3J0cy9zcmMvZW1pdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0lBQUE7Ozs7OztPQU1HO0lBQ0gsOENBQStGO0lBQy9GLCtCQUFpQztJQUdqQywyRUFBcUk7SUFDckksNkVBQTBEO0lBRTFELGtGQUE0RztJQUU1Ryx1RkFBcUQ7SUFLckQ7O09BRUc7SUFDSCxJQUFZLFdBMkJYO0lBM0JELFdBQVksV0FBVztRQUNyQiw2Q0FBVyxDQUFBO1FBRVg7Ozs7O1dBS0c7UUFDSCxpRUFBcUIsQ0FBQTtRQUVyQjs7Ozs7V0FLRztRQUNILHlEQUFpQixDQUFBO1FBRWpCOzs7Ozs7V0FNRztRQUNILHFFQUF1QixDQUFBO0lBQ3pCLENBQUMsRUEzQlcsV0FBVyxHQUFYLG1CQUFXLEtBQVgsbUJBQVcsUUEyQnRCO0lBMEREOzs7OztPQUtHO0lBQ0g7UUFDRSwwQkFBb0IsVUFBbUM7WUFBbkMsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUFBRyxDQUFDO1FBRTNELCtCQUFJLEdBQUosVUFBSyxHQUFjLEVBQUUsT0FBc0IsRUFBRSxXQUEyQzs7WUFBM0MsNEJBQUEsRUFBQSxjQUEyQixXQUFXLENBQUMsSUFBSTs7Z0JBRXRGLEtBQXVCLElBQUEsS0FBQSxpQkFBQSxJQUFJLENBQUMsVUFBVSxDQUFBLGdCQUFBLDRCQUFFO29CQUFuQyxJQUFNLFFBQVEsV0FBQTtvQkFDakIsSUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO29CQUN6RCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7d0JBQ3BCLE9BQU8sT0FBTyxDQUFDO3FCQUNoQjtpQkFDRjs7Ozs7Ozs7O1lBQ0QsTUFBTSxJQUFJLEtBQUss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RUFBQyxDQUFDO2dCQUNoRCxZQUFZLEVBQUUsTUFBTTthQUNyQixDQUFDO1FBQ0osQ0FBQztRQUNILDZCQUFDO0lBQUQsQ0FBQyxBQWxCRCxJQWtCQztJQWxCWSx3REFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7RXhwcmVzc2lvbiwgRXh0ZXJuYWxFeHByLCBFeHRlcm5hbFJlZmVyZW5jZSwgV3JhcHBlZE5vZGVFeHByfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtVbmlmaWVkTW9kdWxlc0hvc3R9IGZyb20gJy4uLy4uL2NvcmUvYXBpJztcbmltcG9ydCB7YWJzb2x1dGVGcm9tU291cmNlRmlsZSwgZGlybmFtZSwgTG9naWNhbEZpbGVTeXN0ZW0sIExvZ2ljYWxQcm9qZWN0UGF0aCwgcmVsYXRpdmUsIHRvUmVsYXRpdmVJbXBvcnR9IGZyb20gJy4uLy4uL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7c3RyaXBFeHRlbnNpb259IGZyb20gJy4uLy4uL2ZpbGVfc3lzdGVtL3NyYy91dGlsJztcbmltcG9ydCB7RGVjbGFyYXRpb25Ob2RlLCBSZWZsZWN0aW9uSG9zdH0gZnJvbSAnLi4vLi4vcmVmbGVjdGlvbic7XG5pbXBvcnQge2dldFNvdXJjZUZpbGUsIGlzRGVjbGFyYXRpb24sIGlzVHlwZURlY2xhcmF0aW9uLCBub2RlTmFtZUZvckVycm9yfSBmcm9tICcuLi8uLi91dGlsL3NyYy90eXBlc2NyaXB0JztcblxuaW1wb3J0IHtmaW5kRXhwb3J0ZWROYW1lT2ZOb2RlfSBmcm9tICcuL2ZpbmRfZXhwb3J0JztcbmltcG9ydCB7UmVmZXJlbmNlfSBmcm9tICcuL3JlZmVyZW5jZXMnO1xuaW1wb3J0IHtNb2R1bGVSZXNvbHZlcn0gZnJvbSAnLi9yZXNvbHZlcic7XG5cblxuLyoqXG4gKiBGbGFncyB3aGljaCBhbHRlciB0aGUgaW1wb3J0cyBnZW5lcmF0ZWQgYnkgdGhlIGBSZWZlcmVuY2VFbWl0dGVyYC5cbiAqL1xuZXhwb3J0IGVudW0gSW1wb3J0RmxhZ3Mge1xuICBOb25lID0gMHgwMCxcblxuICAvKipcbiAgICogRm9yY2UgdGhlIGdlbmVyYXRpb24gb2YgYSBuZXcgaW1wb3J0IHdoZW4gZ2VuZXJhdGluZyBhIHJlZmVyZW5jZSwgZXZlbiBpZiBhbiBpZGVudGlmaWVyIGFscmVhZHlcbiAgICogZXhpc3RzIGluIHRoZSB0YXJnZXQgZmlsZSB3aGljaCBjb3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gICAqXG4gICAqIFRoaXMgaXMgc29tZXRpbWVzIHJlcXVpcmVkIGlmIHRoZXJlJ3MgYSByaXNrIFR5cGVTY3JpcHQgbWlnaHQgcmVtb3ZlIGltcG9ydHMgZHVyaW5nIGVtaXQuXG4gICAqL1xuICBGb3JjZU5ld0ltcG9ydCA9IDB4MDEsXG5cbiAgLyoqXG4gICAqIERvbid0IG1ha2UgdXNlIG9mIGFueSBhbGlhc2luZyBpbmZvcm1hdGlvbiB3aGVuIGVtaXR0aW5nIGEgcmVmZXJlbmNlLlxuICAgKlxuICAgKiBUaGlzIGlzIHNvbWV0aW1lcyByZXF1aXJlZCBpZiBlbWl0dGluZyBpbnRvIGEgY29udGV4dCB3aGVyZSBnZW5lcmF0ZWQgcmVmZXJlbmNlcyB3aWxsIGJlIGZlZFxuICAgKiBpbnRvIFR5cGVTY3JpcHQgYW5kIHR5cGUtY2hlY2tlZCAoc3VjaCBhcyBpbiB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nKS5cbiAgICovXG4gIE5vQWxpYXNpbmcgPSAweDAyLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhbiBpbXBvcnQgdG8gYSB0eXBlLW9ubHkgZGVjbGFyYXRpb24gaXMgYWxsb3dlZC5cbiAgICpcbiAgICogRm9yIHJlZmVyZW5jZXMgdGhhdCBvY2N1ciBpbiB0eXBlLXBvc2l0aW9ucywgdGhlIHJlZmVycmVkIGRlY2xhcmF0aW9uIG1heSBiZSBhIHR5cGUtb25seVxuICAgKiBkZWNsYXJhdGlvbiB0aGF0IGlzIG5vdCByZXRhaW5lZCBkdXJpbmcgZW1pdC4gSW5jbHVkaW5nIHRoaXMgZmxhZyBhbGxvd3MgdG8gZW1pdCByZWZlcmVuY2VzIHRvXG4gICAqIHR5cGUtb25seSBkZWNsYXJhdGlvbnMgYXMgdXNlZCBpbiBlLmcuIHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcuXG4gICAqL1xuICBBbGxvd1R5cGVJbXBvcnRzID0gMHgwNCxcbn1cblxuLyoqXG4gKiBBbiBlbWl0dGVyIHN0cmF0ZWd5IGhhcyB0aGUgYWJpbGl0eSB0byBpbmRpY2F0ZSB3aGljaCBgdHMuU291cmNlRmlsZWAgaXMgYmVpbmcgaW1wb3J0ZWQgYnkgdGhlXG4gKiBleHByZXNzaW9uIHRoYXQgaXQgaGFzIGdlbmVyYXRlZC4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgZm9yIGNvbnN1bWVycyBvZiB0aGUgZW1pdHRlZFxuICogcmVmZXJlbmNlIHRoYXQgd291bGQgb3RoZXJ3aXNlIGhhdmUgdG8gcGVyZm9ybSBhIHJlbGF0aXZlbHkgZXhwZW5zaXZlIG1vZHVsZSByZXNvbHV0aW9uIHN0ZXAsXG4gKiBlLmcuIGZvciBjeWNsaWMgaW1wb3J0IGFuYWx5c2lzLiBJbiBjYXNlcyB0aGUgZW1pdHRlciBpcyB1bmFibGUgdG8gZGVmaW5pdGl2ZWx5IGRldGVybWluZSB0aGVcbiAqIGltcG9ydGVkIHNvdXJjZSBmaWxlIG9yIGEgY29tcHV0YXRpb24gd291bGQgYmUgcmVxdWlyZWQgdG8gYWN0dWFsbHkgZGV0ZXJtaW5lIHRoZSBpbXBvcnRlZFxuICogc291cmNlIGZpbGUsIHRoZW4gYCd1bmtub3duJ2Agc2hvdWxkIGJlIHJldHVybmVkLiBJZiB0aGUgZ2VuZXJhdGVkIGV4cHJlc3Npb24gZG9lcyBub3QgcmVwcmVzZW50XG4gKiBhbiBpbXBvcnQgdGhlbiBgbnVsbGAgc2hvdWxkIGJlIHVzZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEltcG9ydGVkRmlsZSA9IHRzLlNvdXJjZUZpbGV8J3Vua25vd24nfG51bGw7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZW1pdHRlZCBleHByZXNzaW9uIG9mIGEgYFJlZmVyZW5jZWAgdGhhdCBpcyB2YWxpZCBpbiB0aGUgc291cmNlIGZpbGUgaXQgd2FzXG4gKiBlbWl0dGVkIGZyb20uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdHRlZFJlZmVyZW5jZSB7XG4gIC8qKlxuICAgKiBUaGUgZXhwcmVzc2lvbiB0aGF0IHJlZmVycyB0byBgUmVmZXJlbmNlYC5cbiAgICovXG4gIGV4cHJlc3Npb246IEV4cHJlc3Npb247XG5cbiAgLyoqXG4gICAqIFRoZSBgdHMuU291cmNlRmlsZWAgdGhhdCBpcyBpbXBvcnRlZCBieSBgZXhwcmVzc2lvbmAuIFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzb3VyY2UgZmlsZVxuICAgKiBvZiB0aGUgYFJlZmVyZW5jZWAncyBkZWNsYXJhdGlvbiBub2RlLCBhcyB0aGUgcmVmZXJlbmNlIG1heSBoYXZlIGJlZW4gcmV3cml0dGVuIHRocm91Z2ggYW5cbiAgICogYWxpYXMgZXhwb3J0LiBJdCBjb3VsZCBhbHNvIGJlIGBudWxsYCBpZiBgZXhwcmVzc2lvbmAgaXMgYSBsb2NhbCBpZGVudGlmaWVyLCBvciBgJ3Vua25vd24nYCBpZlxuICAgKiB0aGUgZXhhY3Qgc291cmNlIGZpbGUgdGhhdCBpcyBiZWluZyBpbXBvcnRlZCBpcyBub3Qga25vd24gdG8gdGhlIGVtaXR0ZXIuXG4gICAqL1xuICBpbXBvcnRlZEZpbGU6IEltcG9ydGVkRmlsZTtcbn1cblxuLyoqXG4gKiBBIHBhcnRpY3VsYXIgc3RyYXRlZ3kgZm9yIGdlbmVyYXRpbmcgYW4gZXhwcmVzc2lvbiB3aGljaCByZWZlcnMgdG8gYSBgUmVmZXJlbmNlYC5cbiAqXG4gKiBUaGVyZSBhcmUgbWFueSBwb3RlbnRpYWwgd2F5cyBhIGdpdmVuIGBSZWZlcmVuY2VgIGNvdWxkIGJlIHJlZmVycmVkIHRvIGluIHRoZSBjb250ZXh0IG9mIGEgZ2l2ZW5cbiAqIGZpbGUuIEEgbG9jYWwgZGVjbGFyYXRpb24gY291bGQgYmUgYXZhaWxhYmxlLCB0aGUgYFJlZmVyZW5jZWAgY291bGQgYmUgaW1wb3J0YWJsZSB2aWEgYSByZWxhdGl2ZVxuICogaW1wb3J0IHdpdGhpbiB0aGUgcHJvamVjdCwgb3IgYW4gYWJzb2x1dGUgaW1wb3J0IGludG8gYG5vZGVfbW9kdWxlc2AgbWlnaHQgYmUgbmVjZXNzYXJ5LlxuICpcbiAqIERpZmZlcmVudCBgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5YCBpbXBsZW1lbnRhdGlvbnMgaW1wbGVtZW50IHNwZWNpZmljIGxvZ2ljIGZvciBnZW5lcmF0aW5nIHN1Y2hcbiAqIHJlZmVyZW5jZXMuIEEgc2luZ2xlIHN0cmF0ZWd5IChzdWNoIGFzIHVzaW5nIGEgbG9jYWwgZGVjbGFyYXRpb24pIG1heSBub3QgYWx3YXlzIGJlIGFibGUgdG9cbiAqIGdlbmVyYXRlIGFuIGV4cHJlc3Npb24gZm9yIGV2ZXJ5IGBSZWZlcmVuY2VgIChmb3IgZXhhbXBsZSwgaWYgbm8gbG9jYWwgaWRlbnRpZmllciBpcyBhdmFpbGFibGUpLFxuICogYW5kIG1heSByZXR1cm4gYG51bGxgIGluIHN1Y2ggYSBjYXNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZmVyZW5jZUVtaXRTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBFbWl0IGFuIGBFeHByZXNzaW9uYCB3aGljaCByZWZlcnMgdG8gdGhlIGdpdmVuIGBSZWZlcmVuY2VgIGluIHRoZSBjb250ZXh0IG9mIGEgcGFydGljdWxhclxuICAgKiBzb3VyY2UgZmlsZSwgaWYgcG9zc2libGUuXG4gICAqXG4gICAqIEBwYXJhbSByZWYgdGhlIGBSZWZlcmVuY2VgIGZvciB3aGljaCB0byBnZW5lcmF0ZSBhbiBleHByZXNzaW9uXG4gICAqIEBwYXJhbSBjb250ZXh0IHRoZSBzb3VyY2UgZmlsZSBpbiB3aGljaCB0aGUgYEV4cHJlc3Npb25gIG11c3QgYmUgdmFsaWRcbiAgICogQHBhcmFtIGltcG9ydEZsYWdzIGEgZmxhZyB3aGljaCBjb250cm9scyB3aGV0aGVyIGltcG9ydHMgc2hvdWxkIGJlIGdlbmVyYXRlZCBvciBub3RcbiAgICogQHJldHVybnMgYW4gYEVtaXR0ZWRSZWZlcmVuY2VgIHdoaWNoIHJlZmVycyB0byB0aGUgYFJlZmVyZW5jZWAsIG9yIGBudWxsYCBpZiBub25lIGNhbiBiZVxuICAgKiAgIGdlbmVyYXRlZFxuICAgKi9cbiAgZW1pdChyZWY6IFJlZmVyZW5jZSwgY29udGV4dDogdHMuU291cmNlRmlsZSwgaW1wb3J0RmxhZ3M6IEltcG9ydEZsYWdzKTogRW1pdHRlZFJlZmVyZW5jZXxudWxsO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBgRXhwcmVzc2lvbmBzIHdoaWNoIHJlZmVyIHRvIGBSZWZlcmVuY2VgcyBpbiBhIGdpdmVuIGNvbnRleHQuXG4gKlxuICogQSBgUmVmZXJlbmNlRW1pdHRlcmAgdXNlcyBvbmUgb3IgbW9yZSBgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5YCBpbXBsZW1lbnRhdGlvbnMgdG8gcHJvZHVjZSBhblxuICogYEV4cHJlc3Npb25gIHdoaWNoIHJlZmVycyB0byBhIGBSZWZlcmVuY2VgIGluIHRoZSBjb250ZXh0IG9mIGEgcGFydGljdWxhciBmaWxlLlxuICovXG5leHBvcnQgY2xhc3MgUmVmZXJlbmNlRW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RyYXRlZ2llczogUmVmZXJlbmNlRW1pdFN0cmF0ZWd5W10pIHt9XG5cbiAgZW1pdChyZWY6IFJlZmVyZW5jZSwgY29udGV4dDogdHMuU291cmNlRmlsZSwgaW1wb3J0RmxhZ3M6IEltcG9ydEZsYWdzID0gSW1wb3J0RmxhZ3MuTm9uZSk6XG4gICAgICBFbWl0dGVkUmVmZXJlbmNlIHtcbiAgICBmb3IgKGNvbnN0IHN0cmF0ZWd5IG9mIHRoaXMuc3RyYXRlZ2llcykge1xuICAgICAgY29uc3QgZW1pdHRlZCA9IHN0cmF0ZWd5LmVtaXQocmVmLCBjb250ZXh0LCBpbXBvcnRGbGFncyk7XG4gICAgICBpZiAoZW1pdHRlZCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZW1pdHRlZDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gd3JpdGUgYSByZWZlcmVuY2UgdG8gJHtub2RlTmFtZUZvckVycm9yKHJlZi5ub2RlKX0gaW4gJHtcbiAgICAgICAgcmVmLm5vZGUuZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lfSBmcm9tICR7Y29udGV4dC5maWxlTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgYFJlZmVyZW5jZUVtaXRTdHJhdGVneWAgd2hpY2ggd2lsbCByZWZlciB0byBkZWNsYXJhdGlvbnMgYnkgYW55IGxvY2FsIGB0cy5JZGVudGlmaWVyYHMsIGlmXG4gKiBzdWNoIGlkZW50aWZpZXJzIGFyZSBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2NhbElkZW50aWZpZXJTdHJhdGVneSBpbXBsZW1lbnRzIFJlZmVyZW5jZUVtaXRTdHJhdGVneSB7XG4gIGVtaXQocmVmOiBSZWZlcmVuY2UsIGNvbnRleHQ6IHRzLlNvdXJjZUZpbGUsIGltcG9ydEZsYWdzOiBJbXBvcnRGbGFncyk6IEVtaXR0ZWRSZWZlcmVuY2V8bnVsbCB7XG4gICAgY29uc3QgcmVmU2YgPSBnZXRTb3VyY2VGaWxlKHJlZi5ub2RlKTtcblxuICAgIC8vIElmIHRoZSBlbWl0dGVyIGhhcyBzcGVjaWZpZWQgRm9yY2VOZXdJbXBvcnQsIHRoZW4gTG9jYWxJZGVudGlmaWVyU3RyYXRlZ3kgc2hvdWxkIG5vdCB1c2UgYVxuICAgIC8vIGxvY2FsIGlkZW50aWZpZXIgYXQgYWxsLCAqZXhjZXB0KiBpbiB0aGUgc291cmNlIGZpbGUgd2hlcmUgdGhlIG5vZGUgaXMgYWN0dWFsbHkgZGVjbGFyZWQuXG4gICAgaWYgKGltcG9ydEZsYWdzICYgSW1wb3J0RmxhZ3MuRm9yY2VOZXdJbXBvcnQgJiYgcmVmU2YgIT09IGNvbnRleHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIElmIHJlZmVyZW5jZWQgbm9kZSBpcyBub3QgYW4gYWN0dWFsIFRTIGRlY2xhcmF0aW9uIChlLmcuIGBjbGFzcyBGb29gIG9yIGBmdW5jdGlvbiBmb28oKSB7fWAsXG4gICAgLy8gZXRjKSBhbmQgaXQgaXMgaW4gdGhlIGN1cnJlbnQgZmlsZSB0aGVuIGp1c3QgdXNlIGl0IGRpcmVjdGx5LlxuICAgIC8vIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBjb3VsZCBiZSBhIHByb3BlcnR5IGFjY2VzcyAoZS5nLiBgZXhwb3J0cy5mb29gKS4gSW5cbiAgICAvLyBzdWNoIGEgY2FzZSwgdGhlIHJlZmVyZW5jZSdzIGBpZGVudGl0aWVzYCBwcm9wZXJ0eSB3b3VsZCBiZSBgW2Zvb11gLCB3aGljaCB3b3VsZCByZXN1bHQgaW4gYW5cbiAgICAvLyBpbnZhbGlkIGVtaXNzaW9uIG9mIGEgZnJlZS1zdGFuZGluZyBgZm9vYCBpZGVudGlmaWVyLCByYXRoZXIgdGhhbiBgZXhwb3J0cy5mb29gLlxuICAgIGlmICghaXNEZWNsYXJhdGlvbihyZWYubm9kZSkgJiYgcmVmU2YgPT09IGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cHJlc3Npb246IG5ldyBXcmFwcGVkTm9kZUV4cHIocmVmLm5vZGUpLFxuICAgICAgICBpbXBvcnRlZEZpbGU6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEEgUmVmZXJlbmNlIGNhbiBoYXZlIG11bHRpcGxlIGlkZW50aXRpZXMgaW4gZGlmZmVyZW50IGZpbGVzLCBzbyBpdCBtYXkgYWxyZWFkeSBoYXZlIGFuXG4gICAgLy8gSWRlbnRpZmllciBpbiB0aGUgcmVxdWVzdGVkIGNvbnRleHQgZmlsZS5cbiAgICBjb25zdCBpZGVudGlmaWVyID0gcmVmLmdldElkZW50aXR5SW4oY29udGV4dCk7XG4gICAgaWYgKGlkZW50aWZpZXIgIT09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV4cHJlc3Npb246IG5ldyBXcmFwcGVkTm9kZUV4cHIoaWRlbnRpZmllciksXG4gICAgICAgIGltcG9ydGVkRmlsZTogbnVsbCxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGV4cG9ydGVkIGRlY2xhcmF0aW9ucyBmcm9tIGEgbW9kdWxlIHNvdXJjZSBmaWxlLlxuICovXG5pbnRlcmZhY2UgTW9kdWxlRXhwb3J0cyB7XG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGZpbGUgb2YgdGhlIG1vZHVsZS5cbiAgICovXG4gIG1vZHVsZTogdHMuU291cmNlRmlsZTtcblxuICAvKipcbiAgICogVGhlIG1hcCBvZiBkZWNsYXJhdGlvbnMgdG8gdGhlaXIgZXhwb3J0ZWQgbmFtZS5cbiAgICovXG4gIGV4cG9ydE1hcDogTWFwPERlY2xhcmF0aW9uTm9kZSwgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBIGBSZWZlcmVuY2VFbWl0U3RyYXRlZ3lgIHdoaWNoIHdpbGwgcmVmZXIgdG8gZGVjbGFyYXRpb25zIHRoYXQgY29tZSBmcm9tIGBub2RlX21vZHVsZXNgIHVzaW5nXG4gKiBhbiBhYnNvbHV0ZSBpbXBvcnQuXG4gKlxuICogUGFydCBvZiB0aGlzIHN0cmF0ZWd5IGludm9sdmVzIGxvb2tpbmcgYXQgdGhlIHRhcmdldCBlbnRyeSBwb2ludCBhbmQgaWRlbnRpZnlpbmcgdGhlIGV4cG9ydGVkXG4gKiBuYW1lIG9mIHRoZSB0YXJnZXRlZCBkZWNsYXJhdGlvbiwgYXMgaXQgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gdGhlIGRlY2xhcmVkIG5hbWUgKGUuZy4gYVxuICogZGlyZWN0aXZlIG1pZ2h0IGJlIGRlY2xhcmVkIGFzIEZvb0RpckltcGwsIGJ1dCBleHBvcnRlZCBhcyBGb29EaXIpLiBJZiBubyBleHBvcnQgY2FuIGJlIGZvdW5kXG4gKiB3aGljaCBtYXBzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGRpcmVjdGl2ZSwgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgY2xhc3MgQWJzb2x1dGVNb2R1bGVTdHJhdGVneSBpbXBsZW1lbnRzIFJlZmVyZW5jZUVtaXRTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBBIGNhY2hlIG9mIHRoZSBleHBvcnRzIG9mIHNwZWNpZmljIG1vZHVsZXMsIGJlY2F1c2UgcmVzb2x2aW5nIGEgbW9kdWxlIHRvIGl0cyBleHBvcnRzIGlzIGFcbiAgICogY29zdGx5IG9wZXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgbW9kdWxlRXhwb3J0c0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIE1vZHVsZUV4cG9ydHN8bnVsbD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByb3RlY3RlZCBwcm9ncmFtOiB0cy5Qcm9ncmFtLCBwcm90ZWN0ZWQgY2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgICBwcm90ZWN0ZWQgbW9kdWxlUmVzb2x2ZXI6IE1vZHVsZVJlc29sdmVyLCBwcml2YXRlIHJlZmxlY3Rpb25Ib3N0OiBSZWZsZWN0aW9uSG9zdCkge31cblxuICBlbWl0KHJlZjogUmVmZXJlbmNlLCBjb250ZXh0OiB0cy5Tb3VyY2VGaWxlLCBpbXBvcnRGbGFnczogSW1wb3J0RmxhZ3MpOiBFbWl0dGVkUmVmZXJlbmNlfG51bGwge1xuICAgIGlmIChyZWYuYmVzdEd1ZXNzT3duaW5nTW9kdWxlID09PSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBpcyBubyBtb2R1bGUgbmFtZSBhdmFpbGFibGUgZm9yIHRoaXMgUmVmZXJlbmNlLCBtZWFuaW5nIGl0IHdhcyBhcnJpdmVkIGF0IHZpYSBhXG4gICAgICAvLyByZWxhdGl2ZSBwYXRoLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmICghaXNEZWNsYXJhdGlvbihyZWYubm9kZSkpIHtcbiAgICAgIC8vIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGltcG9ydCBzb21ldGhpbmcgd2hpY2ggaXNuJ3QgYSBkZWNsYXJhdGlvbi5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGVidWcgYXNzZXJ0OiB1bmFibGUgdG8gaW1wb3J0IGEgUmVmZXJlbmNlIHRvIG5vbi1kZWNsYXJhdGlvbiBvZiB0eXBlICR7XG4gICAgICAgICAgdHMuU3ludGF4S2luZFtyZWYubm9kZS5raW5kXX0uYCk7XG4gICAgfSBlbHNlIGlmICgoaW1wb3J0RmxhZ3MgJiBJbXBvcnRGbGFncy5BbGxvd1R5cGVJbXBvcnRzKSA9PT0gMCAmJiBpc1R5cGVEZWNsYXJhdGlvbihyZWYubm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW1wb3J0aW5nIGEgdHlwZS1vbmx5IGRlY2xhcmF0aW9uIG9mIHR5cGUgJHtcbiAgICAgICAgICB0cy5TeW50YXhLaW5kW3JlZi5ub2RlLmtpbmRdfSBpbiBhIHZhbHVlIHBvc2l0aW9uIGlzIG5vdCBhbGxvd2VkLmApO1xuICAgIH1cblxuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBleHBvcnRlZCBuYW1lIG9mIHRoZSBkZWNsYXJhdGlvbiwgaWYgb25lIGlzIGF2YWlsYWJsZS5cbiAgICBjb25zdCB7c3BlY2lmaWVyLCByZXNvbHV0aW9uQ29udGV4dH0gPSByZWYuYmVzdEd1ZXNzT3duaW5nTW9kdWxlO1xuICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLmdldEV4cG9ydHNPZk1vZHVsZShzcGVjaWZpZXIsIHJlc29sdXRpb25Db250ZXh0KTtcbiAgICBpZiAoZXhwb3J0cyA9PT0gbnVsbCB8fCAhZXhwb3J0cy5leHBvcnRNYXAuaGFzKHJlZi5ub2RlKSkge1xuICAgICAgLy8gVE9ETyhhbHhodWIpOiBtYWtlIHRoaXMgZXJyb3IgYSB0cy5EaWFnbm9zdGljIHBvaW50aW5nIGF0IHdoYXRldmVyIGNhdXNlZCB0aGlzIGltcG9ydCB0byBiZVxuICAgICAgLy8gdHJpZ2dlcmVkLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTeW1ib2wgJHtyZWYuZGVidWdOYW1lfSBkZWNsYXJlZCBpbiAke1xuICAgICAgICAgIGdldFNvdXJjZUZpbGUocmVmLm5vZGUpLmZpbGVOYW1lfSBpcyBub3QgZXhwb3J0ZWQgZnJvbSAke3NwZWNpZmllcn0gKGltcG9ydCBpbnRvICR7XG4gICAgICAgICAgY29udGV4dC5maWxlTmFtZX0pYCk7XG4gICAgfVxuICAgIGNvbnN0IHN5bWJvbE5hbWUgPSBleHBvcnRzLmV4cG9ydE1hcC5nZXQocmVmLm5vZGUpITtcblxuICAgIHJldHVybiB7XG4gICAgICBleHByZXNzaW9uOiBuZXcgRXh0ZXJuYWxFeHByKG5ldyBFeHRlcm5hbFJlZmVyZW5jZShzcGVjaWZpZXIsIHN5bWJvbE5hbWUpKSxcbiAgICAgIGltcG9ydGVkRmlsZTogZXhwb3J0cy5tb2R1bGUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZU5hbWU6IHN0cmluZywgZnJvbUZpbGU6IHN0cmluZyk6IE1vZHVsZUV4cG9ydHN8bnVsbCB7XG4gICAgaWYgKCF0aGlzLm1vZHVsZUV4cG9ydHNDYWNoZS5oYXMobW9kdWxlTmFtZSkpIHtcbiAgICAgIHRoaXMubW9kdWxlRXhwb3J0c0NhY2hlLnNldChtb2R1bGVOYW1lLCB0aGlzLmVudW1lcmF0ZUV4cG9ydHNPZk1vZHVsZShtb2R1bGVOYW1lLCBmcm9tRmlsZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tb2R1bGVFeHBvcnRzQ2FjaGUuZ2V0KG1vZHVsZU5hbWUpITtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbnVtZXJhdGVFeHBvcnRzT2ZNb2R1bGUoc3BlY2lmaWVyOiBzdHJpbmcsIGZyb21GaWxlOiBzdHJpbmcpOiBNb2R1bGVFeHBvcnRzfG51bGwge1xuICAgIC8vIEZpcnN0LCByZXNvbHZlIHRoZSBtb2R1bGUgc3BlY2lmaWVyIHRvIGl0cyBlbnRyeSBwb2ludCwgYW5kIGdldCB0aGUgdHMuU3ltYm9sIGZvciBpdC5cbiAgICBjb25zdCBlbnRyeVBvaW50RmlsZSA9IHRoaXMubW9kdWxlUmVzb2x2ZXIucmVzb2x2ZU1vZHVsZShzcGVjaWZpZXIsIGZyb21GaWxlKTtcbiAgICBpZiAoZW50cnlQb2ludEZpbGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4cG9ydHMgPSB0aGlzLnJlZmxlY3Rpb25Ib3N0LmdldEV4cG9ydHNPZk1vZHVsZShlbnRyeVBvaW50RmlsZSk7XG4gICAgaWYgKGV4cG9ydHMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBleHBvcnRNYXAgPSBuZXcgTWFwPERlY2xhcmF0aW9uTm9kZSwgc3RyaW5nPigpO1xuICAgIGV4cG9ydHMuZm9yRWFjaCgoZGVjbGFyYXRpb24sIG5hbWUpID0+IHtcbiAgICAgIGV4cG9ydE1hcC5zZXQoZGVjbGFyYXRpb24ubm9kZSwgbmFtZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHttb2R1bGU6IGVudHJ5UG9pbnRGaWxlLCBleHBvcnRNYXB9O1xuICB9XG59XG5cbi8qKlxuICogQSBgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5YCB3aGljaCB3aWxsIHJlZmVyIHRvIGRlY2xhcmF0aW9ucyB2aWEgcmVsYXRpdmUgcGF0aHMsIHByb3ZpZGVkIHRoZXkncmVcbiAqIGJvdGggaW4gdGhlIGxvZ2ljYWwgcHJvamVjdCBcInNwYWNlXCIgb2YgcGF0aHMuXG4gKlxuICogVGhpcyBpcyB0cmlja2llciB0aGFuIGl0IHNvdW5kcywgYXMgdGhlIHR3byBmaWxlcyBtYXkgYmUgaW4gZGlmZmVyZW50IHJvb3QgZGlyZWN0b3JpZXMgaW4gdGhlXG4gKiBwcm9qZWN0LiBTaW1wbHkgY2FsY3VsYXRpbmcgYSBmaWxlIHN5c3RlbSByZWxhdGl2ZSBwYXRoIGJldHdlZW4gdGhlIHR3byBpcyBub3Qgc3VmZmljaWVudC5cbiAqIEluc3RlYWQsIGBMb2dpY2FsUHJvamVjdFBhdGhgcyBhcmUgdXNlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIExvZ2ljYWxQcm9qZWN0U3RyYXRlZ3kgaW1wbGVtZW50cyBSZWZlcmVuY2VFbWl0U3RyYXRlZ3kge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QsIHByaXZhdGUgbG9naWNhbEZzOiBMb2dpY2FsRmlsZVN5c3RlbSkge31cblxuICBlbWl0KHJlZjogUmVmZXJlbmNlLCBjb250ZXh0OiB0cy5Tb3VyY2VGaWxlKTogRW1pdHRlZFJlZmVyZW5jZXxudWxsIHtcbiAgICBjb25zdCBkZXN0U2YgPSBnZXRTb3VyY2VGaWxlKHJlZi5ub2RlKTtcblxuICAgIC8vIENvbXB1dGUgdGhlIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgaW1wb3J0aW5nIGZpbGUgdG8gdGhlIGZpbGUgYmVpbmcgaW1wb3J0ZWQuIFRoaXMgaXMgZG9uZVxuICAgIC8vIGFzIGEgbG9naWNhbCBwYXRoIGNvbXB1dGF0aW9uLCBiZWNhdXNlIHRoZSB0d28gZmlsZXMgbWlnaHQgYmUgaW4gZGlmZmVyZW50IHJvb3REaXJzLlxuICAgIGNvbnN0IGRlc3RQYXRoID0gdGhpcy5sb2dpY2FsRnMubG9naWNhbFBhdGhPZlNmKGRlc3RTZik7XG4gICAgaWYgKGRlc3RQYXRoID09PSBudWxsKSB7XG4gICAgICAvLyBUaGUgaW1wb3J0ZWQgZmlsZSBpcyBub3Qgd2l0aGluIHRoZSBsb2dpY2FsIHByb2plY3QgZmlsZXN5c3RlbS5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpblBhdGggPSB0aGlzLmxvZ2ljYWxGcy5sb2dpY2FsUGF0aE9mU2YoY29udGV4dCk7XG4gICAgaWYgKG9yaWdpblBhdGggPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgRGVidWcgYXNzZXJ0OiBhdHRlbXB0IHRvIGltcG9ydCBmcm9tICR7Y29udGV4dC5maWxlTmFtZX0gYnV0IGl0J3Mgb3V0c2lkZSB0aGUgcHJvZ3JhbT9gKTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSdzIG5vIHdheSB0byBlbWl0IGEgcmVsYXRpdmUgcmVmZXJlbmNlIGZyb20gYSBmaWxlIHRvIGl0c2VsZi5cbiAgICBpZiAoZGVzdFBhdGggPT09IG9yaWdpblBhdGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBmaW5kRXhwb3J0ZWROYW1lT2ZOb2RlKHJlZi5ub2RlLCBkZXN0U2YsIHRoaXMucmVmbGVjdG9yKTtcbiAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlIHRhcmdldCBkZWNsYXJhdGlvbiBpc24ndCBleHBvcnRlZCBmcm9tIHRoZSBmaWxlIGl0J3MgZGVjbGFyZWQgaW4uIFRoaXMgaXMgYW4gaXNzdWUhXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBXaXRoIGJvdGggZmlsZXMgZXhwcmVzc2VkIGFzIExvZ2ljYWxQcm9qZWN0UGF0aHMsIGdldHRpbmcgdGhlIG1vZHVsZSBzcGVjaWZpZXIgYXMgYSByZWxhdGl2ZVxuICAgIC8vIHBhdGggaXMgbm93IHN0cmFpZ2h0Zm9yd2FyZC5cbiAgICBjb25zdCBtb2R1bGVOYW1lID0gTG9naWNhbFByb2plY3RQYXRoLnJlbGF0aXZlUGF0aEJldHdlZW4ob3JpZ2luUGF0aCwgZGVzdFBhdGgpO1xuICAgIHJldHVybiB7XG4gICAgICBleHByZXNzaW9uOiBuZXcgRXh0ZXJuYWxFeHByKHttb2R1bGVOYW1lLCBuYW1lfSksXG4gICAgICBpbXBvcnRlZEZpbGU6IGRlc3RTZixcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSBgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5YCB3aGljaCBjb25zdHJ1Y3RzIHJlbGF0aXZlcyBwYXRocyBiZXR3ZWVuIGB0cy5Tb3VyY2VGaWxlYHMuXG4gKlxuICogVGhpcyBzdHJhdGVneSBjYW4gYmUgdXNlZCBpZiB0aGVyZSBpcyBubyBgcm9vdERpcmAvYHJvb3REaXJzYCBzdHJ1Y3R1cmUgZm9yIHRoZSBwcm9qZWN0IHdoaWNoXG4gKiBuZWNlc3NpdGF0ZXMgdGhlIHN0cm9uZ2VyIGxvZ2ljIG9mIGBMb2dpY2FsUHJvamVjdFN0cmF0ZWd5YC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGF0aXZlUGF0aFN0cmF0ZWd5IGltcGxlbWVudHMgUmVmZXJlbmNlRW1pdFN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWZsZWN0b3I6IFJlZmxlY3Rpb25Ib3N0KSB7fVxuXG4gIGVtaXQocmVmOiBSZWZlcmVuY2UsIGNvbnRleHQ6IHRzLlNvdXJjZUZpbGUpOiBFbWl0dGVkUmVmZXJlbmNlfG51bGwge1xuICAgIGNvbnN0IGRlc3RTZiA9IGdldFNvdXJjZUZpbGUocmVmLm5vZGUpO1xuICAgIGNvbnN0IHJlbGF0aXZlUGF0aCA9XG4gICAgICAgIHJlbGF0aXZlKGRpcm5hbWUoYWJzb2x1dGVGcm9tU291cmNlRmlsZShjb250ZXh0KSksIGFic29sdXRlRnJvbVNvdXJjZUZpbGUoZGVzdFNmKSk7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IHRvUmVsYXRpdmVJbXBvcnQoc3RyaXBFeHRlbnNpb24ocmVsYXRpdmVQYXRoKSk7XG5cbiAgICBjb25zdCBuYW1lID0gZmluZEV4cG9ydGVkTmFtZU9mTm9kZShyZWYubm9kZSwgZGVzdFNmLCB0aGlzLnJlZmxlY3Rvcik7XG4gICAgcmV0dXJuIHtleHByZXNzaW9uOiBuZXcgRXh0ZXJuYWxFeHByKHttb2R1bGVOYW1lLCBuYW1lfSksIGltcG9ydGVkRmlsZTogZGVzdFNmfTtcbiAgfVxufVxuXG4vKipcbiAqIEEgYFJlZmVyZW5jZUVtaXRTdHJhdGVneWAgd2hpY2ggdXNlcyBhIGBVbmlmaWVkTW9kdWxlc0hvc3RgIHRvIGdlbmVyYXRlIGFic29sdXRlIGltcG9ydFxuICogcmVmZXJlbmNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFVuaWZpZWRNb2R1bGVzU3RyYXRlZ3kgaW1wbGVtZW50cyBSZWZlcmVuY2VFbWl0U3RyYXRlZ3kge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZmxlY3RvcjogUmVmbGVjdGlvbkhvc3QsIHByaXZhdGUgdW5pZmllZE1vZHVsZXNIb3N0OiBVbmlmaWVkTW9kdWxlc0hvc3QpIHt9XG5cbiAgZW1pdChyZWY6IFJlZmVyZW5jZSwgY29udGV4dDogdHMuU291cmNlRmlsZSk6IEVtaXR0ZWRSZWZlcmVuY2V8bnVsbCB7XG4gICAgY29uc3QgZGVzdFNmID0gZ2V0U291cmNlRmlsZShyZWYubm9kZSk7XG4gICAgY29uc3QgbmFtZSA9IGZpbmRFeHBvcnRlZE5hbWVPZk5vZGUocmVmLm5vZGUsIGRlc3RTZiwgdGhpcy5yZWZsZWN0b3IpO1xuICAgIGlmIChuYW1lID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBtb2R1bGVOYW1lID1cbiAgICAgICAgdGhpcy51bmlmaWVkTW9kdWxlc0hvc3QuZmlsZU5hbWVUb01vZHVsZU5hbWUoZGVzdFNmLmZpbGVOYW1lLCBjb250ZXh0LmZpbGVOYW1lKTtcblxuICAgIHJldHVybiB7XG4gICAgICBleHByZXNzaW9uOiBuZXcgRXh0ZXJuYWxFeHByKHttb2R1bGVOYW1lLCBuYW1lfSksXG4gICAgICBpbXBvcnRlZEZpbGU6IGRlc3RTZixcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -45,20 +45,6 @@ export interface DependencyTracker<T extends {
45
45
  * Record that the file `from` depends on the resource file `on`.
46
46
  */
47
47
  addResourceDependency(from: T, on: AbsoluteFsPath): void;
48
- /**
49
- * Record that the file `from` depends on the file `on` as well as `on`'s direct dependencies.
50
- *
51
- * This operation is reified immediately, so if future dependencies are added to `on` they will
52
- * not automatically be added to `from`.
53
- */
54
- addTransitiveDependency(from: T, on: T): void;
55
- /**
56
- * Record that the file `from` depends on the resource dependencies of `resourcesOf`.
57
- *
58
- * This operation is reified immediately, so if future resource dependencies are added to
59
- * `resourcesOf` they will not automatically be added to `from`.
60
- */
61
- addTransitiveResources(from: T, resourcesOf: T): void;
62
48
  /**
63
49
  * Record that the given file contains unresolvable dependencies.
64
50
  *
@@ -17,4 +17,4 @@
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9pbmNyZW1lbnRhbC9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnLi4vZmlsZV9zeXN0ZW0nO1xuXG4vKipcbiAqIEludGVyZmFjZSBvZiB0aGUgaW5jcmVtZW50YWwgYnVpbGQgZW5naW5lLlxuICpcbiAqIGBBbmFseXNpc1RgIGlzIGEgZ2VuZXJpYyB0eXBlIHJlcHJlc2VudGluZyBhIHVuaXQgb2Ygd29yay4gVGhpcyBpcyBnZW5lcmljIHRvIGF2b2lkIGEgY3ljbGljXG4gKiBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIGluY3JlbWVudGFsIGVuZ2luZSBBUEkgZGVmaW5pdGlvbiBhbmQgaXRzIGNvbnN1bWVyKHMpLlxuICogYEZpbGVUeXBlQ2hlY2tEYXRhVGAgaXMgYSBnZW5lcmljIHR5cGUgcmVwcmVzZW50aW5nIHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgZGF0YSBmb3IgYSBwYXJ0aWN1bGFyXG4gKiBpbnB1dCBmaWxlLCB3aGljaCBpcyBnZW5lcmljIGZvciB0aGUgc2FtZSByZWFzb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxCdWlsZDxBbmFseXNpc1QsIEZpbGVUeXBlQ2hlY2tEYXRhVD4ge1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHByaW9yIGFuYWx5c2lzIHdvcmssIGlmIGFueSwgZG9uZSBmb3IgdGhlIGdpdmVuIHNvdXJjZSBmaWxlLlxuICAgKi9cbiAgcHJpb3JXb3JrRm9yKHNmOiB0cy5Tb3VyY2VGaWxlKTogQW5hbHlzaXNUW118bnVsbDtcblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHByaW9yIHR5cGUtY2hlY2tpbmcgd29yaywgaWYgYW55LCB0aGF0J3MgYmVlbiBkb25lIGZvciB0aGUgZ2l2ZW4gc291cmNlIGZpbGUuXG4gICAqL1xuICBwcmlvclR5cGVDaGVja2luZ1Jlc3VsdHNGb3IoZmlsZVNmOiB0cy5Tb3VyY2VGaWxlKTogRmlsZVR5cGVDaGVja0RhdGFUfG51bGw7XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgdGhhdCB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB3aXRoIGEgbWFwIG9mIHR5cGUtY2hlY2tpbmdcbiAgICogZGF0YSBmb3IgZWFjaCB1c2VyIGZpbGUgd2hpY2ggY2FuIGJlIHJldXNlZCBpbiBhIGZ1dHVyZSBpbmNyZW1lbnRhbCBpdGVyYXRpb24uXG4gICAqL1xuICByZWNvcmRTdWNjZXNzZnVsVHlwZUNoZWNrKHJlc3VsdHM6IE1hcDxBYnNvbHV0ZUZzUGF0aCwgRmlsZVR5cGVDaGVja0RhdGFUPik6IHZvaWQ7XG59XG5cbi8qKlxuICogVHJhY2tzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHNvdXJjZSBmaWxlcyBvciByZXNvdXJjZXMgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVuY3lUcmFja2VyPFQgZXh0ZW5kcyB7ZmlsZU5hbWU6IHN0cmluZ30gPSB0cy5Tb3VyY2VGaWxlPiB7XG4gIC8qKlxuICAgKiBSZWNvcmQgdGhhdCB0aGUgZmlsZSBgZnJvbWAgZGVwZW5kcyBvbiB0aGUgZmlsZSBgb25gLlxuICAgKi9cbiAgYWRkRGVwZW5kZW5jeShmcm9tOiBULCBvbjogVCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlY29yZCB0aGF0IHRoZSBmaWxlIGBmcm9tYCBkZXBlbmRzIG9uIHRoZSByZXNvdXJjZSBmaWxlIGBvbmAuXG4gICAqL1xuICBhZGRSZXNvdXJjZURlcGVuZGVuY3koZnJvbTogVCwgb246IEFic29sdXRlRnNQYXRoKTogdm9pZDtcblxuICAvKipcbiAgICogUmVjb3JkIHRoYXQgdGhlIGZpbGUgYGZyb21gIGRlcGVuZHMgb24gdGhlIGZpbGUgYG9uYCBhcyB3ZWxsIGFzIGBvbmAncyBkaXJlY3QgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBUaGlzIG9wZXJhdGlvbiBpcyByZWlmaWVkIGltbWVkaWF0ZWx5LCBzbyBpZiBmdXR1cmUgZGVwZW5kZW5jaWVzIGFyZSBhZGRlZCB0byBgb25gIHRoZXkgd2lsbFxuICAgKiBub3QgYXV0b21hdGljYWxseSBiZSBhZGRlZCB0byBgZnJvbWAuXG4gICAqL1xuICBhZGRUcmFuc2l0aXZlRGVwZW5kZW5jeShmcm9tOiBULCBvbjogVCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlY29yZCB0aGF0IHRoZSBmaWxlIGBmcm9tYCBkZXBlbmRzIG9uIHRoZSByZXNvdXJjZSBkZXBlbmRlbmNpZXMgb2YgYHJlc291cmNlc09mYC5cbiAgICpcbiAgICogVGhpcyBvcGVyYXRpb24gaXMgcmVpZmllZCBpbW1lZGlhdGVseSwgc28gaWYgZnV0dXJlIHJlc291cmNlIGRlcGVuZGVuY2llcyBhcmUgYWRkZWQgdG9cbiAgICogYHJlc291cmNlc09mYCB0aGV5IHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYmUgYWRkZWQgdG8gYGZyb21gLlxuICAgKi9cbiAgYWRkVHJhbnNpdGl2ZVJlc291cmNlcyhmcm9tOiBULCByZXNvdXJjZXNPZjogVCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlY29yZCB0aGF0IHRoZSBnaXZlbiBmaWxlIGNvbnRhaW5zIHVucmVzb2x2YWJsZSBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIEluIHByYWN0aWNlLCB0aGlzIG1lYW5zIHRoYXQgdGhlIGRlcGVuZGVuY3kgZ3JhcGggY2Fubm90IHByb3ZpZGUgaW5zaWdodCBpbnRvIHRoZSBlZmZlY3RzIG9mXG4gICAqIGZ1dHVyZSBjaGFuZ2VzIG9uIHRoYXQgZmlsZS5cbiAgICovXG4gIHJlY29yZERlcGVuZGVuY3lBbmFseXNpc0ZhaWx1cmUoZmlsZTogVCk6IHZvaWQ7XG59XG4iXX0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9pbmNyZW1lbnRhbC9hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtBYnNvbHV0ZUZzUGF0aH0gZnJvbSAnLi4vZmlsZV9zeXN0ZW0nO1xuXG4vKipcbiAqIEludGVyZmFjZSBvZiB0aGUgaW5jcmVtZW50YWwgYnVpbGQgZW5naW5lLlxuICpcbiAqIGBBbmFseXNpc1RgIGlzIGEgZ2VuZXJpYyB0eXBlIHJlcHJlc2VudGluZyBhIHVuaXQgb2Ygd29yay4gVGhpcyBpcyBnZW5lcmljIHRvIGF2b2lkIGEgY3ljbGljXG4gKiBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIGluY3JlbWVudGFsIGVuZ2luZSBBUEkgZGVmaW5pdGlvbiBhbmQgaXRzIGNvbnN1bWVyKHMpLlxuICogYEZpbGVUeXBlQ2hlY2tEYXRhVGAgaXMgYSBnZW5lcmljIHR5cGUgcmVwcmVzZW50aW5nIHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgZGF0YSBmb3IgYSBwYXJ0aWN1bGFyXG4gKiBpbnB1dCBmaWxlLCB3aGljaCBpcyBnZW5lcmljIGZvciB0aGUgc2FtZSByZWFzb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxCdWlsZDxBbmFseXNpc1QsIEZpbGVUeXBlQ2hlY2tEYXRhVD4ge1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHByaW9yIGFuYWx5c2lzIHdvcmssIGlmIGFueSwgZG9uZSBmb3IgdGhlIGdpdmVuIHNvdXJjZSBmaWxlLlxuICAgKi9cbiAgcHJpb3JXb3JrRm9yKHNmOiB0cy5Tb3VyY2VGaWxlKTogQW5hbHlzaXNUW118bnVsbDtcblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHByaW9yIHR5cGUtY2hlY2tpbmcgd29yaywgaWYgYW55LCB0aGF0J3MgYmVlbiBkb25lIGZvciB0aGUgZ2l2ZW4gc291cmNlIGZpbGUuXG4gICAqL1xuICBwcmlvclR5cGVDaGVja2luZ1Jlc3VsdHNGb3IoZmlsZVNmOiB0cy5Tb3VyY2VGaWxlKTogRmlsZVR5cGVDaGVja0RhdGFUfG51bGw7XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgdGhhdCB0ZW1wbGF0ZSB0eXBlLWNoZWNraW5nIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCB3aXRoIGEgbWFwIG9mIHR5cGUtY2hlY2tpbmdcbiAgICogZGF0YSBmb3IgZWFjaCB1c2VyIGZpbGUgd2hpY2ggY2FuIGJlIHJldXNlZCBpbiBhIGZ1dHVyZSBpbmNyZW1lbnRhbCBpdGVyYXRpb24uXG4gICAqL1xuICByZWNvcmRTdWNjZXNzZnVsVHlwZUNoZWNrKHJlc3VsdHM6IE1hcDxBYnNvbHV0ZUZzUGF0aCwgRmlsZVR5cGVDaGVja0RhdGFUPik6IHZvaWQ7XG59XG5cbi8qKlxuICogVHJhY2tzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHNvdXJjZSBmaWxlcyBvciByZXNvdXJjZXMgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVuY3lUcmFja2VyPFQgZXh0ZW5kcyB7ZmlsZU5hbWU6IHN0cmluZ30gPSB0cy5Tb3VyY2VGaWxlPiB7XG4gIC8qKlxuICAgKiBSZWNvcmQgdGhhdCB0aGUgZmlsZSBgZnJvbWAgZGVwZW5kcyBvbiB0aGUgZmlsZSBgb25gLlxuICAgKi9cbiAgYWRkRGVwZW5kZW5jeShmcm9tOiBULCBvbjogVCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlY29yZCB0aGF0IHRoZSBmaWxlIGBmcm9tYCBkZXBlbmRzIG9uIHRoZSByZXNvdXJjZSBmaWxlIGBvbmAuXG4gICAqL1xuICBhZGRSZXNvdXJjZURlcGVuZGVuY3koZnJvbTogVCwgb246IEFic29sdXRlRnNQYXRoKTogdm9pZDtcblxuICAvKipcbiAgICogUmVjb3JkIHRoYXQgdGhlIGdpdmVuIGZpbGUgY29udGFpbnMgdW5yZXNvbHZhYmxlIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogSW4gcHJhY3RpY2UsIHRoaXMgbWVhbnMgdGhhdCB0aGUgZGVwZW5kZW5jeSBncmFwaCBjYW5ub3QgcHJvdmlkZSBpbnNpZ2h0IGludG8gdGhlIGVmZmVjdHMgb2ZcbiAgICogZnV0dXJlIGNoYW5nZXMgb24gdGhhdCBmaWxlLlxuICAgKi9cbiAgcmVjb3JkRGVwZW5kZW5jeUFuYWx5c2lzRmFpbHVyZShmaWxlOiBUKTogdm9pZDtcbn1cbiJdfQ==
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ /// <amd-module name="@angular/compiler-cli/src/ngtsc/incremental/semantic_graph" />
9
+ export { SemanticReference, SemanticSymbol } from './src/api';
10
+ export { SemanticDepGraph, SemanticDepGraphUpdater } from './src/graph';
11
+ export { areTypeParametersEqual, extractSemanticTypeParameters, SemanticTypeParameter } from './src/type_parameters';
12
+ export { isArrayEqual, isReferenceEqual, isSetEqual, isSymbolEqual } from './src/util';
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ (function (factory) {
9
+ if (typeof module === "object" && typeof module.exports === "object") {
10
+ var v = factory(require, exports);
11
+ if (v !== undefined) module.exports = v;
12
+ }
13
+ else if (typeof define === "function" && define.amd) {
14
+ define("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph", ["require", "exports", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/api", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/graph", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/type_parameters", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/util"], factory);
15
+ }
16
+ })(function (require, exports) {
17
+ "use strict";
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.isSymbolEqual = exports.isSetEqual = exports.isReferenceEqual = exports.isArrayEqual = exports.extractSemanticTypeParameters = exports.areTypeParametersEqual = exports.SemanticDepGraphUpdater = exports.SemanticDepGraph = exports.SemanticSymbol = void 0;
20
+ var api_1 = require("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/api");
21
+ Object.defineProperty(exports, "SemanticSymbol", { enumerable: true, get: function () { return api_1.SemanticSymbol; } });
22
+ var graph_1 = require("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/graph");
23
+ Object.defineProperty(exports, "SemanticDepGraph", { enumerable: true, get: function () { return graph_1.SemanticDepGraph; } });
24
+ Object.defineProperty(exports, "SemanticDepGraphUpdater", { enumerable: true, get: function () { return graph_1.SemanticDepGraphUpdater; } });
25
+ var type_parameters_1 = require("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/type_parameters");
26
+ Object.defineProperty(exports, "areTypeParametersEqual", { enumerable: true, get: function () { return type_parameters_1.areTypeParametersEqual; } });
27
+ Object.defineProperty(exports, "extractSemanticTypeParameters", { enumerable: true, get: function () { return type_parameters_1.extractSemanticTypeParameters; } });
28
+ var util_1 = require("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/util");
29
+ Object.defineProperty(exports, "isArrayEqual", { enumerable: true, get: function () { return util_1.isArrayEqual; } });
30
+ Object.defineProperty(exports, "isReferenceEqual", { enumerable: true, get: function () { return util_1.isReferenceEqual; } });
31
+ Object.defineProperty(exports, "isSetEqual", { enumerable: true, get: function () { return util_1.isSetEqual; } });
32
+ Object.defineProperty(exports, "isSymbolEqual", { enumerable: true, get: function () { return util_1.isSymbolEqual; } });
33
+ });
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luY3JlbWVudGFsL3NlbWFudGljX2dyYXBoL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILDBGQUE0RDtJQUFqQyxxR0FBQSxjQUFjLE9BQUE7SUFDekMsOEZBQXNFO0lBQTlELHlHQUFBLGdCQUFnQixPQUFBO0lBQUUsZ0hBQUEsdUJBQXVCLE9BQUE7SUFDakQsa0hBQW1IO0lBQTNHLHlIQUFBLHNCQUFzQixPQUFBO0lBQUUsZ0lBQUEsNkJBQTZCLE9BQUE7SUFDN0QsNEZBQXFGO0lBQTdFLG9HQUFBLFlBQVksT0FBQTtJQUFFLHdHQUFBLGdCQUFnQixPQUFBO0lBQUUsa0dBQUEsVUFBVSxPQUFBO0lBQUUscUdBQUEsYUFBYSxPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB7U2VtYW50aWNSZWZlcmVuY2UsIFNlbWFudGljU3ltYm9sfSBmcm9tICcuL3NyYy9hcGknO1xuZXhwb3J0IHtTZW1hbnRpY0RlcEdyYXBoLCBTZW1hbnRpY0RlcEdyYXBoVXBkYXRlcn0gZnJvbSAnLi9zcmMvZ3JhcGgnO1xuZXhwb3J0IHthcmVUeXBlUGFyYW1ldGVyc0VxdWFsLCBleHRyYWN0U2VtYW50aWNUeXBlUGFyYW1ldGVycywgU2VtYW50aWNUeXBlUGFyYW1ldGVyfSBmcm9tICcuL3NyYy90eXBlX3BhcmFtZXRlcnMnO1xuZXhwb3J0IHtpc0FycmF5RXF1YWwsIGlzUmVmZXJlbmNlRXF1YWwsIGlzU2V0RXF1YWwsIGlzU3ltYm9sRXF1YWx9IGZyb20gJy4vc3JjL3V0aWwnO1xuIl19
@@ -0,0 +1,98 @@
1
+ /// <amd-module name="@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/api" />
2
+ import { AbsoluteFsPath } from '../../../file_system';
3
+ import { ClassDeclaration } from '../../../reflection';
4
+ /**
5
+ * Represents a symbol that is recognizable across incremental rebuilds, which enables the captured
6
+ * metadata to be compared to the prior compilation. This allows for semantic understanding of
7
+ * the changes that have been made in a rebuild, which potentially enables more reuse of work
8
+ * from the prior compilation.
9
+ */
10
+ export declare abstract class SemanticSymbol {
11
+ /**
12
+ * The declaration for this symbol.
13
+ */
14
+ readonly decl: ClassDeclaration;
15
+ /**
16
+ * The path of the file that declares this symbol.
17
+ */
18
+ readonly path: AbsoluteFsPath;
19
+ /**
20
+ * The identifier of this symbol, or null if no identifier could be determined. It should
21
+ * uniquely identify the symbol relative to `file`. This is typically just the name of a
22
+ * top-level class declaration, as that uniquely identifies the class within the file.
23
+ *
24
+ * If the identifier is null, then this symbol cannot be recognized across rebuilds. In that
25
+ * case, the symbol is always assumed to have semantically changed to guarantee a proper
26
+ * rebuild.
27
+ */
28
+ readonly identifier: string | null;
29
+ constructor(
30
+ /**
31
+ * The declaration for this symbol.
32
+ */
33
+ decl: ClassDeclaration);
34
+ /**
35
+ * Allows the symbol to be compared to the equivalent symbol in the previous compilation. The
36
+ * return value indicates whether the symbol has been changed in a way such that its public API
37
+ * is affected.
38
+ *
39
+ * This method determines whether a change to _this_ symbol require the symbols that
40
+ * use to this symbol to be re-emitted.
41
+ *
42
+ * Note: `previousSymbol` is obtained from the most recently succeeded compilation. Symbols of
43
+ * failed compilations are never provided.
44
+ *
45
+ * @param previousSymbol The symbol from a prior compilation.
46
+ */
47
+ abstract isPublicApiAffected(previousSymbol: SemanticSymbol): boolean;
48
+ /**
49
+ * Allows the symbol to determine whether its emit is affected. The equivalent symbol from a prior
50
+ * build is given, in addition to the set of symbols of which the public API has changed.
51
+ *
52
+ * This method determines whether a change to _other_ symbols, i.e. those present in
53
+ * `publicApiAffected`, should cause _this_ symbol to be re-emitted.
54
+ *
55
+ * @param previousSymbol The equivalent symbol from a prior compilation. Note that it may be a
56
+ * different type of symbol, if e.g. a Component was changed into a Directive with the same name.
57
+ * @param publicApiAffected The set of symbols of which the public API has changed.
58
+ */
59
+ isEmitAffected?(previousSymbol: SemanticSymbol, publicApiAffected: Set<SemanticSymbol>): boolean;
60
+ /**
61
+ * Similar to `isPublicApiAffected`, but here equivalent symbol from a prior compilation needs
62
+ * to be compared to see if the type-check block of components that use this symbol is affected.
63
+ *
64
+ * This method determines whether a change to _this_ symbol require the symbols that
65
+ * use to this symbol to have their type-check block regenerated.
66
+ *
67
+ * Note: `previousSymbol` is obtained from the most recently succeeded compilation. Symbols of
68
+ * failed compilations are never provided.
69
+ *
70
+ * @param previousSymbol The symbol from a prior compilation.
71
+ */
72
+ abstract isTypeCheckApiAffected(previousSymbol: SemanticSymbol): boolean;
73
+ /**
74
+ * Similar to `isEmitAffected`, but focused on the type-check block of this symbol. This method
75
+ * determines whether a change to _other_ symbols, i.e. those present in `typeCheckApiAffected`,
76
+ * should cause _this_ symbol's type-check block to be regenerated.
77
+ *
78
+ * @param previousSymbol The equivalent symbol from a prior compilation. Note that it may be a
79
+ * different type of symbol, if e.g. a Component was changed into a Directive with the same name.
80
+ * @param typeCheckApiAffected The set of symbols of which the type-check API has changed.
81
+ */
82
+ isTypeCheckBlockAffected?(previousSymbol: SemanticSymbol, typeCheckApiAffected: Set<SemanticSymbol>): boolean;
83
+ }
84
+ /**
85
+ * Represents a reference to a semantic symbol that has been emitted into a source file. The
86
+ * reference may refer to the symbol using a different name than the semantic symbol's declared
87
+ * name, e.g. in case a re-export under a different name was chosen by a reference emitter.
88
+ * Consequently, to know that an emitted reference is still valid not only requires that the
89
+ * semantic symbol is still valid, but also that the path by which the symbol is imported has not
90
+ * changed.
91
+ */
92
+ export interface SemanticReference {
93
+ symbol: SemanticSymbol;
94
+ /**
95
+ * The path by which the symbol has been referenced.
96
+ */
97
+ importPath: string | null;
98
+ }
@@ -0,0 +1,51 @@
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/src/ngtsc/incremental/semantic_graph/src/api", ["require", "exports", "typescript", "@angular/compiler-cli/src/ngtsc/file_system"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SemanticSymbol = void 0;
13
+ /**
14
+ * @license
15
+ * Copyright Google LLC 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 ts = require("typescript");
21
+ var file_system_1 = require("@angular/compiler-cli/src/ngtsc/file_system");
22
+ /**
23
+ * Represents a symbol that is recognizable across incremental rebuilds, which enables the captured
24
+ * metadata to be compared to the prior compilation. This allows for semantic understanding of
25
+ * the changes that have been made in a rebuild, which potentially enables more reuse of work
26
+ * from the prior compilation.
27
+ */
28
+ var SemanticSymbol = /** @class */ (function () {
29
+ function SemanticSymbol(
30
+ /**
31
+ * The declaration for this symbol.
32
+ */
33
+ decl) {
34
+ this.decl = decl;
35
+ this.path = file_system_1.absoluteFromSourceFile(decl.getSourceFile());
36
+ this.identifier = getSymbolIdentifier(decl);
37
+ }
38
+ return SemanticSymbol;
39
+ }());
40
+ exports.SemanticSymbol = SemanticSymbol;
41
+ function getSymbolIdentifier(decl) {
42
+ if (!ts.isSourceFile(decl.parent)) {
43
+ return null;
44
+ }
45
+ // If this is a top-level class declaration, the class name is used as unique identifier.
46
+ // Other scenarios are currently not supported and causes the symbol not to be identified
47
+ // across rebuilds, unless the declaration node has not changed.
48
+ return decl.name.text;
49
+ }
50
+ });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9pbmNyZW1lbnRhbC9zZW1hbnRpY19ncmFwaC9zcmMvYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILCtCQUFpQztJQUVqQywyRUFBNEU7SUFHNUU7Ozs7O09BS0c7SUFDSDtRQWlCRTtRQUNJOztXQUVHO1FBQ2EsSUFBc0I7WUFBdEIsU0FBSSxHQUFKLElBQUksQ0FBa0I7WUFFeEMsSUFBSSxDQUFDLElBQUksR0FBRyxvQ0FBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUF1REgscUJBQUM7SUFBRCxDQUFDLEFBaEZELElBZ0ZDO0lBaEZxQix3Q0FBYztJQW1HcEMsU0FBUyxtQkFBbUIsQ0FBQyxJQUFzQjtRQUNqRCxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELHlGQUF5RjtRQUN6Rix5RkFBeUY7UUFDekYsZ0VBQWdFO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7YWJzb2x1dGVGcm9tU291cmNlRmlsZSwgQWJzb2x1dGVGc1BhdGh9IGZyb20gJy4uLy4uLy4uL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7Q2xhc3NEZWNsYXJhdGlvbn0gZnJvbSAnLi4vLi4vLi4vcmVmbGVjdGlvbic7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHN5bWJvbCB0aGF0IGlzIHJlY29nbml6YWJsZSBhY3Jvc3MgaW5jcmVtZW50YWwgcmVidWlsZHMsIHdoaWNoIGVuYWJsZXMgdGhlIGNhcHR1cmVkXG4gKiBtZXRhZGF0YSB0byBiZSBjb21wYXJlZCB0byB0aGUgcHJpb3IgY29tcGlsYXRpb24uIFRoaXMgYWxsb3dzIGZvciBzZW1hbnRpYyB1bmRlcnN0YW5kaW5nIG9mXG4gKiB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlIGluIGEgcmVidWlsZCwgd2hpY2ggcG90ZW50aWFsbHkgZW5hYmxlcyBtb3JlIHJldXNlIG9mIHdvcmtcbiAqIGZyb20gdGhlIHByaW9yIGNvbXBpbGF0aW9uLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VtYW50aWNTeW1ib2wge1xuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIGZpbGUgdGhhdCBkZWNsYXJlcyB0aGlzIHN5bWJvbC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXRoOiBBYnNvbHV0ZUZzUGF0aDtcblxuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgb2YgdGhpcyBzeW1ib2wsIG9yIG51bGwgaWYgbm8gaWRlbnRpZmllciBjb3VsZCBiZSBkZXRlcm1pbmVkLiBJdCBzaG91bGRcbiAgICogdW5pcXVlbHkgaWRlbnRpZnkgdGhlIHN5bWJvbCByZWxhdGl2ZSB0byBgZmlsZWAuIFRoaXMgaXMgdHlwaWNhbGx5IGp1c3QgdGhlIG5hbWUgb2YgYVxuICAgKiB0b3AtbGV2ZWwgY2xhc3MgZGVjbGFyYXRpb24sIGFzIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgY2xhc3Mgd2l0aGluIHRoZSBmaWxlLlxuICAgKlxuICAgKiBJZiB0aGUgaWRlbnRpZmllciBpcyBudWxsLCB0aGVuIHRoaXMgc3ltYm9sIGNhbm5vdCBiZSByZWNvZ25pemVkIGFjcm9zcyByZWJ1aWxkcy4gSW4gdGhhdFxuICAgKiBjYXNlLCB0aGUgc3ltYm9sIGlzIGFsd2F5cyBhc3N1bWVkIHRvIGhhdmUgc2VtYW50aWNhbGx5IGNoYW5nZWQgdG8gZ3VhcmFudGVlIGEgcHJvcGVyXG4gICAqIHJlYnVpbGQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWRlbnRpZmllcjogc3RyaW5nfG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBkZWNsYXJhdGlvbiBmb3IgdGhpcyBzeW1ib2wuXG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyByZWFkb25seSBkZWNsOiBDbGFzc0RlY2xhcmF0aW9uLFxuICApIHtcbiAgICB0aGlzLnBhdGggPSBhYnNvbHV0ZUZyb21Tb3VyY2VGaWxlKGRlY2wuZ2V0U291cmNlRmlsZSgpKTtcbiAgICB0aGlzLmlkZW50aWZpZXIgPSBnZXRTeW1ib2xJZGVudGlmaWVyKGRlY2wpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgc3ltYm9sIHRvIGJlIGNvbXBhcmVkIHRvIHRoZSBlcXVpdmFsZW50IHN5bWJvbCBpbiB0aGUgcHJldmlvdXMgY29tcGlsYXRpb24uIFRoZVxuICAgKiByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN5bWJvbCBoYXMgYmVlbiBjaGFuZ2VkIGluIGEgd2F5IHN1Y2ggdGhhdCBpdHMgcHVibGljIEFQSVxuICAgKiBpcyBhZmZlY3RlZC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgY2hhbmdlIHRvIF90aGlzXyBzeW1ib2wgcmVxdWlyZSB0aGUgc3ltYm9scyB0aGF0XG4gICAqIHVzZSB0byB0aGlzIHN5bWJvbCB0byBiZSByZS1lbWl0dGVkLlxuICAgKlxuICAgKiBOb3RlOiBgcHJldmlvdXNTeW1ib2xgIGlzIG9idGFpbmVkIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgc3VjY2VlZGVkIGNvbXBpbGF0aW9uLiBTeW1ib2xzIG9mXG4gICAqIGZhaWxlZCBjb21waWxhdGlvbnMgYXJlIG5ldmVyIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcHJldmlvdXNTeW1ib2wgVGhlIHN5bWJvbCBmcm9tIGEgcHJpb3IgY29tcGlsYXRpb24uXG4gICAqL1xuICBhYnN0cmFjdCBpc1B1YmxpY0FwaUFmZmVjdGVkKHByZXZpb3VzU3ltYm9sOiBTZW1hbnRpY1N5bWJvbCk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93cyB0aGUgc3ltYm9sIHRvIGRldGVybWluZSB3aGV0aGVyIGl0cyBlbWl0IGlzIGFmZmVjdGVkLiBUaGUgZXF1aXZhbGVudCBzeW1ib2wgZnJvbSBhIHByaW9yXG4gICAqIGJ1aWxkIGlzIGdpdmVuLCBpbiBhZGRpdGlvbiB0byB0aGUgc2V0IG9mIHN5bWJvbHMgb2Ygd2hpY2ggdGhlIHB1YmxpYyBBUEkgaGFzIGNoYW5nZWQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hldGhlciBhIGNoYW5nZSB0byBfb3RoZXJfIHN5bWJvbHMsIGkuZS4gdGhvc2UgcHJlc2VudCBpblxuICAgKiBgcHVibGljQXBpQWZmZWN0ZWRgLCBzaG91bGQgY2F1c2UgX3RoaXNfIHN5bWJvbCB0byBiZSByZS1lbWl0dGVkLlxuICAgKlxuICAgKiBAcGFyYW0gcHJldmlvdXNTeW1ib2wgVGhlIGVxdWl2YWxlbnQgc3ltYm9sIGZyb20gYSBwcmlvciBjb21waWxhdGlvbi4gTm90ZSB0aGF0IGl0IG1heSBiZSBhXG4gICAqIGRpZmZlcmVudCB0eXBlIG9mIHN5bWJvbCwgaWYgZS5nLiBhIENvbXBvbmVudCB3YXMgY2hhbmdlZCBpbnRvIGEgRGlyZWN0aXZlIHdpdGggdGhlIHNhbWUgbmFtZS5cbiAgICogQHBhcmFtIHB1YmxpY0FwaUFmZmVjdGVkIFRoZSBzZXQgb2Ygc3ltYm9scyBvZiB3aGljaCB0aGUgcHVibGljIEFQSSBoYXMgY2hhbmdlZC5cbiAgICovXG4gIGlzRW1pdEFmZmVjdGVkPyhwcmV2aW91c1N5bWJvbDogU2VtYW50aWNTeW1ib2wsIHB1YmxpY0FwaUFmZmVjdGVkOiBTZXQ8U2VtYW50aWNTeW1ib2w+KTogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2ltaWxhciB0byBgaXNQdWJsaWNBcGlBZmZlY3RlZGAsIGJ1dCBoZXJlIGVxdWl2YWxlbnQgc3ltYm9sIGZyb20gYSBwcmlvciBjb21waWxhdGlvbiBuZWVkc1xuICAgKiB0byBiZSBjb21wYXJlZCB0byBzZWUgaWYgdGhlIHR5cGUtY2hlY2sgYmxvY2sgb2YgY29tcG9uZW50cyB0aGF0IHVzZSB0aGlzIHN5bWJvbCBpcyBhZmZlY3RlZC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgY2hhbmdlIHRvIF90aGlzXyBzeW1ib2wgcmVxdWlyZSB0aGUgc3ltYm9scyB0aGF0XG4gICAqIHVzZSB0byB0aGlzIHN5bWJvbCB0byBoYXZlIHRoZWlyIHR5cGUtY2hlY2sgYmxvY2sgcmVnZW5lcmF0ZWQuXG4gICAqXG4gICAqIE5vdGU6IGBwcmV2aW91c1N5bWJvbGAgaXMgb2J0YWluZWQgZnJvbSB0aGUgbW9zdCByZWNlbnRseSBzdWNjZWVkZWQgY29tcGlsYXRpb24uIFN5bWJvbHMgb2ZcbiAgICogZmFpbGVkIGNvbXBpbGF0aW9ucyBhcmUgbmV2ZXIgcHJvdmlkZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwcmV2aW91c1N5bWJvbCBUaGUgc3ltYm9sIGZyb20gYSBwcmlvciBjb21waWxhdGlvbi5cbiAgICovXG4gIGFic3RyYWN0IGlzVHlwZUNoZWNrQXBpQWZmZWN0ZWQocHJldmlvdXNTeW1ib2w6IFNlbWFudGljU3ltYm9sKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2ltaWxhciB0byBgaXNFbWl0QWZmZWN0ZWRgLCBidXQgZm9jdXNlZCBvbiB0aGUgdHlwZS1jaGVjayBibG9jayBvZiB0aGlzIHN5bWJvbC4gVGhpcyBtZXRob2RcbiAgICogZGV0ZXJtaW5lcyB3aGV0aGVyIGEgY2hhbmdlIHRvIF9vdGhlcl8gc3ltYm9scywgaS5lLiB0aG9zZSBwcmVzZW50IGluIGB0eXBlQ2hlY2tBcGlBZmZlY3RlZGAsXG4gICAqIHNob3VsZCBjYXVzZSBfdGhpc18gc3ltYm9sJ3MgdHlwZS1jaGVjayBibG9jayB0byBiZSByZWdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHByZXZpb3VzU3ltYm9sIFRoZSBlcXVpdmFsZW50IHN5bWJvbCBmcm9tIGEgcHJpb3IgY29tcGlsYXRpb24uIE5vdGUgdGhhdCBpdCBtYXkgYmUgYVxuICAgKiBkaWZmZXJlbnQgdHlwZSBvZiBzeW1ib2wsIGlmIGUuZy4gYSBDb21wb25lbnQgd2FzIGNoYW5nZWQgaW50byBhIERpcmVjdGl2ZSB3aXRoIHRoZSBzYW1lIG5hbWUuXG4gICAqIEBwYXJhbSB0eXBlQ2hlY2tBcGlBZmZlY3RlZCBUaGUgc2V0IG9mIHN5bWJvbHMgb2Ygd2hpY2ggdGhlIHR5cGUtY2hlY2sgQVBJIGhhcyBjaGFuZ2VkLlxuICAgKi9cbiAgaXNUeXBlQ2hlY2tCbG9ja0FmZmVjdGVkP1xuICAgICAgKHByZXZpb3VzU3ltYm9sOiBTZW1hbnRpY1N5bWJvbCwgdHlwZUNoZWNrQXBpQWZmZWN0ZWQ6IFNldDxTZW1hbnRpY1N5bWJvbD4pOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSByZWZlcmVuY2UgdG8gYSBzZW1hbnRpYyBzeW1ib2wgdGhhdCBoYXMgYmVlbiBlbWl0dGVkIGludG8gYSBzb3VyY2UgZmlsZS4gVGhlXG4gKiByZWZlcmVuY2UgbWF5IHJlZmVyIHRvIHRoZSBzeW1ib2wgdXNpbmcgYSBkaWZmZXJlbnQgbmFtZSB0aGFuIHRoZSBzZW1hbnRpYyBzeW1ib2wncyBkZWNsYXJlZFxuICogbmFtZSwgZS5nLiBpbiBjYXNlIGEgcmUtZXhwb3J0IHVuZGVyIGEgZGlmZmVyZW50IG5hbWUgd2FzIGNob3NlbiBieSBhIHJlZmVyZW5jZSBlbWl0dGVyLlxuICogQ29uc2VxdWVudGx5LCB0byBrbm93IHRoYXQgYW4gZW1pdHRlZCByZWZlcmVuY2UgaXMgc3RpbGwgdmFsaWQgbm90IG9ubHkgcmVxdWlyZXMgdGhhdCB0aGVcbiAqIHNlbWFudGljIHN5bWJvbCBpcyBzdGlsbCB2YWxpZCwgYnV0IGFsc28gdGhhdCB0aGUgcGF0aCBieSB3aGljaCB0aGUgc3ltYm9sIGlzIGltcG9ydGVkIGhhcyBub3RcbiAqIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNSZWZlcmVuY2Uge1xuICBzeW1ib2w6IFNlbWFudGljU3ltYm9sO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBieSB3aGljaCB0aGUgc3ltYm9sIGhhcyBiZWVuIHJlZmVyZW5jZWQuXG4gICAqL1xuICBpbXBvcnRQYXRoOiBzdHJpbmd8bnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0U3ltYm9sSWRlbnRpZmllcihkZWNsOiBDbGFzc0RlY2xhcmF0aW9uKTogc3RyaW5nfG51bGwge1xuICBpZiAoIXRzLmlzU291cmNlRmlsZShkZWNsLnBhcmVudCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIElmIHRoaXMgaXMgYSB0b3AtbGV2ZWwgY2xhc3MgZGVjbGFyYXRpb24sIHRoZSBjbGFzcyBuYW1lIGlzIHVzZWQgYXMgdW5pcXVlIGlkZW50aWZpZXIuXG4gIC8vIE90aGVyIHNjZW5hcmlvcyBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgYW5kIGNhdXNlcyB0aGUgc3ltYm9sIG5vdCB0byBiZSBpZGVudGlmaWVkXG4gIC8vIGFjcm9zcyByZWJ1aWxkcywgdW5sZXNzIHRoZSBkZWNsYXJhdGlvbiBub2RlIGhhcyBub3QgY2hhbmdlZC5cbiAgcmV0dXJuIGRlY2wubmFtZS50ZXh0O1xufVxuIl19
@@ -0,0 +1,105 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ /// <amd-module name="@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/graph" />
9
+ import { Expression } from '@angular/compiler';
10
+ import { AbsoluteFsPath } from '../../../file_system';
11
+ import { ClassDeclaration } from '../../../reflection';
12
+ import { SemanticReference, SemanticSymbol } from './api';
13
+ export interface SemanticDependencyResult {
14
+ /**
15
+ * The files that need to be re-emitted.
16
+ */
17
+ needsEmit: Set<AbsoluteFsPath>;
18
+ /**
19
+ * The files for which the type-check block should be regenerated.
20
+ */
21
+ needsTypeCheckEmit: Set<AbsoluteFsPath>;
22
+ /**
23
+ * The newly built graph that represents the current compilation.
24
+ */
25
+ newGraph: SemanticDepGraph;
26
+ }
27
+ /**
28
+ * The semantic dependency graph of a single compilation.
29
+ */
30
+ export declare class SemanticDepGraph {
31
+ readonly files: Map<import("@angular/compiler-cli/src/ngtsc/file_system/src/types").BrandedPath<"AbsoluteFsPath">, Map<string, SemanticSymbol>>;
32
+ readonly symbolByDecl: Map<ClassDeclaration<import("@angular/compiler-cli/src/ngtsc/reflection").DeclarationNode>, SemanticSymbol>;
33
+ /**
34
+ * Registers a symbol in the graph. The symbol is given a unique identifier if possible, such that
35
+ * its equivalent symbol can be obtained from a prior graph even if its declaration node has
36
+ * changed across rebuilds. Symbols without an identifier are only able to find themselves in a
37
+ * prior graph if their declaration node is identical.
38
+ */
39
+ registerSymbol(symbol: SemanticSymbol): void;
40
+ /**
41
+ * Attempts to resolve a symbol in this graph that represents the given symbol from another graph.
42
+ * If no matching symbol could be found, null is returned.
43
+ *
44
+ * @param symbol The symbol from another graph for which its equivalent in this graph should be
45
+ * found.
46
+ */
47
+ getEquivalentSymbol(symbol: SemanticSymbol): SemanticSymbol | null;
48
+ /**
49
+ * Attempts to find the symbol by its identifier.
50
+ */
51
+ private getSymbolByName;
52
+ /**
53
+ * Attempts to resolve the declaration to its semantic symbol.
54
+ */
55
+ getSymbolByDecl(decl: ClassDeclaration): SemanticSymbol | null;
56
+ }
57
+ /**
58
+ * Implements the logic to go from a previous dependency graph to a new one, along with information
59
+ * on which files have been affected.
60
+ */
61
+ export declare class SemanticDepGraphUpdater {
62
+ /**
63
+ * The semantic dependency graph of the most recently succeeded compilation, or null if this
64
+ * is the initial build.
65
+ */
66
+ private priorGraph;
67
+ private readonly newGraph;
68
+ /**
69
+ * Contains opaque symbols that were created for declarations for which there was no symbol
70
+ * registered, which happens for e.g. external declarations.
71
+ */
72
+ private readonly opaqueSymbols;
73
+ constructor(
74
+ /**
75
+ * The semantic dependency graph of the most recently succeeded compilation, or null if this
76
+ * is the initial build.
77
+ */
78
+ priorGraph: SemanticDepGraph | null);
79
+ /**
80
+ * Registers the symbol in the new graph that is being created.
81
+ */
82
+ registerSymbol(symbol: SemanticSymbol): void;
83
+ /**
84
+ * Takes all facts that have been gathered to create a new semantic dependency graph. In this
85
+ * process, the semantic impact of the changes is determined which results in a set of files that
86
+ * need to be emitted and/or type-checked.
87
+ */
88
+ finalize(): SemanticDependencyResult;
89
+ private determineInvalidatedFiles;
90
+ private determineInvalidatedTypeCheckFiles;
91
+ /**
92
+ * Creates a `SemanticReference` for the reference to `decl` using the expression `expr`. See
93
+ * the documentation of `SemanticReference` for details.
94
+ */
95
+ getSemanticReference(decl: ClassDeclaration, expr: Expression): SemanticReference;
96
+ /**
97
+ * Gets the `SemanticSymbol` that was registered for `decl` during the current compilation, or
98
+ * returns an opaque symbol that represents `decl`.
99
+ */
100
+ getSymbol(decl: ClassDeclaration): SemanticSymbol;
101
+ /**
102
+ * Gets or creates an `OpaqueSymbol` for the provided class declaration.
103
+ */
104
+ private getOpaqueSymbol;
105
+ }