@angular/compiler-cli 8.1.0-next.3 → 8.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/index.d.ts +0 -7
  2. package/index.js +4 -2
  3. package/ngcc/index.js +5 -2
  4. package/ngcc/main-ngcc.js +5 -4
  5. package/ngcc/src/analysis/decoration_analyzer.d.ts +7 -5
  6. package/ngcc/src/analysis/decoration_analyzer.js +17 -13
  7. package/ngcc/src/analysis/private_declarations_analyzer.d.ts +1 -1
  8. package/ngcc/src/analysis/private_declarations_analyzer.js +5 -5
  9. package/ngcc/src/analysis/switch_marker_analyzer.d.ts +3 -1
  10. package/ngcc/src/analysis/switch_marker_analyzer.js +8 -4
  11. package/ngcc/src/analysis/util.d.ts +11 -0
  12. package/ngcc/src/analysis/util.js +18 -0
  13. package/ngcc/src/dependencies/commonjs_dependency_host.d.ts +1 -2
  14. package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
  15. package/ngcc/src/dependencies/dependency_host.d.ts +1 -1
  16. package/ngcc/src/dependencies/dependency_host.js +1 -1
  17. package/ngcc/src/dependencies/dependency_resolver.d.ts +1 -1
  18. package/ngcc/src/dependencies/dependency_resolver.js +12 -10
  19. package/ngcc/src/dependencies/esm_dependency_host.d.ts +1 -2
  20. package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
  21. package/ngcc/src/dependencies/module_resolver.d.ts +1 -2
  22. package/ngcc/src/dependencies/module_resolver.js +15 -17
  23. package/ngcc/src/dependencies/umd_dependency_host.d.ts +1 -2
  24. package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
  25. package/ngcc/src/host/commonjs_host.d.ts +26 -1
  26. package/ngcc/src/host/commonjs_host.js +52 -8
  27. package/ngcc/src/host/esm2015_host.d.ts +20 -7
  28. package/ngcc/src/host/esm2015_host.js +28 -10
  29. package/ngcc/src/host/esm5_host.js +7 -2
  30. package/ngcc/src/host/umd_host.js +5 -4
  31. package/ngcc/src/main.d.ts +12 -0
  32. package/ngcc/src/main.js +83 -67
  33. package/ngcc/src/packages/build_marker.d.ts +3 -4
  34. package/ngcc/src/packages/build_marker.js +14 -10
  35. package/ngcc/src/packages/bundle_program.d.ts +1 -2
  36. package/ngcc/src/packages/bundle_program.js +10 -7
  37. package/ngcc/src/packages/configuration.d.ts +51 -0
  38. package/ngcc/src/packages/configuration.js +97 -0
  39. package/ngcc/src/packages/entry_point.d.ts +4 -5
  40. package/ngcc/src/packages/entry_point.js +75 -17
  41. package/ngcc/src/packages/entry_point_bundle.d.ts +4 -4
  42. package/ngcc/src/packages/entry_point_bundle.js +12 -11
  43. package/ngcc/src/packages/entry_point_finder.d.ts +4 -3
  44. package/ngcc/src/packages/entry_point_finder.js +32 -24
  45. package/ngcc/src/packages/ngcc_compiler_host.d.ts +10 -18
  46. package/ngcc/src/packages/ngcc_compiler_host.js +4 -52
  47. package/ngcc/src/packages/transformer.d.ts +4 -4
  48. package/ngcc/src/packages/transformer.js +20 -22
  49. package/ngcc/src/rendering/dts_renderer.d.ts +3 -4
  50. package/ngcc/src/rendering/dts_renderer.js +3 -4
  51. package/ngcc/src/rendering/esm_rendering_formatter.d.ts +1 -1
  52. package/ngcc/src/rendering/esm_rendering_formatter.js +7 -7
  53. package/ngcc/src/rendering/renderer.d.ts +2 -5
  54. package/ngcc/src/rendering/renderer.js +3 -5
  55. package/ngcc/src/rendering/source_maps.d.ts +1 -1
  56. package/ngcc/src/rendering/source_maps.js +10 -10
  57. package/ngcc/src/rendering/utils.d.ts +1 -1
  58. package/ngcc/src/rendering/utils.js +1 -1
  59. package/ngcc/src/writing/file_writer.js +1 -1
  60. package/ngcc/src/writing/in_place_file_writer.d.ts +8 -1
  61. package/ngcc/src/writing/in_place_file_writer.js +5 -5
  62. package/ngcc/src/writing/new_entry_point_file_writer.d.ts +1 -1
  63. package/ngcc/src/writing/new_entry_point_file_writer.js +15 -16
  64. package/package.json +2 -3
  65. package/src/diagnostics/typescript_symbols.js +5 -5
  66. package/src/extract_i18n.js +6 -3
  67. package/src/main.d.ts +1 -1
  68. package/src/main.js +7 -4
  69. package/src/metadata/collector.js +7 -4
  70. package/src/metadata/evaluator.js +3 -3
  71. package/src/ngtools_api2.js +1 -1
  72. package/src/ngtsc/annotations/src/component.d.ts +17 -2
  73. package/src/ngtsc/annotations/src/component.js +94 -39
  74. package/src/ngtsc/annotations/src/directive.js +6 -5
  75. package/src/ngtsc/annotations/src/ng_module.js +4 -4
  76. package/src/ngtsc/annotations/src/references_registry.js +1 -1
  77. package/src/ngtsc/annotations/src/util.js +4 -2
  78. package/src/ngtsc/diagnostics/src/code.d.ts +1 -1
  79. package/src/ngtsc/diagnostics/src/code.js +2 -2
  80. package/src/ngtsc/entry_point/src/generator.d.ts +3 -2
  81. package/src/ngtsc/entry_point/src/generator.js +5 -6
  82. package/src/ngtsc/entry_point/src/logic.d.ts +2 -2
  83. package/src/ngtsc/entry_point/src/logic.js +4 -3
  84. package/src/ngtsc/file_system/index.d.ts +14 -0
  85. package/src/ngtsc/file_system/index.js +41 -0
  86. package/src/ngtsc/file_system/src/compiler_host.d.ts +25 -0
  87. package/src/ngtsc/file_system/src/compiler_host.js +73 -0
  88. package/src/ngtsc/file_system/src/helpers.d.ts +46 -0
  89. package/src/ngtsc/file_system/src/helpers.js +101 -0
  90. package/src/ngtsc/file_system/src/invalid_file_system.d.ts +43 -0
  91. package/src/ngtsc/file_system/src/invalid_file_system.js +66 -0
  92. package/src/ngtsc/{path → file_system}/src/logical.d.ts +2 -2
  93. package/src/ngtsc/file_system/src/logical.js +98 -0
  94. package/src/ngtsc/file_system/src/node_js_file_system.d.ts +32 -0
  95. package/src/ngtsc/file_system/src/node_js_file_system.js +102 -0
  96. package/src/ngtsc/file_system/src/types.d.ts +69 -0
  97. package/src/ngtsc/file_system/src/types.js +20 -0
  98. package/src/ngtsc/{path → file_system}/src/util.d.ts +4 -5
  99. package/src/ngtsc/file_system/src/util.js +37 -0
  100. package/src/ngtsc/imports/src/emitter.d.ts +2 -2
  101. package/src/ngtsc/imports/src/emitter.js +13 -13
  102. package/src/ngtsc/imports/src/resolver.d.ts +1 -1
  103. package/src/ngtsc/imports/src/resolver.js +4 -10
  104. package/src/ngtsc/incremental/src/state.d.ts +7 -3
  105. package/src/ngtsc/incremental/src/state.js +23 -6
  106. package/src/ngtsc/indexer/src/api.d.ts +5 -16
  107. package/src/ngtsc/indexer/src/api.js +1 -1
  108. package/src/ngtsc/indexer/src/context.d.ts +40 -2
  109. package/src/ngtsc/indexer/src/context.js +10 -3
  110. package/src/ngtsc/indexer/src/template.d.ts +5 -5
  111. package/src/ngtsc/indexer/src/template.js +72 -99
  112. package/src/ngtsc/indexer/src/transform.js +38 -3
  113. package/src/ngtsc/partial_evaluator/src/interpreter.js +9 -5
  114. package/src/ngtsc/perf/src/tracking.d.ts +0 -7
  115. package/src/ngtsc/perf/src/tracking.js +12 -12
  116. package/src/ngtsc/program.d.ts +3 -2
  117. package/src/ngtsc/program.js +26 -19
  118. package/src/ngtsc/reflection/src/typescript.js +9 -28
  119. package/src/ngtsc/resource_loader.js +5 -6
  120. package/src/ngtsc/shims/src/factory_generator.d.ts +2 -2
  121. package/src/ngtsc/shims/src/factory_generator.js +14 -13
  122. package/src/ngtsc/shims/src/host.d.ts +2 -2
  123. package/src/ngtsc/shims/src/host.js +5 -12
  124. package/src/ngtsc/shims/src/summary_generator.d.ts +1 -1
  125. package/src/ngtsc/shims/src/summary_generator.js +6 -4
  126. package/src/ngtsc/shims/src/typecheck_shim.d.ts +1 -1
  127. package/src/ngtsc/shims/src/typecheck_shim.js +1 -1
  128. package/src/ngtsc/transform/src/api.d.ts +1 -1
  129. package/src/ngtsc/transform/src/api.js +1 -1
  130. package/src/ngtsc/transform/src/compilation.js +36 -16
  131. package/src/ngtsc/typecheck/src/context.d.ts +1 -1
  132. package/src/ngtsc/typecheck/src/context.js +1 -1
  133. package/src/ngtsc/typecheck/src/host.js +9 -1
  134. package/src/ngtsc/typecheck/src/type_check_file.d.ts +2 -2
  135. package/src/ngtsc/typecheck/src/type_check_file.js +11 -13
  136. package/src/ngtsc/util/src/path.d.ts +0 -7
  137. package/src/ngtsc/util/src/path.js +15 -16
  138. package/src/ngtsc/util/src/resource_recorder.d.ts +18 -0
  139. package/src/ngtsc/util/src/resource_recorder.js +20 -0
  140. package/src/ngtsc/util/src/typescript.d.ts +2 -1
  141. package/src/ngtsc/util/src/typescript.js +8 -4
  142. package/src/perform_compile.d.ts +5 -3
  143. package/src/perform_compile.js +23 -18
  144. package/src/perform_watch.js +19 -9
  145. package/src/transformers/api.d.ts +5 -0
  146. package/src/transformers/api.js +1 -1
  147. package/src/transformers/compiler_host.js +10 -3
  148. package/src/version.js +1 -1
  149. package/ngcc/src/file_system/file_system.d.ts +0 -36
  150. package/ngcc/src/file_system/file_system.js +0 -20
  151. package/ngcc/src/file_system/node_js_file_system.d.ts +0 -27
  152. package/ngcc/src/file_system/node_js_file_system.js +0 -44
  153. package/src/ngtsc/path/index.d.ts +0 -10
  154. package/src/ngtsc/path/index.js +0 -26
  155. package/src/ngtsc/path/src/logical.js +0 -107
  156. package/src/ngtsc/path/src/types.d.ts +0 -73
  157. package/src/ngtsc/path/src/types.js +0 -108
  158. package/src/ngtsc/path/src/util.js +0 -46
@@ -11,7 +11,7 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/compiler-cli/src/ngtsc/indexer/src/template", ["require", "exports", "tslib", "@angular/compiler", "@angular/compiler/src/render3/r3_ast", "@angular/compiler/src/render3/r3_template_transform", "@angular/compiler/src/render3/view/i18n/meta", "@angular/compiler/src/render3/view/template", "@angular/compiler-cli/src/ngtsc/indexer/src/api"], factory);
14
+ define("@angular/compiler-cli/src/ngtsc/indexer/src/template", ["require", "exports", "tslib", "@angular/compiler", "@angular/compiler/src/render3/r3_ast", "@angular/compiler-cli/src/ngtsc/indexer/src/api"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
@@ -19,44 +19,7 @@
19
19
  var tslib_1 = require("tslib");
20
20
  var compiler_1 = require("@angular/compiler");
21
21
  var r3_ast_1 = require("@angular/compiler/src/render3/r3_ast");
22
- var r3_template_transform_1 = require("@angular/compiler/src/render3/r3_template_transform");
23
- var meta_1 = require("@angular/compiler/src/render3/view/i18n/meta");
24
- var template_1 = require("@angular/compiler/src/render3/view/template");
25
22
  var api_1 = require("@angular/compiler-cli/src/ngtsc/indexer/src/api");
26
- /**
27
- * Updates the location of an identifier to its real anchor in a source code.
28
- *
29
- * The compiler's expression parser records the location of some expressions in a manner not
30
- * useful to the indexer. For example, a `MethodCall` `foo(a, b)` will record the span of the
31
- * entire method call, but the indexer is interested only in the method identifier.
32
- *
33
- * To remedy all this, the visitor tokenizes the template node the expression was discovered in,
34
- * and updates the locations of entities found during expression traversal with those of the
35
- * tokens.
36
- *
37
- * TODO(ayazhafiz): Think about how to handle `PropertyRead`s in `BoundAttribute`s. The Lexer
38
- * tokenizes the attribute as a string and ignores quotes.
39
- *
40
- * @param entities entities to update
41
- * @param currentNode node expression was in
42
- */
43
- function updateIdentifierSpans(identifiers, currentNode) {
44
- var localSpan = currentNode.sourceSpan;
45
- var localExpression = localSpan.toString();
46
- var lexedIdentifiers = new compiler_1.Lexer().tokenize(localExpression).filter(function (token) { return token.type === compiler_1.TokenType.Identifier; });
47
- // Join the relative position of the expression within a node with the absolute position of the
48
- // node to get the absolute position of the expression in the source code.
49
- var absoluteOffset = currentNode.sourceSpan.start.offset;
50
- identifiers.forEach(function (id, index) {
51
- var lexedId = lexedIdentifiers[index];
52
- if (id.name !== lexedId.strValue) {
53
- throw new Error('Impossible state: lexed and parsed expression should contain the same tokens.');
54
- }
55
- var start = absoluteOffset + lexedId.index;
56
- var absoluteSpan = new api_1.AbsoluteSourceSpan(start, start + lexedId.strValue.length);
57
- id.span = absoluteSpan;
58
- });
59
- }
60
23
  /**
61
24
  * Visits the AST of an Angular template syntax expression, finding interesting
62
25
  * entities (variable references, etc.). Creates an array of Entities found in
@@ -68,34 +31,67 @@
68
31
  */
69
32
  var ExpressionVisitor = /** @class */ (function (_super) {
70
33
  tslib_1.__extends(ExpressionVisitor, _super);
71
- function ExpressionVisitor(context, identifiers) {
72
- if (identifiers === void 0) { identifiers = []; }
34
+ function ExpressionVisitor(context, boundTemplate, expressionStr, absoluteOffset) {
35
+ if (expressionStr === void 0) { expressionStr = context.sourceSpan.toString(); }
36
+ if (absoluteOffset === void 0) { absoluteOffset = context.sourceSpan.start.offset; }
73
37
  var _this = _super.call(this) || this;
74
- _this.identifiers = identifiers;
75
- _this.file = context.sourceSpan.start.file;
38
+ _this.boundTemplate = boundTemplate;
39
+ _this.expressionStr = expressionStr;
40
+ _this.absoluteOffset = absoluteOffset;
41
+ _this.identifiers = [];
76
42
  return _this;
77
43
  }
78
- ExpressionVisitor.getIdentifiers = function (ast, context) {
79
- var visitor = new ExpressionVisitor(context);
44
+ /**
45
+ * Returns identifiers discovered in an expression.
46
+ *
47
+ * @param ast expression AST to visit
48
+ * @param context HTML node expression is defined in
49
+ * @param boundTemplate bound target of the entire template, which can be used to query for the
50
+ * entities expressions target.
51
+ */
52
+ ExpressionVisitor.getIdentifiers = function (ast, context, boundTemplate) {
53
+ var visitor = new ExpressionVisitor(context, boundTemplate);
80
54
  visitor.visit(ast);
81
- var identifiers = visitor.identifiers;
82
- updateIdentifierSpans(identifiers, context);
83
- return identifiers;
55
+ return visitor.identifiers;
84
56
  };
85
57
  ExpressionVisitor.prototype.visit = function (ast) { ast.visit(this); };
86
58
  ExpressionVisitor.prototype.visitMethodCall = function (ast, context) {
87
- this.addIdentifier(ast, api_1.IdentifierKind.Method);
59
+ this.visitIdentifier(ast, api_1.IdentifierKind.Method);
88
60
  _super.prototype.visitMethodCall.call(this, ast, context);
89
61
  };
90
62
  ExpressionVisitor.prototype.visitPropertyRead = function (ast, context) {
91
- this.addIdentifier(ast, api_1.IdentifierKind.Property);
63
+ this.visitIdentifier(ast, api_1.IdentifierKind.Property);
92
64
  _super.prototype.visitPropertyRead.call(this, ast, context);
93
65
  };
94
- ExpressionVisitor.prototype.addIdentifier = function (ast, kind) {
66
+ /**
67
+ * Visits an identifier, adding it to the identifier store if it is useful for indexing.
68
+ *
69
+ * @param ast expression AST the identifier is in
70
+ * @param kind identifier kind
71
+ */
72
+ ExpressionVisitor.prototype.visitIdentifier = function (ast, kind) {
73
+ // The definition of a non-top-level property such as `bar` in `{{foo.bar}}` is currently
74
+ // impossible to determine by an indexer and unsupported by the indexing module.
75
+ // The indexing module also does not currently support references to identifiers declared in the
76
+ // template itself, which have a non-null expression target.
77
+ if (!(ast.receiver instanceof compiler_1.ImplicitReceiver) ||
78
+ this.boundTemplate.getExpressionTarget(ast) !== null) {
79
+ return;
80
+ }
81
+ // Get the location of the identifier of real interest.
82
+ // The compiler's expression parser records the location of some expressions in a manner not
83
+ // useful to the indexer. For example, a `MethodCall` `foo(a, b)` will record the span of the
84
+ // entire method call, but the indexer is interested only in the method identifier.
85
+ var localExpression = this.expressionStr.substr(ast.span.start, ast.span.end);
86
+ var identifierStart = ast.span.start + localExpression.indexOf(ast.name);
87
+ // Join the relative position of the expression within a node with the absolute position
88
+ // of the node to get the absolute position of the expression in the source code.
89
+ var absoluteStart = this.absoluteOffset + identifierStart;
90
+ var span = new api_1.AbsoluteSourceSpan(absoluteStart, absoluteStart + ast.name.length);
95
91
  this.identifiers.push({
96
92
  name: ast.name,
97
- span: ast.span, kind: kind,
98
- file: this.file,
93
+ span: span,
94
+ kind: kind,
99
95
  });
100
96
  };
101
97
  return ExpressionVisitor;
@@ -106,14 +102,22 @@
106
102
  */
107
103
  var TemplateVisitor = /** @class */ (function (_super) {
108
104
  tslib_1.__extends(TemplateVisitor, _super);
109
- function TemplateVisitor() {
110
- var _this = _super !== null && _super.apply(this, arguments) || this;
105
+ /**
106
+ * Creates a template visitor for a bound template target. The bound target can be used when
107
+ * deferred to the expression visitor to get information about the target of an expression.
108
+ *
109
+ * @param boundTemplate bound template target
110
+ */
111
+ function TemplateVisitor(boundTemplate) {
112
+ var _this = _super.call(this) || this;
113
+ _this.boundTemplate = boundTemplate;
111
114
  // identifiers of interest found in the template
112
115
  _this.identifiers = new Set();
113
116
  return _this;
114
117
  }
115
118
  /**
116
119
  * Visits a node in the template.
120
+ *
117
121
  * @param node node to visit
118
122
  */
119
123
  TemplateVisitor.prototype.visit = function (node) { node.visit(this); };
@@ -132,63 +136,32 @@
132
136
  this.visitAll(template.references);
133
137
  this.visitAll(template.variables);
134
138
  };
135
- TemplateVisitor.prototype.visitBoundText = function (text) { this.addIdentifiers(text); };
139
+ TemplateVisitor.prototype.visitBoundText = function (text) { this.visitExpression(text); };
136
140
  /**
137
- * Adds identifiers to the visitor's state.
138
- * @param visitedEntities interesting entities to add as identifiers
139
- * @param curretNode node entities were discovered in
141
+ * Visits a node's expression and adds its identifiers, if any, to the visitor's state.
142
+ *
143
+ * @param curretNode node whose expression to visit
140
144
  */
141
- TemplateVisitor.prototype.addIdentifiers = function (node) {
145
+ TemplateVisitor.prototype.visitExpression = function (node) {
142
146
  var _this = this;
143
- var identifiers = ExpressionVisitor.getIdentifiers(node.value, node);
147
+ var identifiers = ExpressionVisitor.getIdentifiers(node.value, node, this.boundTemplate);
144
148
  identifiers.forEach(function (id) { return _this.identifiers.add(id); });
145
149
  };
146
150
  return TemplateVisitor;
147
151
  }(r3_ast_1.RecursiveVisitor));
148
- /**
149
- * Unwraps and reparses a template, preserving whitespace and with no leading trivial characters.
150
- *
151
- * A template may previously have been parsed without preserving whitespace, and was definitely
152
- * parsed with leading trivial characters (see `parseTemplate` from the compiler package API).
153
- * Both of these are detrimental for indexing as they result in a manipulated AST not representing
154
- * the template source code.
155
- *
156
- * TODO(ayazhafiz): Remove once issues with `leadingTriviaChars` and `parseTemplate` are resolved.
157
- */
158
- function restoreTemplate(template, options) {
159
- // try to recapture the template content and URL
160
- // if there was nothing in the template to begin with, this is just a no-op
161
- if (template.length === 0) {
162
- return [];
163
- }
164
- var _a = template[0].sourceSpan.start.file, templateStr = _a.content, templateUrl = _a.url;
165
- options.preserveWhitespaces = true;
166
- var interpolationConfig = options.interpolationConfig, preserveWhitespaces = options.preserveWhitespaces;
167
- var bindingParser = template_1.makeBindingParser(interpolationConfig);
168
- var htmlParser = new compiler_1.HtmlParser();
169
- var parseResult = htmlParser.parse(templateStr, templateUrl, tslib_1.__assign({}, options, { tokenizeExpansionForms: true }));
170
- if (parseResult.errors && parseResult.errors.length > 0) {
171
- throw new Error('Impossible state: template must have been successfully parsed previously.');
172
- }
173
- var rootNodes = compiler_1.visitAll(new meta_1.I18nMetaVisitor(interpolationConfig, !preserveWhitespaces), parseResult.rootNodes);
174
- var _b = r3_template_transform_1.htmlAstToRender3Ast(rootNodes, bindingParser), nodes = _b.nodes, errors = _b.errors;
175
- if (errors && errors.length > 0) {
176
- throw new Error('Impossible state: template must have been successfully parsed previously.');
177
- }
178
- return nodes;
179
- }
180
152
  /**
181
153
  * Traverses a template AST and builds identifiers discovered in it.
182
- * @param template template to extract indentifiers from
183
- * @param options options for restoring the parsed template to a indexable state
154
+ *
155
+ * @param boundTemplate bound template target, which can be used for querying expression targets.
184
156
  * @return identifiers in template
185
157
  */
186
- function getTemplateIdentifiers(template, options) {
187
- var restoredTemplate = restoreTemplate(template, options);
188
- var visitor = new TemplateVisitor();
189
- visitor.visitAll(restoredTemplate);
158
+ function getTemplateIdentifiers(boundTemplate) {
159
+ var visitor = new TemplateVisitor(boundTemplate);
160
+ if (boundTemplate.target.template !== undefined) {
161
+ visitor.visitAll(boundTemplate.target.template);
162
+ }
190
163
  return visitor.identifiers;
191
164
  }
192
165
  exports.getTemplateIdentifiers = getTemplateIdentifiers;
193
166
  });
194
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luZGV4ZXIvc3JjL3RlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILDhDQUEySjtJQUMzSiwrREFBc0k7SUFDdEksNkZBQXdGO0lBQ3hGLHFFQUE2RTtJQUM3RSx3RUFBOEU7SUFDOUUsdUVBQXFHO0lBV3JHOzs7Ozs7Ozs7Ozs7Ozs7O09BZ0JHO0lBQ0gsU0FBUyxxQkFBcUIsQ0FBQyxXQUFpQyxFQUFFLFdBQWlCO1FBQ2pGLElBQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUM7UUFDekMsSUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTdDLElBQU0sZ0JBQWdCLEdBQ2xCLElBQUksZ0JBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBQSxLQUFLLElBQUksT0FBQSxLQUFLLENBQUMsSUFBSSxLQUFLLG9CQUFTLENBQUMsVUFBVSxFQUFuQyxDQUFtQyxDQUFDLENBQUM7UUFFL0YsK0ZBQStGO1FBQy9GLDBFQUEwRTtRQUMxRSxJQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDM0QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFDLEVBQUUsRUFBRSxLQUFLO1lBQzVCLElBQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLElBQUksRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUNYLCtFQUErRSxDQUFDLENBQUM7YUFDdEY7WUFFRCxJQUFNLEtBQUssR0FBRyxjQUFjLEdBQUcsT0FB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bnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7QVNULCBIdG1sUGFyc2VyLCBMZXhlciwgTWV0aG9kQ2FsbCwgUGFyc2VTb3VyY2VGaWxlLCBQcm9wZXJ0eVJlYWQsIFJlY3Vyc2l2ZUFzdFZpc2l0b3IsIFRtcGxBc3ROb2RlLCBUb2tlblR5cGUsIHZpc2l0QWxsfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge0JvdW5kVGV4dCwgRWxlbWVudCwgTm9kZSwgUmVjdXJzaXZlVmlzaXRvciBhcyBSZWN1cnNpdmVUZW1wbGF0ZVZpc2l0b3IsIFRlbXBsYXRlfSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvcmVuZGVyMy9yM19hc3QnO1xuaW1wb3J0IHtodG1sQXN0VG9SZW5kZXIzQXN0fSBmcm9tICdAYW5ndWxhci9jb21waWxlci9zcmMvcmVuZGVyMy9yM190ZW1wbGF0ZV90cmFuc2Zvcm0nO1xuaW1wb3J0IHtJMThuTWV0YVZpc2l0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9yZW5kZXIzL3ZpZXcvaTE4bi9tZXRhJztcbmltcG9ydCB7bWFrZUJpbmRpbmdQYXJzZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9yZW5kZXIzL3ZpZXcvdGVtcGxhdGUnO1xuaW1wb3J0IHtBYnNvbHV0ZVNvdXJjZVNwYW4sIElkZW50aWZpZXJLaW5kLCBSZXN0b3JlVGVtcGxhdGVPcHRpb25zLCBUZW1wbGF0ZUlkZW50aWZpZXJ9IGZyb20gJy4vYXBpJztcblxuLyoqXG4gKiBBIHBhcnNlZCBub2RlIGluIGEgdGVtcGxhdGUsIHdoaWNoIG1heSBoYXZlIGEgbmFtZSAoaWYgaXQgaXMgYSBzZWxlY3Rvcikgb3JcbiAqIGJlIGFub255bW91cyAobGlrZSBhIHRleHQgc3BhbikuXG4gKi9cbmludGVyZmFjZSBIVE1MTm9kZSBleHRlbmRzIE5vZGUge1xuICB0YWdOYW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIGxvY2F0aW9uIG9mIGFuIGlkZW50aWZpZXIgdG8gaXRzIHJlYWwgYW5jaG9yIGluIGEgc291cmNlIGNvZGUuXG4gKlxuICogVGhlIGNvbXBpbGVyJ3MgZXhwcmVzc2lvbiBwYXJzZXIgcmVjb3JkcyB0aGUgbG9jYXRpb24gb2Ygc29tZSBleHByZXNzaW9ucyBpbiBhIG1hbm5lciBub3RcbiAqIHVzZWZ1bCB0byB0aGUgaW5kZXhlci4gRm9yIGV4YW1wbGUsIGEgYE1ldGhvZENhbGxgIGBmb28oYSwgYilgIHdpbGwgcmVjb3JkIHRoZSBzcGFuIG9mIHRoZVxuICogZW50aXJlIG1ldGhvZCBjYWxsLCBidXQgdGhlIGluZGV4ZXIgaXMgaW50ZXJlc3RlZCBvbmx5IGluIHRoZSBtZXRob2QgaWRlbnRpZmllci5cbiAqXG4gKiBUbyByZW1lZHkgYWxsIHRoaXMsIHRoZSB2aXNpdG9yIHRva2VuaXplcyB0aGUgdGVtcGxhdGUgbm9kZSB0aGUgZXhwcmVzc2lvbiB3YXMgZGlzY292ZXJlZCBpbixcbiAqIGFuZCB1cGRhdGVzIHRoZSBsb2NhdGlvbnMgb2YgZW50aXRpZXMgZm91bmQgZHVyaW5nIGV4cHJlc3Npb24gdHJhdmVyc2FsIHdpdGggdGhvc2Ugb2YgdGhlXG4gKiB0b2tlbnMuXG4gKlxuICogVE9ETyhheWF6aGFmaXopOiBUaGluayBhYm91dCBob3cgdG8gaGFuZGxlIGBQcm9wZXJ0eVJlYWRgcyBpbiBgQm91bmRBdHRyaWJ1dGVgcy4gVGhlIExleGVyXG4gKiB0b2tlbml6ZXMgdGhlIGF0dHJpYnV0ZSBhcyBhIHN0cmluZyBhbmQgaWdub3JlcyBxdW90ZXMuXG4gKlxuICogQHBhcmFtIGVudGl0aWVzIGVudGl0aWVzIHRvIHVwZGF0ZVxuICogQHBhcmFtIGN1cnJlbnROb2RlIG5vZGUgZXhwcmVzc2lvbiB3YXMgaW5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlSWRlbnRpZmllclNwYW5zKGlkZW50aWZpZXJzOiBUZW1wbGF0ZUlkZW50aWZpZXJbXSwgY3VycmVudE5vZGU6IE5vZGUpIHtcbiAgY29uc3QgbG9jYWxTcGFuID0gY3VycmVudE5vZGUuc291cmNlU3BhbjtcbiAgY29uc3QgbG9jYWxFeHByZXNzaW9uID0gbG9jYWxTcGFuLnRvU3RyaW5nKCk7XG5cbiAgY29uc3QgbGV4ZWRJZGVudGlmaWVycyA9XG4gICAgICBuZXcgTGV4ZXIoKS50b2tlbml6ZShsb2NhbEV4cHJlc3Npb24pLmZpbHRlcih0b2tlbiA9PiB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuSWRlbnRpZmllcik7XG5cbiAgLy8gSm9pbiB0aGUgcmVsYXRpdmUgcG9zaXRpb24gb2YgdGhlIGV4cHJlc3Npb24gd2l0aGluIGEgbm9kZSB3aXRoIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGVcbiAgLy8gbm9kZSB0byBnZXQgdGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBleHByZXNzaW9uIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgY29uc3QgYWJzb2x1dGVPZmZzZXQgPSBjdXJyZW50Tm9kZS5zb3VyY2VTcGFuLnN0YXJ0Lm9mZnNldDtcbiAgaWRlbnRpZmllcnMuZm9yRWFjaCgoaWQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgbGV4ZWRJZCA9IGxleGVkSWRlbnRpZmllcnNbaW5kZXhdO1xuICAgIGlmIChpZC5uYW1lICE9PSBsZXhlZElkLnN0clZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0ltcG9zc2libGUgc3RhdGU6IGxleGVkIGFuZCBwYXJzZWQgZXhwcmVzc2lvbiBzaG91bGQgY29udGFpbiB0aGUgc2FtZSB0b2tlbnMuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBhYnNvbHV0ZU9mZnNldCArIGxleGVkSWQuaW5kZXg7XG4gICAgY29uc3QgYWJzb2x1dGVTcGFuID0gbmV3IEFic29sdXRlU291cmNlU3BhbihzdGFydCwgc3RhcnQgKyBsZXhlZElkLnN0clZhbHVlLmxlbmd0aCk7XG4gICAgaWQuc3BhbiA9IGFic29sdXRlU3BhbjtcbiAgfSk7XG59XG5cbi8qKlxuICogVmlzaXRzIHRoZSBBU1Qgb2YgYW4gQW5ndWxhciB0ZW1wbGF0ZSBzeW50YXggZXhwcmVzc2lvbiwgZmluZGluZyBpbnRlcmVzdGluZ1xuICogZW50aXRpZXMgKHZhcmlhYmxlIHJlZmVyZW5jZXMsIGV0Yy4pLiBDcmVhdGVzIGFuIGFycmF5IG9mIEVudGl0aWVzIGZvdW5kIGluXG4gKiB0aGUgZXhwcmVzc2lvbiwgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIEVudGl0aWVzIGJlaW5nIHJlbGF0aXZlIHRvIHRoZVxuICogZXhwcmVzc2lvbi5cbiAqXG4gKiBWaXNpdGluZyBgdGV4dCB7e3Byb3B9fWAgd2lsbCByZXR1cm4gYFtUZW1wbGF0ZUlkZW50aWZpZXIge25hbWU6ICdwcm9wJywgc3Bhbjoge3N0YXJ0OiA3LCBlbmQ6XG4gKiAxMX19XWAuXG4gKi9cbmNsYXNzIEV4cHJlc3Npb25WaXNpdG9yIGV4dGVuZHMgUmVjdXJzaXZlQXN0VmlzaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZTogUGFyc2VTb3VyY2VGaWxlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoY29udGV4dDogTm9kZSwgcmVhZG9ubHkgaWRlbnRpZmllcnM6IFRlbXBsYXRlSWRlbnRpZmllcltdID0gW10pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5maWxlID0gY29udGV4dC5zb3VyY2VTcGFuLnN0YXJ0LmZpbGU7XG4gIH1cblxuICBzdGF0aWMgZ2V0SWRlbnRpZmllcnMoYXN0OiBBU1QsIGNvbnRleHQ6IE5vZGUpOiBUZW1wbGF0ZUlkZW50aWZpZXJbXSB7XG4gICAgY29uc3QgdmlzaXRvciA9IG5ldyBFeHByZXNzaW9uVmlzaXRvcihjb250ZXh0KTtcbiAgICB2aXNpdG9yLnZpc2l0KGFzdCk7XG4gICAgY29uc3QgaWRlbnRpZmllcnMgPSB2aXNpdG9yLmlkZW50aWZpZXJzO1xuXG4gICAgdXBkYXRlSWRlbnRpZmllclNwYW5zKGlkZW50aWZpZXJzLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBpZGVudGlmaWVycztcbiAgfVxuXG4gIHZpc2l0KGFzdDogQVNUKSB7IGFzdC52aXNpdCh0aGlzKTsgfVxuXG4gIHZpc2l0TWV0aG9kQ2FsbChhc3Q6IE1ldGhvZENhbGwsIGNvbnRleHQ6IHt9KSB7XG4gICAgdGhpcy5hZGRJZGVudGlmaWVyKGFzdCwgSWRlbnRpZmllcktpbmQuTWV0aG9kKTtcbiAgICBzdXBlci52aXNpdE1ldGhvZENhbGwoYXN0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHZpc2l0UHJvcGVydHlSZWFkKGFzdDogUHJvcGVydHlSZWFkLCBjb250ZXh0OiB7fSkge1xuICAgIHRoaXMuYWRkSWRlbnRpZmllcihhc3QsIElkZW50aWZpZXJLaW5kLlByb3BlcnR5KTtcbiAgICBzdXBlci52aXNpdFByb3BlcnR5UmVhZChhc3QsIGNvbnRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRJZGVudGlmaWVyKGFzdDogQVNUJntuYW1lOiBzdHJpbmd9LCBraW5kOiBJZGVudGlmaWVyS2luZCkge1xuICAgIHRoaXMuaWRlbnRpZmllcnMucHVzaCh7XG4gICAgICBuYW1lOiBhc3QubmFtZSxcbiAgICAgIHNwYW46IGFzdC5zcGFuLCBraW5kLFxuICAgICAgZmlsZTogdGhpcy5maWxlLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVmlzaXRzIHRoZSBBU1Qgb2YgYSBwYXJzZWQgQW5ndWxhciB0ZW1wbGF0ZS4gRGlzY292ZXJzIGFuZCBzdG9yZXNcbiAqIGlkZW50aWZpZXJzIG9mIGludGVyZXN0LCBkZWZlcnJpbmcgdG8gYW4gYEV4cHJlc3Npb25WaXNpdG9yYCBhcyBuZWVkZWQuXG4gKi9cbmNsYXNzIFRlbXBsYXRlVmlzaXRvciBleHRlbmRzIFJlY3Vyc2l2ZVRlbXBsYXRlVmlzaXRvciB7XG4gIC8vIGlkZW50aWZpZXJzIG9mIGludGVyZXN0IGZvdW5kIGluIHRoZSB0ZW1wbGF0ZVxuICByZWFkb25seSBpZGVudGlmaWVycyA9IG5ldyBTZXQ8VGVtcGxhdGVJZGVudGlmaWVyPigpO1xuXG4gIC8qKlxuICAgKiBWaXNpdHMgYSBub2RlIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIG5vZGUgbm9kZSB0byB2aXNpdFxuICAgKi9cbiAgdmlzaXQobm9kZTogSFRNTE5vZGUpIHsgbm9kZS52aXNpdCh0aGlzKTsgfVxuXG4gIHZpc2l0QWxsKG5vZGVzOiBOb2RlW10pIHsgbm9kZXMuZm9yRWFjaChub2RlID0+IHRoaXMudmlzaXQobm9kZSkpOyB9XG5cbiAgdmlzaXRFbGVtZW50KGVsZW1lbnQ6IEVsZW1lbnQpIHtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuYXR0cmlidXRlcyk7XG4gICAgdGhpcy52aXNpdEFsbChlbGVtZW50LmNoaWxkcmVuKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQucmVmZXJlbmNlcyk7XG4gIH1cbiAgdmlzaXRUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGUpIHtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLmF0dHJpYnV0ZXMpO1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUuY2hpbGRyZW4pO1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUucmVmZXJlbmNlcyk7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS52YXJpYWJsZXMpO1xuICB9XG4gIHZpc2l0Qm91bmRUZXh0KHRleHQ6IEJvdW5kVGV4dCkgeyB0aGlzLmFkZElkZW50aWZpZXJzKHRleHQpOyB9XG5cbiAgLyoqXG4gICAqIEFkZHMgaWRlbnRpZmllcnMgdG8gdGhlIHZpc2l0b3IncyBzdGF0ZS5cbiAgICogQHBhcmFtIHZpc2l0ZWRFbnRpdGllcyBpbnRlcmVzdGluZyBlbnRpdGllcyB0byBhZGQgYXMgaWRlbnRpZmllcnNcbiAgICogQHBhcmFtIGN1cnJldE5vZGUgbm9kZSBlbnRpdGllcyB3ZXJlIGRpc2NvdmVyZWQgaW5cbiAgICovXG4gIHByaXZhdGUgYWRkSWRlbnRpZmllcnMobm9kZTogTm9kZSZ7dmFsdWU6IEFTVH0pIHtcbiAgICBjb25zdCBpZGVudGlmaWVycyA9IEV4cHJlc3Npb25WaXNpdG9yLmdldElkZW50aWZpZXJzKG5vZGUudmFsdWUsIG5vZGUpO1xuICAgIGlkZW50aWZpZXJzLmZvckVhY2goaWQgPT4gdGhpcy5pZGVudGlmaWVycy5hZGQoaWQpKTtcbiAgfVxufVxuXG4vKipcbiAqIFVud3JhcHMgYW5kIHJlcGFyc2VzIGEgdGVtcGxhdGUsIHByZXNlcnZpbmcgd2hpdGVzcGFjZSBhbmQgd2l0aCBubyBsZWFkaW5nIHRyaXZpYWwgY2hhcmFjdGVycy5cbiAqXG4gKiBBIHRlbXBsYXRlIG1heSBwcmV2aW91c2x5IGhhdmUgYmVlbiBwYXJzZWQgd2l0aG91dCBwcmVzZXJ2aW5nIHdoaXRlc3BhY2UsIGFuZCB3YXMgZGVmaW5pdGVseVxuICogcGFyc2VkIHdpdGggbGVhZGluZyB0cml2aWFsIGNoYXJhY3RlcnMgKHNlZSBgcGFyc2VUZW1wbGF0ZWAgZnJvbSB0aGUgY29tcGlsZXIgcGFja2FnZSBBUEkpLlxuICogQm90aCBvZiB0aGVzZSBhcmUgZGV0cmltZW50YWwgZm9yIGluZGV4aW5nIGFzIHRoZXkgcmVzdWx0IGluIGEgbWFuaXB1bGF0ZWQgQVNUIG5vdCByZXByZXNlbnRpbmdcbiAqIHRoZSB0ZW1wbGF0ZSBzb3VyY2UgY29kZS5cbiAqXG4gKiBUT0RPKGF5YXpoYWZpeik6IFJlbW92ZSBvbmNlIGlzc3VlcyB3aXRoIGBsZWFkaW5nVHJpdmlhQ2hhcnNgIGFuZCBgcGFyc2VUZW1wbGF0ZWAgYXJlIHJlc29sdmVkLlxuICovXG5mdW5jdGlvbiByZXN0b3JlVGVtcGxhdGUodGVtcGxhdGU6IFRtcGxBc3ROb2RlW10sIG9wdGlvbnM6IFJlc3RvcmVUZW1wbGF0ZU9wdGlvbnMpOiBUbXBsQXN0Tm9kZVtdIHtcbiAgLy8gdHJ5IHRvIHJlY2FwdHVyZSB0aGUgdGVtcGxhdGUgY29udGVudCBhbmQgVVJMXG4gIC8vIGlmIHRoZXJlIHdhcyBub3RoaW5nIGluIHRoZSB0ZW1wbGF0ZSB0byBiZWdpbiB3aXRoLCB0aGlzIGlzIGp1c3QgYSBuby1vcFxuICBpZiAodGVtcGxhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IHtjb250ZW50OiB0ZW1wbGF0ZVN0ciwgdXJsOiB0ZW1wbGF0ZVVybH0gPSB0ZW1wbGF0ZVswXS5zb3VyY2VTcGFuLnN0YXJ0LmZpbGU7XG5cbiAgb3B0aW9ucy5wcmVzZXJ2ZVdoaXRlc3BhY2VzID0gdHJ1ZTtcbiAgY29uc3Qge2ludGVycG9sYXRpb25Db25maWcsIHByZXNlcnZlV2hpdGVzcGFjZXN9ID0gb3B0aW9ucztcblxuICBjb25zdCBiaW5kaW5nUGFyc2VyID0gbWFrZUJpbmRpbmdQYXJzZXIoaW50ZXJwb2xhdGlvbkNvbmZpZyk7XG4gIGNvbnN0IGh0bWxQYXJzZXIgPSBuZXcgSHRtbFBhcnNlcigpO1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IGh0bWxQYXJzZXIucGFyc2UodGVtcGxhdGVTdHIsIHRlbXBsYXRlVXJsLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICB0b2tlbml6ZUV4cGFuc2lvbkZvcm1zOiB0cnVlLFxuICB9KTtcblxuICBpZiAocGFyc2VSZXN1bHQuZXJyb3JzICYmIHBhcnNlUmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbXBvc3NpYmxlIHN0YXRlOiB0ZW1wbGF0ZSBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgcGFyc2VkIHByZXZpb3VzbHkuJyk7XG4gIH1cblxuICBjb25zdCByb290Tm9kZXMgPSB2aXNpdEFsbChcbiAgICAgIG5ldyBJMThuTWV0YVZpc2l0b3IoaW50ZXJwb2xhdGlvbkNvbmZpZywgIXByZXNlcnZlV2hpdGVzcGFjZXMpLCBwYXJzZVJlc3VsdC5yb290Tm9kZXMpO1xuXG4gIGNvbnN0IHtub2RlcywgZXJyb3JzfSA9IGh0bWxBc3RUb1JlbmRlcjNBc3Qocm9vdE5vZGVzLCBiaW5kaW5nUGFyc2VyKTtcbiAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW1wb3NzaWJsZSBzdGF0ZTogdGVtcGxhdGUgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHBhcnNlZCBwcmV2aW91c2x5LicpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyBhIHRlbXBsYXRlIEFTVCBhbmQgYnVpbGRzIGlkZW50aWZpZXJzIGRpc2NvdmVyZWQgaW4gaXQuXG4gKiBAcGFyYW0gdGVtcGxhdGUgdGVtcGxhdGUgdG8gZXh0cmFjdCBpbmRlbnRpZmllcnMgZnJvbVxuICogQHBhcmFtIG9wdGlvbnMgb3B0aW9ucyBmb3IgcmVzdG9yaW5nIHRoZSBwYXJzZWQgdGVtcGxhdGUgdG8gYSBpbmRleGFibGUgc3RhdGVcbiAqIEByZXR1cm4gaWRlbnRpZmllcnMgaW4gdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBsYXRlSWRlbnRpZmllcnMoXG4gICAgdGVtcGxhdGU6IFRtcGxBc3ROb2RlW10sIG9wdGlvbnM6IFJlc3RvcmVUZW1wbGF0ZU9wdGlvbnMpOiBTZXQ8VGVtcGxhdGVJZGVudGlmaWVyPiB7XG4gIGNvbnN0IHJlc3RvcmVkVGVtcGxhdGUgPSByZXN0b3JlVGVtcGxhdGUodGVtcGxhdGUsIG9wdGlvbnMpO1xuICBjb25zdCB2aXNpdG9yID0gbmV3IFRlbXBsYXRlVmlzaXRvcigpO1xuICB2aXNpdG9yLnZpc2l0QWxsKHJlc3RvcmVkVGVtcGxhdGUpO1xuICByZXR1cm4gdmlzaXRvci5pZGVudGlmaWVycztcbn1cbiJdfQ==
167
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luZGV4ZXIvc3JjL3RlbXBsYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILDhDQUFtSTtJQUNuSSwrREFBc0k7SUFDdEksdUVBQTZFO0lBVzdFOzs7Ozs7OztPQVFHO0lBQ0g7UUFBZ0MsNkNBQW1CO1FBR2pELDJCQUNJLE9BQWEsRUFBbUIsYUFBeUMsRUFDeEQsYUFBNkMsRUFDN0MsY0FBZ0Q7WUFEaEQsOEJBQUEsRUFBQSxnQkFBZ0IsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDN0MsK0JBQUEsRUFBQSxpQkFBaUIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUhyRSxZQUlFLGlCQUFPLFNBQ1I7WUFKbUMsbUJBQWEsR0FBYixhQUFhLENBQTRCO1lBQ3hELG1CQUFhLEdBQWIsYUFBYSxDQUFnQztZQUM3QyxvQkFBYyxHQUFkLGNBQWMsQ0FBa0M7WUFMNUQsaUJBQVcsR0FBeUIsRUFBRSxDQUFDOztRQU9oRCxDQUFDO1FBRUQ7Ozs7Ozs7V0FPRztRQUNJLGdDQUFjLEdBQXJCLFVBQXNCLEdBQVEsRUFBRSxPQUFhLEVBQUUsYUFBeUM7WUFFdEYsSUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDOUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuQixPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDN0IsQ0FBQztRQUVELGlDQUFLLEdBQUwsVUFBTSxHQUFRLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEMsMkNBQWUsR0FBZixVQUFnQixHQUFlLEVB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SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBU1QsIEJvdW5kVGFyZ2V0LCBEaXJlY3RpdmVNZXRhLCBJbXBsaWNpdFJlY2VpdmVyLCBNZXRob2RDYWxsLCBQcm9wZXJ0eVJlYWQsIFJlY3Vyc2l2ZUFzdFZpc2l0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCB7Qm91bmRUZXh0LCBFbGVtZW50LCBOb2RlLCBSZWN1cnNpdmVWaXNpdG9yIGFzIFJlY3Vyc2l2ZVRlbXBsYXRlVmlzaXRvciwgVGVtcGxhdGV9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9yZW5kZXIzL3IzX2FzdCc7XG5pbXBvcnQge0Fic29sdXRlU291cmNlU3BhbiwgSWRlbnRpZmllcktpbmQsIFRlbXBsYXRlSWRlbnRpZmllcn0gZnJvbSAnLi9hcGknO1xuXG4vKipcbiAqIEEgcGFyc2VkIG5vZGUgaW4gYSB0ZW1wbGF0ZSwgd2hpY2ggbWF5IGhhdmUgYSBuYW1lIChpZiBpdCBpcyBhIHNlbGVjdG9yKSBvclxuICogYmUgYW5vbnltb3VzIChsaWtlIGEgdGV4dCBzcGFuKS5cbiAqL1xuaW50ZXJmYWNlIEhUTUxOb2RlIGV4dGVuZHMgTm9kZSB7XG4gIHRhZ05hbWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVmlzaXRzIHRoZSBBU1Qgb2YgYW4gQW5ndWxhciB0ZW1wbGF0ZSBzeW50YXggZXhwcmVzc2lvbiwgZmluZGluZyBpbnRlcmVzdGluZ1xuICogZW50aXRpZXMgKHZhcmlhYmxlIHJlZmVyZW5jZXMsIGV0Yy4pLiBDcmVhdGVzIGFuIGFycmF5IG9mIEVudGl0aWVzIGZvdW5kIGluXG4gKiB0aGUgZXhwcmVzc2lvbiwgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIEVudGl0aWVzIGJlaW5nIHJlbGF0aXZlIHRvIHRoZVxuICogZXhwcmVzc2lvbi5cbiAqXG4gKiBWaXNpdGluZyBgdGV4dCB7e3Byb3B9fWAgd2lsbCByZXR1cm4gYFtUZW1wbGF0ZUlkZW50aWZpZXIge25hbWU6ICdwcm9wJywgc3Bhbjoge3N0YXJ0OiA3LCBlbmQ6XG4gKiAxMX19XWAuXG4gKi9cbmNsYXNzIEV4cHJlc3Npb25WaXNpdG9yIGV4dGVuZHMgUmVjdXJzaXZlQXN0VmlzaXRvciB7XG4gIHJlYWRvbmx5IGlkZW50aWZpZXJzOiBUZW1wbGF0ZUlkZW50aWZpZXJbXSA9IFtdO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgICBjb250ZXh0OiBOb2RlLCBwcml2YXRlIHJlYWRvbmx5IGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PERpcmVjdGl2ZU1ldGE+LFxuICAgICAgcHJpdmF0ZSByZWFkb25seSBleHByZXNzaW9uU3RyID0gY29udGV4dC5zb3VyY2VTcGFuLnRvU3RyaW5nKCksXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGFic29sdXRlT2Zmc2V0ID0gY29udGV4dC5zb3VyY2VTcGFuLnN0YXJ0Lm9mZnNldCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpZGVudGlmaWVycyBkaXNjb3ZlcmVkIGluIGFuIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBhc3QgZXhwcmVzc2lvbiBBU1QgdG8gdmlzaXRcbiAgICogQHBhcmFtIGNvbnRleHQgSFRNTCBub2RlIGV4cHJlc3Npb24gaXMgZGVmaW5lZCBpblxuICAgKiBAcGFyYW0gYm91bmRUZW1wbGF0ZSBib3VuZCB0YXJnZXQgb2YgdGhlIGVudGlyZSB0ZW1wbGF0ZSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcXVlcnkgZm9yIHRoZVxuICAgKiBlbnRpdGllcyBleHByZXNzaW9ucyB0YXJnZXQuXG4gICAqL1xuICBzdGF0aWMgZ2V0SWRlbnRpZmllcnMoYXN0OiBBU1QsIGNvbnRleHQ6IE5vZGUsIGJvdW5kVGVtcGxhdGU6IEJvdW5kVGFyZ2V0PERpcmVjdGl2ZU1ldGE+KTpcbiAgICAgIFRlbXBsYXRlSWRlbnRpZmllcltdIHtcbiAgICBjb25zdCB2aXNpdG9yID0gbmV3IEV4cHJlc3Npb25WaXNpdG9yKGNvbnRleHQsIGJvdW5kVGVtcGxhdGUpO1xuICAgIHZpc2l0b3IudmlzaXQoYXN0KTtcbiAgICByZXR1cm4gdmlzaXRvci5pZGVudGlmaWVycztcbiAgfVxuXG4gIHZpc2l0KGFzdDogQVNUKSB7IGFzdC52aXNpdCh0aGlzKTsgfVxuXG4gIHZpc2l0TWV0aG9kQ2FsbChhc3Q6IE1ldGhvZENhbGwsIGNvbnRleHQ6IHt9KSB7XG4gICAgdGhpcy52aXNpdElkZW50aWZpZXIoYXN0LCBJZGVudGlmaWVyS2luZC5NZXRob2QpO1xuICAgIHN1cGVyLnZpc2l0TWV0aG9kQ2FsbChhc3QsIGNvbnRleHQpO1xuICB9XG5cbiAgdmlzaXRQcm9wZXJ0eVJlYWQoYXN0OiBQcm9wZXJ0eVJlYWQsIGNvbnRleHQ6IHt9KSB7XG4gICAgdGhpcy52aXNpdElkZW50aWZpZXIoYXN0LCBJZGVudGlmaWVyS2luZC5Qcm9wZXJ0eSk7XG4gICAgc3VwZXIudmlzaXRQcm9wZXJ0eVJlYWQoYXN0LCBjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXNpdHMgYW4gaWRlbnRpZmllciwgYWRkaW5nIGl0IHRvIHRoZSBpZGVudGlmaWVyIHN0b3JlIGlmIGl0IGlzIHVzZWZ1bCBmb3IgaW5kZXhpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBhc3QgZXhwcmVzc2lvbiBBU1QgdGhlIGlkZW50aWZpZXIgaXMgaW5cbiAgICogQHBhcmFtIGtpbmQgaWRlbnRpZmllciBraW5kXG4gICAqL1xuICBwcml2YXRlIHZpc2l0SWRlbnRpZmllcihhc3Q6IEFTVCZ7bmFtZTogc3RyaW5nLCByZWNlaXZlcjogQVNUfSwga2luZDogSWRlbnRpZmllcktpbmQpIHtcbiAgICAvLyBUaGUgZGVmaW5pdGlvbiBvZiBhIG5vbi10b3AtbGV2ZWwgcHJvcGVydHkgc3VjaCBhcyBgYmFyYCBpbiBge3tmb28uYmFyfX1gIGlzIGN1cnJlbnRseVxuICAgIC8vIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIGJ5IGFuIGluZGV4ZXIgYW5kIHVuc3VwcG9ydGVkIGJ5IHRoZSBpbmRleGluZyBtb2R1bGUuXG4gICAgLy8gVGhlIGluZGV4aW5nIG1vZHVsZSBhbHNvIGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHJlZmVyZW5jZXMgdG8gaWRlbnRpZmllcnMgZGVjbGFyZWQgaW4gdGhlXG4gICAgLy8gdGVtcGxhdGUgaXRzZWxmLCB3aGljaCBoYXZlIGEgbm9uLW51bGwgZXhwcmVzc2lvbiB0YXJnZXQuXG4gICAgaWYgKCEoYXN0LnJlY2VpdmVyIGluc3RhbmNlb2YgSW1wbGljaXRSZWNlaXZlcikgfHxcbiAgICAgICAgdGhpcy5ib3VuZFRlbXBsYXRlLmdldEV4cHJlc3Npb25UYXJnZXQoYXN0KSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgbG9jYXRpb24gb2YgdGhlIGlkZW50aWZpZXIgb2YgcmVhbCBpbnRlcmVzdC5cbiAgICAvLyBUaGUgY29tcGlsZXIncyBleHByZXNzaW9uIHBhcnNlciByZWNvcmRzIHRoZSBsb2NhdGlvbiBvZiBzb21lIGV4cHJlc3Npb25zIGluIGEgbWFubmVyIG5vdFxuICAgIC8vIHVzZWZ1bCB0byB0aGUgaW5kZXhlci4gRm9yIGV4YW1wbGUsIGEgYE1ldGhvZENhbGxgIGBmb28oYSwgYilgIHdpbGwgcmVjb3JkIHRoZSBzcGFuIG9mIHRoZVxuICAgIC8vIGVudGlyZSBtZXRob2QgY2FsbCwgYnV0IHRoZSBpbmRleGVyIGlzIGludGVyZXN0ZWQgb25seSBpbiB0aGUgbWV0aG9kIGlkZW50aWZpZXIuXG4gICAgY29uc3QgbG9jYWxFeHByZXNzaW9uID0gdGhpcy5leHByZXNzaW9uU3RyLnN1YnN0cihhc3Quc3Bhbi5zdGFydCwgYXN0LnNwYW4uZW5kKTtcbiAgICBjb25zdCBpZGVudGlmaWVyU3RhcnQgPSBhc3Quc3Bhbi5zdGFydCArIGxvY2FsRXhwcmVzc2lvbi5pbmRleE9mKGFzdC5uYW1lKTtcblxuICAgIC8vIEpvaW4gdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSBleHByZXNzaW9uIHdpdGhpbiBhIG5vZGUgd2l0aCB0aGUgYWJzb2x1dGUgcG9zaXRpb25cbiAgICAvLyBvZiB0aGUgbm9kZSB0byBnZXQgdGhlIGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSBleHByZXNzaW9uIGluIHRoZSBzb3VyY2UgY29kZS5cbiAgICBjb25zdCBhYnNvbHV0ZVN0YXJ0ID0gdGhpcy5hYnNvbHV0ZU9mZnNldCArIGlkZW50aWZpZXJTdGFydDtcbiAgICBjb25zdCBzcGFuID0gbmV3IEFic29sdXRlU291cmNlU3BhbihhYnNvbHV0ZVN0YXJ0LCBhYnNvbHV0ZVN0YXJ0ICsgYXN0Lm5hbWUubGVuZ3RoKTtcblxuICAgIHRoaXMuaWRlbnRpZmllcnMucHVzaCh7XG4gICAgICBuYW1lOiBhc3QubmFtZSxcbiAgICAgIHNwYW4sXG4gICAgICBraW5kLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogVmlzaXRzIHRoZSBBU1Qgb2YgYSBwYXJzZWQgQW5ndWxhciB0ZW1wbGF0ZS4gRGlzY292ZXJzIGFuZCBzdG9yZXNcbiAqIGlkZW50aWZpZXJzIG9mIGludGVyZXN0LCBkZWZlcnJpbmcgdG8gYW4gYEV4cHJlc3Npb25WaXNpdG9yYCBhcyBuZWVkZWQuXG4gKi9cbmNsYXNzIFRlbXBsYXRlVmlzaXRvciBleHRlbmRzIFJlY3Vyc2l2ZVRlbXBsYXRlVmlzaXRvciB7XG4gIC8vIGlkZW50aWZpZXJzIG9mIGludGVyZXN0IGZvdW5kIGluIHRoZSB0ZW1wbGF0ZVxuICByZWFkb25seSBpZGVudGlmaWVycyA9IG5ldyBTZXQ8VGVtcGxhdGVJZGVudGlmaWVyPigpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGVtcGxhdGUgdmlzaXRvciBmb3IgYSBib3VuZCB0ZW1wbGF0ZSB0YXJnZXQuIFRoZSBib3VuZCB0YXJnZXQgY2FuIGJlIHVzZWQgd2hlblxuICAgKiBkZWZlcnJlZCB0byB0aGUgZXhwcmVzc2lvbiB2aXNpdG9yIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGFyZ2V0IG9mIGFuIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBib3VuZFRlbXBsYXRlIGJvdW5kIHRlbXBsYXRlIHRhcmdldFxuICAgKi9cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBib3VuZFRlbXBsYXRlOiBCb3VuZFRhcmdldDxEaXJlY3RpdmVNZXRhPikgeyBzdXBlcigpOyB9XG5cbiAgLyoqXG4gICAqIFZpc2l0cyBhIG5vZGUgaW4gdGhlIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAcGFyYW0gbm9kZSBub2RlIHRvIHZpc2l0XG4gICAqL1xuICB2aXNpdChub2RlOiBIVE1MTm9kZSkgeyBub2RlLnZpc2l0KHRoaXMpOyB9XG5cbiAgdmlzaXRBbGwobm9kZXM6IE5vZGVbXSkgeyBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gdGhpcy52aXNpdChub2RlKSk7IH1cblxuICB2aXNpdEVsZW1lbnQoZWxlbWVudDogRWxlbWVudCkge1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5hdHRyaWJ1dGVzKTtcbiAgICB0aGlzLnZpc2l0QWxsKGVsZW1lbnQuY2hpbGRyZW4pO1xuICAgIHRoaXMudmlzaXRBbGwoZWxlbWVudC5yZWZlcmVuY2VzKTtcbiAgfVxuICB2aXNpdFRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSkge1xuICAgIHRoaXMudmlzaXRBbGwodGVtcGxhdGUuYXR0cmlidXRlcyk7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS5jaGlsZHJlbik7XG4gICAgdGhpcy52aXNpdEFsbCh0ZW1wbGF0ZS5yZWZlcmVuY2VzKTtcbiAgICB0aGlzLnZpc2l0QWxsKHRlbXBsYXRlLnZhcmlhYmxlcyk7XG4gIH1cbiAgdmlzaXRCb3VuZFRleHQodGV4dDogQm91bmRUZXh0KSB7IHRoaXMudmlzaXRFeHByZXNzaW9uKHRleHQpOyB9XG5cbiAgLyoqXG4gICAqIFZpc2l0cyBhIG5vZGUncyBleHByZXNzaW9uIGFuZCBhZGRzIGl0cyBpZGVudGlmaWVycywgaWYgYW55LCB0byB0aGUgdmlzaXRvcidzIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0gY3VycmV0Tm9kZSBub2RlIHdob3NlIGV4cHJlc3Npb24gdG8gdmlzaXRcbiAgICovXG4gIHByaXZhdGUgdmlzaXRFeHByZXNzaW9uKG5vZGU6IE5vZGUme3ZhbHVlOiBBU1R9KSB7XG4gICAgY29uc3QgaWRlbnRpZmllcnMgPSBFeHByZXNzaW9uVmlzaXRvci5nZXRJZGVudGlmaWVycyhub2RlLnZhbHVlLCBub2RlLCB0aGlzLmJvdW5kVGVtcGxhdGUpO1xuICAgIGlkZW50aWZpZXJzLmZvckVhY2goaWQgPT4gdGhpcy5pZGVudGlmaWVycy5hZGQoaWQpKTtcbiAgfVxufVxuXG4vKipcbiAqIFRyYXZlcnNlcyBhIHRlbXBsYXRlIEFTVCBhbmQgYnVpbGRzIGlkZW50aWZpZXJzIGRpc2NvdmVyZWQgaW4gaXQuXG4gKlxuICogQHBhcmFtIGJvdW5kVGVtcGxhdGUgYm91bmQgdGVtcGxhdGUgdGFyZ2V0LCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcXVlcnlpbmcgZXhwcmVzc2lvbiB0YXJnZXRzLlxuICogQHJldHVybiBpZGVudGlmaWVycyBpbiB0ZW1wbGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVJZGVudGlmaWVycyhib3VuZFRlbXBsYXRlOiBCb3VuZFRhcmdldDxEaXJlY3RpdmVNZXRhPik6XG4gICAgU2V0PFRlbXBsYXRlSWRlbnRpZmllcj4ge1xuICBjb25zdCB2aXNpdG9yID0gbmV3IFRlbXBsYXRlVmlzaXRvcihib3VuZFRlbXBsYXRlKTtcbiAgaWYgKGJvdW5kVGVtcGxhdGUudGFyZ2V0LnRlbXBsYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2aXNpdG9yLnZpc2l0QWxsKGJvdW5kVGVtcGxhdGUudGFyZ2V0LnRlbXBsYXRlKTtcbiAgfVxuICByZXR1cm4gdmlzaXRvci5pZGVudGlmaWVycztcbn1cbiJdfQ==
@@ -11,11 +11,13 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/compiler-cli/src/ngtsc/indexer/src/transform", ["require", "exports"], factory);
14
+ define("@angular/compiler-cli/src/ngtsc/indexer/src/transform", ["require", "exports", "@angular/compiler/src/compiler", "@angular/compiler-cli/src/ngtsc/indexer/src/template"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
+ var compiler_1 = require("@angular/compiler/src/compiler");
20
+ var template_1 = require("@angular/compiler-cli/src/ngtsc/indexer/src/template");
19
21
  /**
20
22
  * Generates `IndexedComponent` entries from a `IndexingContext`, which has information
21
23
  * about components discovered in the program registered in it.
@@ -23,8 +25,41 @@
23
25
  * The context must be populated before `generateAnalysis` is called.
24
26
  */
25
27
  function generateAnalysis(context) {
26
- throw new Error('Method not implemented.');
28
+ var analysis = new Map();
29
+ context.components.forEach(function (_a) {
30
+ var declaration = _a.declaration, selector = _a.selector, boundTemplate = _a.boundTemplate, templateMeta = _a.templateMeta;
31
+ var name = declaration.name.getText();
32
+ var usedComponents = new Set();
33
+ var usedDirs = boundTemplate.getUsedDirectives();
34
+ usedDirs.forEach(function (dir) {
35
+ if (dir.isComponent) {
36
+ usedComponents.add(dir.ref.node);
37
+ }
38
+ });
39
+ // Get source files for the component and the template. If the template is inline, its source
40
+ // file is the component's.
41
+ var componentFile = new compiler_1.ParseSourceFile(declaration.getSourceFile().getFullText(), declaration.getSourceFile().fileName);
42
+ var templateFile;
43
+ if (templateMeta.isInline) {
44
+ templateFile = componentFile;
45
+ }
46
+ else {
47
+ templateFile = templateMeta.file;
48
+ }
49
+ analysis.set(declaration, {
50
+ name: name,
51
+ selector: selector,
52
+ file: componentFile,
53
+ template: {
54
+ identifiers: template_1.getTemplateIdentifiers(boundTemplate),
55
+ usedComponents: usedComponents,
56
+ isInline: templateMeta.isInline,
57
+ file: templateFile,
58
+ },
59
+ });
60
+ });
61
+ return analysis;
27
62
  }
28
63
  exports.generateAnalysis = generateAnalysis;
29
64
  });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9pbmRleGVyL3NyYy90cmFuc2Zvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFNSDs7Ozs7T0FLRztJQUNILFNBQWdCLGdCQUFnQixDQUFDLE9BQXdCO1FBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRkQsNENBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtJbmRleGVkQ29tcG9uZW50fSBmcm9tICcuL2FwaSc7XG5pbXBvcnQge0luZGV4aW5nQ29udGV4dH0gZnJvbSAnLi9jb250ZXh0JztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYEluZGV4ZWRDb21wb25lbnRgIGVudHJpZXMgZnJvbSBhIGBJbmRleGluZ0NvbnRleHRgLCB3aGljaCBoYXMgaW5mb3JtYXRpb25cbiAqIGFib3V0IGNvbXBvbmVudHMgZGlzY292ZXJlZCBpbiB0aGUgcHJvZ3JhbSByZWdpc3RlcmVkIGluIGl0LlxuICpcbiAqIFRoZSBjb250ZXh0IG11c3QgYmUgcG9wdWxhdGVkIGJlZm9yZSBgZ2VuZXJhdGVBbmFseXNpc2AgaXMgY2FsbGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBbmFseXNpcyhjb250ZXh0OiBJbmRleGluZ0NvbnRleHQpOiBNYXA8dHMuRGVjbGFyYXRpb24sIEluZGV4ZWRDb21wb25lbnQ+IHtcbiAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xufVxuIl19
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9pbmRleGVyL3NyYy90cmFuc2Zvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCwyREFBK0Q7SUFJL0QsaUZBQWtEO0lBRWxEOzs7OztPQUtHO0lBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsT0FBd0I7UUFDdkQsSUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7UUFFN0QsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBQyxFQUFvRDtnQkFBbkQsNEJBQVcsRUFBRSxzQkFBUSxFQUFFLGdDQUFhLEVBQUUsOEJBQVk7WUFDN0UsSUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUV4QyxJQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztZQUNqRCxJQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNuRCxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztnQkFDbEIsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFO29CQUNuQixjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2xDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCw2RkFBNkY7WUFDN0YsMkJBQTJCO1lBQzNCLElBQU0sYUFBYSxHQUFHLElBQUksMEJBQWUsQ0FDckMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRixJQUFJLFlBQTZCLENBQUM7WUFDbEMsSUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFO2dCQUN6QixZQUFZLEdBQUcsYUFBYSxDQUFDO2FBQzlCO2lCQUFNO2dCQUNMLFlBQVksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO2FBQ2xDO1lBRUQsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3hCLElBQUksTUFBQTtnQkFDSixRQUFRLFVBQUE7Z0JBQ1IsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLFFBQVEsRUFBRTtvQkFDUixXQUFXLEVBQUUsaUNBQXNCLENBQUMsYUFBYSxDQUFDO29CQUNsRCxjQUFjLGdCQUFBO29CQUNkLFFBQVEsRUFBRSxZQUFZLENBQUMsUUFBUTtvQkFDL0IsSUFBSSxFQUFFLFlBQVk7aUJBQ25CO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBdkNELDRDQXVDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtQYXJzZVNvdXJjZUZpbGV9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyL3NyYy9jb21waWxlcic7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7SW5kZXhlZENvbXBvbmVudH0gZnJvbSAnLi9hcGknO1xuaW1wb3J0IHtJbmRleGluZ0NvbnRleHR9IGZyb20gJy4vY29udGV4dCc7XG5pbXBvcnQge2dldFRlbXBsYXRlSWRlbnRpZmllcnN9IGZyb20gJy4vdGVtcGxhdGUnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBgSW5kZXhlZENvbXBvbmVudGAgZW50cmllcyBmcm9tIGEgYEluZGV4aW5nQ29udGV4dGAsIHdoaWNoIGhhcyBpbmZvcm1hdGlvblxuICogYWJvdXQgY29tcG9uZW50cyBkaXNjb3ZlcmVkIGluIHRoZSBwcm9ncmFtIHJlZ2lzdGVyZWQgaW4gaXQuXG4gKlxuICogVGhlIGNvbnRleHQgbXVzdCBiZSBwb3B1bGF0ZWQgYmVmb3JlIGBnZW5lcmF0ZUFuYWx5c2lzYCBpcyBjYWxsZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFuYWx5c2lzKGNvbnRleHQ6IEluZGV4aW5nQ29udGV4dCk6IE1hcDx0cy5EZWNsYXJhdGlvbiwgSW5kZXhlZENvbXBvbmVudD4ge1xuICBjb25zdCBhbmFseXNpcyA9IG5ldyBNYXA8dHMuRGVjbGFyYXRpb24sIEluZGV4ZWRDb21wb25lbnQ+KCk7XG5cbiAgY29udGV4dC5jb21wb25lbnRzLmZvckVhY2goKHtkZWNsYXJhdGlvbiwgc2VsZWN0b3IsIGJvdW5kVGVtcGxhdGUsIHRlbXBsYXRlTWV0YX0pID0+IHtcbiAgICBjb25zdCBuYW1lID0gZGVjbGFyYXRpb24ubmFtZS5nZXRUZXh0KCk7XG5cbiAgICBjb25zdCB1c2VkQ29tcG9uZW50cyA9IG5ldyBTZXQ8dHMuRGVjbGFyYXRpb24+KCk7XG4gICAgY29uc3QgdXNlZERpcnMgPSBib3VuZFRlbXBsYXRlLmdldFVzZWREaXJlY3RpdmVzKCk7XG4gICAgdXNlZERpcnMuZm9yRWFjaChkaXIgPT4ge1xuICAgICAgaWYgKGRpci5pc0NvbXBvbmVudCkge1xuICAgICAgICB1c2VkQ29tcG9uZW50cy5hZGQoZGlyLnJlZi5ub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEdldCBzb3VyY2UgZmlsZXMgZm9yIHRoZSBjb21wb25lbnQgYW5kIHRoZSB0ZW1wbGF0ZS4gSWYgdGhlIHRlbXBsYXRlIGlzIGlubGluZSwgaXRzIHNvdXJjZVxuICAgIC8vIGZpbGUgaXMgdGhlIGNvbXBvbmVudCdzLlxuICAgIGNvbnN0IGNvbXBvbmVudEZpbGUgPSBuZXcgUGFyc2VTb3VyY2VGaWxlKFxuICAgICAgICBkZWNsYXJhdGlvbi5nZXRTb3VyY2VGaWxlKCkuZ2V0RnVsbFRleHQoKSwgZGVjbGFyYXRpb24uZ2V0U291cmNlRmlsZSgpLmZpbGVOYW1lKTtcbiAgICBsZXQgdGVtcGxhdGVGaWxlOiBQYXJzZVNvdXJjZUZpbGU7XG4gICAgaWYgKHRlbXBsYXRlTWV0YS5pc0lubGluZSkge1xuICAgICAgdGVtcGxhdGVGaWxlID0gY29tcG9uZW50RmlsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVtcGxhdGVGaWxlID0gdGVtcGxhdGVNZXRhLmZpbGU7XG4gICAgfVxuXG4gICAgYW5hbHlzaXMuc2V0KGRlY2xhcmF0aW9uLCB7XG4gICAgICBuYW1lLFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBmaWxlOiBjb21wb25lbnRGaWxlLFxuICAgICAgdGVtcGxhdGU6IHtcbiAgICAgICAgaWRlbnRpZmllcnM6IGdldFRlbXBsYXRlSWRlbnRpZmllcnMoYm91bmRUZW1wbGF0ZSksXG4gICAgICAgIHVzZWRDb21wb25lbnRzLFxuICAgICAgICBpc0lubGluZTogdGVtcGxhdGVNZXRhLmlzSW5saW5lLFxuICAgICAgICBmaWxlOiB0ZW1wbGF0ZUZpbGUsXG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gYW5hbHlzaXM7XG59XG4iXX0=