@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
@@ -0,0 +1,302 @@
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/src/graph", ["require", "exports", "tslib", "@angular/compiler", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/api"], factory);
15
+ }
16
+ })(function (require, exports) {
17
+ "use strict";
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.SemanticDepGraphUpdater = exports.SemanticDepGraph = void 0;
20
+ var tslib_1 = require("tslib");
21
+ var compiler_1 = require("@angular/compiler");
22
+ var api_1 = require("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/api");
23
+ /**
24
+ * Represents a declaration for which no semantic symbol has been registered. For example,
25
+ * declarations from external dependencies have not been explicitly registered and are represented
26
+ * by this symbol. This allows the unresolved symbol to still be compared to a symbol from a prior
27
+ * compilation.
28
+ */
29
+ var OpaqueSymbol = /** @class */ (function (_super) {
30
+ tslib_1.__extends(OpaqueSymbol, _super);
31
+ function OpaqueSymbol() {
32
+ return _super !== null && _super.apply(this, arguments) || this;
33
+ }
34
+ OpaqueSymbol.prototype.isPublicApiAffected = function () {
35
+ return false;
36
+ };
37
+ OpaqueSymbol.prototype.isTypeCheckApiAffected = function () {
38
+ return false;
39
+ };
40
+ return OpaqueSymbol;
41
+ }(api_1.SemanticSymbol));
42
+ /**
43
+ * The semantic dependency graph of a single compilation.
44
+ */
45
+ var SemanticDepGraph = /** @class */ (function () {
46
+ function SemanticDepGraph() {
47
+ this.files = new Map();
48
+ this.symbolByDecl = new Map();
49
+ }
50
+ /**
51
+ * Registers a symbol in the graph. The symbol is given a unique identifier if possible, such that
52
+ * its equivalent symbol can be obtained from a prior graph even if its declaration node has
53
+ * changed across rebuilds. Symbols without an identifier are only able to find themselves in a
54
+ * prior graph if their declaration node is identical.
55
+ */
56
+ SemanticDepGraph.prototype.registerSymbol = function (symbol) {
57
+ this.symbolByDecl.set(symbol.decl, symbol);
58
+ if (symbol.identifier !== null) {
59
+ // If the symbol has a unique identifier, record it in the file that declares it. This enables
60
+ // the symbol to be requested by its unique name.
61
+ if (!this.files.has(symbol.path)) {
62
+ this.files.set(symbol.path, new Map());
63
+ }
64
+ this.files.get(symbol.path).set(symbol.identifier, symbol);
65
+ }
66
+ };
67
+ /**
68
+ * Attempts to resolve a symbol in this graph that represents the given symbol from another graph.
69
+ * If no matching symbol could be found, null is returned.
70
+ *
71
+ * @param symbol The symbol from another graph for which its equivalent in this graph should be
72
+ * found.
73
+ */
74
+ SemanticDepGraph.prototype.getEquivalentSymbol = function (symbol) {
75
+ // First lookup the symbol by its declaration. It is typical for the declaration to not have
76
+ // changed across rebuilds, so this is likely to find the symbol. Using the declaration also
77
+ // allows to diff symbols for which no unique identifier could be determined.
78
+ var previousSymbol = this.getSymbolByDecl(symbol.decl);
79
+ if (previousSymbol === null && symbol.identifier !== null) {
80
+ // The declaration could not be resolved to a symbol in a prior compilation, which may
81
+ // happen because the file containing the declaration has changed. In that case we want to
82
+ // lookup the symbol based on its unique identifier, as that allows us to still compare the
83
+ // changed declaration to the prior compilation.
84
+ previousSymbol = this.getSymbolByName(symbol.path, symbol.identifier);
85
+ }
86
+ return previousSymbol;
87
+ };
88
+ /**
89
+ * Attempts to find the symbol by its identifier.
90
+ */
91
+ SemanticDepGraph.prototype.getSymbolByName = function (path, identifier) {
92
+ if (!this.files.has(path)) {
93
+ return null;
94
+ }
95
+ var file = this.files.get(path);
96
+ if (!file.has(identifier)) {
97
+ return null;
98
+ }
99
+ return file.get(identifier);
100
+ };
101
+ /**
102
+ * Attempts to resolve the declaration to its semantic symbol.
103
+ */
104
+ SemanticDepGraph.prototype.getSymbolByDecl = function (decl) {
105
+ if (!this.symbolByDecl.has(decl)) {
106
+ return null;
107
+ }
108
+ return this.symbolByDecl.get(decl);
109
+ };
110
+ return SemanticDepGraph;
111
+ }());
112
+ exports.SemanticDepGraph = SemanticDepGraph;
113
+ /**
114
+ * Implements the logic to go from a previous dependency graph to a new one, along with information
115
+ * on which files have been affected.
116
+ */
117
+ var SemanticDepGraphUpdater = /** @class */ (function () {
118
+ function SemanticDepGraphUpdater(
119
+ /**
120
+ * The semantic dependency graph of the most recently succeeded compilation, or null if this
121
+ * is the initial build.
122
+ */
123
+ priorGraph) {
124
+ this.priorGraph = priorGraph;
125
+ this.newGraph = new SemanticDepGraph();
126
+ /**
127
+ * Contains opaque symbols that were created for declarations for which there was no symbol
128
+ * registered, which happens for e.g. external declarations.
129
+ */
130
+ this.opaqueSymbols = new Map();
131
+ }
132
+ /**
133
+ * Registers the symbol in the new graph that is being created.
134
+ */
135
+ SemanticDepGraphUpdater.prototype.registerSymbol = function (symbol) {
136
+ this.newGraph.registerSymbol(symbol);
137
+ };
138
+ /**
139
+ * Takes all facts that have been gathered to create a new semantic dependency graph. In this
140
+ * process, the semantic impact of the changes is determined which results in a set of files that
141
+ * need to be emitted and/or type-checked.
142
+ */
143
+ SemanticDepGraphUpdater.prototype.finalize = function () {
144
+ if (this.priorGraph === null) {
145
+ // If no prior dependency graph is available then this was the initial build, in which case
146
+ // we don't need to determine the semantic impact as everything is already considered
147
+ // logically changed.
148
+ return {
149
+ needsEmit: new Set(),
150
+ needsTypeCheckEmit: new Set(),
151
+ newGraph: this.newGraph,
152
+ };
153
+ }
154
+ var needsEmit = this.determineInvalidatedFiles(this.priorGraph);
155
+ var needsTypeCheckEmit = this.determineInvalidatedTypeCheckFiles(this.priorGraph);
156
+ return {
157
+ needsEmit: needsEmit,
158
+ needsTypeCheckEmit: needsTypeCheckEmit,
159
+ newGraph: this.newGraph,
160
+ };
161
+ };
162
+ SemanticDepGraphUpdater.prototype.determineInvalidatedFiles = function (priorGraph) {
163
+ var e_1, _a, e_2, _b;
164
+ var isPublicApiAffected = new Set();
165
+ try {
166
+ // The first phase is to collect all symbols which have their public API affected. Any symbols
167
+ // that cannot be matched up with a symbol from the prior graph are considered affected.
168
+ for (var _c = tslib_1.__values(this.newGraph.symbolByDecl.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
169
+ var symbol = _d.value;
170
+ var previousSymbol = priorGraph.getEquivalentSymbol(symbol);
171
+ if (previousSymbol === null || symbol.isPublicApiAffected(previousSymbol)) {
172
+ isPublicApiAffected.add(symbol);
173
+ }
174
+ }
175
+ }
176
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
177
+ finally {
178
+ try {
179
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
180
+ }
181
+ finally { if (e_1) throw e_1.error; }
182
+ }
183
+ // The second phase is to find all symbols for which the emit result is affected, either because
184
+ // their used declarations have changed or any of those used declarations has had its public API
185
+ // affected as determined in the first phase.
186
+ var needsEmit = new Set();
187
+ try {
188
+ for (var _e = tslib_1.__values(this.newGraph.symbolByDecl.values()), _f = _e.next(); !_f.done; _f = _e.next()) {
189
+ var symbol = _f.value;
190
+ if (symbol.isEmitAffected === undefined) {
191
+ continue;
192
+ }
193
+ var previousSymbol = priorGraph.getEquivalentSymbol(symbol);
194
+ if (previousSymbol === null || symbol.isEmitAffected(previousSymbol, isPublicApiAffected)) {
195
+ needsEmit.add(symbol.path);
196
+ }
197
+ }
198
+ }
199
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
200
+ finally {
201
+ try {
202
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
203
+ }
204
+ finally { if (e_2) throw e_2.error; }
205
+ }
206
+ return needsEmit;
207
+ };
208
+ SemanticDepGraphUpdater.prototype.determineInvalidatedTypeCheckFiles = function (priorGraph) {
209
+ var e_3, _a, e_4, _b;
210
+ var isTypeCheckApiAffected = new Set();
211
+ try {
212
+ // The first phase is to collect all symbols which have their public API affected. Any symbols
213
+ // that cannot be matched up with a symbol from the prior graph are considered affected.
214
+ for (var _c = tslib_1.__values(this.newGraph.symbolByDecl.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
215
+ var symbol = _d.value;
216
+ var previousSymbol = priorGraph.getEquivalentSymbol(symbol);
217
+ if (previousSymbol === null || symbol.isTypeCheckApiAffected(previousSymbol)) {
218
+ isTypeCheckApiAffected.add(symbol);
219
+ }
220
+ }
221
+ }
222
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
223
+ finally {
224
+ try {
225
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
226
+ }
227
+ finally { if (e_3) throw e_3.error; }
228
+ }
229
+ // The second phase is to find all symbols for which the emit result is affected, either because
230
+ // their used declarations have changed or any of those used declarations has had its public API
231
+ // affected as determined in the first phase.
232
+ var needsTypeCheckEmit = new Set();
233
+ try {
234
+ for (var _e = tslib_1.__values(this.newGraph.symbolByDecl.values()), _f = _e.next(); !_f.done; _f = _e.next()) {
235
+ var symbol = _f.value;
236
+ if (symbol.isTypeCheckBlockAffected === undefined) {
237
+ continue;
238
+ }
239
+ var previousSymbol = priorGraph.getEquivalentSymbol(symbol);
240
+ if (previousSymbol === null ||
241
+ symbol.isTypeCheckBlockAffected(previousSymbol, isTypeCheckApiAffected)) {
242
+ needsTypeCheckEmit.add(symbol.path);
243
+ }
244
+ }
245
+ }
246
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
247
+ finally {
248
+ try {
249
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
250
+ }
251
+ finally { if (e_4) throw e_4.error; }
252
+ }
253
+ return needsTypeCheckEmit;
254
+ };
255
+ /**
256
+ * Creates a `SemanticReference` for the reference to `decl` using the expression `expr`. See
257
+ * the documentation of `SemanticReference` for details.
258
+ */
259
+ SemanticDepGraphUpdater.prototype.getSemanticReference = function (decl, expr) {
260
+ return {
261
+ symbol: this.getSymbol(decl),
262
+ importPath: getImportPath(expr),
263
+ };
264
+ };
265
+ /**
266
+ * Gets the `SemanticSymbol` that was registered for `decl` during the current compilation, or
267
+ * returns an opaque symbol that represents `decl`.
268
+ */
269
+ SemanticDepGraphUpdater.prototype.getSymbol = function (decl) {
270
+ var symbol = this.newGraph.getSymbolByDecl(decl);
271
+ if (symbol === null) {
272
+ // No symbol has been recorded for the provided declaration, which would be the case if the
273
+ // declaration is external. Return an opaque symbol in that case, to allow the external
274
+ // declaration to be compared to a prior compilation.
275
+ return this.getOpaqueSymbol(decl);
276
+ }
277
+ return symbol;
278
+ };
279
+ /**
280
+ * Gets or creates an `OpaqueSymbol` for the provided class declaration.
281
+ */
282
+ SemanticDepGraphUpdater.prototype.getOpaqueSymbol = function (decl) {
283
+ if (this.opaqueSymbols.has(decl)) {
284
+ return this.opaqueSymbols.get(decl);
285
+ }
286
+ var symbol = new OpaqueSymbol(decl);
287
+ this.opaqueSymbols.set(decl, symbol);
288
+ return symbol;
289
+ };
290
+ return SemanticDepGraphUpdater;
291
+ }());
292
+ exports.SemanticDepGraphUpdater = SemanticDepGraphUpdater;
293
+ function getImportPath(expr) {
294
+ if (expr instanceof compiler_1.ExternalExpr) {
295
+ return expr.value.moduleName + "$" + expr.value.name;
296
+ }
297
+ else {
298
+ return null;
299
+ }
300
+ }
301
+ });
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2luY3JlbWVudGFsL3NlbWFudGljX2dyYXBoL3NyYy9ncmFwaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBRUgsOENBQTJEO0lBRzNELDBGQUF3RDtJQW1CeEQ7Ozs7O09BS0c7SUFDSDtRQUEyQix3Q0FBYztRQUF6Qzs7UUFRQSxDQUFDO1FBUEMsMENBQW1CLEdBQW5CO1lBQ0UsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsNkNBQXNCLEdBQXRCO1lBQ0UsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0gsbUJBQUM7SUFBRCxDQUFDLEFBUkQsQ0FBMkIsb0JBQWMsR0FReEM7SUFFRDs7T0FFRztJQUNIO1FBQUE7WUFDVyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQStDLENBQUM7WUFDL0QsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztRQW1FdEUsQ0FBQztRQWpFQzs7Ozs7V0FLRztRQUNILHlDQUFjLEdBQWQsVUFBZSxNQUFzQjtZQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBRTNDLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLEVBQUU7Z0JBQzlCLDhGQUE4RjtnQkFDOUYsaURBQWlEO2dCQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksR0FBRyxFQUEwQixDQUFDLENBQUM7aUJBQ2hFO2dCQUNELElBQUksQ0FBQyxLQUFL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LEtBQUssQ0FBQyxJQUFNLENBQUM7U0FDdkQ7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7RXhwcmVzc2lvbiwgRXh0ZXJuYWxFeHByfSBmcm9tICdAYW5ndWxhci9jb21waWxlcic7XG5pbXBvcnQge0Fic29sdXRlRnNQYXRofSBmcm9tICcuLi8uLi8uLi9maWxlX3N5c3RlbSc7XG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb259IGZyb20gJy4uLy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtTZW1hbnRpY1JlZmVyZW5jZSwgU2VtYW50aWNTeW1ib2x9IGZyb20gJy4vYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY0RlcGVuZGVuY3lSZXN1bHQge1xuICAvKipcbiAgICogVGhlIGZpbGVzIHRoYXQgbmVlZCB0byBiZSByZS1lbWl0dGVkLlxuICAgKi9cbiAgbmVlZHNFbWl0OiBTZXQ8QWJzb2x1dGVGc1BhdGg+O1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZXMgZm9yIHdoaWNoIHRoZSB0eXBlLWNoZWNrIGJsb2NrIHNob3VsZCBiZSByZWdlbmVyYXRlZC5cbiAgICovXG4gIG5lZWRzVHlwZUNoZWNrRW1pdDogU2V0PEFic29sdXRlRnNQYXRoPjtcblxuICAvKipcbiAgICogVGhlIG5ld2x5IGJ1aWx0IGdyYXBoIHRoYXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCBjb21waWxhdGlvbi5cbiAgICovXG4gIG5ld0dyYXBoOiBTZW1hbnRpY0RlcEdyYXBoO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBkZWNsYXJhdGlvbiBmb3Igd2hpY2ggbm8gc2VtYW50aWMgc3ltYm9sIGhhcyBiZWVuIHJlZ2lzdGVyZWQuIEZvciBleGFtcGxlLFxuICogZGVjbGFyYXRpb25zIGZyb20gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzIGhhdmUgbm90IGJlZW4gZXhwbGljaXRseSByZWdpc3RlcmVkIGFuZCBhcmUgcmVwcmVzZW50ZWRcbiAqIGJ5IHRoaXMgc3ltYm9sLiBUaGlzIGFsbG93cyB0aGUgdW5yZXNvbHZlZCBzeW1ib2wgdG8gc3RpbGwgYmUgY29tcGFyZWQgdG8gYSBzeW1ib2wgZnJvbSBhIHByaW9yXG4gKiBjb21waWxhdGlvbi5cbiAqL1xuY2xhc3MgT3BhcXVlU3ltYm9sIGV4dGVuZHMgU2VtYW50aWNTeW1ib2wge1xuICBpc1B1YmxpY0FwaUFmZmVjdGVkKCk6IGZhbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc1R5cGVDaGVja0FwaUFmZmVjdGVkKCk6IGZhbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgc2VtYW50aWMgZGVwZW5kZW5jeSBncmFwaCBvZiBhIHNpbmdsZSBjb21waWxhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlbWFudGljRGVwR3JhcGgge1xuICByZWFkb25seSBmaWxlcyA9IG5ldyBNYXA8QWJzb2x1dGVGc1BhdGgsIE1hcDxzdHJpbmcsIFNlbWFudGljU3ltYm9sPj4oKTtcbiAgcmVhZG9ubHkgc3ltYm9sQnlEZWNsID0gbmV3IE1hcDxDbGFzc0RlY2xhcmF0aW9uLCBTZW1hbnRpY1N5bWJvbD4oKTtcblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgc3ltYm9sIGluIHRoZSBncmFwaC4gVGhlIHN5bWJvbCBpcyBnaXZlbiBhIHVuaXF1ZSBpZGVudGlmaWVyIGlmIHBvc3NpYmxlLCBzdWNoIHRoYXRcbiAgICogaXRzIGVxdWl2YWxlbnQgc3ltYm9sIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGEgcHJpb3IgZ3JhcGggZXZlbiBpZiBpdHMgZGVjbGFyYXRpb24gbm9kZSBoYXNcbiAgICogY2hhbmdlZCBhY3Jvc3MgcmVidWlsZHMuIFN5bWJvbHMgd2l0aG91dCBhbiBpZGVudGlmaWVyIGFyZSBvbmx5IGFibGUgdG8gZmluZCB0aGVtc2VsdmVzIGluIGFcbiAgICogcHJpb3IgZ3JhcGggaWYgdGhlaXIgZGVjbGFyYXRpb24gbm9kZSBpcyBpZGVudGljYWwuXG4gICAqL1xuICByZWdpc3RlclN5bWJvbChzeW1ib2w6IFNlbWFudGljU3ltYm9sKTogdm9pZCB7XG4gICAgdGhpcy5zeW1ib2xCeURlY2wuc2V0KHN5bWJvbC5kZWNsLCBzeW1ib2wpO1xuXG4gICAgaWYgKHN5bWJvbC5pZGVudGlmaWVyICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGUgc3ltYm9sIGhhcyBhIHVuaXF1ZSBpZGVudGlmaWVyLCByZWNvcmQgaXQgaW4gdGhlIGZpbGUgdGhhdCBkZWNsYXJlcyBpdC4gVGhpcyBlbmFibGVzXG4gICAgICAvLyB0aGUgc3ltYm9sIHRvIGJlIHJlcXVlc3RlZCBieSBpdHMgdW5pcXVlIG5hbWUuXG4gICAgICBpZiAoIXRoaXMuZmlsZXMuaGFzKHN5bWJvbC5wYXRoKSkge1xuICAgICAgICB0aGlzLmZpbGVzLnNldChzeW1ib2wucGF0aCwgbmV3IE1hcDxzdHJpbmcsIFNlbWFudGljU3ltYm9sPigpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsZXMuZ2V0KHN5bWJvbC5wYXRoKSEuc2V0KHN5bWJvbC5pZGVudGlmaWVyLCBzeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byByZXNvbHZlIGEgc3ltYm9sIGluIHRoaXMgZ3JhcGggdGhhdCByZXByZXNlbnRzIHRoZSBnaXZlbiBzeW1ib2wgZnJvbSBhbm90aGVyIGdyYXBoLlxuICAgKiBJZiBubyBtYXRjaGluZyBzeW1ib2wgY291bGQgYmUgZm91bmQsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzeW1ib2wgVGhlIHN5bWJvbCBmcm9tIGFub3RoZXIgZ3JhcGggZm9yIHdoaWNoIGl0cyBlcXVpdmFsZW50IGluIHRoaXMgZ3JhcGggc2hvdWxkIGJlXG4gICAqIGZvdW5kLlxuICAgKi9cbiAgZ2V0RXF1aXZhbGVudFN5bWJvbChzeW1ib2w6IFNlbWFudGljU3ltYm9sKTogU2VtYW50aWNTeW1ib2x8bnVsbCB7XG4gICAgLy8gRmlyc3QgbG9va3VwIHRoZSBzeW1ib2wgYnkgaXRzIGRlY2xhcmF0aW9uLiBJdCBpcyB0eXBpY2FsIGZvciB0aGUgZGVjbGFyYXRpb24gdG8gbm90IGhhdmVcbiAgICAvLyBjaGFuZ2VkIGFjcm9zcyByZWJ1aWxkcywgc28gdGhpcyBpcyBsaWtlbHkgdG8gZmluZCB0aGUgc3ltYm9sLiBVc2luZyB0aGUgZGVjbGFyYXRpb24gYWxzb1xuICAgIC8vIGFsbG93cyB0byBkaWZmIHN5bWJvbHMgZm9yIHdoaWNoIG5vIHVuaXF1ZSBpZGVudGlmaWVyIGNvdWxkIGJlIGRldGVybWluZWQuXG4gICAgbGV0IHByZXZpb3VzU3ltYm9sID0gdGhpcy5nZXRTeW1ib2xCeURlY2woc3ltYm9sLmRlY2wpO1xuICAgIGlmIChwcmV2aW91c1N5bWJvbCA9PT0gbnVsbCAmJiBzeW1ib2wuaWRlbnRpZmllciAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGNvdWxkIG5vdCBiZSByZXNvbHZlZCB0byBhIHN5bWJvbCBpbiBhIHByaW9yIGNvbXBpbGF0aW9uLCB3aGljaCBtYXlcbiAgICAgIC8vIGhhcHBlbiBiZWNhdXNlIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIGRlY2xhcmF0aW9uIGhhcyBjaGFuZ2VkLiBJbiB0aGF0IGNhc2Ugd2Ugd2FudCB0b1xuICAgICAgLy8gbG9va3VwIHRoZSBzeW1ib2wgYmFzZWQgb24gaXRzIHVuaXF1ZSBpZGVudGlmaWVyLCBhcyB0aGF0IGFsbG93cyB1cyB0byBzdGlsbCBjb21wYXJlIHRoZVxuICAgICAgLy8gY2hhbmdlZCBkZWNsYXJhdGlvbiB0byB0aGUgcHJpb3IgY29tcGlsYXRpb24uXG4gICAgICBwcmV2aW91c1N5bWJvbCA9IHRoaXMuZ2V0U3ltYm9sQnlOYW1lKHN5bWJvbC5wYXRoLCBzeW1ib2wuaWRlbnRpZmllcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXZpb3VzU3ltYm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIGZpbmQgdGhlIHN5bWJvbCBieSBpdHMgaWRlbnRpZmllci5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3ltYm9sQnlOYW1lKHBhdGg6IEFic29sdXRlRnNQYXRoLCBpZGVudGlmaWVyOiBzdHJpbmcpOiBTZW1hbnRpY1N5bWJvbHxudWxsIHtcbiAgICBpZiAoIXRoaXMuZmlsZXMuaGFzKHBhdGgpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgZmlsZSA9IHRoaXMuZmlsZXMuZ2V0KHBhdGgpITtcbiAgICBpZiAoIWZpbGUuaGFzKGlkZW50aWZpZXIpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZpbGUuZ2V0KGlkZW50aWZpZXIpITtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byByZXNvbHZlIHRoZSBkZWNsYXJhdGlvbiB0byBpdHMgc2VtYW50aWMgc3ltYm9sLlxuICAgKi9cbiAgZ2V0U3ltYm9sQnlEZWNsKGRlY2w6IENsYXNzRGVjbGFyYXRpb24pOiBTZW1hbnRpY1N5bWJvbHxudWxsIHtcbiAgICBpZiAoIXRoaXMuc3ltYm9sQnlEZWNsLmhhcyhkZWNsKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN5bWJvbEJ5RGVjbC5nZXQoZGVjbCkhO1xuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyB0aGUgbG9naWMgdG8gZ28gZnJvbSBhIHByZXZpb3VzIGRlcGVuZGVuY3kgZ3JhcGggdG8gYSBuZXcgb25lLCBhbG9uZyB3aXRoIGluZm9ybWF0aW9uXG4gKiBvbiB3aGljaCBmaWxlcyBoYXZlIGJlZW4gYWZmZWN0ZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTZW1hbnRpY0RlcEdyYXBoVXBkYXRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmV3R3JhcGggPSBuZXcgU2VtYW50aWNEZXBHcmFwaCgpO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBvcGFxdWUgc3ltYm9scyB0aGF0IHdlcmUgY3JlYXRlZCBmb3IgZGVjbGFyYXRpb25zIGZvciB3aGljaCB0aGVyZSB3YXMgbm8gc3ltYm9sXG4gICAqIHJlZ2lzdGVyZWQsIHdoaWNoIGhhcHBlbnMgZm9yIGUuZy4gZXh0ZXJuYWwgZGVjbGFyYXRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvcGFxdWVTeW1ib2xzID0gbmV3IE1hcDxDbGFzc0RlY2xhcmF0aW9uLCBPcGFxdWVTeW1ib2w+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBzZW1hbnRpYyBkZXBlbmRlbmN5IGdyYXBoIG9mIHRoZSBtb3N0IHJlY2VudGx5IHN1Y2NlZWRlZCBjb21waWxhdGlvbiwgb3IgbnVsbCBpZiB0aGlzXG4gICAgICAgKiBpcyB0aGUgaW5pdGlhbCBidWlsZC5cbiAgICAgICAqL1xuICAgICAgcHJpdmF0ZSBwcmlvckdyYXBoOiBTZW1hbnRpY0RlcEdyYXBofG51bGwpIHt9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyB0aGUgc3ltYm9sIGluIHRoZSBuZXcgZ3JhcGggdGhhdCBpcyBiZWluZyBjcmVhdGVkLlxuICAgKi9cbiAgcmVnaXN0ZXJTeW1ib2woc3ltYm9sOiBTZW1hbnRpY1N5bWJvbCk6IHZvaWQge1xuICAgIHRoaXMubmV3R3JhcGgucmVnaXN0ZXJTeW1ib2woc3ltYm9sKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhbGwgZmFjdHMgdGhhdCBoYXZlIGJlZW4gZ2F0aGVyZWQgdG8gY3JlYXRlIGEgbmV3IHNlbWFudGljIGRlcGVuZGVuY3kgZ3JhcGguIEluIHRoaXNcbiAgICogcHJvY2VzcywgdGhlIHNlbWFudGljIGltcGFjdCBvZiB0aGUgY2hhbmdlcyBpcyBkZXRlcm1pbmVkIHdoaWNoIHJlc3VsdHMgaW4gYSBzZXQgb2YgZmlsZXMgdGhhdFxuICAgKiBuZWVkIHRvIGJlIGVtaXR0ZWQgYW5kL29yIHR5cGUtY2hlY2tlZC5cbiAgICovXG4gIGZpbmFsaXplKCk6IFNlbWFudGljRGVwZW5kZW5jeVJlc3VsdCB7XG4gICAgaWYgKHRoaXMucHJpb3JHcmFwaCA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgbm8gcHJpb3IgZGVwZW5kZW5jeSBncmFwaCBpcyBhdmFpbGFibGUgdGhlbiB0aGlzIHdhcyB0aGUgaW5pdGlhbCBidWlsZCwgaW4gd2hpY2ggY2FzZVxuICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byBkZXRlcm1pbmUgdGhlIHNlbWFudGljIGltcGFjdCBhcyBldmVyeXRoaW5nIGlzIGFscmVhZHkgY29uc2lkZXJlZFxuICAgICAgLy8gbG9naWNhbGx5IGNoYW5nZWQuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZWVkc0VtaXQ6IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KCksXG4gICAgICAgIG5lZWRzVHlwZUNoZWNrRW1pdDogbmV3IFNldDxBYnNvbHV0ZUZzUGF0aD4oKSxcbiAgICAgICAgbmV3R3JhcGg6IHRoaXMubmV3R3JhcGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IG5lZWRzRW1pdCA9IHRoaXMuZGV0ZXJtaW5lSW52YWxpZGF0ZWRGaWxlcyh0aGlzLnByaW9yR3JhcGgpO1xuICAgIGNvbnN0IG5lZWRzVHlwZUNoZWNrRW1pdCA9IHRoaXMuZGV0ZXJtaW5lSW52YWxpZGF0ZWRUeXBlQ2hlY2tGaWxlcyh0aGlzLnByaW9yR3JhcGgpO1xuICAgIHJldHVybiB7XG4gICAgICBuZWVkc0VtaXQsXG4gICAgICBuZWVkc1R5cGVDaGVja0VtaXQsXG4gICAgICBuZXdHcmFwaDogdGhpcy5uZXdHcmFwaCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVJbnZhbGlkYXRlZEZpbGVzKHByaW9yR3JhcGg6IFNlbWFudGljRGVwR3JhcGgpOiBTZXQ8QWJzb2x1dGVGc1BhdGg+IHtcbiAgICBjb25zdCBpc1B1YmxpY0FwaUFmZmVjdGVkID0gbmV3IFNldDxTZW1hbnRpY1N5bWJvbD4oKTtcblxuICAgIC8vIFRoZSBmaXJzdCBwaGFzZSBpcyB0byBjb2xsZWN0IGFsbCBzeW1ib2xzIHdoaWNoIGhhdmUgdGhlaXIgcHVibGljIEFQSSBhZmZlY3RlZC4gQW55IHN5bWJvbHNcbiAgICAvLyB0aGF0IGNhbm5vdCBiZSBtYXRjaGVkIHVwIHdpdGggYSBzeW1ib2wgZnJvbSB0aGUgcHJpb3IgZ3JhcGggYXJlIGNvbnNpZGVyZWQgYWZmZWN0ZWQuXG4gICAgZm9yIChjb25zdCBzeW1ib2wgb2YgdGhpcy5uZXdHcmFwaC5zeW1ib2xCeURlY2wudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3ltYm9sID0gcHJpb3JHcmFwaC5nZXRFcXVpdmFsZW50U3ltYm9sKHN5bWJvbCk7XG4gICAgICBpZiAocHJldmlvdXNTeW1ib2wgPT09IG51bGwgfHwgc3ltYm9sLmlzUHVibGljQXBpQWZmZWN0ZWQocHJldmlvdXNTeW1ib2wpKSB7XG4gICAgICAgIGlzUHVibGljQXBpQWZmZWN0ZWQuYWRkKHN5bWJvbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhlIHNlY29uZCBwaGFzZSBpcyB0byBmaW5kIGFsbCBzeW1ib2xzIGZvciB3aGljaCB0aGUgZW1pdCByZXN1bHQgaXMgYWZmZWN0ZWQsIGVpdGhlciBiZWNhdXNlXG4gICAgLy8gdGhlaXIgdXNlZCBkZWNsYXJhdGlvbnMgaGF2ZSBjaGFuZ2VkIG9yIGFueSBvZiB0aG9zZSB1c2VkIGRlY2xhcmF0aW9ucyBoYXMgaGFkIGl0cyBwdWJsaWMgQVBJXG4gICAgLy8gYWZmZWN0ZWQgYXMgZGV0ZXJtaW5lZCBpbiB0aGUgZmlyc3QgcGhhc2UuXG4gICAgY29uc3QgbmVlZHNFbWl0ID0gbmV3IFNldDxBYnNvbHV0ZUZzUGF0aD4oKTtcbiAgICBmb3IgKGNvbnN0IHN5bWJvbCBvZiB0aGlzLm5ld0dyYXBoLnN5bWJvbEJ5RGVjbC52YWx1ZXMoKSkge1xuICAgICAgaWYgKHN5bWJvbC5pc0VtaXRBZmZlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmV2aW91c1N5bWJvbCA9IHByaW9yR3JhcGguZ2V0RXF1aXZhbGVudFN5bWJvbChzeW1ib2wpO1xuICAgICAgaWYgKHByZXZpb3VzU3ltYm9sID09PSBudWxsIHx8IHN5bWJvbC5pc0VtaXRBZmZlY3RlZChwcmV2aW91c1N5bWJvbCwgaXNQdWJsaWNBcGlBZmZlY3RlZCkpIHtcbiAgICAgICAgbmVlZHNFbWl0LmFkZChzeW1ib2wucGF0aCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5lZWRzRW1pdDtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lSW52YWxpZGF0ZWRUeXBlQ2hlY2tGaWxlcyhwcmlvckdyYXBoOiBTZW1hbnRpY0RlcEdyYXBoKTogU2V0PEFic29sdXRlRnNQYXRoPiB7XG4gICAgY29uc3QgaXNUeXBlQ2hlY2tBcGlBZmZlY3RlZCA9IG5ldyBTZXQ8U2VtYW50aWNTeW1ib2w+KCk7XG5cbiAgICAvLyBUaGUgZmlyc3QgcGhhc2UgaXMgdG8gY29sbGVjdCBhbGwgc3ltYm9scyB3aGljaCBoYXZlIHRoZWlyIHB1YmxpYyBBUEkgYWZmZWN0ZWQuIEFueSBzeW1ib2xzXG4gICAgLy8gdGhhdCBjYW5ub3QgYmUgbWF0Y2hlZCB1cCB3aXRoIGEgc3ltYm9sIGZyb20gdGhlIHByaW9yIGdyYXBoIGFyZSBjb25zaWRlcmVkIGFmZmVjdGVkLlxuICAgIGZvciAoY29uc3Qgc3ltYm9sIG9mIHRoaXMubmV3R3JhcGguc3ltYm9sQnlEZWNsLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1N5bWJvbCA9IHByaW9yR3JhcGguZ2V0RXF1aXZhbGVudFN5bWJvbChzeW1ib2wpO1xuICAgICAgaWYgKHByZXZpb3VzU3ltYm9sID09PSBudWxsIHx8IHN5bWJvbC5pc1R5cGVDaGVja0FwaUFmZmVjdGVkKHByZXZpb3VzU3ltYm9sKSkge1xuICAgICAgICBpc1R5cGVDaGVja0FwaUFmZmVjdGVkLmFkZChzeW1ib2wpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBzZWNvbmQgcGhhc2UgaXMgdG8gZmluZCBhbGwgc3ltYm9scyBmb3Igd2hpY2ggdGhlIGVtaXQgcmVzdWx0IGlzIGFmZmVjdGVkLCBlaXRoZXIgYmVjYXVzZVxuICAgIC8vIHRoZWlyIHVzZWQgZGVjbGFyYXRpb25zIGhhdmUgY2hhbmdlZCBvciBhbnkgb2YgdGhvc2UgdXNlZCBkZWNsYXJhdGlvbnMgaGFzIGhhZCBpdHMgcHVibGljIEFQSVxuICAgIC8vIGFmZmVjdGVkIGFzIGRldGVybWluZWQgaW4gdGhlIGZpcnN0IHBoYXNlLlxuICAgIGNvbnN0IG5lZWRzVHlwZUNoZWNrRW1pdCA9IG5ldyBTZXQ8QWJzb2x1dGVGc1BhdGg+KCk7XG4gICAgZm9yIChjb25zdCBzeW1ib2wgb2YgdGhpcy5uZXdHcmFwaC5zeW1ib2xCeURlY2wudmFsdWVzKCkpIHtcbiAgICAgIGlmIChzeW1ib2wuaXNUeXBlQ2hlY2tCbG9ja0FmZmVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByZXZpb3VzU3ltYm9sID0gcHJpb3JHcmFwaC5nZXRFcXVpdmFsZW50U3ltYm9sKHN5bWJvbCk7XG4gICAgICBpZiAocHJldmlvdXNTeW1ib2wgPT09IG51bGwgfHxcbiAgICAgICAgICBzeW1ib2wuaXNUeXBlQ2hlY2tCbG9ja0FmZmVjdGVkKHByZXZpb3VzU3ltYm9sLCBpc1R5cGVDaGVja0FwaUFmZmVjdGVkKSkge1xuICAgICAgICBuZWVkc1R5cGVDaGVja0VtaXQuYWRkKHN5bWJvbC5wYXRoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmVlZHNUeXBlQ2hlY2tFbWl0O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBgU2VtYW50aWNSZWZlcmVuY2VgIGZvciB0aGUgcmVmZXJlbmNlIHRvIGBkZWNsYCB1c2luZyB0aGUgZXhwcmVzc2lvbiBgZXhwcmAuIFNlZVxuICAgKiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBgU2VtYW50aWNSZWZlcmVuY2VgIGZvciBkZXRhaWxzLlxuICAgKi9cbiAgZ2V0U2VtYW50aWNSZWZlcmVuY2UoZGVjbDogQ2xhc3NEZWNsYXJhdGlvbiwgZXhwcjogRXhwcmVzc2lvbik6IFNlbWFudGljUmVmZXJlbmNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3ltYm9sOiB0aGlzLmdldFN5bWJvbChkZWNsKSxcbiAgICAgIGltcG9ydFBhdGg6IGdldEltcG9ydFBhdGgoZXhwciksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBgU2VtYW50aWNTeW1ib2xgIHRoYXQgd2FzIHJlZ2lzdGVyZWQgZm9yIGBkZWNsYCBkdXJpbmcgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24sIG9yXG4gICAqIHJldHVybnMgYW4gb3BhcXVlIHN5bWJvbCB0aGF0IHJlcHJlc2VudHMgYGRlY2xgLlxuICAgKi9cbiAgZ2V0U3ltYm9sKGRlY2w6IENsYXNzRGVjbGFyYXRpb24pOiBTZW1hbnRpY1N5bWJvbCB7XG4gICAgY29uc3Qgc3ltYm9sID0gdGhpcy5uZXdHcmFwaC5nZXRTeW1ib2xCeURlY2woZGVjbCk7XG4gICAgaWYgKHN5bWJvbCA9PT0gbnVsbCkge1xuICAgICAgLy8gTm8gc3ltYm9sIGhhcyBiZWVuIHJlY29yZGVkIGZvciB0aGUgcHJvdmlkZWQgZGVjbGFyYXRpb24sIHdoaWNoIHdvdWxkIGJlIHRoZSBjYXNlIGlmIHRoZVxuICAgICAgLy8gZGVjbGFyYXRpb24gaXMgZXh0ZXJuYWwuIFJldHVybiBhbiBvcGFxdWUgc3ltYm9sIGluIHRoYXQgY2FzZSwgdG8gYWxsb3cgdGhlIGV4dGVybmFsXG4gICAgICAvLyBkZWNsYXJhdGlvbiB0byBiZSBjb21wYXJlZCB0byBhIHByaW9yIGNvbXBpbGF0aW9uLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3BhcXVlU3ltYm9sKGRlY2wpO1xuICAgIH1cbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3IgY3JlYXRlcyBhbiBgT3BhcXVlU3ltYm9sYCBmb3IgdGhlIHByb3ZpZGVkIGNsYXNzIGRlY2xhcmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRPcGFxdWVTeW1ib2woZGVjbDogQ2xhc3NEZWNsYXJhdGlvbik6IE9wYXF1ZVN5bWJvbCB7XG4gICAgaWYgKHRoaXMub3BhcXVlU3ltYm9scy5oYXMoZGVjbCkpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wYXF1ZVN5bWJvbHMuZ2V0KGRlY2wpITtcbiAgICB9XG5cbiAgICBjb25zdCBzeW1ib2wgPSBuZXcgT3BhcXVlU3ltYm9sKGRlY2wpO1xuICAgIHRoaXMub3BhcXVlU3ltYm9scy5zZXQoZGVjbCwgc3ltYm9sKTtcbiAgICByZXR1cm4gc3ltYm9sO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEltcG9ydFBhdGgoZXhwcjogRXhwcmVzc2lvbik6IHN0cmluZ3xudWxsIHtcbiAgaWYgKGV4cHIgaW5zdGFuY2VvZiBFeHRlcm5hbEV4cHIpIHtcbiAgICByZXR1cm4gYCR7ZXhwci52YWx1ZS5tb2R1bGVOYW1lfVxcJCR7ZXhwci52YWx1ZS5uYW1lfWA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,30 @@
1
+ /// <amd-module name="@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/type_parameters" />
2
+ import { ClassDeclaration } from '../../../reflection';
3
+ /**
4
+ * Describes a generic type parameter of a semantic symbol. A class declaration with type parameters
5
+ * needs special consideration in certain contexts. For example, template type-check blocks may
6
+ * contain type constructors of used directives which include the type parameters of the directive.
7
+ * As a consequence, if a change is made that affects the type parameters of said directive, any
8
+ * template type-check blocks that use the directive need to be regenerated.
9
+ *
10
+ * This type represents a single generic type parameter. It currently only tracks whether the
11
+ * type parameter has a constraint, i.e. has an `extends` clause. When a constraint is present, we
12
+ * currently assume that the type parameter is affected in each incremental rebuild; proving that
13
+ * a type parameter with constraint is not affected is non-trivial as it requires full semantic
14
+ * understanding of the type constraint.
15
+ */
16
+ export interface SemanticTypeParameter {
17
+ /**
18
+ * Whether a type constraint, i.e. an `extends` clause is present on the type parameter.
19
+ */
20
+ hasGenericTypeBound: boolean;
21
+ }
22
+ /**
23
+ * Converts the type parameters of the given class into their semantic representation. If the class
24
+ * does not have any type parameters, then `null` is returned.
25
+ */
26
+ export declare function extractSemanticTypeParameters(node: ClassDeclaration): SemanticTypeParameter[] | null;
27
+ /**
28
+ * Compares the list of type parameters to determine if they can be considered equal.
29
+ */
30
+ export declare function areTypeParametersEqual(current: SemanticTypeParameter[] | null, previous: SemanticTypeParameter[] | null): boolean;
@@ -0,0 +1,55 @@
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/type_parameters", ["require", "exports", "typescript", "@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/util"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.areTypeParametersEqual = exports.extractSemanticTypeParameters = 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 util_1 = require("@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/util");
22
+ /**
23
+ * Converts the type parameters of the given class into their semantic representation. If the class
24
+ * does not have any type parameters, then `null` is returned.
25
+ */
26
+ function extractSemanticTypeParameters(node) {
27
+ if (!ts.isClassDeclaration(node) || node.typeParameters === undefined) {
28
+ return null;
29
+ }
30
+ return node.typeParameters.map(function (typeParam) { return ({ hasGenericTypeBound: typeParam.constraint !== undefined }); });
31
+ }
32
+ exports.extractSemanticTypeParameters = extractSemanticTypeParameters;
33
+ /**
34
+ * Compares the list of type parameters to determine if they can be considered equal.
35
+ */
36
+ function areTypeParametersEqual(current, previous) {
37
+ // First compare all type parameters one-to-one; any differences mean that the list of type
38
+ // parameters has changed.
39
+ if (!util_1.isArrayEqual(current, previous, isTypeParameterEqual)) {
40
+ return false;
41
+ }
42
+ // If there is a current list of type parameters and if any of them has a generic type constraint,
43
+ // then the meaning of that type parameter may have changed without us being aware; as such we
44
+ // have to assume that the type parameters have in fact changed.
45
+ if (current !== null && current.some(function (typeParam) { return typeParam.hasGenericTypeBound; })) {
46
+ return false;
47
+ }
48
+ return true;
49
+ }
50
+ exports.areTypeParametersEqual = areTypeParametersEqual;
51
+ function isTypeParameterEqual(a, b) {
52
+ return a.hasGenericTypeBound === b.hasGenericTypeBound;
53
+ }
54
+ });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZV9wYXJhbWV0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9pbmNyZW1lbnRhbC9zZW1hbnRpY19ncmFwaC9zcmMvdHlwZV9wYXJhbWV0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFBOzs7Ozs7T0FNRztJQUNILCtCQUFpQztJQUdqQyw0RkFBb0M7SUFzQnBDOzs7T0FHRztJQUNILFNBQWdCLDZCQUE2QixDQUFDLElBQXNCO1FBRWxFLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUU7WUFDckUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQzFCLFVBQUEsU0FBUyxJQUFJLE9BQUEsQ0FBQyxFQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFDLENBQUMsRUFBM0QsQ0FBMkQsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFSRCxzRUFRQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0Isc0JBQXNCLENBQ2xDLE9BQXFDLEVBQUUsUUFBc0M7UUFDL0UsMkZBQTJGO1FBQzNGLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsbUJBQVksQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixDQUFDLEVBQUU7WUFDMUQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELGtHQUFrRztRQUNsRyw4RkFBOEY7UUFDOUYsZ0VBQWdFO1FBQ2hFLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQUEsU0FBUyxJQUFJLE9BQUEsU0FBUyxDQUFDLG1CQUFtQixFQUE3QixDQUE2QixDQUFDLEVBQUU7WUFDaEYsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQWhCRCx3REFnQkM7SUFFRCxTQUFTLG9CQUFvQixDQUFDLENBQXdCLEVBQUUsQ0FBd0I7UUFDOUUsT0FBTyxDQUFDLENBQUMsbUJBQW1CLEtBQUssQ0FBQyxDQUFDLG1CQUFtQixDQUFDO0lBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0NsYXNzRGVjbGFyYXRpb259IGZyb20gJy4uLy4uLy4uL3JlZmxlY3Rpb24nO1xuaW1wb3J0IHtpc0FycmF5RXF1YWx9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogRGVzY3JpYmVzIGEgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlciBvZiBhIHNlbWFudGljIHN5bWJvbC4gQSBjbGFzcyBkZWNsYXJhdGlvbiB3aXRoIHR5cGUgcGFyYW1ldGVyc1xuICogbmVlZHMgc3BlY2lhbCBjb25zaWRlcmF0aW9uIGluIGNlcnRhaW4gY29udGV4dHMuIEZvciBleGFtcGxlLCB0ZW1wbGF0ZSB0eXBlLWNoZWNrIGJsb2NrcyBtYXlcbiAqIGNvbnRhaW4gdHlwZSBjb25zdHJ1Y3RvcnMgb2YgdXNlZCBkaXJlY3RpdmVzIHdoaWNoIGluY2x1ZGUgdGhlIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgZGlyZWN0aXZlLlxuICogQXMgYSBjb25zZXF1ZW5jZSwgaWYgYSBjaGFuZ2UgaXMgbWFkZSB0aGF0IGFmZmVjdHMgdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBzYWlkIGRpcmVjdGl2ZSwgYW55XG4gKiB0ZW1wbGF0ZSB0eXBlLWNoZWNrIGJsb2NrcyB0aGF0IHVzZSB0aGUgZGlyZWN0aXZlIG5lZWQgdG8gYmUgcmVnZW5lcmF0ZWQuXG4gKlxuICogVGhpcyB0eXBlIHJlcHJlc2VudHMgYSBzaW5nbGUgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlci4gSXQgY3VycmVudGx5IG9ubHkgdHJhY2tzIHdoZXRoZXIgdGhlXG4gKiB0eXBlIHBhcmFtZXRlciBoYXMgYSBjb25zdHJhaW50LCBpLmUuIGhhcyBhbiBgZXh0ZW5kc2AgY2xhdXNlLiBXaGVuIGEgY29uc3RyYWludCBpcyBwcmVzZW50LCB3ZVxuICogY3VycmVudGx5IGFzc3VtZSB0aGF0IHRoZSB0eXBlIHBhcmFtZXRlciBpcyBhZmZlY3RlZCBpbiBlYWNoIGluY3JlbWVudGFsIHJlYnVpbGQ7IHByb3ZpbmcgdGhhdFxuICogYSB0eXBlIHBhcmFtZXRlciB3aXRoIGNvbnN0cmFpbnQgaXMgbm90IGFmZmVjdGVkIGlzIG5vbi10cml2aWFsIGFzIGl0IHJlcXVpcmVzIGZ1bGwgc2VtYW50aWNcbiAqIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHR5cGUgY29uc3RyYWludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW1hbnRpY1R5cGVQYXJhbWV0ZXIge1xuICAvKipcbiAgICogV2hldGhlciBhIHR5cGUgY29uc3RyYWludCwgaS5lLiBhbiBgZXh0ZW5kc2AgY2xhdXNlIGlzIHByZXNlbnQgb24gdGhlIHR5cGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgaGFzR2VuZXJpY1R5cGVCb3VuZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBnaXZlbiBjbGFzcyBpbnRvIHRoZWlyIHNlbWFudGljIHJlcHJlc2VudGF0aW9uLiBJZiB0aGUgY2xhc3NcbiAqIGRvZXMgbm90IGhhdmUgYW55IHR5cGUgcGFyYW1ldGVycywgdGhlbiBgbnVsbGAgaXMgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0U2VtYW50aWNUeXBlUGFyYW1ldGVycyhub2RlOiBDbGFzc0RlY2xhcmF0aW9uKTogU2VtYW50aWNUeXBlUGFyYW1ldGVyW118XG4gICAgbnVsbCB7XG4gIGlmICghdHMuaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpIHx8IG5vZGUudHlwZVBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5vZGUudHlwZVBhcmFtZXRlcnMubWFwKFxuICAgICAgdHlwZVBhcmFtID0+ICh7aGFzR2VuZXJpY1R5cGVCb3VuZDogdHlwZVBhcmFtLmNvbnN0cmFpbnQgIT09IHVuZGVmaW5lZH0pKTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0aGUgbGlzdCBvZiB0eXBlIHBhcmFtZXRlcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgY2FuIGJlIGNvbnNpZGVyZWQgZXF1YWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcmVUeXBlUGFyYW1ldGVyc0VxdWFsKFxuICAgIGN1cnJlbnQ6IFNlbWFudGljVHlwZVBhcmFtZXRlcltdfG51bGwsIHByZXZpb3VzOiBTZW1hbnRpY1R5cGVQYXJhbWV0ZXJbXXxudWxsKTogYm9vbGVhbiB7XG4gIC8vIEZpcnN0IGNvbXBhcmUgYWxsIHR5cGUgcGFyYW1ldGVycyBvbmUtdG8tb25lOyBhbnkgZGlmZmVyZW5jZXMgbWVhbiB0aGF0IHRoZSBsaXN0IG9mIHR5cGVcbiAgLy8gcGFyYW1ldGVycyBoYXMgY2hhbmdlZC5cbiAgaWYgKCFpc0FycmF5RXF1YWwoY3VycmVudCwgcHJldmlvdXMsIGlzVHlwZVBhcmFtZXRlckVxdWFsKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIGlzIGEgY3VycmVudCBsaXN0IG9mIHR5cGUgcGFyYW1ldGVycyBhbmQgaWYgYW55IG9mIHRoZW0gaGFzIGEgZ2VuZXJpYyB0eXBlIGNvbnN0cmFpbnQsXG4gIC8vIHRoZW4gdGhlIG1lYW5pbmcgb2YgdGhhdCB0eXBlIHBhcmFtZXRlciBtYXkgaGF2ZSBjaGFuZ2VkIHdpdGhvdXQgdXMgYmVpbmcgYXdhcmU7IGFzIHN1Y2ggd2VcbiAgLy8gaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgdHlwZSBwYXJhbWV0ZXJzIGhhdmUgaW4gZmFjdCBjaGFuZ2VkLlxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnNvbWUodHlwZVBhcmFtID0+IHR5cGVQYXJhbS5oYXNHZW5lcmljVHlwZUJvdW5kKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1R5cGVQYXJhbWV0ZXJFcXVhbChhOiBTZW1hbnRpY1R5cGVQYXJhbWV0ZXIsIGI6IFNlbWFudGljVHlwZVBhcmFtZXRlcik6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5oYXNHZW5lcmljVHlwZUJvdW5kID09PSBiLmhhc0dlbmVyaWNUeXBlQm91bmQ7XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ /// <amd-module name="@angular/compiler-cli/src/ngtsc/incremental/semantic_graph/src/util" />
2
+ /**
3
+ * @license
4
+ * Copyright Google LLC All Rights Reserved.
5
+ *
6
+ * Use of this source code is governed by an MIT-style license that can be
7
+ * found in the LICENSE file at https://angular.io/license
8
+ */
9
+ import { SemanticReference, SemanticSymbol } from './api';
10
+ /**
11
+ * Determines whether the provided symbols represent the same declaration.
12
+ */
13
+ export declare function isSymbolEqual(a: SemanticSymbol, b: SemanticSymbol): boolean;
14
+ /**
15
+ * Determines whether the provided references to a semantic symbol are still equal, i.e. represent
16
+ * the same symbol and are imported by the same path.
17
+ */
18
+ export declare function isReferenceEqual(a: SemanticReference, b: SemanticReference): boolean;
19
+ export declare function referenceEquality<T>(a: T, b: T): boolean;
20
+ /**
21
+ * Determines if the provided arrays are equal to each other, using the provided equality tester
22
+ * that is called for all entries in the array.
23
+ */
24
+ export declare function isArrayEqual<T>(a: readonly T[] | null, b: readonly T[] | null, equalityTester?: (a: T, b: T) => boolean): boolean;
25
+ /**
26
+ * Determines if the provided sets are equal to each other, using the provided equality tester.
27
+ * Sets that only differ in ordering are considered equal.
28
+ */
29
+ export declare function isSetEqual<T>(a: ReadonlySet<T> | null, b: ReadonlySet<T> | null, equalityTester?: (a: T, b: T) => boolean): boolean;
@@ -0,0 +1,111 @@
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/util", ["require", "exports", "tslib"], factory);
8
+ }
9
+ })(function (require, exports) {
10
+ "use strict";
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.isSetEqual = exports.isArrayEqual = exports.referenceEquality = exports.isReferenceEqual = exports.isSymbolEqual = void 0;
13
+ var tslib_1 = require("tslib");
14
+ /**
15
+ * Determines whether the provided symbols represent the same declaration.
16
+ */
17
+ function isSymbolEqual(a, b) {
18
+ if (a.decl === b.decl) {
19
+ // If the declaration is identical then it must represent the same symbol.
20
+ return true;
21
+ }
22
+ if (a.identifier === null || b.identifier === null) {
23
+ // Unidentifiable symbols are assumed to be different.
24
+ return false;
25
+ }
26
+ return a.path === b.path && a.identifier === b.identifier;
27
+ }
28
+ exports.isSymbolEqual = isSymbolEqual;
29
+ /**
30
+ * Determines whether the provided references to a semantic symbol are still equal, i.e. represent
31
+ * the same symbol and are imported by the same path.
32
+ */
33
+ function isReferenceEqual(a, b) {
34
+ if (!isSymbolEqual(a.symbol, b.symbol)) {
35
+ // If the reference's target symbols are different, the reference itself is different.
36
+ return false;
37
+ }
38
+ // The reference still corresponds with the same symbol, now check that the path by which it is
39
+ // imported has not changed.
40
+ return a.importPath === b.importPath;
41
+ }
42
+ exports.isReferenceEqual = isReferenceEqual;
43
+ function referenceEquality(a, b) {
44
+ return a === b;
45
+ }
46
+ exports.referenceEquality = referenceEquality;
47
+ /**
48
+ * Determines if the provided arrays are equal to each other, using the provided equality tester
49
+ * that is called for all entries in the array.
50
+ */
51
+ function isArrayEqual(a, b, equalityTester) {
52
+ if (equalityTester === void 0) { equalityTester = referenceEquality; }
53
+ if (a === null || b === null) {
54
+ return a === b;
55
+ }
56
+ if (a.length !== b.length) {
57
+ return false;
58
+ }
59
+ return !a.some(function (item, index) { return !equalityTester(item, b[index]); });
60
+ }
61
+ exports.isArrayEqual = isArrayEqual;
62
+ /**
63
+ * Determines if the provided sets are equal to each other, using the provided equality tester.
64
+ * Sets that only differ in ordering are considered equal.
65
+ */
66
+ function isSetEqual(a, b, equalityTester) {
67
+ var e_1, _a, e_2, _b;
68
+ if (equalityTester === void 0) { equalityTester = referenceEquality; }
69
+ if (a === null || b === null) {
70
+ return a === b;
71
+ }
72
+ if (a.size !== b.size) {
73
+ return false;
74
+ }
75
+ try {
76
+ for (var a_1 = tslib_1.__values(a), a_1_1 = a_1.next(); !a_1_1.done; a_1_1 = a_1.next()) {
77
+ var itemA = a_1_1.value;
78
+ var found = false;
79
+ try {
80
+ for (var b_1 = (e_2 = void 0, tslib_1.__values(b)), b_1_1 = b_1.next(); !b_1_1.done; b_1_1 = b_1.next()) {
81
+ var itemB = b_1_1.value;
82
+ if (equalityTester(itemA, itemB)) {
83
+ found = true;
84
+ break;
85
+ }
86
+ }
87
+ }
88
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
89
+ finally {
90
+ try {
91
+ if (b_1_1 && !b_1_1.done && (_b = b_1.return)) _b.call(b_1);
92
+ }
93
+ finally { if (e_2) throw e_2.error; }
94
+ }
95
+ if (!found) {
96
+ return false;
97
+ }
98
+ }
99
+ }
100
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
101
+ finally {
102
+ try {
103
+ if (a_1_1 && !a_1_1.done && (_a = a_1.return)) _a.call(a_1);
104
+ }
105
+ finally { if (e_1) throw e_1.error; }
106
+ }
107
+ return true;
108
+ }
109
+ exports.isSetEqual = isSetEqual;
110
+ });
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvaW5jcmVtZW50YWwvc2VtYW50aWNfZ3JhcGgvc3JjL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztJQVNBOztPQUVHO0lBQ0gsU0FBZ0IsYUFBYSxDQUFDLENBQWlCLEVBQUUsQ0FBaUI7UUFDaEUsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU7WUFDckIsMEVBQTBFO1lBQzFFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO1lBQ2xELHNEQUFzRDtZQUN0RCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQzVELENBQUM7SUFaRCxzQ0FZQztJQUVEOzs7T0FHRztJQUNILFNBQWdCLGdCQUFnQixDQUFDLENBQW9CLEVBQUUsQ0FBb0I7UUFDekUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0QyxzRkFBc0Y7WUFDdEYsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELCtGQUErRjtRQUMvRiw0QkFBNEI7UUFDNUIsT0FBTyxDQUFDLENBQUMsVUFBVSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDdkMsQ0FBQztJQVRELDRDQVNDO0lBRUQsU0FBZ0IsaUJBQWlCLENBQUksQ0FBSSxFQUFFLENBQUk7UUFDN0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCLENBQUM7SUFGRCw4Q0FFQztJQUVEOzs7T0FHRztJQUNILFNBQWdCLFlBQVksQ0FDeEIsQ0FBb0IsRUFBRSxDQUFvQixFQUMxQyxjQUEyRDtRQUEzRCwrQkFBQSxFQUFBLGtDQUEyRDtRQUM3RCxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEI7UUFFRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUN6QixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFJLEVBQUUsS0FBSyxJQUFLLE9BQUEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUEvQixDQUErQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQVpELG9DQVlDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBZ0IsVUFBVSxDQUN0QixDQUFzQixFQUFFLENBQXNCLEVBQzlDLGNBQTJEOztRQUEzRCwrQkFBQSxFQUFBLGtDQUEyRDtRQUM3RCxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEI7UUFFRCxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQztTQUNkOztZQUVELEtBQW9CLElBQUEsTUFBQSxpQkFBQSxDQUFDLENBQUEsb0JBQUEsbUNBQUU7Z0JBQWxCLElBQU0sS0FBSyxjQUFBO2dCQUNkLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQzs7b0JBQ2xCLEtBQW9CLElBQUEscUJBQUEsaUJBQUEsQ0FBQyxDQUFBLENBQUEsb0JBQUEsbUNBQUU7d0JBQWxCLElBQU0sS0FBSyxjQUFBO3dCQUNkLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTs0QkFDaEMsS0FBSyxHQUFHLElBQUksQ0FBQzs0QkFDYixNQUFNO3lCQUNQO3FCQUNGOzs7Ozs7Ozs7Z0JBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixPQUFPLEtBQUssQ0FBQztpQkFDZDthQUNGOzs7Ozs7Ozs7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUF6QkQsZ0NBeUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge1NlbWFudGljUmVmZXJlbmNlLCBTZW1hbnRpY1N5bWJvbH0gZnJvbSAnLi9hcGknO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcHJvdmlkZWQgc3ltYm9scyByZXByZXNlbnQgdGhlIHNhbWUgZGVjbGFyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1N5bWJvbEVxdWFsKGE6IFNlbWFudGljU3ltYm9sLCBiOiBTZW1hbnRpY1N5bWJvbCk6IGJvb2xlYW4ge1xuICBpZiAoYS5kZWNsID09PSBiLmRlY2wpIHtcbiAgICAvLyBJZiB0aGUgZGVjbGFyYXRpb24gaXMgaWRlbnRpY2FsIHRoZW4gaXQgbXVzdCByZXByZXNlbnQgdGhlIHNhbWUgc3ltYm9sLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGEuaWRlbnRpZmllciA9PT0gbnVsbCB8fCBiLmlkZW50aWZpZXIgPT09IG51bGwpIHtcbiAgICAvLyBVbmlkZW50aWZpYWJsZSBzeW1ib2xzIGFyZSBhc3N1bWVkIHRvIGJlIGRpZmZlcmVudC5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gYS5wYXRoID09PSBiLnBhdGggJiYgYS5pZGVudGlmaWVyID09PSBiLmlkZW50aWZpZXI7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwcm92aWRlZCByZWZlcmVuY2VzIHRvIGEgc2VtYW50aWMgc3ltYm9sIGFyZSBzdGlsbCBlcXVhbCwgaS5lLiByZXByZXNlbnRcbiAqIHRoZSBzYW1lIHN5bWJvbCBhbmQgYXJlIGltcG9ydGVkIGJ5IHRoZSBzYW1lIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZUVxdWFsKGE6IFNlbWFudGljUmVmZXJlbmNlLCBiOiBTZW1hbnRpY1JlZmVyZW5jZSk6IGJvb2xlYW4ge1xuICBpZiAoIWlzU3ltYm9sRXF1YWwoYS5zeW1ib2wsIGIuc3ltYm9sKSkge1xuICAgIC8vIElmIHRoZSByZWZlcmVuY2UncyB0YXJnZXQgc3ltYm9scyBhcmUgZGlmZmVyZW50LCB0aGUgcmVmZXJlbmNlIGl0c2VsZiBpcyBkaWZmZXJlbnQuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVGhlIHJlZmVyZW5jZSBzdGlsbCBjb3JyZXNwb25kcyB3aXRoIHRoZSBzYW1lIHN5bWJvbCwgbm93IGNoZWNrIHRoYXQgdGhlIHBhdGggYnkgd2hpY2ggaXQgaXNcbiAgLy8gaW1wb3J0ZWQgaGFzIG5vdCBjaGFuZ2VkLlxuICByZXR1cm4gYS5pbXBvcnRQYXRoID09PSBiLmltcG9ydFBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWZlcmVuY2VFcXVhbGl0eTxUPihhOiBULCBiOiBUKTogYm9vbGVhbiB7XG4gIHJldHVybiBhID09PSBiO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIHByb3ZpZGVkIGFycmF5cyBhcmUgZXF1YWwgdG8gZWFjaCBvdGhlciwgdXNpbmcgdGhlIHByb3ZpZGVkIGVxdWFsaXR5IHRlc3RlclxuICogdGhhdCBpcyBjYWxsZWQgZm9yIGFsbCBlbnRyaWVzIGluIHRoZSBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXlFcXVhbDxUPihcbiAgICBhOiByZWFkb25seSBUW118bnVsbCwgYjogcmVhZG9ubHkgVFtdfG51bGwsXG4gICAgZXF1YWxpdHlUZXN0ZXI6IChhOiBULCBiOiBUKSA9PiBib29sZWFuID0gcmVmZXJlbmNlRXF1YWxpdHkpOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IG51bGwgfHwgYiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9XG5cbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAhYS5zb21lKChpdGVtLCBpbmRleCkgPT4gIWVxdWFsaXR5VGVzdGVyKGl0ZW0sIGJbaW5kZXhdKSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgcHJvdmlkZWQgc2V0cyBhcmUgZXF1YWwgdG8gZWFjaCBvdGhlciwgdXNpbmcgdGhlIHByb3ZpZGVkIGVxdWFsaXR5IHRlc3Rlci5cbiAqIFNldHMgdGhhdCBvbmx5IGRpZmZlciBpbiBvcmRlcmluZyBhcmUgY29uc2lkZXJlZCBlcXVhbC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2V0RXF1YWw8VD4oXG4gICAgYTogUmVhZG9ubHlTZXQ8VD58bnVsbCwgYjogUmVhZG9ubHlTZXQ8VD58bnVsbCxcbiAgICBlcXVhbGl0eVRlc3RlcjogKGE6IFQsIGI6IFQpID0+IGJvb2xlYW4gPSByZWZlcmVuY2VFcXVhbGl0eSk6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gbnVsbCB8fCBiID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cblxuICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IGl0ZW1BIG9mIGEpIHtcbiAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGl0ZW1CIG9mIGIpIHtcbiAgICAgIGlmIChlcXVhbGl0eVRlc3RlcihpdGVtQSwgaXRlbUIpKSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZm91bmQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
@@ -27,11 +27,8 @@ export declare class FileDependencyGraph<T extends {
27
27
  private nodes;
28
28
  addDependency(from: T, on: T): void;
29
29
  addResourceDependency(from: T, resource: AbsoluteFsPath): void;
30
- addTransitiveDependency(from: T, on: T): void;
31
- addTransitiveResources(from: T, resourcesOf: T): void;
32
30
  recordDependencyAnalysisFailure(file: T): void;
33
31
  getResourceDependencies(from: T): AbsoluteFsPath[];
34
- isStale(sf: T, changedTsPaths: Set<string>, changedResources: Set<AbsoluteFsPath>): boolean;
35
32
  /**
36
33
  * Update the current dependency graph from a previous one, incorporating a set of physical
37
34
  * changes.