@angular/language-service 11.2.9 → 11.2.13

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v11.2.9
2
+ * @license Angular v11.2.13
3
3
  * Copyright Google LLC All Rights Reserved.
4
4
  * License: MIT
5
5
  */
@@ -8307,6 +8307,34 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
8307
8307
  rule.selector.startsWith('@page') || rule.selector.startsWith('@document')) {
8308
8308
  content = this._scopeSelectors(rule.content, scopeSelector, hostSelector);
8309
8309
  }
8310
+ else if (rule.selector.startsWith('@font-face')) {
8311
+ content = this._stripScopingSelectors(rule.content, scopeSelector, hostSelector);
8312
+ }
8313
+ return new CssRule(selector, content);
8314
+ });
8315
+ }
8316
+ /**
8317
+ * Handle a css text that is within a rule that should not contain scope selectors by simply
8318
+ * removing them! An example of such a rule is `@font-face`.
8319
+ *
8320
+ * `@font-face` rules cannot contain nested selectors. Nor can they be nested under a selector.
8321
+ * Normally this would be a syntax error by the author of the styles. But in some rare cases, such
8322
+ * as importing styles from a library, and applying `:host ::ng-deep` to the imported styles, we
8323
+ * can end up with broken css if the imported styles happen to contain @font-face rules.
8324
+ *
8325
+ * For example:
8326
+ *
8327
+ * ```
8328
+ * :host ::ng-deep {
8329
+ * import 'some/lib/containing/font-face';
8330
+ * }
8331
+ * ```
8332
+ */
8333
+ _stripScopingSelectors(cssText, scopeSelector, hostSelector) {
8334
+ return processRules(cssText, rule => {
8335
+ const selector = rule.selector.replace(_shadowDeepSelectors, ' ')
8336
+ .replace(_polyfillHostNoCombinatorRe, ' ');
8337
+ const content = this._scopeSelectors(rule.content, scopeSelector, hostSelector);
8310
8338
  return new CssRule(selector, content);
8311
8339
  });
8312
8340
  }
@@ -19180,7 +19208,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
19180
19208
  * Use of this source code is governed by an MIT-style license that can be
19181
19209
  * found in the LICENSE file at https://angular.io/license
19182
19210
  */
19183
- const VERSION$1 = new Version('11.2.9');
19211
+ const VERSION$1 = new Version('11.2.13');
19184
19212
 
19185
19213
  /**
19186
19214
  * @license
@@ -19728,6 +19756,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
19728
19756
  * found in the LICENSE file at https://angular.io/license
19729
19757
  */
19730
19758
  const ERROR_COMPONENT_TYPE = 'ngComponentType';
19759
+ const MISSING_NG_MODULE_METADATA_ERROR_DATA = 'ngMissingNgModuleMetadataErrorData';
19731
19760
  // Design notes:
19732
19761
  // - don't lazily create metadata:
19733
19762
  // For some metadata, we need to do async work sometimes,
@@ -20195,7 +20224,16 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
20195
20224
  const importedModuleSummary = this.getNgModuleSummary(importedModuleType, alreadyCollecting);
20196
20225
  alreadyCollecting.delete(importedModuleType);
20197
20226
  if (!importedModuleSummary) {
20198
- this._reportError(syntaxError(`Unexpected ${this._getTypeDescriptor(importedType)} '${stringifyType(importedType)}' imported by the module '${stringifyType(moduleType)}'. Please add a @NgModule annotation.`), moduleType);
20227
+ const err = syntaxError(`Unexpected ${this._getTypeDescriptor(importedType)} '${stringifyType(importedType)}' imported by the module '${stringifyType(moduleType)}'. Please add a @NgModule annotation.`);
20228
+ // If possible, record additional context for this error to enable more useful
20229
+ // diagnostics on the compiler side.
20230
+ if (importedType instanceof StaticSymbol) {
20231
+ err[MISSING_NG_MODULE_METADATA_ERROR_DATA] = {
20232
+ fileName: importedType.filePath,
20233
+ className: importedType.name,
20234
+ };
20235
+ }
20236
+ this._reportError(err, moduleType);
20199
20237
  return;
20200
20238
  }
20201
20239
  importedModules.push(importedModuleSummary);
@@ -35232,7 +35270,7 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
35232
35270
  /**
35233
35271
  * @publicApi
35234
35272
  */
35235
- const VERSION$2 = new Version$1('11.2.9');
35273
+ const VERSION$2 = new Version$1('11.2.13');
35236
35274
 
35237
35275
  /**
35238
35276
  * @license
@@ -36418,9 +36456,6 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
36418
36456
  /**
36419
36457
  * Marks a view and all of its ancestors dirty.
36420
36458
  *
36421
- * It also triggers change detection by calling `scheduleTick` internally, which coalesces
36422
- * multiple `markForCheck` calls to into one change detection run.
36423
- *
36424
36459
  * This can be used to ensure an {@link ChangeDetectionStrategy#OnPush OnPush} component is
36425
36460
  * checked when it needs to be re-rendered but the two normal triggers haven't marked it
36426
36461
  * dirty (i.e. inputs haven't changed and events haven't fired in the view).
@@ -38500,58 +38535,37 @@ define(['exports', 'typescript/lib/tsserverlibrary', 'typescript', 'path'], func
38500
38535
  super.next(value);
38501
38536
  }
38502
38537
  subscribe(observerOrNext, error, complete) {
38503
- let schedulerFn;
38504
- let errorFn = (err) => null;
38505
- let completeFn = () => null;
38538
+ var _a, _b, _c;
38539
+ let nextFn = observerOrNext;
38540
+ let errorFn = error || (() => null);
38541
+ let completeFn = complete;
38506
38542
  if (observerOrNext && typeof observerOrNext === 'object') {
38507
- schedulerFn = this.__isAsync ? (value) => {
38508
- setTimeout(() => observerOrNext.next(value));
38509
- } : (value) => {
38510
- observerOrNext.next(value);
38511
- };
38512
- if (observerOrNext.error) {
38513
- errorFn = this.__isAsync ? (err) => {
38514
- setTimeout(() => observerOrNext.error(err));
38515
- } : (err) => {
38516
- observerOrNext.error(err);
38517
- };
38518
- }
38519
- if (observerOrNext.complete) {
38520
- completeFn = this.__isAsync ? () => {
38521
- setTimeout(() => observerOrNext.complete());
38522
- } : () => {
38523
- observerOrNext.complete();
38524
- };
38525
- }
38543
+ const observer = observerOrNext;
38544
+ nextFn = (_a = observer.next) === null || _a === void 0 ? void 0 : _a.bind(observer);
38545
+ errorFn = (_b = observer.error) === null || _b === void 0 ? void 0 : _b.bind(observer);
38546
+ completeFn = (_c = observer.complete) === null || _c === void 0 ? void 0 : _c.bind(observer);
38526
38547
  }
38527
- else {
38528
- schedulerFn = this.__isAsync ? (value) => {
38529
- setTimeout(() => observerOrNext(value));
38530
- } : (value) => {
38531
- observerOrNext(value);
38532
- };
38533
- if (error) {
38534
- errorFn = this.__isAsync ? (err) => {
38535
- setTimeout(() => error(err));
38536
- } : (err) => {
38537
- error(err);
38538
- };
38548
+ if (this.__isAsync) {
38549
+ errorFn = _wrapInTimeout(errorFn);
38550
+ if (nextFn) {
38551
+ nextFn = _wrapInTimeout(nextFn);
38539
38552
  }
38540
- if (complete) {
38541
- completeFn = this.__isAsync ? () => {
38542
- setTimeout(() => complete());
38543
- } : () => {
38544
- complete();
38545
- };
38553
+ if (completeFn) {
38554
+ completeFn = _wrapInTimeout(completeFn);
38546
38555
  }
38547
38556
  }
38548
- const sink = super.subscribe(schedulerFn, errorFn, completeFn);
38557
+ const sink = super.subscribe({ next: nextFn, error: errorFn, complete: completeFn });
38549
38558
  if (observerOrNext instanceof Subscription) {
38550
38559
  observerOrNext.add(sink);
38551
38560
  }
38552
38561
  return sink;
38553
38562
  }
38554
38563
  }
38564
+ function _wrapInTimeout(fn) {
38565
+ return (value) => {
38566
+ setTimeout(fn, undefined, value);
38567
+ };
38568
+ }
38555
38569
  /**
38556
38570
  * @publicApi
38557
38571
  */
package/ivy/adapters.d.ts CHANGED
@@ -26,6 +26,7 @@ export declare class LanguageServiceAdapter implements NgCompilerAdapter {
26
26
  */
27
27
  private readonly lastReadResourceVersion;
28
28
  constructor(project: ts.server.Project);
29
+ resourceNameToFileName(url: string, fromFile: string, fallbackResolve?: (url: string, fromFile: string) => string | null): string | null;
29
30
  isShim(sf: ts.SourceFile): boolean;
30
31
  fileExists(fileName: string): boolean;
31
32
  readFile(fileName: string): string | undefined;
package/ivy/adapters.js CHANGED
@@ -22,6 +22,7 @@
22
22
  var typescript_1 = require("@angular/compiler-cli/src/ngtsc/util/src/typescript");
23
23
  var p = require("path");
24
24
  var utils_1 = require("@angular/language-service/ivy/utils");
25
+ var PRE_COMPILED_STYLE_EXTENSIONS = ['.scss', '.sass', '.less', '.styl'];
25
26
  var LanguageServiceAdapter = /** @class */ (function () {
26
27
  function LanguageServiceAdapter(project) {
27
28
  this.project = project;
@@ -38,6 +39,33 @@
38
39
  this.lastReadResourceVersion = new Map();
39
40
  this.rootDirs = typescript_1.getRootDirs(this, project.getCompilationSettings());
40
41
  }
42
+ LanguageServiceAdapter.prototype.resourceNameToFileName = function (url, fromFile, fallbackResolve) {
43
+ var e_1, _a;
44
+ var _b;
45
+ // If we are trying to resolve a `.css` file, see if we can find a pre-compiled file with the
46
+ // same name instead. That way, we can provide go-to-definition for the pre-compiled files which
47
+ // would generally be the desired behavior.
48
+ if (url.endsWith('.css')) {
49
+ var styleUrl = p.resolve(fromFile, '..', url);
50
+ try {
51
+ for (var PRE_COMPILED_STYLE_EXTENSIONS_1 = tslib_1.__values(PRE_COMPILED_STYLE_EXTENSIONS), PRE_COMPILED_STYLE_EXTENSIONS_1_1 = PRE_COMPILED_STYLE_EXTENSIONS_1.next(); !PRE_COMPILED_STYLE_EXTENSIONS_1_1.done; PRE_COMPILED_STYLE_EXTENSIONS_1_1 = PRE_COMPILED_STYLE_EXTENSIONS_1.next()) {
52
+ var ext = PRE_COMPILED_STYLE_EXTENSIONS_1_1.value;
53
+ var precompiledFileUrl = styleUrl.replace(/\.css$/, ext);
54
+ if (this.fileExists(precompiledFileUrl)) {
55
+ return precompiledFileUrl;
56
+ }
57
+ }
58
+ }
59
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
60
+ finally {
61
+ try {
62
+ if (PRE_COMPILED_STYLE_EXTENSIONS_1_1 && !PRE_COMPILED_STYLE_EXTENSIONS_1_1.done && (_a = PRE_COMPILED_STYLE_EXTENSIONS_1.return)) _a.call(PRE_COMPILED_STYLE_EXTENSIONS_1);
63
+ }
64
+ finally { if (e_1) throw e_1.error; }
65
+ }
66
+ }
67
+ return (_b = fallbackResolve === null || fallbackResolve === void 0 ? void 0 : fallbackResolve(url, fromFile)) !== null && _b !== void 0 ? _b : null;
68
+ };
41
69
  LanguageServiceAdapter.prototype.isShim = function (sf) {
42
70
  return shims_1.isShim(sf);
43
71
  };
@@ -87,7 +115,7 @@
87
115
  return snapshot.getText(0, snapshot.getLength());
88
116
  };
89
117
  LanguageServiceAdapter.prototype.getModifiedResourceFiles = function () {
90
- var e_1, _a;
118
+ var e_2, _a;
91
119
  var modifiedFiles = new Set();
92
120
  try {
93
121
  for (var _b = tslib_1.__values(this.lastReadResourceVersion), _c = _b.next(); !_c.done; _c = _b.next()) {
@@ -97,12 +125,12 @@
97
125
  }
98
126
  }
99
127
  }
100
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
128
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
101
129
  finally {
102
130
  try {
103
131
  if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
104
132
  }
105
- finally { if (e_1) throw e_1.error; }
133
+ finally { if (e_2) throw e_2.error; }
106
134
  }
107
135
  return modifiedFiles.size > 0 ? modifiedFiles : undefined;
108
136
  };
@@ -171,4 +199,4 @@
171
199
  }());
172
200
  exports.LSParseConfigHost = LSParseConfigHost;
173
201
  });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL2l2eS9hZGFwdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBT0gsK0RBQTZEO0lBQzdELGtGQUFnRjtJQUNoRix3QkFBMEI7SUFHMUIsNkRBQXlDO0lBRXpDO1FBZUUsZ0NBQTZCLE9BQTBCO1lBQTFCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1lBZDlDLGVBQVUsR0FBRyxJQUFJLENBQUM7WUFDbEIsNEJBQXVCLEdBQW9CLEVBQUUsQ0FBQztZQUM5QyxrQkFBYSxHQUF1QixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzlDLG1CQUFjLEdBQUcsSUFBSSxDQUFDLENBQU0sc0JBQXNCO1lBQ2xELHVCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFFLHFCQUFxQjtZQUcxRDs7OztlQUlHO1lBQ2MsNEJBQXVCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7WUFHbkUsSUFBSSxDQUFDLFFBQVEsR0FBRyx3QkFBVyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCx1Q0FBTSxHQUFOLFVBQU8sRUFBaUI7WUFDdEIsT0FBTyxjQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELDJDQUFVLEdBQVYsVUFBVyxRQUFnQjtZQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFFRCx5Q0FBUSxHQUFSLFVBQVMsUUFBZ0I7WUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsb0RBQW1CLEdBQW5CO1lBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFD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QUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztnQkFDRCxXQUFXLEVBQUU7b0JBQ1gsT0FBTyxLQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztnQkFDRCxjQUFjLEVBQUU7b0JBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO2dCQUM1RSxDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCwrQkFBRyxHQUFIO1lBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFvQixDQUFDO1FBQ2pFLENBQUM7UUFDRCxtQ0FBTyxHQUFQLFVBQVEsSUFBZ0M7WUFDdEMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxtQ0FBTyxHQUFQO1lBQVEsZUFBa0I7aUJBQWxCLFVBQWtCLEVBQWxCLHFCQUFrQixFQUFsQixJQUFrQjtnQkFBbEIsMEJBQWtCOztZQUN4QixPQUFPLENBQUMsQ0FBQyxPQUFPLE9BQVQsQ0FBQyxtQkFBWSxLQUFLLEVBQW1CLENBQUM7UUFDL0MsQ0FBQztRQUNELG1DQUFPLEdBQVAsVUFBOEIsSUFBTztZQUNuQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFNLENBQUM7UUFDOUIsQ0FBQztRQUNELGdDQUFJLEdBQUosVUFBMkIsUUFBVztZQUFFLGVBQWtCO2lCQUFsQixVQUFrQixFQUFsQixxQkFBa0IsRUFBbEIsSUFBa0I7Z0JBQWxCLDhCQUFrQjs7WUFDeEQsT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFOLENBQUMsb0JBQU0sUUFBUSxHQUFLLEtBQUssRUFBTSxDQUFDO1FBQ3pDLENBQUM7UUFDSCx3QkFBQztJQUFELENBQUMsQUF4Q0QsSUF3Q0M7SUF4Q1ksOENBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKiBAZmlsZW92ZXJ2aWV3IHByb3ZpZGVzIGFkYXB0ZXJzIGZvciBjb21tdW5pY2F0aW5nIHdpdGggdGhlIG5nIGNvbXBpbGVyICovXG5cbmltcG9ydCB7Q29uZmlndXJhdGlvbkhvc3R9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaSc7XG5pbXBvcnQge05nQ29tcGlsZXJBZGFwdGVyfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL2NvcmUvYXBpJztcbmltcG9ydCB7QWJzb2x1dGVGc1BhdGgsIEZpbGVTdGF0cywgUGF0aFNlZ21lbnQsIFBhdGhTdHJpbmd9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZmlsZV9zeXN0ZW0nO1xuaW1wb3J0IHtpc1NoaW19IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2Mvc2hpbXMnO1xuaW1wb3J0IHtnZXRSb290RGlyc30gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy91dGlsL3NyYy90eXBlc2NyaXB0JztcbmltcG9ydCAqIGFzIHAgZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0L2xpYi90c3NlcnZlcmxpYnJhcnknO1xuXG5pbXBvcnQge2lzVHlwZVNjcmlwdEZpbGV9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgTGFuZ3VhZ2VTZXJ2aWNlQWRhcHRlciBpbXBsZW1lbnRzIE5nQ29tcGlsZXJBZGFwdGVyIHtcbiAgcmVhZG9ubHkgZW50cnlQb2ludCA9IG51bGw7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdGlvbkRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgcmVhZG9ubHkgaWdub3JlRm9yRW1pdDogU2V0PHRzLlNvdXJjZUZpbGU+ID0gbmV3IFNldCgpO1xuICByZWFkb25seSBmYWN0b3J5VHJhY2tlciA9IG51bGw7ICAgICAgLy8gbm8gLm5nZmFjdG9yeSBzaGltc1xuICByZWFkb25seSB1bmlmaWVkTW9kdWxlc0hvc3QgPSBudWxsOyAgLy8gb25seSB1c2VkIGluIEJhemVsXG4gIHJlYWRvbmx5IHJvb3REaXJzOiBBYnNvbHV0ZUZzUGF0aFtdO1xuXG4gIC8qKlxuICAgKiBNYXAgb2YgcmVzb3VyY2UgZmlsZW5hbWVzIHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGxhc3QgcmVhZCB2aWEgYHJlYWRSZXNvdXJjZWAuXG4gICAqXG4gICAqIFVzZWQgdG8gaW1wbGVtZW50IGBnZXRNb2RpZmllZFJlc291cmNlRmlsZXNgLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsYXN0UmVhZFJlc291cmNlVmVyc2lvbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9qZWN0OiB0cy5zZXJ2ZXIuUHJvamVjdCkge1xuICAgIHRoaXMucm9vdERpcnMgPSBnZXRSb290RGlycyh0aGlzLCBwcm9qZWN0LmdldENvbXBpbGF0aW9uU2V0dGluZ3MoKSk7XG4gIH1cblxuICBpc1NoaW0oc2Y6IHRzLlNvdXJjZUZpbGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNTaGltKHNmKTtcbiAgfVxuXG4gIGZpbGVFeGlzdHMoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb2plY3QuZmlsZUV4aXN0cyhmaWxlTmFtZSk7XG4gIH1cblxuICByZWFkRmlsZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nfHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5yZWFkRmlsZShmaWxlTmFtZSk7XG4gIH1cblxuICBnZXRDdXJyZW50RGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5nZXRDdXJyZW50RGlyZWN0b3J5KCk7XG4gIH1cblxuICBnZXRDYW5vbmljYWxGaWxlTmFtZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0LnByb2plY3RTZXJ2aWNlLnRvQ2Fub25pY2FsRmlsZU5hbWUoZmlsZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcmVhbCBwYXRoIG9mIGEgc3ltbGluay4gVGhpcyBtZXRob2QgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG9cbiAgICogcmVzb2x2ZSBzeW1saW5rcyBpbiBub2RlX21vZHVsZXMuXG4gICAqL1xuICByZWFscGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2plY3QucmVhbHBhdGg/LihwYXRoKSA/PyBwYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlYWRSZXNvdXJjZSgpIGlzIGFuIEFuZ3VsYXItc3BlY2lmaWMgbWV0aG9kIGZvciByZWFkaW5nIGZpbGVzIHRoYXQgYXJlIG5vdFxuICAgKiBtYW5hZ2VkIGJ5IHRoZSBUUyBjb21waWxlciBob3N0LCBuYW1lbHkgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cy5cbiAgICogSXQgaXMgYSBtZXRob2Qgb24gRXh0ZW5kZWRUc0NvbXBpbGVySG9zdCwgc2VlXG4gICAqIHBhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvY29yZS9hcGkvc3JjL2ludGVyZmFjZXMudHNcbiAgICovXG4gIHJlYWRSZXNvdXJjZShmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNUeXBlU2NyaXB0RmlsZShmaWxlTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcmVhZFJlc291cmNlKCkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgb24gVFMgZmlsZTogJHtmaWxlTmFtZX1gKTtcbiAgICB9XG4gICAgLy8gQ2FsbGluZyBnZXRTY3JpcHRTbmFwc2hvdCgpIHdpbGwgYWN0dWFsbHkgY3JlYXRlIGEgU2NyaXB0SW5mbyBpZiBpdCBkb2VzXG4gICAgLy8gbm90IGV4aXN0ISBUaGUgc2FtZSBhcHBsaWVzIGZvciBnZXRTY3JpcHRWZXJzaW9uKCkuXG4gICAgLy8gZ2V0U2NyaXB0SW5mbygpIHdpbGwgbm90IGNyZWF0ZSBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSAqd2FudCogYSBzY3JpcHQgaW5mbyB0byBiZSBjcmVhdGVkIHNvIHRoYXQgd2UgY291bGRcbiAgICAvLyBrZWVwIHRyYWNrIG9mIGl0cyB2ZXJzaW9uLlxuICAgIGNvbnN0IHNuYXBzaG90ID0gdGhpcy5wcm9qZWN0LmdldFNjcmlwdFNuYXBzaG90KGZpbGVOYW1lKTtcbiAgICBpZiAoIXNuYXBzaG90KSB7XG4gICAgICAvLyBUaGlzIHdvdWxkIGZhaWwgaWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIG9yIHJlYWRGaWxlKCkgZmFpbHMgZm9yXG4gICAgICAvLyB3aGF0ZXZlciByZWFzb25zLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZ2V0IHNjcmlwdCBzbmFwc2hvdCB3aGlsZSB0cnlpbmcgdG8gcmVhZCAke2ZpbGVOYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5wcm9qZWN0LmdldFNjcmlwdFZlcnNpb24oZmlsZU5hbWUpO1xuICAgIHRoaXMubGFzdFJlYWRSZXNvdXJjZVZlcnNpb24uc2V0KGZpbGVOYW1lLCB2ZXJzaW9uKTtcbiAgICByZXR1cm4gc25hcHNob3QuZ2V0VGV4dCgwLCBzbmFwc2hvdC5nZXRMZW5ndGgoKSk7XG4gIH1cblxuICBnZXRNb2RpZmllZFJlc291cmNlRmlsZXMoKTogU2V0PHN0cmluZz58dW5kZWZpbmVkIHtcbiAgICBjb25zdCBtb2RpZmllZEZpbGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBbZmlsZU5hbWUsIG9sZFZlcnNpb25dIG9mIHRoaXMubGFzdFJlYWRSZXNvdXJjZVZlcnNpb24pIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3QuZ2V0U2NyaXB0VmVyc2lvbihmaWxlTmFtZSkgIT09IG9sZFZlcnNpb24pIHtcbiAgICAgICAgbW9kaWZpZWRGaWxlcy5hZGQoZmlsZU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWRGaWxlcy5zaXplID4gMCA/IG1vZGlmaWVkRmlsZXMgOiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBVc2VkIHRvIHJlYWQgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAqXG4gKiBBIGxhbmd1YWdlIHNlcnZpY2UgcGFyc2UgY29uZmlndXJhdGlvbiBob3N0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBhZGFwdGVyXG4gKiBiZWNhdXNlIHNpZ25hdHVyZXMgb2YgY2FsbHMgbGlrZSBgRmlsZVN5c3RlbSNyZWFkRmlsZWAgYXJlIGEgYml0IHN0cmljdGVyXG4gKiB0aGFuIHRob3NlIG9uIHRoZSBhZGFwdGVyLlxuICovXG5leHBvcnQgY2xhc3MgTFNQYXJzZUNvbmZpZ0hvc3QgaW1wbGVtZW50cyBDb25maWd1cmF0aW9uSG9zdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2VydmVySG9zdDogdHMuc2VydmVyLlNlcnZlckhvc3QpIHt9XG4gIGV4aXN0cyhwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlcnZlckhvc3QuZmlsZUV4aXN0cyhwYXRoKSB8fCB0aGlzLnNlcnZlckhvc3QuZGlyZWN0b3J5RXhpc3RzKHBhdGgpO1xuICB9XG4gIHJlYWRGaWxlKHBhdGg6IEFic29sdXRlRnNQYXRoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5zZXJ2ZXJIb3N0LnJlYWRGaWxlKHBhdGgpO1xuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGFuZ3VhZ2VTZXJ2aWNlRlMjcmVhZEZpbGUgY2FsbGVkIG9uIHVuYXZhaWxhYmxlIGZpbGUgJHtwYXRofWApO1xuICAgIH1cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBsc3RhdChwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IEZpbGVTdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRmlsZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2ZXJIb3N0LmZpbGVFeGlzdHMocGF0aCk7XG4gICAgICB9LFxuICAgICAgaXNEaXJlY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmVySG9zdC5kaXJlY3RvcnlFeGlzdHMocGF0aCk7XG4gICAgICB9LFxuICAgICAgaXNTeW1ib2xpY0xpbms6ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYW5ndWFnZVNlcnZpY2VGUyNsc3RhdCNpc1N5bWJvbGljTGluayBub3QgaW1wbGVtZW50ZWRgKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBwd2QoKTogQWJzb2x1dGVGc1BhdGgge1xuICAgIHJldHVybiB0aGlzLnNlcnZlckhvc3QuZ2V0Q3VycmVudERpcmVjdG9yeSgpIGFzIEFic29sdXRlRnNQYXRoO1xuICB9XG4gIGV4dG5hbWUocGF0aDogQWJzb2x1dGVGc1BhdGh8UGF0aFNlZ21lbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBwLmV4dG5hbWUocGF0aCk7XG4gIH1cbiAgcmVzb2x2ZSguLi5wYXRoczogc3RyaW5nW10pOiBBYnNvbHV0ZUZzUGF0aCB7XG4gICAgcmV0dXJuIHAucmVzb2x2ZSguLi5wYXRocykgYXMgQWJzb2x1dGVGc1BhdGg7XG4gIH1cbiAgZGlybmFtZTxUIGV4dGVuZHMgUGF0aFN0cmluZz4oZmlsZTogVCk6IFQge1xuICAgIHJldHVybiBwLmRpcm5hbWUoZmlsZSkgYXMgVDtcbiAgfVxuICBqb2luPFQgZXh0ZW5kcyBQYXRoU3RyaW5nPihiYXNlUGF0aDogVCwgLi4ucGF0aHM6IHN0cmluZ1tdKTogVCB7XG4gICAgcmV0dXJuIHAuam9pbihiYXNlUGF0aCwgLi4ucGF0aHMpIGFzIFQ7XG4gIH1cbn1cbiJdfQ==
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRhcHRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL2l2eS9hZGFwdGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7O0lBT0gsK0RBQTZEO0lBQzdELGtGQUFnRjtJQUNoRix3QkFBMEI7SUFHMUIsNkRBQXlDO0lBRXpDLElBQU0sNkJBQTZCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUUzRTtRQWVFLGdDQUE2QixPQUEwQjtZQUExQixZQUFPLEdBQVAsT0FBTyxDQUFtQjtZQWQ5QyxlQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLDRCQUF1QixHQUFvQixFQUFFLENBQUM7WUFDOUMsa0JBQWEsR0FBdUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUM5QyxtQkFBYyxHQUFHLElBQUksQ0FBQyxDQUFNLHNCQUFzQjtZQUNsRCx1QkFBa0IsR0FBRyxJQUFJLENBQUMsQ0FBRSxxQkFBcUI7WUFHMUQ7Ozs7ZUFJRztZQUNjLDRCQUF1QixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1lBR25FLElBQUksQ0FBQyxRQUFRLEdBQUcsd0JBQVcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsdURBQXNCLEdBQXRCLFVBQ0ksR0FBVyxFQUFFLFFBQWdCLEVBQzdCLGVBQWtFOzs7WUFDcEUsNkZBQTZGO1lBQzdGLGdHQUFnRztZQUNoRywyQ0FBMkM7WUFDM0MsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN4QixJQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7O29CQUNoRCxLQUFrQixJQUFBLGtD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Q0FBQztRQUNqRSxDQUFDO1FBQ0QsbUNBQU8sR0FBUCxVQUFRLElBQWdDO1lBQ3RDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBQ0QsbUNBQU8sR0FBUDtZQUFRLGVBQWtCO2lCQUFsQixVQUFrQixFQUFsQixxQkFBa0IsRUFBbEIsSUFBa0I7Z0JBQWxCLDBCQUFrQjs7WUFDeEIsT0FBTyxDQUFDLENBQUMsT0FBTyxPQUFULENBQUMsbUJBQVksS0FBSyxFQUFtQixDQUFDO1FBQy9DLENBQUM7UUFDRCxtQ0FBTyxHQUFQLFVBQThCLElBQU87WUFDbkMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBTSxDQUFDO1FBQzlCLENBQUM7UUFDRCxnQ0FBSSxHQUFKLFVBQTJCLFFBQVc7WUFBRSxlQUFrQjtpQkFBbEIsVUFBa0IsRUFBbEIscUJBQWtCLEVBQWxCLElBQWtCO2dCQUFsQiw4QkFBa0I7O1lBQ3hELE9BQU8sQ0FBQyxDQUFDLElBQUksT0FBTixDQUFDLG9CQUFNLFFBQVEsR0FBSyxLQUFLLEVBQU0sQ0FBQztRQUN6QyxDQUFDO1FBQ0gsd0JBQUM7SUFBRCxDQUFDLEFBeENELElBd0NDO0lBeENZLDhDQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKiogQGZpbGVvdmVydmlldyBwcm92aWRlcyBhZGFwdGVycyBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBuZyBjb21waWxlciAqL1xuXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25Ib3N0fSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGknO1xuaW1wb3J0IHtOZ0NvbXBpbGVyQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXItY2xpL3NyYy9uZ3RzYy9jb3JlL2FwaSc7XG5pbXBvcnQge0Fic29sdXRlRnNQYXRoLCBGaWxlU3RhdHMsIFBhdGhTZWdtZW50LCBQYXRoU3RyaW5nfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL2ZpbGVfc3lzdGVtJztcbmltcG9ydCB7aXNTaGltfSBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGkvc3JjL25ndHNjL3NoaW1zJztcbmltcG9ydCB7Z2V0Um9vdERpcnN9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvdXRpbC9zcmMvdHlwZXNjcmlwdCc7XG5pbXBvcnQgKiBhcyBwIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdC9saWIvdHNzZXJ2ZXJsaWJyYXJ5JztcblxuaW1wb3J0IHtpc1R5cGVTY3JpcHRGaWxlfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgUFJFX0NPTVBJTEVEX1NUWUxFX0VYVEVOU0lPTlMgPSBbJy5zY3NzJywgJy5zYXNzJywgJy5sZXNzJywgJy5zdHlsJ107XG5cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZVNlcnZpY2VBZGFwdGVyIGltcGxlbWVudHMgTmdDb21waWxlckFkYXB0ZXIge1xuICByZWFkb25seSBlbnRyeVBvaW50ID0gbnVsbDtcbiAgcmVhZG9ubHkgY29uc3RydWN0aW9uRGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICByZWFkb25seSBpZ25vcmVGb3JFbWl0OiBTZXQ8dHMuU291cmNlRmlsZT4gPSBuZXcgU2V0KCk7XG4gIHJlYWRvbmx5IGZhY3RvcnlUcmFja2VyID0gbnVsbDsgICAgICAvLyBubyAubmdmYWN0b3J5IHNoaW1zXG4gIHJlYWRvbmx5IHVuaWZpZWRNb2R1bGVzSG9zdCA9IG51bGw7ICAvLyBvbmx5IHVzZWQgaW4gQmF6ZWxcbiAgcmVhZG9ubHkgcm9vdERpcnM6IEFic29sdXRlRnNQYXRoW107XG5cbiAgLyoqXG4gICAqIE1hcCBvZiByZXNvdXJjZSBmaWxlbmFtZXMgdG8gdGhlIHZlcnNpb24gb2YgdGhlIGZpbGUgbGFzdCByZWFkIHZpYSBgcmVhZFJlc291cmNlYC5cbiAgICpcbiAgICogVXNlZCB0byBpbXBsZW1lbnQgYGdldE1vZGlmaWVkUmVzb3VyY2VGaWxlc2AuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxhc3RSZWFkUmVzb3VyY2VWZXJzaW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHByb2plY3Q6IHRzLnNlcnZlci5Qcm9qZWN0KSB7XG4gICAgdGhpcy5yb290RGlycyA9IGdldFJvb3REaXJzKHRoaXMsIHByb2plY3QuZ2V0Q29tcGlsYXRpb25TZXR0aW5ncygpKTtcbiAgfVxuXG4gIHJlc291cmNlTmFtZVRvRmlsZU5hbWUoXG4gICAgICB1cmw6IHN0cmluZywgZnJvbUZpbGU6IHN0cmluZyxcbiAgICAgIGZhbGxiYWNrUmVzb2x2ZT86ICh1cmw6IHN0cmluZywgZnJvbUZpbGU6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCk6IHN0cmluZ3xudWxsIHtcbiAgICAvLyBJZiB3ZSBhcmUgdHJ5aW5nIHRvIHJlc29sdmUgYSBgLmNzc2AgZmlsZSwgc2VlIGlmIHdlIGNhbiBmaW5kIGEgcHJlLWNvbXBpbGVkIGZpbGUgd2l0aCB0aGVcbiAgICAvLyBzYW1lIG5hbWUgaW5zdGVhZC4gVGhhdCB3YXksIHdlIGNhbiBwcm92aWRlIGdvLXRvLWRlZmluaXRpb24gZm9yIHRoZSBwcmUtY29tcGlsZWQgZmlsZXMgd2hpY2hcbiAgICAvLyB3b3VsZCBnZW5lcmFsbHkgYmUgdGhlIGRlc2lyZWQgYmVoYXZpb3IuXG4gICAgaWYgKHVybC5lbmRzV2l0aCgnLmNzcycpKSB7XG4gICAgICBjb25zdCBzdHlsZVVybCA9IHAucmVzb2x2ZShmcm9tRmlsZSwgJy4uJywgdXJsKTtcbiAgICAgIGZvciAoY29uc3QgZXh0IG9mIFBSRV9DT01QSUxFRF9TVFlMRV9FWFRFTlNJT05TKSB7XG4gICAgICAgIGNvbnN0IHByZWNvbXBpbGVkRmlsZVVybCA9IHN0eWxlVXJsLnJlcGxhY2UoL1xcLmNzcyQvLCBleHQpO1xuICAgICAgICBpZiAodGhpcy5maWxlRXhpc3RzKHByZWNvbXBpbGVkRmlsZVVybCkpIHtcbiAgICAgICAgICByZXR1cm4gcHJlY29tcGlsZWRGaWxlVXJsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxsYmFja1Jlc29sdmU/Lih1cmwsIGZyb21GaWxlKSA/PyBudWxsO1xuICB9XG5cbiAgaXNTaGltKHNmOiB0cy5Tb3VyY2VGaWxlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzU2hpbShzZik7XG4gIH1cblxuICBmaWxlRXhpc3RzKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0LmZpbGVFeGlzdHMoZmlsZU5hbWUpO1xuICB9XG5cbiAgcmVhZEZpbGUoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZ3x1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb2plY3QucmVhZEZpbGUoZmlsZU5hbWUpO1xuICB9XG5cbiAgZ2V0Q3VycmVudERpcmVjdG9yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2plY3QuZ2V0Q3VycmVudERpcmVjdG9yeSgpO1xuICB9XG5cbiAgZ2V0Q2Fub25pY2FsRmlsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5wcm9qZWN0U2VydmljZS50b0Nhbm9uaWNhbEZpbGVOYW1lKGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHJlYWwgcGF0aCBvZiBhIHN5bWxpbmsuIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGluIG9yZGVyIHRvXG4gICAqIHJlc29sdmUgc3ltbGlua3MgaW4gbm9kZV9tb2R1bGVzLlxuICAgKi9cbiAgcmVhbHBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0LnJlYWxwYXRoPy4ocGF0aCkgPz8gcGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiByZWFkUmVzb3VyY2UoKSBpcyBhbiBBbmd1bGFyLXNwZWNpZmljIG1ldGhvZCBmb3IgcmVhZGluZyBmaWxlcyB0aGF0IGFyZSBub3RcbiAgICogbWFuYWdlZCBieSB0aGUgVFMgY29tcGlsZXIgaG9zdCwgbmFtZWx5IHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMuXG4gICAqIEl0IGlzIGEgbWV0aG9kIG9uIEV4dGVuZGVkVHNDb21waWxlckhvc3QsIHNlZVxuICAgKiBwYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL25ndHNjL2NvcmUvYXBpL3NyYy9pbnRlcmZhY2VzLnRzXG4gICAqL1xuICByZWFkUmVzb3VyY2UoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGlzVHlwZVNjcmlwdEZpbGUoZmlsZU5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlYWRSZXNvdXJjZSgpIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uIFRTIGZpbGU6ICR7ZmlsZU5hbWV9YCk7XG4gICAgfVxuICAgIC8vIENhbGxpbmcgZ2V0U2NyaXB0U25hcHNob3QoKSB3aWxsIGFjdHVhbGx5IGNyZWF0ZSBhIFNjcmlwdEluZm8gaWYgaXQgZG9lc1xuICAgIC8vIG5vdCBleGlzdCEgVGhlIHNhbWUgYXBwbGllcyBmb3IgZ2V0U2NyaXB0VmVyc2lvbigpLlxuICAgIC8vIGdldFNjcmlwdEluZm8oKSB3aWxsIG5vdCBjcmVhdGUgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICAgIC8vIEluIHRoaXMgY2FzZSwgd2UgKndhbnQqIGEgc2NyaXB0IGluZm8gdG8gYmUgY3JlYXRlZCBzbyB0aGF0IHdlIGNvdWxkXG4gICAgLy8ga2VlcCB0cmFjayBvZiBpdHMgdmVyc2lvbi5cbiAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMucHJvamVjdC5nZXRTY3JpcHRTbmFwc2hvdChmaWxlTmFtZSk7XG4gICAgaWYgKCFzbmFwc2hvdCkge1xuICAgICAgLy8gVGhpcyB3b3VsZCBmYWlsIGlmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBvciByZWFkRmlsZSgpIGZhaWxzIGZvclxuICAgICAgLy8gd2hhdGV2ZXIgcmVhc29ucy5cbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdldCBzY3JpcHQgc25hcHNob3Qgd2hpbGUgdHJ5aW5nIHRvIHJlYWQgJHtmaWxlTmFtZX1gKTtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbiA9IHRoaXMucHJvamVjdC5nZXRTY3JpcHRWZXJzaW9uKGZpbGVOYW1lKTtcbiAgICB0aGlzLmxhc3RSZWFkUmVzb3VyY2VWZXJzaW9uLnNldChmaWxlTmFtZSwgdmVyc2lvbik7XG4gICAgcmV0dXJuIHNuYXBzaG90LmdldFRleHQoMCwgc25hcHNob3QuZ2V0TGVuZ3RoKCkpO1xuICB9XG5cbiAgZ2V0TW9kaWZpZWRSZXNvdXJjZUZpbGVzKCk6IFNldDxzdHJpbmc+fHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbW9kaWZpZWRGaWxlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgW2ZpbGVOYW1lLCBvbGRWZXJzaW9uXSBvZiB0aGlzLmxhc3RSZWFkUmVzb3VyY2VWZXJzaW9uKSB7XG4gICAgICBpZiAodGhpcy5wcm9qZWN0LmdldFNjcmlwdFZlcnNpb24oZmlsZU5hbWUpICE9PSBvbGRWZXJzaW9uKSB7XG4gICAgICAgIG1vZGlmaWVkRmlsZXMuYWRkKGZpbGVOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1vZGlmaWVkRmlsZXMuc2l6ZSA+IDAgPyBtb2RpZmllZEZpbGVzIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogVXNlZCB0byByZWFkIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG4gKlxuICogQSBsYW5ndWFnZSBzZXJ2aWNlIHBhcnNlIGNvbmZpZ3VyYXRpb24gaG9zdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgYWRhcHRlclxuICogYmVjYXVzZSBzaWduYXR1cmVzIG9mIGNhbGxzIGxpa2UgYEZpbGVTeXN0ZW0jcmVhZEZpbGVgIGFyZSBhIGJpdCBzdHJpY3RlclxuICogdGhhbiB0aG9zZSBvbiB0aGUgYWRhcHRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIExTUGFyc2VDb25maWdIb3N0IGltcGxlbWVudHMgQ29uZmlndXJhdGlvbkhvc3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHNlcnZlckhvc3Q6IHRzLnNlcnZlci5TZXJ2ZXJIb3N0KSB7fVxuICBleGlzdHMocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2ZXJIb3N0LmZpbGVFeGlzdHMocGF0aCkgfHwgdGhpcy5zZXJ2ZXJIb3N0LmRpcmVjdG9yeUV4aXN0cyhwYXRoKTtcbiAgfVxuICByZWFkRmlsZShwYXRoOiBBYnNvbHV0ZUZzUGF0aCk6IHN0cmluZyB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuc2VydmVySG9zdC5yZWFkRmlsZShwYXRoKTtcbiAgICBpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYExhbmd1YWdlU2VydmljZUZTI3JlYWRGaWxlIGNhbGxlZCBvbiB1bmF2YWlsYWJsZSBmaWxlICR7cGF0aH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cbiAgbHN0YXQocGF0aDogQWJzb2x1dGVGc1BhdGgpOiBGaWxlU3RhdHMge1xuICAgIHJldHVybiB7XG4gICAgICBpc0ZpbGU6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmVySG9zdC5maWxlRXhpc3RzKHBhdGgpO1xuICAgICAgfSxcbiAgICAgIGlzRGlyZWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZlckhvc3QuZGlyZWN0b3J5RXhpc3RzKHBhdGgpO1xuICAgICAgfSxcbiAgICAgIGlzU3ltYm9saWNMaW5rOiAoKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTGFuZ3VhZ2VTZXJ2aWNlRlMjbHN0YXQjaXNTeW1ib2xpY0xpbmsgbm90IGltcGxlbWVudGVkYCk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgcHdkKCk6IEFic29sdXRlRnNQYXRoIHtcbiAgICByZXR1cm4gdGhpcy5zZXJ2ZXJIb3N0LmdldEN1cnJlbnREaXJlY3RvcnkoKSBhcyBBYnNvbHV0ZUZzUGF0aDtcbiAgfVxuICBleHRuYW1lKHBhdGg6IEFic29sdXRlRnNQYXRofFBhdGhTZWdtZW50KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcC5leHRuYW1lKHBhdGgpO1xuICB9XG4gIHJlc29sdmUoLi4ucGF0aHM6IHN0cmluZ1tdKTogQWJzb2x1dGVGc1BhdGgge1xuICAgIHJldHVybiBwLnJlc29sdmUoLi4ucGF0aHMpIGFzIEFic29sdXRlRnNQYXRoO1xuICB9XG4gIGRpcm5hbWU8VCBleHRlbmRzIFBhdGhTdHJpbmc+KGZpbGU6IFQpOiBUIHtcbiAgICByZXR1cm4gcC5kaXJuYW1lKGZpbGUpIGFzIFQ7XG4gIH1cbiAgam9pbjxUIGV4dGVuZHMgUGF0aFN0cmluZz4oYmFzZVBhdGg6IFQsIC4uLnBhdGhzOiBzdHJpbmdbXSk6IFQge1xuICAgIHJldHVybiBwLmpvaW4oYmFzZVBhdGgsIC4uLnBhdGhzKSBhcyBUO1xuICB9XG59XG4iXX0=
@@ -100,4 +100,9 @@ export declare class CompletionBuilder<N extends TmplAstNode | AST> {
100
100
  private getElementAttributeCompletionSymbol;
101
101
  private isPipeCompletion;
102
102
  private getPipeCompletions;
103
+ /**
104
+ * From the AST node of the cursor position, include completion of string literals, number
105
+ * literals, `true`, `false`, `null`, and `undefined`.
106
+ */
107
+ private isValidNodeContextCompletion;
103
108
  }