source: trip-planner-front/node_modules/@angular/compiler-cli/linker/src/ast/typescript/typescript_ast_host.js@ 6a3a178

Last change on this file since 6a3a178 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 23.3 KB
Line 
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/linker/src/ast/typescript/typescript_ast_host", ["require", "exports", "tslib", "typescript", "@angular/compiler-cli/linker/src/fatal_linker_error", "@angular/compiler-cli/linker/src/ast/utils"], factory);
15 }
16})(function (require, exports) {
17 "use strict";
18 Object.defineProperty(exports, "__esModule", { value: true });
19 exports.TypeScriptAstHost = void 0;
20 var tslib_1 = require("tslib");
21 var ts = require("typescript");
22 var fatal_linker_error_1 = require("@angular/compiler-cli/linker/src/fatal_linker_error");
23 var utils_1 = require("@angular/compiler-cli/linker/src/ast/utils");
24 /**
25 * This implementation of `AstHost` is able to get information from TypeScript AST nodes.
26 *
27 * This host is not actually used at runtime in the current code.
28 *
29 * It is implemented here to ensure that the `AstHost` abstraction is not unfairly skewed towards
30 * the Babel implementation. It could also provide a basis for a 3rd TypeScript compiler plugin to
31 * do linking in the future.
32 */
33 var TypeScriptAstHost = /** @class */ (function () {
34 function TypeScriptAstHost() {
35 this.isStringLiteral = ts.isStringLiteral;
36 this.isNumericLiteral = ts.isNumericLiteral;
37 this.isArrayLiteral = ts.isArrayLiteralExpression;
38 this.isObjectLiteral = ts.isObjectLiteralExpression;
39 this.isCallExpression = ts.isCallExpression;
40 }
41 TypeScriptAstHost.prototype.getSymbolName = function (node) {
42 if (ts.isIdentifier(node)) {
43 return node.text;
44 }
45 else if (ts.isPropertyAccessExpression(node) && ts.isIdentifier(node.name)) {
46 return node.name.text;
47 }
48 else {
49 return null;
50 }
51 };
52 TypeScriptAstHost.prototype.parseStringLiteral = function (str) {
53 utils_1.assert(str, this.isStringLiteral, 'a string literal');
54 return str.text;
55 };
56 TypeScriptAstHost.prototype.parseNumericLiteral = function (num) {
57 utils_1.assert(num, this.isNumericLiteral, 'a numeric literal');
58 return parseInt(num.text);
59 };
60 TypeScriptAstHost.prototype.isBooleanLiteral = function (node) {
61 return isBooleanLiteral(node) || isMinifiedBooleanLiteral(node);
62 };
63 TypeScriptAstHost.prototype.parseBooleanLiteral = function (bool) {
64 if (isBooleanLiteral(bool)) {
65 return bool.kind === ts.SyntaxKind.TrueKeyword;
66 }
67 else if (isMinifiedBooleanLiteral(bool)) {
68 return !(+bool.operand.text);
69 }
70 else {
71 throw new fatal_linker_error_1.FatalLinkerError(bool, 'Unsupported syntax, expected a boolean literal.');
72 }
73 };
74 TypeScriptAstHost.prototype.parseArrayLiteral = function (array) {
75 utils_1.assert(array, this.isArrayLiteral, 'an array literal');
76 return array.elements.map(function (element) {
77 utils_1.assert(element, isNotEmptyElement, 'element in array not to be empty');
78 utils_1.assert(element, isNotSpreadElement, 'element in array not to use spread syntax');
79 return element;
80 });
81 };
82 TypeScriptAstHost.prototype.parseObjectLiteral = function (obj) {
83 var e_1, _a;
84 utils_1.assert(obj, this.isObjectLiteral, 'an object literal');
85 var result = new Map();
86 try {
87 for (var _b = tslib_1.__values(obj.properties), _c = _b.next(); !_c.done; _c = _b.next()) {
88 var property = _c.value;
89 utils_1.assert(property, ts.isPropertyAssignment, 'a property assignment');
90 utils_1.assert(property.name, isPropertyName, 'a property name');
91 result.set(property.name.text, property.initializer);
92 }
93 }
94 catch (e_1_1) { e_1 = { error: e_1_1 }; }
95 finally {
96 try {
97 if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
98 }
99 finally { if (e_1) throw e_1.error; }
100 }
101 return result;
102 };
103 TypeScriptAstHost.prototype.isFunctionExpression = function (node) {
104 return ts.isFunctionExpression(node) || ts.isArrowFunction(node);
105 };
106 TypeScriptAstHost.prototype.parseReturnValue = function (fn) {
107 utils_1.assert(fn, this.isFunctionExpression, 'a function');
108 if (!ts.isBlock(fn.body)) {
109 // it is a simple array function expression: `(...) => expr`
110 return fn.body;
111 }
112 // it is a function (arrow or normal) with a body. E.g.:
113 // * `(...) => { stmt; ... }`
114 // * `function(...) { stmt; ... }`
115 if (fn.body.statements.length !== 1) {
116 throw new fatal_linker_error_1.FatalLinkerError(fn.body, 'Unsupported syntax, expected a function body with a single return statement.');
117 }
118 var stmt = fn.body.statements[0];
119 utils_1.assert(stmt, ts.isReturnStatement, 'a function body with a single return statement');
120 if (stmt.expression === undefined) {
121 throw new fatal_linker_error_1.FatalLinkerError(stmt, 'Unsupported syntax, expected function to return a value.');
122 }
123 return stmt.expression;
124 };
125 TypeScriptAstHost.prototype.parseCallee = function (call) {
126 utils_1.assert(call, ts.isCallExpression, 'a call expression');
127 return call.expression;
128 };
129 TypeScriptAstHost.prototype.parseArguments = function (call) {
130 utils_1.assert(call, ts.isCallExpression, 'a call expression');
131 return call.arguments.map(function (arg) {
132 utils_1.assert(arg, isNotSpreadElement, 'argument not to use spread syntax');
133 return arg;
134 });
135 };
136 TypeScriptAstHost.prototype.getRange = function (node) {
137 var file = node.getSourceFile();
138 if (file === undefined) {
139 throw new fatal_linker_error_1.FatalLinkerError(node, 'Unable to read range for node - it is missing parent information.');
140 }
141 var startPos = node.getStart();
142 var endPos = node.getEnd();
143 var _a = ts.getLineAndCharacterOfPosition(file, startPos), startLine = _a.line, startCol = _a.character;
144 return { startLine: startLine, startCol: startCol, startPos: startPos, endPos: endPos };
145 };
146 return TypeScriptAstHost;
147 }());
148 exports.TypeScriptAstHost = TypeScriptAstHost;
149 /**
150 * Return true if the expression does not represent an empty element in an array literal.
151 * For example in `[,foo]` the first element is "empty".
152 */
153 function isNotEmptyElement(e) {
154 return !ts.isOmittedExpression(e);
155 }
156 /**
157 * Return true if the expression is not a spread element of an array literal.
158 * For example in `[x, ...rest]` the `...rest` expression is a spread element.
159 */
160 function isNotSpreadElement(e) {
161 return !ts.isSpreadElement(e);
162 }
163 /**
164 * Return true if the expression can be considered a text based property name.
165 */
166 function isPropertyName(e) {
167 return ts.isIdentifier(e) || ts.isStringLiteral(e) || ts.isNumericLiteral(e);
168 }
169 /**
170 * Return true if the node is either `true` or `false` literals.
171 */
172 function isBooleanLiteral(node) {
173 return node.kind === ts.SyntaxKind.TrueKeyword || node.kind === ts.SyntaxKind.FalseKeyword;
174 }
175 /**
176 * Return true if the node is either `!0` or `!1`.
177 */
178 function isMinifiedBooleanLiteral(node) {
179 return ts.isPrefixUnaryExpression(node) && node.operator === ts.SyntaxKind.ExclamationToken &&
180 ts.isNumericLiteral(node.operand) && (node.operand.text === '0' || node.operand.text === '1');
181 }
182});
183//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdF9hc3RfaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9saW5rZXIvc3JjL2FzdC90eXBlc2NyaXB0L3R5cGVzY3JpcHRfYXN0X2hvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7OztJQUVILCtCQUFpQztJQUVqQywwRkFBMEQ7SUFFMUQsb0VBQWdDO0lBR2hDOzs7Ozs7OztPQVFHO0lBQ0g7UUFBQTtZQVdFLG9CQUFlLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztZQU9yQyxxQkFBZ0IsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7WUFxQnZDLG1CQUFjLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDO1lBVzdDLG9CQUFlLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO1lBMEMvQyxxQkFBZ0IsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7UUEwQnpDLENBQUM7UUFySEMseUNBQWEsR0FBYixVQUFjLElBQW1CO1lBQy9CLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ2xCO2lCQUFNLElBQUksRUFBRSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM1RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7UUFDSCxDQUFDO1FBSUQsOENBQWtCLEdBQWxCLFVBQW1CLEdBQWtCO1lBQ25DLGNBQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sR0FB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LHdCQUF3QixDQUFDLElBQW1CO1FBQ25ELE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0I7WUFDdkYsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNwRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0ZhdGFsTGlua2VyRXJyb3J9IGZyb20gJy4uLy4uL2ZhdGFsX2xpbmtlcl9lcnJvcic7XG5pbXBvcnQge0FzdEhvc3QsIFJhbmdlfSBmcm9tICcuLi9hc3RfaG9zdCc7XG5pbXBvcnQge2Fzc2VydH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5cbi8qKlxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBgQXN0SG9zdGAgaXMgYWJsZSB0byBnZXQgaW5mb3JtYXRpb24gZnJvbSBUeXBlU2NyaXB0IEFTVCBub2Rlcy5cbiAqXG4gKiBUaGlzIGhvc3QgaXMgbm90IGFjdHVhbGx5IHVzZWQgYXQgcnVudGltZSBpbiB0aGUgY3VycmVudCBjb2RlLlxuICpcbiAqIEl0IGlzIGltcGxlbWVudGVkIGhlcmUgdG8gZW5zdXJlIHRoYXQgdGhlIGBBc3RIb3N0YCBhYnN0cmFjdGlvbiBpcyBub3QgdW5mYWlybHkgc2tld2VkIHRvd2FyZHNcbiAqIHRoZSBCYWJlbCBpbXBsZW1lbnRhdGlvbi4gSXQgY291bGQgYWxzbyBwcm92aWRlIGEgYmFzaXMgZm9yIGEgM3JkIFR5cGVTY3JpcHQgY29tcGlsZXIgcGx1Z2luIHRvXG4gKiBkbyBsaW5raW5nIGluIHRoZSBmdXR1cmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlU2NyaXB0QXN0SG9zdCBpbXBsZW1lbnRzIEFzdEhvc3Q8dHMuRXhwcmVzc2lvbj4ge1xuICBnZXRTeW1ib2xOYW1lKG5vZGU6IHRzLkV4cHJlc3Npb24pOiBzdHJpbmd8bnVsbCB7XG4gICAgaWYgKHRzLmlzSWRlbnRpZmllcihub2RlKSkge1xuICAgICAgcmV0dXJuIG5vZGUudGV4dDtcbiAgICB9IGVsc2UgaWYgKHRzLmlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKG5vZGUpICYmIHRzLmlzSWRlbnRpZmllcihub2RlLm5hbWUpKSB7XG4gICAgICByZXR1cm4gbm9kZS5uYW1lLnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGlzU3RyaW5nTGl0ZXJhbCA9IHRzLmlzU3RyaW5nTGl0ZXJhbDtcblxuICBwYXJzZVN0cmluZ0xpdGVyYWwoc3RyOiB0cy5FeHByZXNzaW9uKTogc3RyaW5nIHtcbiAgICBhc3NlcnQoc3RyLCB0aGlzLmlzU3RyaW5nTGl0ZXJhbCwgJ2Egc3RyaW5nIGxpdGVyYWwnKTtcbiAgICByZXR1cm4gc3RyLnRleHQ7XG4gIH1cblxuICBpc051bWVyaWNMaXRlcmFsID0gdHMuaXNOdW1lcmljTGl0ZXJhbDtcblxuICBwYXJzZU51bWVyaWNMaXRlcmFsKG51bTogdHMuRXhwcmVzc2lvbik6IG51bWJlciB7XG4gICAgYXNzZXJ0KG51bSwgdGhpcy5pc051bWVyaWNMaXRlcmFsLCAnYSBudW1lcmljIGxpdGVyYWwnKTtcbiAgICByZXR1cm4gcGFyc2VJbnQobnVtLnRleHQpO1xuICB9XG5cbiAgaXNCb29sZWFuTGl0ZXJhbChub2RlOiB0cy5FeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQm9vbGVhbkxpdGVyYWwobm9kZSkgfHwgaXNNaW5pZmllZEJvb2xlYW5MaXRlcmFsKG5vZGUpO1xuICB9XG5cbiAgcGFyc2VCb29sZWFuTGl0ZXJhbChib29sOiB0cy5FeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKGlzQm9vbGVhbkxpdGVyYWwoYm9vbCkpIHtcbiAgICAgIHJldHVybiBib29sLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuVHJ1ZUtleXdvcmQ7XG4gICAgfSBlbHNlIGlmIChpc01pbmlmaWVkQm9vbGVhbkxpdGVyYWwoYm9vbCkpIHtcbiAgICAgIHJldHVybiAhKCtib29sLm9wZXJhbmQudGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKGJvb2wsICdVbnN1cHBvcnRlZCBzeW50YXgsIGV4cGVjdGVkIGEgYm9vbGVhbiBsaXRlcmFsLicpO1xuICAgIH1cbiAgfVxuXG4gIGlzQXJyYXlMaXRlcmFsID0gdHMuaXNBcnJheUxpdGVyYWxFeHByZXNzaW9uO1xuXG4gIHBhcnNlQXJyYXlMaXRlcmFsKGFycmF5OiB0cy5FeHByZXNzaW9uKTogdHMuRXhwcmVzc2lvbltdIHtcbiAgICBhc3NlcnQoYXJyYXksIHRoaXMuaXNBcnJheUxpdGVyYWwsICdhbiBhcnJheSBsaXRlcmFsJyk7XG4gICAgcmV0dXJuIGFycmF5LmVsZW1lbnRzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgIGFzc2VydChlbGVtZW50LCBpc05vdEVtcHR5RWxlbWVudCwgJ2VsZW1lbnQgaW4gYXJyYXkgbm90IHRvIGJlIGVtcHR5Jyk7XG4gICAgICBhc3NlcnQoZWxlbWVudCwgaXNOb3RTcHJlYWRFbGVtZW50LCAnZWxlbWVudCBpbiBhcnJheSBub3QgdG8gdXNlIHNwcmVhZCBzeW50YXgnKTtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH0pO1xuICB9XG5cbiAgaXNPYmplY3RMaXRlcmFsID0gdHMuaXNPYmplY3RMaXRlcmFsRXhwcmVzc2lvbjtcblxuICBwYXJzZU9iamVjdExpdGVyYWwob2JqOiB0cy5FeHByZXNzaW9uKTogTWFwPHN0cmluZywgdHMuRXhwcmVzc2lvbj4ge1xuICAgIGFzc2VydChvYmosIHRoaXMuaXNPYmplY3RMaXRlcmFsLCAnYW4gb2JqZWN0IGxpdGVyYWwnKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCB0cy5FeHByZXNzaW9uPigpO1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2Ygb2JqLnByb3BlcnRpZXMpIHtcbiAgICAgIGFzc2VydChwcm9wZXJ0eSwgdHMuaXNQcm9wZXJ0eUFzc2lnbm1lbnQsICdhIHByb3BlcnR5IGFzc2lnbm1lbnQnKTtcbiAgICAgIGFzc2VydChwcm9wZXJ0eS5uYW1lLCBpc1Byb3BlcnR5TmFtZSwgJ2EgcHJvcGVydHkgbmFtZScpO1xuICAgICAgcmVzdWx0LnNldChwcm9wZXJ0eS5uYW1lLnRleHQsIHByb3BlcnR5LmluaXRpYWxpemVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlzRnVuY3Rpb25FeHByZXNzaW9uKG5vZGU6IHRzLkV4cHJlc3Npb24pOiBub2RlIGlzIHRzLkZ1bmN0aW9uRXhwcmVzc2lvbnx0cy5BcnJvd0Z1bmN0aW9uIHtcbiAgICByZXR1cm4gdHMuaXNGdW5jdGlvbkV4cHJlc3Npb24obm9kZSkgfHwgdHMuaXNBcnJvd0Z1bmN0aW9uKG5vZGUpO1xuICB9XG5cbiAgcGFyc2VSZXR1cm5WYWx1ZShmbjogdHMuRXhwcmVzc2lvbik6IHRzLkV4cHJlc3Npb24ge1xuICAgIGFzc2VydChmbiwgdGhpcy5pc0Z1bmN0aW9uRXhwcmVzc2lvbiwgJ2EgZnVuY3Rpb24nKTtcbiAgICBpZiAoIXRzLmlzQmxvY2soZm4uYm9keSkpIHtcbiAgICAgIC8vIGl0IGlzIGEgc2ltcGxlIGFycmF5IGZ1bmN0aW9uIGV4cHJlc3Npb246IGAoLi4uKSA9PiBleHByYFxuICAgICAgcmV0dXJuIGZuLmJvZHk7XG4gICAgfVxuXG4gICAgLy8gaXQgaXMgYSBmdW5jdGlvbiAoYXJyb3cgb3Igbm9ybWFsKSB3aXRoIGEgYm9keS4gRS5nLjpcbiAgICAvLyAqIGAoLi4uKSA9PiB7IHN0bXQ7IC4uLiB9YFxuICAgIC8vICogYGZ1bmN0aW9uKC4uLikgeyBzdG10OyAuLi4gfWBcblxuICAgIGlmIChmbi5ib2R5LnN0YXRlbWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRmF0YWxMaW5rZXJFcnJvcihcbiAgICAgICAgICBmbi5ib2R5LCAnVW5zdXBwb3J0ZWQgc3ludGF4LCBleHBlY3RlZCBhIGZ1bmN0aW9uIGJvZHkgd2l0aCBhIHNpbmdsZSByZXR1cm4gc3RhdGVtZW50LicpO1xuICAgIH1cbiAgICBjb25zdCBzdG10ID0gZm4uYm9keS5zdGF0ZW1lbnRzWzBdO1xuICAgIGFzc2VydChzdG10LCB0cy5pc1JldHVyblN0YXRlbWVudCwgJ2EgZnVuY3Rpb24gYm9keSB3aXRoIGEgc2luZ2xlIHJldHVybiBzdGF0ZW1lbnQnKTtcbiAgICBpZiAoc3RtdC5leHByZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBGYXRhbExpbmtlckVycm9yKHN0bXQsICdVbnN1cHBvcnRlZCBzeW50YXgsIGV4cGVjdGVkIGZ1bmN0aW9uIHRvIHJldHVybiBhIHZhbHVlLicpO1xuICAgIH1cblxuICAgIHJldHVybiBzdG10LmV4cHJlc3Npb247XG4gIH1cblxuICBpc0NhbGxFeHByZXNzaW9uID0gdHMuaXNDYWxsRXhwcmVzc2lvbjtcblxuICBwYXJzZUNhbGxlZShjYWxsOiB0cy5FeHByZXNzaW9uKTogdHMuRXhwcmVzc2lvbiB7XG4gICAgYXNzZXJ0KGNhbGwsIHRzLmlzQ2FsbEV4cHJlc3Npb24sICdhIGNhbGwgZXhwcmVzc2lvbicpO1xuICAgIHJldHVybiBjYWxsLmV4cHJlc3Npb247XG4gIH1cblxuICBwYXJzZUFyZ3VtZW50cyhjYWxsOiB0cy5FeHByZXNzaW9uKTogdHMuRXhwcmVzc2lvbltdIHtcbiAgICBhc3NlcnQoY2FsbCwgdHMuaXNDYWxsRXhwcmVzc2lvbiwgJ2EgY2FsbCBleHByZXNzaW9uJyk7XG4gICAgcmV0dXJuIGNhbGwuYXJndW1lbnRzLm1hcChhcmcgPT4ge1xuICAgICAgYXNzZXJ0KGFyZywgaXNOb3RTcHJlYWRFbGVtZW50LCAnYXJndW1lbnQgbm90IHRvIHVzZSBzcHJlYWQgc3ludGF4Jyk7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UmFuZ2Uobm9kZTogdHMuRXhwcmVzc2lvbik6IFJhbmdlIHtcbiAgICBjb25zdCBmaWxlID0gbm9kZS5nZXRTb3VyY2VGaWxlKCk7XG4gICAgaWYgKGZpbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEZhdGFsTGlua2VyRXJyb3IoXG4gICAgICAgICAgbm9kZSwgJ1VuYWJsZSB0byByZWFkIHJhbmdlIGZvciBub2RlIC0gaXQgaXMgbWlzc2luZyBwYXJlbnQgaW5mb3JtYXRpb24uJyk7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0UG9zID0gbm9kZS5nZXRTdGFydCgpO1xuICAgIGNvbnN0IGVuZFBvcyA9IG5vZGUuZ2V0RW5kKCk7XG4gICAgY29uc3Qge2xpbmU6IHN0YXJ0TGluZSwgY2hhcmFjdGVyOiBzdGFydENvbH0gPSB0cy5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihmaWxlLCBzdGFydFBvcyk7XG4gICAgcmV0dXJuIHtzdGFydExpbmUsIHN0YXJ0Q29sLCBzdGFydFBvcywgZW5kUG9zfTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0cnVlIGlmIHRoZSBleHByZXNzaW9uIGRvZXMgbm90IHJlcHJlc2VudCBhbiBlbXB0eSBlbGVtZW50IGluIGFuIGFycmF5IGxpdGVyYWwuXG4gKiBGb3IgZXhhbXBsZSBpbiBgWyxmb29dYCB0aGUgZmlyc3QgZWxlbWVudCBpcyBcImVtcHR5XCIuXG4gKi9cbmZ1bmN0aW9uIGlzTm90RW1wdHlFbGVtZW50KGU6IHRzLkV4cHJlc3Npb258dHMuU3ByZWFkRWxlbWVudHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzLk9taXR0ZWRFeHByZXNzaW9uKTogZSBpcyB0cy5FeHByZXNzaW9ufHRzLlNwcmVhZEVsZW1lbnQge1xuICByZXR1cm4gIXRzLmlzT21pdHRlZEV4cHJlc3Npb24oZSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gaXMgbm90IGEgc3ByZWFkIGVsZW1lbnQgb2YgYW4gYXJyYXkgbGl0ZXJhbC5cbiAqIEZvciBleGFtcGxlIGluIGBbeCwgLi4ucmVzdF1gIHRoZSBgLi4ucmVzdGAgZXhwcmVzc2lvbiBpcyBhIHNwcmVhZCBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBpc05vdFNwcmVhZEVsZW1lbnQoZTogdHMuRXhwcmVzc2lvbnx0cy5TcHJlYWRFbGVtZW50KTogZSBpcyB0cy5FeHByZXNzaW9uIHtcbiAgcmV0dXJuICF0cy5pc1NwcmVhZEVsZW1lbnQoZSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gY2FuIGJlIGNvbnNpZGVyZWQgYSB0ZXh0IGJhc2VkIHByb3BlcnR5IG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvcGVydHlOYW1lKGU6IHRzLlByb3BlcnR5TmFtZSk6IGUgaXMgdHMuSWRlbnRpZmllcnx0cy5TdHJpbmdMaXRlcmFsfHRzLk51bWVyaWNMaXRlcmFsIHtcbiAgcmV0dXJuIHRzLmlzSWRlbnRpZmllcihlKSB8fCB0cy5pc1N0cmluZ0xpdGVyYWwoZSkgfHwgdHMuaXNOdW1lcmljTGl0ZXJhbChlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgbm9kZSBpcyBlaXRoZXIgYHRydWVgIG9yIGBmYWxzZWAgbGl0ZXJhbHMuXG4gKi9cbmZ1bmN0aW9uIGlzQm9vbGVhbkxpdGVyYWwobm9kZTogdHMuRXhwcmVzc2lvbik6IG5vZGUgaXMgdHMuVHJ1ZUxpdGVyYWx8dHMuRmFsc2VMaXRlcmFsIHtcbiAgcmV0dXJuIG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5UcnVlS2V5d29yZCB8fCBub2RlLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuRmFsc2VLZXl3b3JkO1xufVxuXG50eXBlIE1pbmlmaWVkQm9vbGVhbkxpdGVyYWwgPSB0cy5QcmVmaXhVbmFyeUV4cHJlc3Npb24me29wZXJhbmQ6IHRzLk51bWVyaWNMaXRlcmFsfTtcblxuLyoqXG4gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgbm9kZSBpcyBlaXRoZXIgYCEwYCBvciBgITFgLlxuICovXG5mdW5jdGlvbiBpc01pbmlmaWVkQm9vbGVhbkxpdGVyYWwobm9kZTogdHMuRXhwcmVzc2lvbik6IG5vZGUgaXMgTWluaWZpZWRCb29sZWFuTGl0ZXJhbCB7XG4gIHJldHVybiB0cy5pc1ByZWZpeFVuYXJ5RXhwcmVzc2lvbihub2RlKSAmJiBub2RlLm9wZXJhdG9yID09PSB0cy5TeW50YXhLaW5kLkV4Y2xhbWF0aW9uVG9rZW4gJiZcbiAgICAgIHRzLmlzTnVtZXJpY0xpdGVyYWwobm9kZS5vcGVyYW5kKSAmJiAobm9kZS5vcGVyYW5kLnRleHQgPT09ICcwJyB8fCBub2RlLm9wZXJhbmQudGV4dCA9PT0gJzEnKTtcbn1cbiJdfQ==
Note: See TracBrowser for help on using the repository browser.