@angular/language-service 9.0.0-rc.6 → 9.0.0

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.
package/src/hover.d.ts CHANGED
@@ -6,21 +6,22 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  /// <amd-module name="@angular/language-service/src/hover" />
9
+ import { NgAnalyzedModules } from '@angular/compiler';
9
10
  import * as ts from 'typescript';
10
11
  import { AstResult } from './common';
11
- import { TypeScriptServiceHost } from './typescript_host';
12
+ import * as ng from './types';
12
13
  /**
13
14
  * Traverse the template AST and look for the symbol located at `position`, then
14
15
  * return the corresponding quick info.
15
16
  * @param info template AST
16
17
  * @param position location of the symbol
17
- * @param host Language Service host to query
18
+ * @param analyzedModules all NgModules in the program.
18
19
  */
19
- export declare function getHover(info: AstResult, position: number, host: Readonly<TypeScriptServiceHost>): ts.QuickInfo | undefined;
20
+ export declare function getTemplateHover(info: AstResult, position: number, analyzedModules: NgAnalyzedModules): ts.QuickInfo | undefined;
20
21
  /**
21
22
  * Get quick info for Angular semantic entities in TypeScript files, like Directives.
22
- * @param sf TypeScript source file an Angular symbol is in
23
23
  * @param position location of the symbol in the source file
24
- * @param host Language Service host to query
24
+ * @param declarations All Directive-like declarations in the source file.
25
+ * @param analyzedModules all NgModules in the program.
25
26
  */
26
- export declare function getTsHover(sf: ts.SourceFile, position: number, host: Readonly<TypeScriptServiceHost>): ts.QuickInfo | undefined;
27
+ export declare function getTsHover(position: number, declarations: ng.Declaration[], analyzedModules: NgAnalyzedModules): ts.QuickInfo | undefined;
package/src/hover.js CHANGED
@@ -11,120 +11,115 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/language-service/src/hover", ["require", "exports", "tslib", "@angular/compiler", "typescript", "@angular/language-service/src/locate_symbol", "@angular/language-service/src/utils"], factory);
14
+ define("@angular/language-service/src/hover", ["require", "exports", "tslib", "typescript", "@angular/language-service/src/locate_symbol", "@angular/language-service/src/utils"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  var tslib_1 = require("tslib");
20
- var compiler_1 = require("@angular/compiler");
21
20
  var ts = require("typescript");
22
21
  var locate_symbol_1 = require("@angular/language-service/src/locate_symbol");
23
22
  var utils_1 = require("@angular/language-service/src/utils");
24
23
  // Reverse mappings of enum would generate strings
25
24
  var SYMBOL_SPACE = ts.SymbolDisplayPartKind[ts.SymbolDisplayPartKind.space];
26
25
  var SYMBOL_PUNC = ts.SymbolDisplayPartKind[ts.SymbolDisplayPartKind.punctuation];
27
- var SYMBOL_CLASS = ts.SymbolDisplayPartKind[ts.SymbolDisplayPartKind.className];
28
26
  var SYMBOL_TEXT = ts.SymbolDisplayPartKind[ts.SymbolDisplayPartKind.text];
27
+ var SYMBOL_INTERFACE = ts.SymbolDisplayPartKind[ts.SymbolDisplayPartKind.interfaceName];
29
28
  /**
30
29
  * Traverse the template AST and look for the symbol located at `position`, then
31
30
  * return the corresponding quick info.
32
31
  * @param info template AST
33
32
  * @param position location of the symbol
34
- * @param host Language Service host to query
33
+ * @param analyzedModules all NgModules in the program.
35
34
  */
36
- function getHover(info, position, host) {
37
- var symbolInfo = locate_symbol_1.locateSymbol(info, position);
35
+ function getTemplateHover(info, position, analyzedModules) {
36
+ var _a, _b, _c;
37
+ var symbolInfo = locate_symbol_1.locateSymbols(info, position)[0];
38
38
  if (!symbolInfo) {
39
39
  return;
40
40
  }
41
- var symbol = symbolInfo.symbol, span = symbolInfo.span, compileTypeSummary = symbolInfo.compileTypeSummary;
42
- var textSpan = { start: span.start, length: span.end - span.start };
43
- if (compileTypeSummary && compileTypeSummary.summaryKind === compiler_1.CompileSummaryKind.Directive) {
44
- return getDirectiveModule(compileTypeSummary.type.reference, textSpan, host);
41
+ var symbol = symbolInfo.symbol, span = symbolInfo.span, staticSymbol = symbolInfo.staticSymbol;
42
+ // The container is either the symbol's container (for example, 'AppComponent'
43
+ // is the container of the symbol 'title' in its template) or the NgModule
44
+ // that the directive belongs to (the container of AppComponent is AppModule).
45
+ var containerName = (_a = symbol.container) === null || _a === void 0 ? void 0 : _a.name;
46
+ if (!containerName && staticSymbol) {
47
+ // If there is a static symbol then the target is a directive.
48
+ var ngModule = analyzedModules.ngModuleByPipeOrDirective.get(staticSymbol);
49
+ containerName = (_b = ngModule) === null || _b === void 0 ? void 0 : _b.type.reference.name;
45
50
  }
46
- var containerDisplayParts = symbol.container ?
47
- [
48
- { text: symbol.container.name, kind: symbol.container.kind },
49
- { text: '.', kind: SYMBOL_PUNC },
50
- ] :
51
- [];
52
- return {
53
- kind: symbol.kind,
54
- kindModifiers: '',
55
- textSpan: textSpan,
56
- // this would generate a string like '(property) ClassX.propY'
57
- // 'kind' in displayParts does not really matter because it's dropped when
58
- // displayParts get converted to string.
59
- displayParts: tslib_1.__spread([
60
- { text: '(', kind: SYMBOL_PUNC }, { text: symbol.kind, kind: symbol.kind },
61
- { text: ')', kind: SYMBOL_PUNC }, { text: ' ', kind: SYMBOL_SPACE }
62
- ], containerDisplayParts, [
63
- { text: symbol.name, kind: symbol.kind },
64
- ]),
65
- };
51
+ return createQuickInfo(symbol.name, symbol.kind, span, containerName, (_c = symbol.type) === null || _c === void 0 ? void 0 : _c.name, symbol.documentation);
66
52
  }
67
- exports.getHover = getHover;
53
+ exports.getTemplateHover = getTemplateHover;
68
54
  /**
69
55
  * Get quick info for Angular semantic entities in TypeScript files, like Directives.
70
- * @param sf TypeScript source file an Angular symbol is in
71
56
  * @param position location of the symbol in the source file
72
- * @param host Language Service host to query
57
+ * @param declarations All Directive-like declarations in the source file.
58
+ * @param analyzedModules all NgModules in the program.
73
59
  */
74
- function getTsHover(sf, position, host) {
75
- var node = utils_1.findTightestNode(sf, position);
76
- if (!node)
77
- return;
78
- switch (node.kind) {
79
- case ts.SyntaxKind.Identifier:
80
- var directiveId = node;
81
- if (ts.isClassDeclaration(directiveId.parent)) {
82
- var directiveName = directiveId.text;
83
- var directiveSymbol = host.getStaticSymbol(node.getSourceFile().fileName, directiveName);
84
- if (!directiveSymbol)
85
- return;
86
- return getDirectiveModule(directiveSymbol, { start: directiveId.getStart(), length: directiveId.end - directiveId.getStart() }, host);
60
+ function getTsHover(position, declarations, analyzedModules) {
61
+ var e_1, _a;
62
+ var _b;
63
+ try {
64
+ for (var declarations_1 = tslib_1.__values(declarations), declarations_1_1 = declarations_1.next(); !declarations_1_1.done; declarations_1_1 = declarations_1.next()) {
65
+ var _c = declarations_1_1.value, declarationSpan = _c.declarationSpan, metadata = _c.metadata;
66
+ if (utils_1.inSpan(position, declarationSpan)) {
67
+ var staticSymbol = metadata.type.reference;
68
+ var directiveName = staticSymbol.name;
69
+ var kind = metadata.isComponent ? 'component' : 'directive';
70
+ var textSpan = ts.createTextSpanFromBounds(declarationSpan.start, declarationSpan.end);
71
+ var ngModule = analyzedModules.ngModuleByPipeOrDirective.get(staticSymbol);
72
+ var moduleName = (_b = ngModule) === null || _b === void 0 ? void 0 : _b.type.reference.name;
73
+ return createQuickInfo(directiveName, kind, textSpan, moduleName, ts.ScriptElementKind.classElement);
87
74
  }
88
- break;
89
- default:
90
- break;
75
+ }
76
+ }
77
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
78
+ finally {
79
+ try {
80
+ if (declarations_1_1 && !declarations_1_1.done && (_a = declarations_1.return)) _a.call(declarations_1);
81
+ }
82
+ finally { if (e_1) throw e_1.error; }
91
83
  }
92
- return undefined;
93
84
  }
94
85
  exports.getTsHover = getTsHover;
95
86
  /**
96
- * Attempts to get quick info for the NgModule a Directive is declared in.
97
- * @param directive identifier on a potential Directive class declaration
98
- * @param host Language Service host to query
87
+ * Construct a QuickInfo object taking into account its container and type.
88
+ * @param name Name of the QuickInfo target
89
+ * @param kind component, directive, pipe, etc.
90
+ * @param textSpan span of the target
91
+ * @param containerName either the Symbol's container or the NgModule that contains the directive
92
+ * @param type user-friendly name of the type
93
+ * @param documentation docstring or comment
99
94
  */
100
- function getDirectiveModule(directive, textSpan, host) {
101
- var analyzedModules = host.getAnalyzedModules(false);
102
- var ngModule = analyzedModules.ngModuleByPipeOrDirective.get(directive);
103
- if (!ngModule)
104
- return;
105
- var isComponent = host.getDeclarations(directive.filePath)
106
- .find(function (decl) { return decl.type === directive && decl.metadata && decl.metadata.isComponent; });
107
- var moduleName = ngModule.type.reference.name;
95
+ function createQuickInfo(name, kind, textSpan, containerName, type, documentation) {
96
+ var containerDisplayParts = containerName ?
97
+ [
98
+ { text: containerName, kind: SYMBOL_INTERFACE },
99
+ { text: '.', kind: SYMBOL_PUNC },
100
+ ] :
101
+ [];
102
+ var typeDisplayParts = type ?
103
+ [
104
+ { text: ':', kind: SYMBOL_PUNC },
105
+ { text: ' ', kind: SYMBOL_SPACE },
106
+ { text: type, kind: SYMBOL_INTERFACE },
107
+ ] :
108
+ [];
108
109
  return {
109
- kind: ts.ScriptElementKind.classElement,
110
+ kind: kind,
110
111
  kindModifiers: ts.ScriptElementKindModifier.none,
111
112
  textSpan: textSpan,
112
- // This generates a string like '(directive) NgModule.Directive: class'
113
- // 'kind' in displayParts does not really matter because it's dropped when
114
- // displayParts get converted to string.
115
- displayParts: [
113
+ displayParts: tslib_1.__spread([
116
114
  { text: '(', kind: SYMBOL_PUNC },
117
- { text: isComponent ? 'component' : 'directive', kind: SYMBOL_TEXT },
115
+ { text: kind, kind: SYMBOL_TEXT },
118
116
  { text: ')', kind: SYMBOL_PUNC },
119
- { text: ' ', kind: SYMBOL_SPACE },
120
- { text: moduleName, kind: SYMBOL_CLASS },
121
- { text: '.', kind: SYMBOL_PUNC },
122
- { text: directive.name, kind: SYMBOL_CLASS },
123
- { text: ':', kind: SYMBOL_PUNC },
124
- { text: ' ', kind: SYMBOL_SPACE },
125
- { text: ts.ScriptElementKind.classElement, kind: SYMBOL_TEXT },
126
- ],
117
+ { text: ' ', kind: SYMBOL_SPACE }
118
+ ], containerDisplayParts, [
119
+ { text: name, kind: SYMBOL_INTERFACE }
120
+ ], typeDisplayParts),
121
+ documentation: documentation,
127
122
  };
128
123
  }
129
124
  });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL3NyYy9ob3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFFSCw4Q0FBbUU7SUFDbkUsK0JBQWlDO0lBRWpDLDZFQUE2QztJQUU3Qyw2REFBeUM7SUFFekMsa0RBQWtEO0lBQ2xELElBQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUUsSUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRixJQUFNLFlBQVksR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xGLElBQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUU7Ozs7OztPQU1HO0lBQ0gsU0FBZ0IsUUFBUSxDQUFDLElBQWUsRUFBRSxRQUFnQixFQUFFLElBQXFDO1FBRS9GLElBQU0sVUFBVSxHQUFHLDRCQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixPQUFPO1NBQ1I7UUFDTSxJQUFBLDBCQUFNLEVBQUUsc0JBQUksRUFBRSxrREFBa0IsQ0FBZTtRQUN0RCxJQUFNLFFBQVEsR0FBRyxFQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUMsQ0FBQztRQUVwRSxJQUFJLGtCQUFrQixJQUFJLGtCQUFrQixD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QixFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUM7YUFDN0Q7U0FDRixDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtDb21waWxlU3VtbWFyeUtpbmQsIFN0YXRpY1N5bWJvbH0gZnJvbSAnQGFuZ3VsYXIvY29tcGlsZXInO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge0FzdFJlc3VsdH0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtsb2NhdGVTeW1ib2x9IGZyb20gJy4vbG9jYXRlX3N5bWJvbCc7XG5pbXBvcnQge1R5cGVTY3JpcHRTZXJ2aWNlSG9zdH0gZnJvbSAnLi90eXBlc2NyaXB0X2hvc3QnO1xuaW1wb3J0IHtmaW5kVGlnaHRlc3ROb2RlfSBmcm9tICcuL3V0aWxzJztcblxuLy8gUmV2ZXJzZSBtYXBwaW5ncyBvZiBlbnVtIHdvdWxkIGdlbmVyYXRlIHN0cmluZ3NcbmNvbnN0IFNZTUJPTF9TUEFDRSA9IHRzLlN5bWJvbERpc3BsYXlQYXJ0S2luZFt0cy5TeW1ib2xEaXNwbGF5UGFydEtpbmQuc3BhY2VdO1xuY29uc3QgU1lNQk9MX1BVTkMgPSB0cy5TeW1ib2xEaXNwbGF5UGFydEtpbmRbdHMuU3ltYm9sRGlzcGxheVBhcnRLaW5kLnB1bmN0dWF0aW9uXTtcbmNvbnN0IFNZTUJPTF9DTEFTUyA9IHRzLlN5bWJvbERpc3BsYXlQYXJ0S2luZFt0cy5TeW1ib2xEaXNwbGF5UGFydEtpbmQuY2xhc3NOYW1lXTtcbmNvbnN0IFNZTUJPTF9URVhUID0gdHMuU3ltYm9sRGlzcGxheVBhcnRLaW5kW3RzLlN5bWJvbERpc3BsYXlQYXJ0S2luZC50ZXh0XTtcblxuLyoqXG4gKiBUcmF2ZXJzZSB0aGUgdGVtcGxhdGUgQVNUIGFuZCBsb29rIGZvciB0aGUgc3ltYm9sIGxvY2F0ZWQgYXQgYHBvc2l0aW9uYCwgdGhlblxuICogcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHF1aWNrIGluZm8uXG4gKiBAcGFyYW0gaW5mbyB0ZW1wbGF0ZSBBU1RcbiAqIEBwYXJhbSBwb3NpdGlvbiBsb2NhdGlvbiBvZiB0aGUgc3ltYm9sXG4gKiBAcGFyYW0gaG9zdCBMYW5ndWFnZSBTZXJ2aWNlIGhvc3QgdG8gcXVlcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhvdmVyKGluZm86IEFzdFJlc3VsdCwgcG9zaXRpb246IG51bWJlciwgaG9zdDogUmVhZG9ubHk8VHlwZVNjcmlwdFNlcnZpY2VIb3N0Pik6XG4gICAgdHMuUXVpY2tJbmZvfHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN5bWJvbEluZm8gPSBsb2NhdGVTeW1ib2woaW5mbywgcG9zaXRpb24pO1xuICBpZiAoIXN5bWJvbEluZm8pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qge3N5bWJvbCwgc3BhbiwgY29tcGlsZVR5cGVTdW1tYXJ5fSA9IHN5bWJvbEluZm87XG4gIGNvbnN0IHRleHRTcGFuID0ge3N0YXJ0OiBzcGFuLnN0YXJ0LCBsZW5ndGg6IHNwYW4uZW5kIC0gc3Bhbi5zdGFydH07XG5cbiAgaWYgKGNvbXBpbGVUeXBlU3VtbWFyeSAmJiBjb21waWxlVHlwZVN1bW1hcnkuc3VtbWFyeUtpbmQgPT09IENvbXBpbGVTdW1tYXJ5S2luZC5EaXJlY3RpdmUpIHtcbiAgICByZXR1cm4gZ2V0RGlyZWN0aXZlTW9kdWxlKGNvbXBpbGVUeXBlU3VtbWFyeS50eXBlLnJlZmVyZW5jZSwgdGV4dFNwYW4sIGhvc3QpO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyRGlzcGxheVBhcnRzOiB0cy5TeW1ib2xEaXNwbGF5UGFydFtdID0gc3ltYm9sLmNvbnRhaW5lciA/XG4gICAgICBbXG4gICAgICAgIHt0ZXh0OiBzeW1ib2wuY29udGFpbmVyLm5hbWUsIGtpbmQ6IHN5bWJvbC5jb250YWluZXIua2luZH0sXG4gICAgICAgIHt0ZXh0OiAnLicsIGtpbmQ6IFNZTUJPTF9QVU5DfSxcbiAgICAgIF0gOlxuICAgICAgW107XG4gIHJldHVybiB7XG4gICAga2luZDogc3ltYm9sLmtpbmQgYXMgdHMuU2NyaXB0RWxlbWVudEtpbmQsXG4gICAga2luZE1vZGlmaWVyczogJycsICAvLyBraW5kTW9kaWZpZXIgaW5mbyBub3QgYXZhaWxhYmxlIG9uICduZy5TeW1ib2wnXG4gICAgdGV4dFNwYW4sXG4gICAgLy8gdGhpcyB3b3VsZCBnZW5lcmF0ZSBhIHN0cmluZyBsaWtlICcocHJvcGVydHkpIENsYXNzWC5wcm9wWSdcbiAgICAvLyAna2luZCcgaW4gZGlzcGxheVBhcnRzIGRvZXMgbm90IHJlYWxseSBtYXR0ZXIgYmVjYXVzZSBpdCdzIGRyb3BwZWQgd2hlblxuICAgIC8vIGRpc3BsYXlQYXJ0cyBnZXQgY29udmVydGVkIHRvIHN0cmluZy5cbiAgICBkaXNwbGF5UGFydHM6IFtcbiAgICAgIHt0ZXh0OiAnKCcsIGtpbmQ6IFNZTUJPTF9QVU5DfSwge3RleHQ6IHN5bWJvbC5raW5kLCBraW5kOiBzeW1ib2wua2luZH0sXG4gICAgICB7dGV4dDogJyknLCBraW5kOiBTWU1CT0xfUFVOQ30sIHt0ZXh0OiAnICcsIGtpbmQ6IFNZTUJPTF9TUEFDRX0sIC4uLmNvbnRhaW5lckRpc3BsYXlQYXJ0cyxcbiAgICAgIHt0ZXh0OiBzeW1ib2wubmFtZSwga2luZDogc3ltYm9sLmtpbmR9LFxuICAgICAgLy8gVE9ETzogQXBwZW5kIHR5cGUgaW5mbyBhcyB3ZWxsLCBidXQgU3ltYm9sIGRvZXNuJ3QgZXhwb3NlIHRoYXQhXG4gICAgICAvLyBJZGVhbGx5IGhvdmVyIHRleHQgc2hvdWxkIGJlIGxpa2UgJyhwcm9wZXJ0eSkgQ2xhc3NYLnByb3BZOiBzdHJpbmcnXG4gICAgXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZXQgcXVpY2sgaW5mbyBmb3IgQW5ndWxhciBzZW1hbnRpYyBlbnRpdGllcyBpbiBUeXBlU2NyaXB0IGZpbGVzLCBsaWtlIERpcmVjdGl2ZXMuXG4gKiBAcGFyYW0gc2YgVHlwZVNjcmlwdCBzb3VyY2UgZmlsZSBhbiBBbmd1bGFyIHN5bWJvbCBpcyBpblxuICogQHBhcmFtIHBvc2l0aW9uIGxvY2F0aW9uIG9mIHRoZSBzeW1ib2wgaW4gdGhlIHNvdXJjZSBmaWxlXG4gKiBAcGFyYW0gaG9zdCBMYW5ndWFnZSBTZXJ2aWNlIGhvc3QgdG8gcXVlcnlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRzSG92ZXIoXG4gICAgc2Y6IHRzLlNvdXJjZUZpbGUsIHBvc2l0aW9uOiBudW1iZXIsIGhvc3Q6IFJlYWRvbmx5PFR5cGVTY3JpcHRTZXJ2aWNlSG9zdD4pOiB0cy5RdWlja0luZm98XG4gICAgdW5kZWZpbmVkIHtcbiAgY29uc3Qgbm9kZSA9IGZpbmRUaWdodGVzdE5vZGUoc2YsIHBvc2l0aW9uKTtcbiAgaWYgKCFub2RlKSByZXR1cm47XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXI6XG4gICAgICBjb25zdCBkaXJlY3RpdmVJZCA9IG5vZGUgYXMgdHMuSWRlbnRpZmllcjtcbiAgICAgIGlmICh0cy5pc0NsYXNzRGVjbGFyYXRpb24oZGlyZWN0aXZlSWQucGFyZW50KSkge1xuICAgICAgICBjb25zdCBkaXJlY3RpdmVOYW1lID0gZGlyZWN0aXZlSWQudGV4dDtcbiAgICAgICAgY29uc3QgZGlyZWN0aXZlU3ltYm9sID0gaG9zdC5nZXRTdGF0aWNTeW1ib2wobm9kZS5nZXRTb3VyY2VGaWxlKCkuZmlsZU5hbWUsIGRpcmVjdGl2ZU5hbWUpO1xuICAgICAgICBpZiAoIWRpcmVjdGl2ZVN5bWJvbCkgcmV0dXJuO1xuICAgICAgICByZXR1cm4gZ2V0RGlyZWN0aXZlTW9kdWxlKFxuICAgICAgICAgICAgZGlyZWN0aXZlU3ltYm9sLFxuICAgICAgICAgICAge3N0YXJ0OiBkaXJlY3RpdmVJZC5nZXRTdGFydCgpLCBsZW5ndGg6IGRpcmVjdGl2ZUlkLmVuZCAtIGRpcmVjdGl2ZUlkLmdldFN0YXJ0KCl9LFxuICAgICAgICAgICAgaG9zdCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBnZXQgcXVpY2sgaW5mbyBmb3IgdGhlIE5nTW9kdWxlIGEgRGlyZWN0aXZlIGlzIGRlY2xhcmVkIGluLlxuICogQHBhcmFtIGRpcmVjdGl2ZSBpZGVudGlmaWVyIG9uIGEgcG90ZW50aWFsIERpcmVjdGl2ZSBjbGFzcyBkZWNsYXJhdGlvblxuICogQHBhcmFtIGhvc3QgTGFuZ3VhZ2UgU2VydmljZSBob3N0IHRvIHF1ZXJ5XG4gKi9cbmZ1bmN0aW9uIGdldERpcmVjdGl2ZU1vZHVsZShcbiAgICBkaXJlY3RpdmU6IFN0YXRpY1N5bWJvbCwgdGV4dFNwYW46IHRzLlRleHRTcGFuLFxuICAgIGhvc3Q6IFJlYWRvbmx5PFR5cGVTY3JpcHRTZXJ2aWNlSG9zdD4pOiB0cy5RdWlja0luZm98dW5kZWZpbmVkIHtcbiAgY29uc3QgYW5hbHl6ZWRNb2R1bGVzID0gaG9zdC5nZXRBbmFseXplZE1vZHVsZXMoZmFsc2UpO1xuICBjb25zdCBuZ01vZHVsZSA9IGFuYWx5emVkTW9kdWxlcy5uZ01vZHVsZUJ5UGlwZU9yRGlyZWN0aXZlLmdldChkaXJlY3RpdmUpO1xuICBpZiAoIW5nTW9kdWxlKSByZXR1cm47XG5cbiAgY29uc3QgaXNDb21wb25lbnQgPVxuICAgICAgaG9zdC5nZXREZWNsYXJhdGlvbnMoZGlyZWN0aXZlLmZpbGVQYXRoKVxuICAgICAgICAgIC5maW5kKGRlY2wgPT4gZGVjbC50eXBlID09PSBkaXJlY3RpdmUgJiYgZGVjbC5tZXRhZGF0YSAmJiBkZWNsLm1ldGFkYXRhLmlzQ29tcG9uZW50KTtcblxuICBjb25zdCBtb2R1bGVOYW1lID0gbmdNb2R1bGUudHlwZS5yZWZlcmVuY2UubmFtZTtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiB0cy5TY3JpcHRFbGVtZW50S2luZC5jbGFzc0VsZW1lbnQsXG4gICAga2luZE1vZGlmaWVyczpcbiAgICAgICAgdHMuU2NyaXB0RWxlbWVudEtpbmRNb2RpZmllci5ub25lLCAgLy8ga2luZE1vZGlmaWVyIGluZm8gbm90IGF2YWlsYWJsZSBvbiAnbmcuU3ltYm9sJ1xuICAgIHRleHRTcGFuLFxuICAgIC8vIFRoaXMgZ2VuZXJhdGVzIGEgc3RyaW5nIGxpa2UgJyhkaXJlY3RpdmUpIE5nTW9kdWxlLkRpcmVjdGl2ZTogY2xhc3MnXG4gICAgLy8gJ2tpbmQnIGluIGRpc3BsYXlQYXJ0cyBkb2VzIG5vdCByZWFsbHkgbWF0dGVyIGJlY2F1c2UgaXQncyBkcm9wcGVkIHdoZW5cbiAgICAvLyBkaXNwbGF5UGFydHMgZ2V0IGNvbnZlcnRlZCB0byBzdHJpbmcuXG4gICAgZGlzcGxheVBhcnRzOiBbXG4gICAgICB7dGV4dDogJygnLCBraW5kOiBTWU1CT0xfUFVOQ30sXG4gICAgICB7dGV4dDogaXNDb21wb25lbnQgPyAnY29tcG9uZW50JyA6ICdkaXJlY3RpdmUnLCBraW5kOiBTWU1CT0xfVEVYVH0sXG4gICAgICB7dGV4dDogJyknLCBraW5kOiBTWU1CT0xfUFVOQ30sXG4gICAgICB7dGV4dDogJyAnLCBraW5kOiBTWU1CT0xfU1BBQ0V9LFxuICAgICAge3RleHQ6IG1vZHVsZU5hbWUsIGtpbmQ6IFNZTUJPTF9DTEFTU30sXG4gICAgICB7dGV4dDogJy4nLCBraW5kOiBTWU1CT0xfUFVOQ30sXG4gICAgICB7dGV4dDogZGlyZWN0aXZlLm5hbWUsIGtpbmQ6IFNZTUJPTF9DTEFTU30sXG4gICAgICB7dGV4dDogJzonLCBraW5kOiBTWU1CT0xfUFVOQ30sXG4gICAgICB7dGV4dDogJyAnLCBraW5kOiBTWU1CT0xfU1BBQ0V9LFxuICAgICAge3RleHQ6IHRzLlNjcmlwdEVsZW1lbnRLaW5kLmNsYXNzRWxlbWVudCwga2luZDogU1lNQk9MX1RFWFR9LFxuICAgIF0sXG4gIH07XG59XG4iXX0=
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9sYW5ndWFnZS1zZXJ2aWNlL3NyYy9ob3Zlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFHSCwrQkFBaUM7SUFFakMsNkVBQThDO0lBRTlDLDZEQUErQjtJQUUvQixrREFBa0Q7SUFDbEQsSUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RSxJQUFNLFdBQVcsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ25GLElBQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUUsSUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTFGOzs7Ozs7T0FNRztJQUNILFNBQWdCLGdCQUFnQixDQUM1QixJQUFlLEVBQUUsUUFBZ0IsRUFBRSxlQUFrQzs7UUFDdkUsSUFBTSxVQUFVLEdBQUcsNkJBQWEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNmLE9BQU87U0FDUjtRQUNNLElBQUEsMEJBQU0sRUFBRSxzQkFBSSxFQUFFLHNDQUFZLENBQWU7UUFFaEQsOEVBQThFO1FBQzlFLDBFQUEwRTtRQUMxRSw4RUFBOEU7UUFDOUUsSUFBSSxhQUFhLFNBQXFCLE1BQU0sQ0FBQyxTQUFTLDBDQUFHLElBQUksQ0FBQztRQUM5RCxJQUFJLENBQUMsYUFBYSxJQUFJLFlBQVksRUFBRTtZQUNsQyw4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QUUsV0FBVyxFQUFDO2dCQUM5QixFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBQztlQUM1QixxQkFBcUI7Z0JBQ3hCLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUM7ZUFDakMsZ0JBQWdCLENBQ3BCO1lBQ0QsYUFBYSxlQUFBO1NBQ2QsQ0FBQztJQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7TmdBbmFseXplZE1vZHVsZXN9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuaW1wb3J0IHtBc3RSZXN1bHR9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7bG9jYXRlU3ltYm9sc30gZnJvbSAnLi9sb2NhdGVfc3ltYm9sJztcbmltcG9ydCAqIGFzIG5nIGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtpblNwYW59IGZyb20gJy4vdXRpbHMnO1xuXG4vLyBSZXZlcnNlIG1hcHBpbmdzIG9mIGVudW0gd291bGQgZ2VuZXJhdGUgc3RyaW5nc1xuY29uc3QgU1lNQk9MX1NQQUNFID0gdHMuU3ltYm9sRGlzcGxheVBhcnRLaW5kW3RzLlN5bWJvbERpc3BsYXlQYXJ0S2luZC5zcGFjZV07XG5jb25zdCBTWU1CT0xfUFVOQyA9IHRzLlN5bWJvbERpc3BsYXlQYXJ0S2luZFt0cy5TeW1ib2xEaXNwbGF5UGFydEtpbmQucHVuY3R1YXRpb25dO1xuY29uc3QgU1lNQk9MX1RFWFQgPSB0cy5TeW1ib2xEaXNwbGF5UGFydEtpbmRbdHMuU3ltYm9sRGlzcGxheVBhcnRLaW5kLnRleHRdO1xuY29uc3QgU1lNQk9MX0lOVEVSRkFDRSA9IHRzLlN5bWJvbERpc3BsYXlQYXJ0S2luZFt0cy5TeW1ib2xEaXNwbGF5UGFydEtpbmQuaW50ZXJmYWNlTmFtZV07XG5cbi8qKlxuICogVHJhdmVyc2UgdGhlIHRlbXBsYXRlIEFTVCBhbmQgbG9vayBmb3IgdGhlIHN5bWJvbCBsb2NhdGVkIGF0IGBwb3NpdGlvbmAsIHRoZW5cbiAqIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBxdWljayBpbmZvLlxuICogQHBhcmFtIGluZm8gdGVtcGxhdGUgQVNUXG4gKiBAcGFyYW0gcG9zaXRpb24gbG9jYXRpb24gb2YgdGhlIHN5bWJvbFxuICogQHBhcmFtIGFuYWx5emVkTW9kdWxlcyBhbGwgTmdNb2R1bGVzIGluIHRoZSBwcm9ncmFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVIb3ZlcihcbiAgICBpbmZvOiBBc3RSZXN1bHQsIHBvc2l0aW9uOiBudW1iZXIsIGFuYWx5emVkTW9kdWxlczogTmdBbmFseXplZE1vZHVsZXMpOiB0cy5RdWlja0luZm98dW5kZWZpbmVkIHtcbiAgY29uc3Qgc3ltYm9sSW5mbyA9IGxvY2F0ZVN5bWJvbHMoaW5mbywgcG9zaXRpb24pWzBdO1xuICBpZiAoIXN5bWJvbEluZm8pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qge3N5bWJvbCwgc3Bhbiwgc3RhdGljU3ltYm9sfSA9IHN5bWJvbEluZm87XG5cbiAgLy8gVGhlIGNvbnRhaW5lciBpcyBlaXRoZXIgdGhlIHN5bWJvbCdzIGNvbnRhaW5lciAoZm9yIGV4YW1wbGUsICdBcHBDb21wb25lbnQnXG4gIC8vIGlzIHRoZSBjb250YWluZXIgb2YgdGhlIHN5bWJvbCAndGl0bGUnIGluIGl0cyB0ZW1wbGF0ZSkgb3IgdGhlIE5nTW9kdWxlXG4gIC8vIHRoYXQgdGhlIGRpcmVjdGl2ZSBiZWxvbmdzIHRvICh0aGUgY29udGFpbmVyIG9mIEFwcENvbXBvbmVudCBpcyBBcHBNb2R1bGUpLlxuICBsZXQgY29udGFpbmVyTmFtZTogc3RyaW5nfHVuZGVmaW5lZCA9IHN5bWJvbC5jb250YWluZXIgPy5uYW1lO1xuICBpZiAoIWNvbnRhaW5lck5hbWUgJiYgc3RhdGljU3ltYm9sKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgYSBzdGF0aWMgc3ltYm9sIHRoZW4gdGhlIHRhcmdldCBpcyBhIGRpcmVjdGl2ZS5cbiAgICBjb25zdCBuZ01vZHVsZSA9IGFuYWx5emVkTW9kdWxlcy5uZ01vZHVsZUJ5UGlwZU9yRGlyZWN0aXZlLmdldChzdGF0aWNTeW1ib2wpO1xuICAgIGNvbnRhaW5lck5hbWUgPSBuZ01vZHVsZSA/LnR5cGUucmVmZXJlbmNlLm5hbWU7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUXVpY2tJbmZvKHN5bWJvbC5uYW1lLCBzeW1ib2wua2luZCwgc3BhbiwgY29udGFpbmVyTmFtZSwgc3ltYm9sLnR5cGU/Lm5hbWUsIHN5bWJvbC5kb2N1bWVudGF0aW9uKTtcbn1cblxuLyoqXG4gKiBHZXQgcXVpY2sgaW5mbyBmb3IgQW5ndWxhciBzZW1hbnRpYyBlbnRpdGllcyBpbiBUeXBlU2NyaXB0IGZpbGVzLCBsaWtlIERpcmVjdGl2ZXMuXG4gKiBAcGFyYW0gcG9zaXRpb24gbG9jYXRpb24gb2YgdGhlIHN5bWJvbCBpbiB0aGUgc291cmNlIGZpbGVcbiAqIEBwYXJhbSBkZWNsYXJhdGlvbnMgQWxsIERpcmVjdGl2ZS1saWtlIGRlY2xhcmF0aW9ucyBpbiB0aGUgc291cmNlIGZpbGUuXG4gKiBAcGFyYW0gYW5hbHl6ZWRNb2R1bGVzIGFsbCBOZ01vZHVsZXMgaW4gdGhlIHByb2dyYW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUc0hvdmVyKFxuICAgIHBvc2l0aW9uOiBudW1iZXIsIGRlY2xhcmF0aW9uczogbmcuRGVjbGFyYXRpb25bXSxcbiAgICBhbmFseXplZE1vZHVsZXM6IE5nQW5hbHl6ZWRNb2R1bGVzKTogdHMuUXVpY2tJbmZvfHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qge2RlY2xhcmF0aW9uU3BhbiwgbWV0YWRhdGF9IG9mIGRlY2xhcmF0aW9ucykge1xuICAgIGlmIChpblNwYW4ocG9zaXRpb24sIGRlY2xhcmF0aW9uU3BhbikpIHtcbiAgICAgIGNvbnN0IHN0YXRpY1N5bWJvbDogbmcuU3RhdGljU3ltYm9sID0gbWV0YWRhdGEudHlwZS5yZWZlcmVuY2U7XG4gICAgICBjb25zdCBkaXJlY3RpdmVOYW1lID0gc3RhdGljU3ltYm9sLm5hbWU7XG4gICAgICBjb25zdCBraW5kID0gbWV0YWRhdGEuaXNDb21wb25lbnQgPyAnY29tcG9uZW50JyA6ICdkaXJlY3RpdmUnO1xuICAgICAgY29uc3QgdGV4dFNwYW4gPSB0cy5jcmVhdGVUZXh0U3BhbkZyb21Cb3VuZHMoZGVjbGFyYXRpb25TcGFuLnN0YXJ0LCBkZWNsYXJhdGlvblNwYW4uZW5kKTtcbiAgICAgIGNvbnN0IG5nTW9kdWxlID0gYW5hbHl6ZWRNb2R1bGVzLm5nTW9kdWxlQnlQaXBlT3JEaXJlY3RpdmUuZ2V0KHN0YXRpY1N5bWJvbCk7XG4gICAgICBjb25zdCBtb2R1bGVOYW1lID0gbmdNb2R1bGUgPy50eXBlLnJlZmVyZW5jZS5uYW1lO1xuICAgICAgcmV0dXJuIGNyZWF0ZVF1aWNrSW5mbyhcbiAgICAgICAgICBkaXJlY3RpdmVOYW1lLCBraW5kLCB0ZXh0U3BhbiwgbW9kdWxlTmFtZSwgdHMuU2NyaXB0RWxlbWVudEtpbmQuY2xhc3NFbGVtZW50KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgYSBRdWlja0luZm8gb2JqZWN0IHRha2luZyBpbnRvIGFjY291bnQgaXRzIGNvbnRhaW5lciBhbmQgdHlwZS5cbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIFF1aWNrSW5mbyB0YXJnZXRcbiAqIEBwYXJhbSBraW5kIGNvbXBvbmVudCwgZGlyZWN0aXZlLCBwaXBlLCBldGMuXG4gKiBAcGFyYW0gdGV4dFNwYW4gc3BhbiBvZiB0aGUgdGFyZ2V0XG4gKiBAcGFyYW0gY29udGFpbmVyTmFtZSBlaXRoZXIgdGhlIFN5bWJvbCdzIGNvbnRhaW5lciBvciB0aGUgTmdNb2R1bGUgdGhhdCBjb250YWlucyB0aGUgZGlyZWN0aXZlXG4gKiBAcGFyYW0gdHlwZSB1c2VyLWZyaWVuZGx5IG5hbWUgb2YgdGhlIHR5cGVcbiAqIEBwYXJhbSBkb2N1bWVudGF0aW9uIGRvY3N0cmluZyBvciBjb21tZW50XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVF1aWNrSW5mbyhcbiAgICBuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZywgdGV4dFNwYW46IHRzLlRleHRTcGFuLCBjb250YWluZXJOYW1lPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nLFxuICAgIGRvY3VtZW50YXRpb24/OiB0cy5TeW1ib2xEaXNwbGF5UGFydFtdKTogdHMuUXVpY2tJbmZvIHtcbiAgY29uc3QgY29udGFpbmVyRGlzcGxheVBhcnRzID0gY29udGFpbmVyTmFtZSA/XG4gICAgICBbXG4gICAgICAgIHt0ZXh0OiBjb250YWluZXJOYW1lLCBraW5kOiBTWU1CT0xfSU5URVJGQUNFfSxcbiAgICAgICAge3RleHQ6ICcuJywga2luZDogU1lNQk9MX1BVTkN9LFxuICAgICAgXSA6XG4gICAgICBbXTtcblxuICBjb25zdCB0eXBlRGlzcGxheVBhcnRzID0gdHlwZSA/XG4gICAgICBbXG4gICAgICAgIHt0ZXh0OiAnOicsIGtpbmQ6IFNZTUJPTF9QVU5DfSxcbiAgICAgICAge3RleHQ6ICcgJywga2luZDogU1lNQk9MX1NQQUNFfSxcbiAgICAgICAge3RleHQ6IHR5cGUsIGtpbmQ6IFNZTUJPTF9JTlRFUkZBQ0V9LFxuICAgICAgXSA6XG4gICAgICBbXTtcblxuICByZXR1cm4ge1xuICAgIGtpbmQ6IGtpbmQgYXMgdHMuU2NyaXB0RWxlbWVudEtpbmQsXG4gICAga2luZE1vZGlmaWVyczogdHMuU2NyaXB0RWxlbWVudEtpbmRNb2RpZmllci5ub25lLFxuICAgIHRleHRTcGFuOiB0ZXh0U3BhbixcbiAgICBkaXNwbGF5UGFydHM6IFtcbiAgICAgIHt0ZXh0OiAnKCcsIGtpbmQ6IFNZTUJPTF9QVU5DfSxcbiAgICAgIHt0ZXh0OiBraW5kLCBraW5kOiBTWU1CT0xfVEVYVH0sXG4gICAgICB7dGV4dDogJyknLCBraW5kOiBTWU1CT0xfUFVOQ30sXG4gICAgICB7dGV4dDogJyAnLCBraW5kOiBTWU1CT0xfU1BBQ0V9LFxuICAgICAgLi4uY29udGFpbmVyRGlzcGxheVBhcnRzLFxuICAgICAge3RleHQ6IG5hbWUsIGtpbmQ6IFNZTUJPTF9JTlRFUkZBQ0V9LFxuICAgICAgLi4udHlwZURpc3BsYXlQYXJ0cyxcbiAgICBdLFxuICAgIGRvY3VtZW50YXRpb24sXG4gIH07XG59XG4iXX0=
@@ -21,7 +21,7 @@ export declare class SchemaInformation {
21
21
  propertiesOf(elementName: string): string[];
22
22
  typeOf(elementName: string, property: string): string;
23
23
  private static _instance;
24
- static readonly instance: SchemaInformation;
24
+ static get instance(): SchemaInformation;
25
25
  }
26
26
  export declare function eventNames(elementName: string): string[];
27
27
  export declare function propertyNames(elementName: string): string[];
@@ -6,11 +6,21 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  /// <amd-module name="@angular/language-service/src/language_service" />
9
- import { LanguageService } from './types';
9
+ import * as tss from 'typescript/lib/tsserverlibrary';
10
+ import * as ng from './types';
10
11
  import { TypeScriptServiceHost } from './typescript_host';
11
12
  /**
12
13
  * Create an instance of an Angular `LanguageService`.
13
14
  *
14
15
  * @publicApi
15
16
  */
16
- export declare function createLanguageService(host: TypeScriptServiceHost): LanguageService;
17
+ export declare function createLanguageService(host: TypeScriptServiceHost): LanguageServiceImpl;
18
+ declare class LanguageServiceImpl implements ng.LanguageService {
19
+ private readonly host;
20
+ constructor(host: TypeScriptServiceHost);
21
+ getSemanticDiagnostics(fileName: string): tss.Diagnostic[];
22
+ getCompletionsAtPosition(fileName: string, position: number, options?: tss.GetCompletionsAtPositionOptions): tss.CompletionInfo | undefined;
23
+ getDefinitionAndBoundSpan(fileName: string, position: number): tss.DefinitionInfoAndBoundSpan | undefined;
24
+ getQuickInfoAtPosition(fileName: string, position: number): tss.QuickInfo | undefined;
25
+ }
26
+ export {};
@@ -11,12 +11,13 @@
11
11
  if (v !== undefined) module.exports = v;
12
12
  }
13
13
  else if (typeof define === "function" && define.amd) {
14
- define("@angular/language-service/src/language_service", ["require", "exports", "tslib", "@angular/language-service/src/completions", "@angular/language-service/src/definitions", "@angular/language-service/src/diagnostics", "@angular/language-service/src/hover"], factory);
14
+ define("@angular/language-service/src/language_service", ["require", "exports", "tslib", "typescript/lib/tsserverlibrary", "@angular/language-service/src/completions", "@angular/language-service/src/definitions", "@angular/language-service/src/diagnostics", "@angular/language-service/src/hover"], factory);
15
15
  }
16
16
  })(function (require, exports) {
17
17
  "use strict";
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  var tslib_1 = require("tslib");
20
+ var tss = require("typescript/lib/tsserverlibrary");
20
21
  var completions_1 = require("@angular/language-service/src/completions");
21
22
  var definitions_1 = require("@angular/language-service/src/definitions");
22
23
  var diagnostics_1 = require("@angular/language-service/src/diagnostics");
@@ -34,17 +35,17 @@
34
35
  function LanguageServiceImpl(host) {
35
36
  this.host = host;
36
37
  }
37
- LanguageServiceImpl.prototype.getDiagnostics = function (fileName) {
38
+ LanguageServiceImpl.prototype.getSemanticDiagnostics = function (fileName) {
38
39
  var e_1, _a;
39
40
  var analyzedModules = this.host.getAnalyzedModules(); // same role as 'synchronizeHostData'
40
- var results = [];
41
+ var ngDiagnostics = [];
41
42
  var templates = this.host.getTemplates(fileName);
42
43
  try {
43
44
  for (var templates_1 = tslib_1.__values(templates), templates_1_1 = templates_1.next(); !templates_1_1.done; templates_1_1 = templates_1.next()) {
44
45
  var template = templates_1_1.value;
45
46
  var ast = this.host.getTemplateAst(template);
46
47
  if (ast) {
47
- results.push.apply(results, tslib_1.__spread(diagnostics_1.getTemplateDiagnostics(ast)));
48
+ ngDiagnostics.push.apply(ngDiagnostics, tslib_1.__spread(diagnostics_1.getTemplateDiagnostics(ast)));
48
49
  }
49
50
  }
50
51
  }
@@ -56,13 +57,12 @@
56
57
  finally { if (e_1) throw e_1.error; }
57
58
  }
58
59
  var declarations = this.host.getDeclarations(fileName);
59
- if (declarations && declarations.length) {
60
- results.push.apply(results, tslib_1.__spread(diagnostics_1.getDeclarationDiagnostics(declarations, analyzedModules, this.host)));
61
- }
60
+ ngDiagnostics.push.apply(ngDiagnostics, tslib_1.__spread(diagnostics_1.getDeclarationDiagnostics(declarations, analyzedModules, this.host)));
62
61
  var sourceFile = fileName.endsWith('.ts') ? this.host.getSourceFile(fileName) : undefined;
63
- return diagnostics_1.uniqueBySpan(results).map(function (d) { return diagnostics_1.ngDiagnosticToTsDiagnostic(d, sourceFile); });
62
+ var tsDiagnostics = ngDiagnostics.map(function (d) { return diagnostics_1.ngDiagnosticToTsDiagnostic(d, sourceFile); });
63
+ return tslib_1.__spread(tss.sortAndDeduplicateDiagnostics(tsDiagnostics));
64
64
  };
65
- LanguageServiceImpl.prototype.getCompletionsAt = function (fileName, position) {
65
+ LanguageServiceImpl.prototype.getCompletionsAtPosition = function (fileName, position, options) {
66
66
  this.host.getAnalyzedModules(); // same role as 'synchronizeHostData'
67
67
  var ast = this.host.getTemplateAstAtPosition(fileName, position);
68
68
  if (!ast) {
@@ -80,7 +80,7 @@
80
80
  entries: results,
81
81
  };
82
82
  };
83
- LanguageServiceImpl.prototype.getDefinitionAt = function (fileName, position) {
83
+ LanguageServiceImpl.prototype.getDefinitionAndBoundSpan = function (fileName, position) {
84
84
  this.host.getAnalyzedModules(); // same role as 'synchronizeHostData'
85
85
  var templateInfo = this.host.getTemplateAstAtPosition(fileName, position);
86
86
  if (templateInfo) {
@@ -95,22 +95,18 @@
95
95
  }
96
96
  }
97
97
  };
98
- LanguageServiceImpl.prototype.getHoverAt = function (fileName, position) {
99
- this.host.getAnalyzedModules(); // same role as 'synchronizeHostData'
98
+ LanguageServiceImpl.prototype.getQuickInfoAtPosition = function (fileName, position) {
99
+ var analyzedModules = this.host.getAnalyzedModules(); // same role as 'synchronizeHostData'
100
100
  var templateInfo = this.host.getTemplateAstAtPosition(fileName, position);
101
101
  if (templateInfo) {
102
- return hover_1.getHover(templateInfo, position, this.host);
102
+ return hover_1.getTemplateHover(templateInfo, position, analyzedModules);
103
103
  }
104
104
  // Attempt to get Angular-specific hover information in a TypeScript file, the NgModule a
105
105
  // directive belongs to.
106
- if (fileName.endsWith('.ts')) {
107
- var sf = this.host.getSourceFile(fileName);
108
- if (sf) {
109
- return hover_1.getTsHover(sf, position, this.host);
110
- }
111
- }
106
+ var declarations = this.host.getDeclarations(fileName);
107
+ return hover_1.getTsHover(position, declarations, analyzedModules);
112
108
  };
113
109
  return LanguageServiceImpl;
114
110
  }());
115
111
  });
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Vfc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xhbmd1YWdlLXNlcnZpY2Uvc3JjL2xhbmd1YWdlX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBSUgseUVBQXFEO0lBQ3JELHlFQUFxRjtJQUNyRix5RUFBMEg7SUFDMUgsNkRBQTZDO0lBSTdDOzs7O09BSUc7SUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxJQUEyQjtRQUMvRCxPQUFPLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUZELHNEQUVDO0lBRUQ7UUFDRSw2QkFBNkIsSUFBMkI7WUFBM0IsU0FBSSxHQUFKLElBQUksQ0FBdUI7UUFBRyxDQUFDO1FBRTVELDRDQUFjLEdBQWQsVUFBZSxRQUFnQjs7WUFDN0IsSUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUUscUNBQXFDO1lBQzlGLElBQU0sT0FBTyxHQUFpQixFQUFFLENBQUM7WUFDakMsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7O2dCQUVuRCxLQUF1QixJQUFBLGNBQUEsaUJBQUEsU0FBUyxDQUFBLG9DQUFBLDJEQUFFO29CQUE3QixJQUFNLFFBQVEsc0JBQUE7b0JBQ2pCLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvQyxJQUFJLEdBQUcsRUFBRTt3QkFDUCxPQUFPLENBQUMsSUFBSSxPQUFaLE9BQU8sbUJBQVMsb0NBQXNCLENBQUMsR0FBRyxDQUFDLEdBQUU7cUJBQzlDO2lCQUNGOzs7Ozs7Ozs7WUFFRCxJQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUs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LFFBQVEsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLEVBQUUsRUFBRTtvQkFDTixPQUFPLGtCQUFVLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzVDO2FBQ0Y7UUFDSCxDQUFDO1FBQ0gsMEJBQUM7SUFBRCxDQUFDLEFBNUVELElBNEVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0c3MgZnJvbSAndHlwZXNjcmlwdC9saWIvdHNzZXJ2ZXJsaWJyYXJ5JztcblxuaW1wb3J0IHtnZXRUZW1wbGF0ZUNvbXBsZXRpb25zfSBmcm9tICcuL2NvbXBsZXRpb25zJztcbmltcG9ydCB7Z2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbiwgZ2V0VHNEZWZpbml0aW9uQW5kQm91bmRTcGFufSBmcm9tICcuL2RlZmluaXRpb25zJztcbmltcG9ydCB7Z2V0RGVjbGFyYXRpb25EaWFnbm9zdGljcywgZ2V0VGVtcGxhdGVEaWFnbm9zdGljcywgbmdEaWFnbm9zdGljVG9Uc0RpYWdub3N0aWMsIHVuaXF1ZUJ5U3Bhbn0gZnJvbSAnLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQge2dldEhvdmVyLCBnZXRUc0hvdmVyfSBmcm9tICcuL2hvdmVyJztcbmltcG9ydCB7RGlhZ25vc3RpYywgTGFuZ3VhZ2VTZXJ2aWNlfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7VHlwZVNjcmlwdFNlcnZpY2VIb3N0fSBmcm9tICcuL3R5cGVzY3JpcHRfaG9zdCc7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIEFuZ3VsYXIgYExhbmd1YWdlU2VydmljZWAuXG4gKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGFuZ3VhZ2VTZXJ2aWNlKGhvc3Q6IFR5cGVTY3JpcHRTZXJ2aWNlSG9zdCk6IExhbmd1YWdlU2VydmljZSB7XG4gIHJldHVybiBuZXcgTGFuZ3VhZ2VTZXJ2aWNlSW1wbChob3N0KTtcbn1cblxuY2xhc3MgTGFuZ3VhZ2VTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIExhbmd1YWdlU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaG9zdDogVHlwZVNjcmlwdFNlcnZpY2VIb3N0KSB7fVxuXG4gIGdldERpYWdub3N0aWNzKGZpbGVOYW1lOiBzdHJpbmcpOiB0c3MuRGlhZ25vc3RpY1tdIHtcbiAgICBjb25zdCBhbmFseXplZE1vZHVsZXMgPSB0aGlzLmhvc3QuZ2V0QW5hbHl6ZWRNb2R1bGVzKCk7ICAvLyBzYW1lIHJvbGUgYXMgJ3N5bmNocm9uaXplSG9zdERhdGEnXG4gICAgY29uc3QgcmVzdWx0czogRGlhZ25vc3RpY1tdID0gW107XG4gICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy5ob3N0LmdldFRlbXBsYXRlcyhmaWxlTmFtZSk7XG5cbiAgICBmb3IgKGNvbnN0IHRlbXBsYXRlIG9mIHRlbXBsYXRlcykge1xuICAgICAgY29uc3QgYXN0ID0gdGhpcy5ob3N0LmdldFRlbXBsYXRlQXN0KHRlbXBsYXRlKTtcbiAgICAgIGlmIChhc3QpIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKC4uLmdldFRlbXBsYXRlRGlhZ25vc3RpY3MoYXN0KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gdGhpcy5ob3N0LmdldERlY2xhcmF0aW9ucyhmaWxlTmFtZSk7XG4gICAgaWYgKGRlY2xhcmF0aW9ucyAmJiBkZWNsYXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXN1bHRzLnB1c2goLi4uZ2V0RGVjbGFyYXRpb25EaWFnbm9zdGljcyhkZWNsYXJhdGlvbnMsIGFuYWx5emVkTW9kdWxlcywgdGhpcy5ob3N0KSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlRmlsZSA9IGZpbGVOYW1lLmVuZHNXaXRoKCcudHMnKSA/IHRoaXMuaG9zdC5nZXRTb3VyY2VGaWxlKGZpbGVOYW1lKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdW5pcXVlQnlTcGFuKHJlc3VsdHMpLm1hcChkID0+IG5nRGlhZ25vc3RpY1RvVHNEaWFnbm9zdGljKGQsIHNvdXJjZUZpbGUpKTtcbiAgfVxuXG4gIGdldENvbXBsZXRpb25zQXQoZmlsZU5hbWU6IHN0cmluZywgcG9zaXRpb246IG51bWJlcik6IHRzcy5Db21wbGV0aW9uSW5mb3x1bmRlZmluZWQge1xuICAgIHRoaXMuaG9zdC5nZXRBbmFseXplZE1vZHVsZXMoKTsgIC8vIHNhbWUgcm9sZSBhcyAnc3luY2hyb25pemVIb3N0RGF0YSdcbiAgICBjb25zdCBhc3QgPSB0aGlzLmhvc3QuZ2V0VGVtcGxhdGVBc3RBdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgaWYgKCFhc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0cyA9IGdldFRlbXBsYXRlQ29tcGxldGlvbnMoYXN0LCBwb3NpdGlvbik7XG4gICAgaWYgKCFyZXN1bHRzIHx8ICFyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaXNHbG9iYWxDb21wbGV0aW9uOiBmYWxzZSxcbiAgICAgIGlzTWVtYmVyQ29tcGxldGlvbjogZmFsc2UsXG4gICAgICBpc05ld0lkZW50aWZpZXJMb2NhdGlvbjogZmFsc2UsXG4gICAgICAvLyBDYXN0IENvbXBsZXRpb25FbnRyeS5raW5kIGZyb20gbmcuQ29tcGxldGlvbktpbmQgdG8gdHMuU2NyaXB0RWxlbWVudEtpbmRcbiAgICAgIGVudHJpZXM6IHJlc3VsdHMgYXMgdW5rbm93biBhcyB0cy5Db21wbGV0aW9uRW50cnlbXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RGVmaW5pdGlvbkF0KGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOiB0c3MuRGVmaW5pdGlvbkluZm9BbmRCb3VuZFNwYW58dW5kZWZpbmVkIHtcbiAgICB0aGlzLmhvc3QuZ2V0QW5hbHl6ZWRNb2R1bGVzKCk7ICAvLyBzYW1lIHJvbGUgYXMgJ3N5bmNocm9uaXplSG9zdERhdGEnXG4gICAgY29uc3QgdGVtcGxhdGVJbmZvID0gdGhpcy5ob3N0LmdldFRlbXBsYXRlQXN0QXRQb3NpdGlvbihmaWxlTmFtZSwgcG9zaXRpb24pO1xuICAgIGlmICh0ZW1wbGF0ZUluZm8pIHtcbiAgICAgIHJldHVybiBnZXREZWZpbml0aW9uQW5kQm91bmRTcGFuKHRlbXBsYXRlSW5mbywgcG9zaXRpb24pO1xuICAgIH1cblxuICAgIC8vIEF0dGVtcHQgdG8gZ2V0IEFuZ3VsYXItc3BlY2lmaWMgZGVmaW5pdGlvbnMgaW4gYSBUeXBlU2NyaXB0IGZpbGUsIGxpa2UgdGVtcGxhdGVzIGRlZmluZWRcbiAgICAvLyBpbiBhIGB0ZW1wbGF0ZVVybGAgcHJvcGVydHkuXG4gICAgaWYgKGZpbGVOYW1lLmVuZHNXaXRoKCcudHMnKSkge1xuICAgICAgY29uc3Qgc2YgPSB0aGlzLmhvc3QuZ2V0U291cmNlRmlsZShmaWxlTmFtZSk7XG4gICAgICBpZiAoc2YpIHtcbiAgICAgICAgcmV0dXJuIGdldFRzRGVmaW5pdGlvbkFuZEJvdW5kU3BhbihzZiwgcG9zaXRpb24sIHRoaXMuaG9zdC50c0xzSG9zdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0SG92ZXJBdChmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyKTogdHNzLlF1aWNrSW5mb3x1bmRlZmluZWQge1xuICAgIHRoaXMuaG9zdC5nZXRBbmFseXplZE1vZHVsZXMoKTsgIC8vIHNhbWUgcm9sZSBhcyAnc3luY2hyb25pemVIb3N0RGF0YSdcbiAgICBjb25zdCB0ZW1wbGF0ZUluZm8gPSB0aGlzLmhvc3QuZ2V0VGVtcGxhdGVBc3RBdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgaWYgKHRlbXBsYXRlSW5mbykge1xuICAgICAgcmV0dXJuIGdldEhvdmVyKHRlbXBsYXRlSW5mbywgcG9zaXRpb24sIHRoaXMuaG9zdCk7XG4gICAgfVxuXG4gICAgLy8gQXR0ZW1wdCB0byBnZXQgQW5ndWxhci1zcGVjaWZpYyBob3ZlciBpbmZvcm1hdGlvbiBpbiBhIFR5cGVTY3JpcHQgZmlsZSwgdGhlIE5nTW9kdWxlIGFcbiAgICAvLyBkaXJlY3RpdmUgYmVsb25ncyB0by5cbiAgICBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoJy50cycpKSB7XG4gICAgICBjb25zdCBzZiA9IHRoaXMuaG9zdC5nZXRTb3VyY2VGaWxlKGZpbGVOYW1lKTtcbiAgICAgIGlmIChzZikge1xuICAgICAgICByZXR1cm4gZ2V0VHNIb3ZlcihzZiwgcG9zaXRpb24sIHRoaXMuaG9zdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2Vfc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xhbmd1YWdlLXNlcnZpY2Uvc3JjL2xhbmd1YWdlX3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgsb0RBQXNEO0lBRXRELHlFQUFxRDtJQUNyRCx5RUFBcUY7SUFDckYseUVBQTRHO0lBQzVHLDZEQUFxRDtJQUlyRDs7OztPQUlHO0lBQ0gsU0FBZ0IscUJBQXFCLENBQUMsSUFBMkI7UUFDL0QsT0FBTyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFGRCxzREFFQztJQUVEO1FBQ0UsNkJBQTZCLElBQTJCO1lBQTNCLFNBQUksR0FBSixJQUFJLENBQXVCO1FBQUcsQ0FBQztRQUU1RCxvREFBc0IsR0FBdEIsVUFBdUIsUUFBZ0I7O1lBQ3JDLElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFFLHFDQUFxQztZQUM5RixJQUFNLGFBQWEsR0FBb0IsRUFBRSxDQUFDO1lBRTFDLElBQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztnQkFDbkQsS0FBdUIsSUFBQSxjQUFBLGlCQUFBLFNBQVMsQ0FBQSxvQ0FBQSwyREFBRTtvQkFBN0IsSUFBTSxRQUFRLHNCQUFBO29CQUNqQixJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxHQUFHLEVBQUU7d0JBQ1AsYUFBYSxDQUFDLElBQUksT0FBbEIsYUFBYSxtQkFBUyxvQ0FBc0IsQ0FBQyxHQUFHLENBQUMsR0FBRTtxQkFDcEQ7aUJBQ0Y7Ozs7Ozs7OztZQUVELElBQU0sWUFBWSxHQUFHLElBQUksQ0FB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Q0FBQztZQUN6RCxPQUFPLGtCQUFVLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM3RCxDQUFDO1FBQ0gsMEJBQUM7SUFBRCxDQUFDLEFBMUVELElBMEVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0c3MgZnJvbSAndHlwZXNjcmlwdC9saWIvdHNzZXJ2ZXJsaWJyYXJ5JztcblxuaW1wb3J0IHtnZXRUZW1wbGF0ZUNvbXBsZXRpb25zfSBmcm9tICcuL2NvbXBsZXRpb25zJztcbmltcG9ydCB7Z2V0RGVmaW5pdGlvbkFuZEJvdW5kU3BhbiwgZ2V0VHNEZWZpbml0aW9uQW5kQm91bmRTcGFufSBmcm9tICcuL2RlZmluaXRpb25zJztcbmltcG9ydCB7Z2V0RGVjbGFyYXRpb25EaWFnbm9zdGljcywgZ2V0VGVtcGxhdGVEaWFnbm9zdGljcywgbmdEaWFnbm9zdGljVG9Uc0RpYWdub3N0aWN9IGZyb20gJy4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHtnZXRUZW1wbGF0ZUhvdmVyLCBnZXRUc0hvdmVyfSBmcm9tICcuL2hvdmVyJztcbmltcG9ydCAqIGFzIG5nIGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtUeXBlU2NyaXB0U2VydmljZUhvc3R9IGZyb20gJy4vdHlwZXNjcmlwdF9ob3N0JztcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgYW4gQW5ndWxhciBgTGFuZ3VhZ2VTZXJ2aWNlYC5cbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYW5ndWFnZVNlcnZpY2UoaG9zdDogVHlwZVNjcmlwdFNlcnZpY2VIb3N0KSB7XG4gIHJldHVybiBuZXcgTGFuZ3VhZ2VTZXJ2aWNlSW1wbChob3N0KTtcbn1cblxuY2xhc3MgTGFuZ3VhZ2VTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIG5nLkxhbmd1YWdlU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaG9zdDogVHlwZVNjcmlwdFNlcnZpY2VIb3N0KSB7fVxuXG4gIGdldFNlbWFudGljRGlhZ25vc3RpY3MoZmlsZU5hbWU6IHN0cmluZyk6IHRzcy5EaWFnbm9zdGljW10ge1xuICAgIGNvbnN0IGFuYWx5emVkTW9kdWxlcyA9IHRoaXMuaG9zdC5nZXRBbmFseXplZE1vZHVsZXMoKTsgIC8vIHNhbWUgcm9sZSBhcyAnc3luY2hyb25pemVIb3N0RGF0YSdcbiAgICBjb25zdCBuZ0RpYWdub3N0aWNzOiBuZy5EaWFnbm9zdGljW10gPSBbXTtcblxuICAgIGNvbnN0IHRlbXBsYXRlcyA9IHRoaXMuaG9zdC5nZXRUZW1wbGF0ZXMoZmlsZU5hbWUpO1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgdGVtcGxhdGVzKSB7XG4gICAgICBjb25zdCBhc3QgPSB0aGlzLmhvc3QuZ2V0VGVtcGxhdGVBc3QodGVtcGxhdGUpO1xuICAgICAgaWYgKGFzdCkge1xuICAgICAgICBuZ0RpYWdub3N0aWNzLnB1c2goLi4uZ2V0VGVtcGxhdGVEaWFnbm9zdGljcyhhc3QpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZWNsYXJhdGlvbnMgPSB0aGlzLmhvc3QuZ2V0RGVjbGFyYXRpb25zKGZpbGVOYW1lKTtcbiAgICBuZ0RpYWdub3N0aWNzLnB1c2goLi4uZ2V0RGVjbGFyYXRpb25EaWFnbm9zdGljcyhkZWNsYXJhdGlvbnMsIGFuYWx5emVkTW9kdWxlcywgdGhpcy5ob3N0KSk7XG5cbiAgICBjb25zdCBzb3VyY2VGaWxlID0gZmlsZU5hbWUuZW5kc1dpdGgoJy50cycpID8gdGhpcy5ob3N0LmdldFNvdXJjZUZpbGUoZmlsZU5hbWUpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRzRGlhZ25vc3RpY3MgPSBuZ0RpYWdub3N0aWNzLm1hcChkID0+IG5nRGlhZ25vc3RpY1RvVHNEaWFnbm9zdGljKGQsIHNvdXJjZUZpbGUpKTtcbiAgICByZXR1cm4gWy4uLnRzcy5zb3J0QW5kRGVkdXBsaWNhdGVEaWFnbm9zdGljcyh0c0RpYWdub3N0aWNzKV07XG4gIH1cblxuICBnZXRDb21wbGV0aW9uc0F0UG9zaXRpb24oXG4gICAgICBmaWxlTmFtZTogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyLFxuICAgICAgb3B0aW9ucz86IHRzcy5HZXRDb21wbGV0aW9uc0F0UG9zaXRpb25PcHRpb25zKTogdHNzLkNvbXBsZXRpb25JbmZvfHVuZGVmaW5lZCB7XG4gICAgdGhpcy5ob3N0LmdldEFuYWx5emVkTW9kdWxlcygpOyAgLy8gc2FtZSByb2xlIGFzICdzeW5jaHJvbml6ZUhvc3REYXRhJ1xuICAgIGNvbnN0IGFzdCA9IHRoaXMuaG9zdC5nZXRUZW1wbGF0ZUFzdEF0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uKTtcbiAgICBpZiAoIWFzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gZ2V0VGVtcGxhdGVDb21wbGV0aW9ucyhhc3QsIHBvc2l0aW9uKTtcbiAgICBpZiAoIXJlc3VsdHMgfHwgIXJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0dsb2JhbENvbXBsZXRpb246IGZhbHNlLFxuICAgICAgaXNNZW1iZXJDb21wbGV0aW9uOiBmYWxzZSxcbiAgICAgIGlzTmV3SWRlbnRpZmllckxvY2F0aW9uOiBmYWxzZSxcbiAgICAgIC8vIENhc3QgQ29tcGxldGlvbkVudHJ5LmtpbmQgZnJvbSBuZy5Db21wbGV0aW9uS2luZCB0byB0cy5TY3JpcHRFbGVtZW50S2luZFxuICAgICAgZW50cmllczogcmVzdWx0cyBhcyB1bmtub3duIGFzIHRzLkNvbXBsZXRpb25FbnRyeVtdLFxuICAgIH07XG4gIH1cblxuICBnZXREZWZpbml0aW9uQW5kQm91bmRTcGFuKGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOiB0c3MuRGVmaW5pdGlvbkluZm9BbmRCb3VuZFNwYW5cbiAgICAgIHx1bmRlZmluZWQge1xuICAgIHRoaXMuaG9zdC5nZXRBbmFseXplZE1vZHVsZXMoKTsgIC8vIHNhbWUgcm9sZSBhcyAnc3luY2hyb25pemVIb3N0RGF0YSdcbiAgICBjb25zdCB0ZW1wbGF0ZUluZm8gPSB0aGlzLmhvc3QuZ2V0VGVtcGxhdGVBc3RBdFBvc2l0aW9uKGZpbGVOYW1lLCBwb3NpdGlvbik7XG4gICAgaWYgKHRlbXBsYXRlSW5mbykge1xuICAgICAgcmV0dXJuIGdldERlZmluaXRpb25BbmRCb3VuZFNwYW4odGVtcGxhdGVJbmZvLCBwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLy8gQXR0ZW1wdCB0byBnZXQgQW5ndWxhci1zcGVjaWZpYyBkZWZpbml0aW9ucyBpbiBhIFR5cGVTY3JpcHQgZmlsZSwgbGlrZSB0ZW1wbGF0ZXMgZGVmaW5lZFxuICAgIC8vIGluIGEgYHRlbXBsYXRlVXJsYCBwcm9wZXJ0eS5cbiAgICBpZiAoZmlsZU5hbWUuZW5kc1dpdGgoJy50cycpKSB7XG4gICAgICBjb25zdCBzZiA9IHRoaXMuaG9zdC5nZXRTb3VyY2VGaWxlKGZpbGVOYW1lKTtcbiAgICAgIGlmIChzZikge1xuICAgICAgICByZXR1cm4gZ2V0VHNEZWZpbml0aW9uQW5kQm91bmRTcGFuKHNmLCBwb3NpdGlvbiwgdGhpcy5ob3N0LnRzTHNIb3N0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRRdWlja0luZm9BdFBvc2l0aW9uKGZpbGVOYW1lOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIpOiB0c3MuUXVpY2tJbmZvfHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYW5hbHl6ZWRNb2R1bGVzID0gdGhpcy5ob3N0LmdldEFuYWx5emVkTW9kdWxlcygpOyAgLy8gc2FtZSByb2xlIGFzICdzeW5jaHJvbml6ZUhvc3REYXRhJ1xuICAgIGNvbnN0IHRlbXBsYXRlSW5mbyA9IHRoaXMuaG9zdC5nZXRUZW1wbGF0ZUFzdEF0UG9zaXRpb24oZmlsZU5hbWUsIHBvc2l0aW9uKTtcbiAgICBpZiAodGVtcGxhdGVJbmZvKSB7XG4gICAgICByZXR1cm4gZ2V0VGVtcGxhdGVIb3Zlcih0ZW1wbGF0ZUluZm8sIHBvc2l0aW9uLCBhbmFseXplZE1vZHVsZXMpO1xuICAgIH1cblxuICAgIC8vIEF0dGVtcHQgdG8gZ2V0IEFuZ3VsYXItc3BlY2lmaWMgaG92ZXIgaW5mb3JtYXRpb24gaW4gYSBUeXBlU2NyaXB0IGZpbGUsIHRoZSBOZ01vZHVsZSBhXG4gICAgLy8gZGlyZWN0aXZlIGJlbG9uZ3MgdG8uXG4gICAgY29uc3QgZGVjbGFyYXRpb25zID0gdGhpcy5ob3N0LmdldERlY2xhcmF0aW9ucyhmaWxlTmFtZSk7XG4gICAgcmV0dXJuIGdldFRzSG92ZXIocG9zaXRpb24sIGRlY2xhcmF0aW9ucywgYW5hbHl6ZWRNb2R1bGVzKTtcbiAgfVxufVxuIl19
@@ -6,17 +6,18 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  /// <amd-module name="@angular/language-service/src/locate_symbol" />
9
- import { CompileTypeSummary } from '@angular/compiler';
9
+ import { StaticSymbol } from '@angular/compiler';
10
+ import * as tss from 'typescript/lib/tsserverlibrary';
10
11
  import { AstResult } from './common';
11
- import { Span, Symbol } from './types';
12
+ import { Symbol } from './types';
12
13
  export interface SymbolInfo {
13
14
  symbol: Symbol;
14
- span: Span;
15
- compileTypeSummary: CompileTypeSummary | undefined;
15
+ span: tss.TextSpan;
16
+ staticSymbol?: StaticSymbol;
16
17
  }
17
18
  /**
18
- * Traverse the template AST and locate the Symbol at the specified `position`.
19
- * @param info Ast and Template Source
20
- * @param position location to look for
19
+ * Traverses a template AST and locates symbol(s) at a specified position.
20
+ * @param info template AST information set
21
+ * @param position location to locate symbols at
21
22
  */
22
- export declare function locateSymbol(info: AstResult, position: number): SymbolInfo | undefined;
23
+ export declare function locateSymbols(info: AstResult, position: number): SymbolInfo[];