@auscope/angular2parse 18.0.1 → 19.0.1
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/fesm2022/auscope-angular2parse.mjs +8 -8
- package/fesm2022/auscope-angular2parse.mjs.map +1 -1
- package/package.json +4 -6
- package/esm2022/auscope-angular2parse.mjs +0 -5
- package/esm2022/lib/angular/compiler/assertions.mjs +0 -45
- package/esm2022/lib/angular/compiler/ast.mjs +0 -393
- package/esm2022/lib/angular/compiler/chars.mjs +0 -78
- package/esm2022/lib/angular/compiler/interpolation-config.mjs +0 -24
- package/esm2022/lib/angular/compiler/lexer.mjs +0 -344
- package/esm2022/lib/angular/compiler/parser.mjs +0 -721
- package/esm2022/lib/angular/compiler.mjs +0 -7
- package/esm2022/lib/angular/facade/lang.mjs +0 -85
- package/esm2022/lib/angular/facade.mjs +0 -2
- package/esm2022/lib/angular.mjs +0 -3
- package/esm2022/lib/module.mjs +0 -18
- package/esm2022/lib/parse.mjs +0 -66
- package/esm2022/lib/util/binary-operations.mjs +0 -18
- package/esm2022/lib/util/lang.mjs +0 -13
- package/esm2022/lib/util.mjs +0 -3
- package/esm2022/lib/visitors/parse-visitor-compiler.mjs +0 -96
- package/esm2022/lib/visitors/parse-visitor-resolver.mjs +0 -141
- package/esm2022/lib/visitors.mjs +0 -3
- package/esm2022/public-api.mjs +0 -6
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google Inc. 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
|
-
import { assertInterpolationSymbols } from './assertions';
|
|
9
|
-
export class InterpolationConfig {
|
|
10
|
-
static fromArray(markers) {
|
|
11
|
-
if (!markers) {
|
|
12
|
-
return DEFAULT_INTERPOLATION_CONFIG;
|
|
13
|
-
}
|
|
14
|
-
assertInterpolationSymbols('interpolation', markers);
|
|
15
|
-
return new InterpolationConfig(markers[0], markers[1]);
|
|
16
|
-
}
|
|
17
|
-
constructor(start, end) {
|
|
18
|
-
this.start = start;
|
|
19
|
-
this.end = end;
|
|
20
|
-
}
|
|
21
|
-
;
|
|
22
|
-
}
|
|
23
|
-
export const DEFAULT_INTERPOLATION_CONFIG = new InterpolationConfig('{{', '}}');
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJwb2xhdGlvbi1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyMnBhcnNlL3NyYy9saWIvYW5ndWxhci9jb21waWxlci9pbnRlcnBvbGF0aW9uLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEQsTUFBTSxPQUFPLG1CQUFtQjtJQUM1QixNQUFNLENBQUMsU0FBUyxDQUFDLE9BQXlCO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNYLE9BQU8sNEJBQTRCLENBQUM7UUFDeEMsQ0FBQztRQUVELDBCQUEwQixDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRCxPQUFPLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFtQixLQUFhLEVBQVMsR0FBVztRQUFqQyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUFFLENBQUM7SUFBQSxDQUFDO0NBQzNEO0FBRUQsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQ3JDLElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHthc3NlcnRJbnRlcnBvbGF0aW9uU3ltYm9sc30gZnJvbSAnLi9hc3NlcnRpb25zJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJbnRlcnBvbGF0aW9uQ29uZmlnIHtcclxuICAgIHN0YXRpYyBmcm9tQXJyYXkobWFya2VyczogW3N0cmluZywgc3RyaW5nXSk6IEludGVycG9sYXRpb25Db25maWcge1xyXG4gICAgICAgIGlmICghbWFya2Vycykge1xyXG4gICAgICAgICAgICByZXR1cm4gREVGQVVMVF9JTlRFUlBPTEFUSU9OX0NPTkZJRztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFzc2VydEludGVycG9sYXRpb25TeW1ib2xzKCdpbnRlcnBvbGF0aW9uJywgbWFya2Vycyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnBvbGF0aW9uQ29uZmlnKG1hcmtlcnNbMF0sIG1hcmtlcnNbMV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGFydDogc3RyaW5nLCBwdWJsaWMgZW5kOiBzdHJpbmcpe307XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOVEVSUE9MQVRJT05fQ09ORklHOiBJbnRlcnBvbGF0aW9uQ29uZmlnID1cclxuICAgIG5ldyBJbnRlcnBvbGF0aW9uQ29uZmlnKCd7eycsICd9fScpOyJdfQ==
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google Inc. 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
|
-
import * as chars from './chars';
|
|
9
|
-
import { NumberWrapper } from '../facade/lang';
|
|
10
|
-
export var TokenType;
|
|
11
|
-
(function (TokenType) {
|
|
12
|
-
TokenType[TokenType["Character"] = 0] = "Character";
|
|
13
|
-
TokenType[TokenType["Identifier"] = 1] = "Identifier";
|
|
14
|
-
TokenType[TokenType["Keyword"] = 2] = "Keyword";
|
|
15
|
-
TokenType[TokenType["String"] = 3] = "String";
|
|
16
|
-
TokenType[TokenType["Operator"] = 4] = "Operator";
|
|
17
|
-
TokenType[TokenType["Number"] = 5] = "Number";
|
|
18
|
-
TokenType[TokenType["Error"] = 6] = "Error";
|
|
19
|
-
})(TokenType || (TokenType = {}));
|
|
20
|
-
const KEYWORDS = ['var', 'let', 'null', 'undefined', 'true', 'false', 'if', 'else', 'this'];
|
|
21
|
-
export class Lexer {
|
|
22
|
-
tokenize(text) {
|
|
23
|
-
const scanner = new _Scanner(text);
|
|
24
|
-
const tokens = [];
|
|
25
|
-
let token = scanner.scanToken();
|
|
26
|
-
while (token != null) {
|
|
27
|
-
tokens.push(token);
|
|
28
|
-
token = scanner.scanToken();
|
|
29
|
-
}
|
|
30
|
-
return tokens;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
export class Token {
|
|
34
|
-
constructor(index, type, numValue, strValue) {
|
|
35
|
-
this.index = index;
|
|
36
|
-
this.type = type;
|
|
37
|
-
this.numValue = numValue;
|
|
38
|
-
this.strValue = strValue;
|
|
39
|
-
}
|
|
40
|
-
isCharacter(code) {
|
|
41
|
-
return this.type == TokenType.Character && this.numValue == code;
|
|
42
|
-
}
|
|
43
|
-
isNumber() { return this.type == TokenType.Number; }
|
|
44
|
-
isString() { return this.type == TokenType.String; }
|
|
45
|
-
isOperator(operater) {
|
|
46
|
-
return this.type == TokenType.Operator && this.strValue == operater;
|
|
47
|
-
}
|
|
48
|
-
isIdentifier() { return this.type == TokenType.Identifier; }
|
|
49
|
-
isKeyword() { return this.type == TokenType.Keyword; }
|
|
50
|
-
isKeywordLet() { return this.type == TokenType.Keyword && this.strValue == 'let'; }
|
|
51
|
-
isKeywordNull() { return this.type == TokenType.Keyword && this.strValue == 'null'; }
|
|
52
|
-
isKeywordUndefined() {
|
|
53
|
-
return this.type == TokenType.Keyword && this.strValue == 'undefined';
|
|
54
|
-
}
|
|
55
|
-
isKeywordTrue() { return this.type == TokenType.Keyword && this.strValue == 'true'; }
|
|
56
|
-
isKeywordFalse() { return this.type == TokenType.Keyword && this.strValue == 'false'; }
|
|
57
|
-
isKeywordThis() { return this.type == TokenType.Keyword && this.strValue == 'this'; }
|
|
58
|
-
isError() { return this.type == TokenType.Error; }
|
|
59
|
-
toNumber() { return this.type == TokenType.Number ? this.numValue : -1; }
|
|
60
|
-
toString() {
|
|
61
|
-
switch (this.type) {
|
|
62
|
-
case TokenType.Character:
|
|
63
|
-
case TokenType.Identifier:
|
|
64
|
-
case TokenType.Keyword:
|
|
65
|
-
case TokenType.Operator:
|
|
66
|
-
case TokenType.String:
|
|
67
|
-
case TokenType.Error:
|
|
68
|
-
return this.strValue;
|
|
69
|
-
case TokenType.Number:
|
|
70
|
-
return this.numValue.toString();
|
|
71
|
-
default:
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function newCharacterToken(index, code) {
|
|
77
|
-
return new Token(index, TokenType.Character, code, String.fromCharCode(code));
|
|
78
|
-
}
|
|
79
|
-
function newIdentifierToken(index, text) {
|
|
80
|
-
return new Token(index, TokenType.Identifier, 0, text);
|
|
81
|
-
}
|
|
82
|
-
function newKeywordToken(index, text) {
|
|
83
|
-
return new Token(index, TokenType.Keyword, 0, text);
|
|
84
|
-
}
|
|
85
|
-
function newOperatorToken(index, text) {
|
|
86
|
-
return new Token(index, TokenType.Operator, 0, text);
|
|
87
|
-
}
|
|
88
|
-
function newStringToken(index, text) {
|
|
89
|
-
return new Token(index, TokenType.String, 0, text);
|
|
90
|
-
}
|
|
91
|
-
function newNumberToken(index, n) {
|
|
92
|
-
return new Token(index, TokenType.Number, n, '');
|
|
93
|
-
}
|
|
94
|
-
function newErrorToken(index, message) {
|
|
95
|
-
return new Token(index, TokenType.Error, 0, message);
|
|
96
|
-
}
|
|
97
|
-
export const EOF = new Token(-1, TokenType.Character, 0, '');
|
|
98
|
-
class _Scanner {
|
|
99
|
-
constructor(input) {
|
|
100
|
-
this.input = input;
|
|
101
|
-
this.peek = 0;
|
|
102
|
-
this.index = -1;
|
|
103
|
-
this.length = input.length;
|
|
104
|
-
this.advance();
|
|
105
|
-
}
|
|
106
|
-
advance() {
|
|
107
|
-
this.peek = ++this.index >= this.length ? chars.$EOF : this.input.charCodeAt(this.index);
|
|
108
|
-
}
|
|
109
|
-
scanToken() {
|
|
110
|
-
const input = this.input, length = this.length;
|
|
111
|
-
let peek = this.peek, index = this.index;
|
|
112
|
-
// Skip whitespace.
|
|
113
|
-
while (peek <= chars.$SPACE) {
|
|
114
|
-
if (++index >= length) {
|
|
115
|
-
peek = chars.$EOF;
|
|
116
|
-
break;
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
peek = input.charCodeAt(index);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
this.peek = peek;
|
|
123
|
-
this.index = index;
|
|
124
|
-
if (index >= length) {
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
// Handle identifiers and numbers.
|
|
128
|
-
if (isIdentifierStart(peek))
|
|
129
|
-
return this.scanIdentifier();
|
|
130
|
-
if (chars.isDigit(peek))
|
|
131
|
-
return this.scanNumber(index);
|
|
132
|
-
const start = index;
|
|
133
|
-
switch (peek) {
|
|
134
|
-
case chars.$PERIOD:
|
|
135
|
-
this.advance();
|
|
136
|
-
return chars.isDigit(this.peek) ? this.scanNumber(start) :
|
|
137
|
-
newCharacterToken(start, chars.$PERIOD);
|
|
138
|
-
case chars.$LPAREN:
|
|
139
|
-
case chars.$RPAREN:
|
|
140
|
-
case chars.$LBRACE:
|
|
141
|
-
case chars.$RBRACE:
|
|
142
|
-
case chars.$LBRACKET:
|
|
143
|
-
case chars.$RBRACKET:
|
|
144
|
-
case chars.$COMMA:
|
|
145
|
-
case chars.$COLON:
|
|
146
|
-
case chars.$SEMICOLON:
|
|
147
|
-
return this.scanCharacter(start, peek);
|
|
148
|
-
case chars.$SQ:
|
|
149
|
-
case chars.$DQ:
|
|
150
|
-
return this.scanString();
|
|
151
|
-
case chars.$HASH:
|
|
152
|
-
case chars.$PLUS:
|
|
153
|
-
case chars.$MINUS:
|
|
154
|
-
case chars.$STAR:
|
|
155
|
-
case chars.$SLASH:
|
|
156
|
-
case chars.$PERCENT:
|
|
157
|
-
case chars.$CARET:
|
|
158
|
-
return this.scanOperator(start, String.fromCharCode(peek));
|
|
159
|
-
case chars.$QUESTION:
|
|
160
|
-
return this.scanComplexOperator(start, '?', chars.$PERIOD, '.');
|
|
161
|
-
case chars.$LT:
|
|
162
|
-
case chars.$GT:
|
|
163
|
-
return this.scanComplexOperator(start, String.fromCharCode(peek), chars.$EQ, '=');
|
|
164
|
-
case chars.$BANG:
|
|
165
|
-
case chars.$EQ:
|
|
166
|
-
return this.scanComplexOperator(start, String.fromCharCode(peek), chars.$EQ, '=', chars.$EQ, '=');
|
|
167
|
-
case chars.$AMPERSAND:
|
|
168
|
-
return this.scanComplexOperator(start, '&', chars.$AMPERSAND, '&');
|
|
169
|
-
case chars.$BAR:
|
|
170
|
-
return this.scanComplexOperator(start, '|', chars.$BAR, '|');
|
|
171
|
-
case chars.$NBSP:
|
|
172
|
-
while (chars.isWhitespace(this.peek))
|
|
173
|
-
this.advance();
|
|
174
|
-
return this.scanToken();
|
|
175
|
-
}
|
|
176
|
-
this.advance();
|
|
177
|
-
return this.error(`Unexpected character [${String.fromCharCode(peek)}]`, 0);
|
|
178
|
-
}
|
|
179
|
-
scanCharacter(start, code) {
|
|
180
|
-
this.advance();
|
|
181
|
-
return newCharacterToken(start, code);
|
|
182
|
-
}
|
|
183
|
-
scanOperator(start, str) {
|
|
184
|
-
this.advance();
|
|
185
|
-
return newOperatorToken(start, str);
|
|
186
|
-
}
|
|
187
|
-
/**
|
|
188
|
-
* Tokenize a 2/3 char long operator
|
|
189
|
-
*
|
|
190
|
-
* @param start start index in the expression
|
|
191
|
-
* @param one first symbol (always part of the operator)
|
|
192
|
-
* @param twoCode code point for the second symbol
|
|
193
|
-
* @param two second symbol (part of the operator when the second code point matches)
|
|
194
|
-
* @param threeCode code point for the third symbol
|
|
195
|
-
* @param three third symbol (part of the operator when provided and matches source expression)
|
|
196
|
-
* @returns {Token}
|
|
197
|
-
*/
|
|
198
|
-
scanComplexOperator(start, one, twoCode, two, threeCode, three) {
|
|
199
|
-
this.advance();
|
|
200
|
-
let str = one;
|
|
201
|
-
if (this.peek == twoCode) {
|
|
202
|
-
this.advance();
|
|
203
|
-
str += two;
|
|
204
|
-
}
|
|
205
|
-
if (threeCode != null && this.peek == threeCode) {
|
|
206
|
-
this.advance();
|
|
207
|
-
str += three;
|
|
208
|
-
}
|
|
209
|
-
return newOperatorToken(start, str);
|
|
210
|
-
}
|
|
211
|
-
scanIdentifier() {
|
|
212
|
-
const start = this.index;
|
|
213
|
-
this.advance();
|
|
214
|
-
while (isIdentifierPart(this.peek))
|
|
215
|
-
this.advance();
|
|
216
|
-
const str = this.input.substring(start, this.index);
|
|
217
|
-
return KEYWORDS.indexOf(str) > -1 ? newKeywordToken(start, str) :
|
|
218
|
-
newIdentifierToken(start, str);
|
|
219
|
-
}
|
|
220
|
-
scanNumber(start) {
|
|
221
|
-
let simple = (this.index === start);
|
|
222
|
-
this.advance(); // Skip initial digit.
|
|
223
|
-
while (true) {
|
|
224
|
-
if (chars.isDigit(this.peek)) {
|
|
225
|
-
// Do nothing.
|
|
226
|
-
}
|
|
227
|
-
else if (this.peek == chars.$PERIOD) {
|
|
228
|
-
simple = false;
|
|
229
|
-
}
|
|
230
|
-
else if (isExponentStart(this.peek)) {
|
|
231
|
-
this.advance();
|
|
232
|
-
if (isExponentSign(this.peek))
|
|
233
|
-
this.advance();
|
|
234
|
-
if (!chars.isDigit(this.peek))
|
|
235
|
-
return this.error('Invalid exponent', -1);
|
|
236
|
-
simple = false;
|
|
237
|
-
}
|
|
238
|
-
else {
|
|
239
|
-
break;
|
|
240
|
-
}
|
|
241
|
-
this.advance();
|
|
242
|
-
}
|
|
243
|
-
const str = this.input.substring(start, this.index);
|
|
244
|
-
const value = simple ? NumberWrapper.parseIntAutoRadix(str) : parseFloat(str);
|
|
245
|
-
return newNumberToken(start, value);
|
|
246
|
-
}
|
|
247
|
-
scanString() {
|
|
248
|
-
const start = this.index;
|
|
249
|
-
const quote = this.peek;
|
|
250
|
-
this.advance(); // Skip initial quote.
|
|
251
|
-
let buffer = '';
|
|
252
|
-
let marker = this.index;
|
|
253
|
-
const input = this.input;
|
|
254
|
-
while (this.peek != quote) {
|
|
255
|
-
if (this.peek == chars.$BACKSLASH) {
|
|
256
|
-
buffer += input.substring(marker, this.index);
|
|
257
|
-
this.advance();
|
|
258
|
-
let unescapedCode;
|
|
259
|
-
// Workaround for TS2.1-introduced type strictness
|
|
260
|
-
this.peek = this.peek;
|
|
261
|
-
if (this.peek == chars.$u) {
|
|
262
|
-
// 4 character hex code for unicode character.
|
|
263
|
-
const hex = input.substring(this.index + 1, this.index + 5);
|
|
264
|
-
if (/^[0-9a-f]+$/i.test(hex)) {
|
|
265
|
-
unescapedCode = parseInt(hex, 16);
|
|
266
|
-
}
|
|
267
|
-
else {
|
|
268
|
-
return this.error(`Invalid unicode escape [\\u${hex}]`, 0);
|
|
269
|
-
}
|
|
270
|
-
for (let i = 0; i < 5; i++) {
|
|
271
|
-
this.advance();
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
unescapedCode = unescape(this.peek);
|
|
276
|
-
this.advance();
|
|
277
|
-
}
|
|
278
|
-
buffer += String.fromCharCode(unescapedCode);
|
|
279
|
-
marker = this.index;
|
|
280
|
-
}
|
|
281
|
-
else if (this.peek == chars.$EOF) {
|
|
282
|
-
return this.error('Unterminated quote', 0);
|
|
283
|
-
}
|
|
284
|
-
else {
|
|
285
|
-
this.advance();
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
const last = input.substring(marker, this.index);
|
|
289
|
-
this.advance(); // Skip terminating quote.
|
|
290
|
-
return newStringToken(start, buffer + last);
|
|
291
|
-
}
|
|
292
|
-
error(message, offset) {
|
|
293
|
-
const position = this.index + offset;
|
|
294
|
-
return newErrorToken(position, `Lexer Error: ${message} at column ${position} in expression [${this.input}]`);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
function isIdentifierStart(code) {
|
|
298
|
-
return (chars.$a <= code && code <= chars.$z) || (chars.$A <= code && code <= chars.$Z) ||
|
|
299
|
-
(code == chars.$_) || (code == chars.$$);
|
|
300
|
-
}
|
|
301
|
-
export function isIdentifier(input) {
|
|
302
|
-
if (input.length == 0)
|
|
303
|
-
return false;
|
|
304
|
-
const scanner = new _Scanner(input);
|
|
305
|
-
if (!isIdentifierStart(scanner.peek))
|
|
306
|
-
return false;
|
|
307
|
-
scanner.advance();
|
|
308
|
-
while (scanner.peek !== chars.$EOF) {
|
|
309
|
-
if (!isIdentifierPart(scanner.peek))
|
|
310
|
-
return false;
|
|
311
|
-
scanner.advance();
|
|
312
|
-
}
|
|
313
|
-
return true;
|
|
314
|
-
}
|
|
315
|
-
function isIdentifierPart(code) {
|
|
316
|
-
return chars.isAsciiLetter(code) || chars.isDigit(code) || (code == chars.$_) ||
|
|
317
|
-
(code == chars.$$);
|
|
318
|
-
}
|
|
319
|
-
function isExponentStart(code) {
|
|
320
|
-
return code == chars.$e || code == chars.$E;
|
|
321
|
-
}
|
|
322
|
-
function isExponentSign(code) {
|
|
323
|
-
return code == chars.$MINUS || code == chars.$PLUS;
|
|
324
|
-
}
|
|
325
|
-
export function isQuote(code) {
|
|
326
|
-
return code === chars.$SQ || code === chars.$DQ || code === chars.$BT;
|
|
327
|
-
}
|
|
328
|
-
function unescape(code) {
|
|
329
|
-
switch (code) {
|
|
330
|
-
case chars.$n:
|
|
331
|
-
return chars.$LF;
|
|
332
|
-
case chars.$f:
|
|
333
|
-
return chars.$FF;
|
|
334
|
-
case chars.$r:
|
|
335
|
-
return chars.$CR;
|
|
336
|
-
case chars.$t:
|
|
337
|
-
return chars.$TAB;
|
|
338
|
-
case chars.$v:
|
|
339
|
-
return chars.$VTAB;
|
|
340
|
-
default:
|
|
341
|
-
return code;
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGV4ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyMnBhcnNlL3NyYy9saWIvYW5ndWxhci9jb21waWxlci9sZXhlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssS0FBSyxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsTUFBTSxDQUFOLElBQVksU0FRWDtBQVJELFdBQVksU0FBUztJQUNqQixtREFBUyxDQUFBO0lBQ1QscURBQVUsQ0FBQTtJQUNWLCtDQUFPLENBQUE7SUFDUCw2Q0FBTSxDQUFBO0lBQ04saURBQVEsQ0FBQTtJQUNSLDZDQUFNLENBQUE7SUFDTiwyQ0FBSyxDQUFBO0FBQ1QsQ0FBQyxFQVJXLFNBQVMsS0FBVCxTQUFTLFFBUXBCO0FBRUQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBRTVGLE1BQU0sT0FBTyxLQUFLO0lBQ2QsUUFBUSxDQUFDLElBQVk7UUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQVksRUFBRSxDQUFDO1FBQzNCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7Q0FDSjtBQUVE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SUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQVk7SUFDaEMsT0FBTyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFZO0lBQ2hDLE9BQU8sSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDMUUsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLElBQVk7SUFDMUIsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNYLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDckIsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNyQixLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ1QsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3JCLEtBQUssS0FBSyxDQUFDLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdEIsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUNULE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN2QjtZQUNJLE9BQU8sSUFBSSxDQUFDO0lBQ3BCLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxyXG4gKlxyXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxyXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0ICogYXMgY2hhcnMgZnJvbSAnLi9jaGFycyc7XHJcbmltcG9ydCB7TnVtYmVyV3JhcHBlcn0gZnJvbSAnLi4vZmFjYWRlL2xhbmcnO1xyXG5cclxuZXhwb3J0IGVudW0gVG9rZW5UeXBlIHtcclxuICAgIENoYXJhY3RlcixcclxuICAgIElkZW50aWZpZXIsXHJcbiAgICBLZXl3b3JkLFxyXG4gICAgU3RyaW5nLFxyXG4gICAgT3BlcmF0b3IsXHJcbiAgICBOdW1iZXIsXHJcbiAgICBFcnJvclxyXG59XHJcblxyXG5jb25zdCBLRVlXT1JEUyA9IFsndmFyJywgJ2xldCcsICdudWxsJywgJ3VuZGVmaW5lZCcsICd0cnVlJywgJ2ZhbHNlJywgJ2lmJywgJ2Vsc2UnLCAndGhpcyddO1xyXG5cclxuZXhwb3J0IGNsYXNzIExleGVyIHtcclxuICAgIHRva2VuaXplKHRleHQ6IHN0cmluZyk6IFRva2VuW10ge1xyXG4gICAgICAgIGNvbnN0IHNjYW5uZXIgPSBuZXcgX1NjYW5uZXIodGV4dCk7XHJcbiAgICAgICAgY29uc3QgdG9rZW5zOiBUb2tlbltdID0gW107XHJcbiAgICAgICAgbGV0IHRva2VuID0gc2Nhbm5lci5zY2FuVG9rZW4oKTtcclxuICAgICAgICB3aGlsZSAodG9rZW4gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0b2tlbnMucHVzaCh0b2tlbik7XHJcbiAgICAgICAgICAgIHRva2VuID0gc2Nhbm5lci5zY2FuVG9rZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRva2VucztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRva2VuIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpbmRleDogbnVtYmVyLCBwdWJsaWMgdHlwZTogVG9rZW5UeXBlLCBwdWJsaWMgbnVtVmFsdWU6IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgc3RyVmFsdWU6IHN0cmluZykge31cclxuXHJcbiAgICBpc0NoYXJhY3Rlcihjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09IFRva2VuVHlwZS5DaGFyYWN0ZXIgJiYgdGhpcy5udW1WYWx1ZSA9PSBjb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTnVtYmVyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50eXBlID09IFRva2VuVHlwZS5OdW1iZXI7IH1cclxuXHJcbiAgICBpc1N0cmluZygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PSBUb2tlblR5cGUuU3RyaW5nOyB9XHJcblxyXG4gICAgaXNPcGVyYXRvcihvcGVyYXRlcjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PSBUb2tlblR5cGUuT3BlcmF0b3IgJiYgdGhpcy5zdHJWYWx1ZSA9PSBvcGVyYXRlcjtcclxuICAgIH1cclxuXHJcbiAgICBpc0lkZW50aWZpZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnR5cGUgPT0gVG9rZW5UeXBlLklkZW50aWZpZXI7IH1cclxuXHJcbiAgICBpc0tleXdvcmQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnR5cGUgPT0gVG9rZW5UeXBlLktleXdvcmQ7IH1cclxuXHJcbiAgICBpc0tleXdvcmRMZXQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnR5cGUgPT0gVG9rZW5UeXBlLktleXdvcmQgJiYgdGhpcy5zdHJWYWx1ZSA9PSAnbGV0JzsgfVxyXG5cclxuICAgIGlzS2V5d29yZE51bGwoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnR5cGUgPT0gVG9rZW5UeXBlLktleXdvcmQgJiYgdGhpcy5zdHJWYWx1ZSA9PSAnbnVsbCc7IH1cclxuXHJcbiAgICBpc0tleXdvcmRVbmRlZmluZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PSBUb2tlblR5cGUuS2V5d29yZCAmJiB0aGlzLnN0clZhbHVlID09ICd1bmRlZmluZWQnO1xyXG4gICAgfVxyXG5cclxuICAgIGlzS2V5d29yZFRydWUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnR5cGUgPT0gVG9rZW5UeXBlLktleXdvcmQgJiYgdGhpcy5zdHJWYWx1ZSA9PSAndHJ1ZSc7IH1cclxuXHJcbiAgICBpc0tleXdvcmRGYWxzZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PSBUb2tlblR5cGUuS2V5d29yZCAmJiB0aGlzLnN0clZhbHVlID09ICdmYWxzZSc7IH1cclxuXHJcbiAgICBpc0tleXdvcmRUaGlzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50eXBlID09IFRva2VuVHlwZS5LZXl3b3JkICYmIHRoaXMuc3RyVmFsdWUgPT0gJ3RoaXMnOyB9XHJcblxyXG4gICAgaXNFcnJvcigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudHlwZSA9PSBUb2tlblR5cGUuRXJyb3I7IH1cclxuXHJcbiAgICB0b051bWJlcigpOiBudW1iZXIgeyByZXR1cm4gdGhpcy50eXBlID09IFRva2VuVHlwZS5OdW1iZXIgPyB0aGlzLm51bVZhbHVlIDogLTE7IH1cclxuXHJcbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkNoYXJhY3RlcjpcclxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuSWRlbnRpZmllcjpcclxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuS2V5d29yZDpcclxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuT3BlcmF0b3I6XHJcbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLlN0cmluZzpcclxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuRXJyb3I6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJWYWx1ZTtcclxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuTnVtYmVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtVmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbmV3Q2hhcmFjdGVyVG9rZW4oaW5kZXg6IG51bWJlciwgY29kZTogbnVtYmVyKTogVG9rZW4ge1xyXG4gICAgcmV0dXJuIG5ldyBUb2tlbihpbmRleCwgVG9rZW5UeXBlLkNoYXJhY3RlciwgY29kZSwgU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5ld0lkZW50aWZpZXJUb2tlbihpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiBUb2tlbiB7XHJcbiAgICByZXR1cm4gbmV3IFRva2VuKGluZGV4LCBUb2tlblR5cGUuSWRlbnRpZmllciwgMCwgdGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5ld0tleXdvcmRUb2tlbihpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiBUb2tlbiB7XHJcbiAgICByZXR1cm4gbmV3IFRva2VuKGluZGV4LCBUb2tlblR5cGUuS2V5d29yZCwgMCwgdGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5ld09wZXJhdG9yVG9rZW4oaW5kZXg6IG51bWJlciwgdGV4dDogc3RyaW5nKTogVG9rZW4ge1xyXG4gICAgcmV0dXJuIG5ldyBUb2tlbihpbmRleCwgVG9rZW5UeXBlLk9wZXJhdG9yLCAwLCB0ZXh0KTtcclxufVxyXG5cclxuZnVuY3Rpb24gbmV3U3RyaW5nVG9rZW4oaW5kZXg6IG51bWJlciwgdGV4dDogc3RyaW5nKTogVG9rZW4ge1xyXG4gICAgcmV0dXJuIG5ldyBUb2tlbihpbmRleCwgVG9rZW5UeXBlLlN0cmluZywgMCwgdGV4dCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5ld051bWJlclRva2VuKGluZGV4OiBudW1iZXIsIG46IG51bWJlcik6IFRva2VuIHtcclxuICAgIHJldHVybiBuZXcgVG9rZW4oaW5kZXgsIFRva2VuVHlwZS5OdW1iZXIsIG4sICcnKTtcclxufVxyXG5cclxuZnVuY3Rpb24gbmV3RXJyb3JUb2tlbihpbmRleDogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcpOiBUb2tlbiB7XHJcbiAgICByZXR1cm4gbmV3IFRva2VuKGluZGV4LCBUb2tlblR5cGUuRXJyb3IsIDAsIG1lc3NhZ2UpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgRU9GOiBUb2tlbiA9IG5ldyBUb2tlbigtMSwgVG9rZW5UeXBlLkNoYXJhY3RlciwgMCwgJycpO1xyXG5cclxuY2xhc3MgX1NjYW5uZXIge1xyXG4gICAgbGVuZ3RoOiBudW1iZXI7XHJcbiAgICBwZWVrOiBudW1iZXIgPSAwO1xyXG4gICAgaW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpbnB1dDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWR2YW5jZSgpIHtcclxuICAgICAgICB0aGlzLnBlZWsgPSArK3RoaXMuaW5kZXggPj0gdGhpcy5sZW5ndGggPyBjaGFycy4kRU9GIDogdGhpcy5pbnB1dC5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjYW5Ub2tlbigpOiBUb2tlbiB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0LCBsZW5ndGggPSB0aGlzLmxlbmd0aDtcclxuICAgICAgICBsZXQgcGVlayA9IHRoaXMucGVlaywgaW5kZXggPSB0aGlzLmluZGV4O1xyXG5cclxuICAgICAgICAvLyBTa2lwIHdoaXRlc3BhY2UuXHJcbiAgICAgICAgd2hpbGUgKHBlZWsgPD0gY2hhcnMuJFNQQUNFKSB7XHJcbiAgICAgICAgICAgIGlmICgrK2luZGV4ID49IGxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcGVlayA9IGNoYXJzLiRFT0Y7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHBlZWsgPSBpbnB1dC5jaGFyQ29kZUF0KGluZGV4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZWVrID0gcGVlaztcclxuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBIYW5kbGUgaWRlbnRpZmllcnMgYW5kIG51bWJlcnMuXHJcbiAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHBlZWspKSByZXR1cm4gdGhpcy5zY2FuSWRlbnRpZmllcigpO1xyXG4gICAgICAgIGlmIChjaGFycy5pc0RpZ2l0KHBlZWspKSByZXR1cm4gdGhpcy5zY2FuTnVtYmVyKGluZGV4KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3RhcnQ6IG51bWJlciA9IGluZGV4O1xyXG4gICAgICAgIHN3aXRjaCAocGVlaykge1xyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiRQRVJJT0Q6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGFycy5pc0RpZ2l0KHRoaXMucGVlaykgPyB0aGlzLnNjYW5OdW1iZXIoc3RhcnQpIDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdDaGFyYWN0ZXJUb2tlbihzdGFydCwgY2hhcnMuJFBFUklPRCk7XHJcbiAgICAgICAgICAgIGNhc2UgY2hhcnMuJExQQVJFTjpcclxuICAgICAgICAgICAgY2FzZSBjaGFycy4kUlBBUkVOOlxyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiRMQlJBQ0U6XHJcbiAgICAgICAgICAgIGNhc2UgY2hhcnMuJFJCUkFDRTpcclxuICAgICAgICAgICAgY2FzZSBjaGFycy4kTEJSQUNLRVQ6XHJcbiAgICAgICAgICAgIGNhc2UgY2hhcnMuJFJCUkFDS0VUOlxyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiRDT01NQTpcclxuICAgICAgICAgICAgY2FzZSBjaGFycy4kQ09MT046XHJcbiAgICAgICAgICAgIGNhc2UgY2hhcnMuJFNFTUlDT0xPTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5DaGFyYWN0ZXIoc3RhcnQsIHBlZWspO1xyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiRTUTpcclxuICAgICAgICAgICAgY2FzZSBjaGFycy4kRFE6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGNhc2UgY2hhcnMuJEhBU0g6XHJcbiAgICAgICAgICAgIGNhc2UgY2hhcnMuJFBMVVM6XHJcbiAgICAgICAgICAgIGNhc2UgY2hhcnMuJE1JTlVTOlxyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiRTVEFSOlxyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiRTTEFTSDpcclxuICAgICAgICAgICAgY2FzZSBjaGFycy4kUEVSQ0VOVDpcclxuICAgICAgICAgICAgY2FzZSBjaGFycy4kQ0FSRVQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zY2FuT3BlcmF0b3Ioc3RhcnQsIFN0cmluZy5mcm9tQ2hhckNvZGUocGVlaykpO1xyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiRRVUVTVElPTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3Ioc3RhcnQsICc/JywgY2hhcnMuJFBFUklPRCwgJy4nKTtcclxuICAgICAgICAgICAgY2FzZSBjaGFycy4kTFQ6XHJcbiAgICAgICAgICAgIGNhc2UgY2hhcnMuJEdUOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbkNvbXBsZXhPcGVyYXRvcihzdGFydCwgU3RyaW5nLmZyb21DaGFyQ29kZShwZWVrKSwgY2hhcnMuJEVRLCAnPScpO1xyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiRCQU5HOlxyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiRFUTpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQsIFN0cmluZy5mcm9tQ2hhckNvZGUocGVlayksIGNoYXJzLiRFUSwgJz0nLCBjaGFycy4kRVEsICc9Jyk7XHJcbiAgICAgICAgICAgIGNhc2UgY2hhcnMuJEFNUEVSU0FORDpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5Db21wbGV4T3BlcmF0b3Ioc3RhcnQsICcmJywgY2hhcnMuJEFNUEVSU0FORCwgJyYnKTtcclxuICAgICAgICAgICAgY2FzZSBjaGFycy4kQkFSOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NhbkNvbXBsZXhPcGVyYXRvcihzdGFydCwgJ3wnLCBjaGFycy4kQkFSLCAnfCcpO1xyXG4gICAgICAgICAgICBjYXNlIGNoYXJzLiROQlNQOlxyXG4gICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJzLmlzV2hpdGVzcGFjZSh0aGlzLnBlZWspKSB0aGlzLmFkdmFuY2UoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNjYW5Ub2tlbigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hZHZhbmNlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIFske1N0cmluZy5mcm9tQ2hhckNvZGUocGVlayl9XWAsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNjYW5DaGFyYWN0ZXIoc3RhcnQ6IG51bWJlciwgY29kZTogbnVtYmVyKTogVG9rZW4ge1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZSgpO1xyXG4gICAgICAgIHJldHVybiBuZXdDaGFyYWN0ZXJUb2tlbihzdGFydCwgY29kZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHNjYW5PcGVyYXRvcihzdGFydDogbnVtYmVyLCBzdHI6IHN0cmluZyk6IFRva2VuIHtcclxuICAgICAgICB0aGlzLmFkdmFuY2UoKTtcclxuICAgICAgICByZXR1cm4gbmV3T3BlcmF0b3JUb2tlbihzdGFydCwgc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRva2VuaXplIGEgMi8zIGNoYXIgbG9uZyBvcGVyYXRvclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdGFydCBzdGFydCBpbmRleCBpbiB0aGUgZXhwcmVzc2lvblxyXG4gICAgICogQHBhcmFtIG9uZSBmaXJzdCBzeW1ib2wgKGFsd2F5cyBwYXJ0IG9mIHRoZSBvcGVyYXRvcilcclxuICAgICAqIEBwYXJhbSB0d29Db2RlIGNvZGUgcG9pbnQgZm9yIHRoZSBzZWNvbmQgc3ltYm9sXHJcbiAgICAgKiBAcGFyYW0gdHdvIHNlY29uZCBzeW1ib2wgKHBhcnQgb2YgdGhlIG9wZXJhdG9yIHdoZW4gdGhlIHNlY29uZCBjb2RlIHBvaW50IG1hdGNoZXMpXHJcbiAgICAgKiBAcGFyYW0gdGhyZWVDb2RlIGNvZGUgcG9pbnQgZm9yIHRoZSB0aGlyZCBzeW1ib2xcclxuICAgICAqIEBwYXJhbSB0aHJlZSB0aGlyZCBzeW1ib2wgKHBhcnQgb2YgdGhlIG9wZXJhdG9yIHdoZW4gcHJvdmlkZWQgYW5kIG1hdGNoZXMgc291cmNlIGV4cHJlc3Npb24pXHJcbiAgICAgKiBAcmV0dXJucyB7VG9rZW59XHJcbiAgICAgKi9cclxuICAgIHNjYW5Db21wbGV4T3BlcmF0b3IoXHJcbiAgICAgICAgc3RhcnQ6IG51bWJlciwgb25lOiBzdHJpbmcsIHR3b0NvZGU6IG51bWJlciwgdHdvOiBzdHJpbmcsIHRocmVlQ29kZT86IG51bWJlcixcclxuICAgICAgICB0aHJlZT86IHN0cmluZyk6IFRva2VuIHtcclxuICAgICAgICB0aGlzLmFkdmFuY2UoKTtcclxuICAgICAgICBsZXQgc3RyOiBzdHJpbmcgPSBvbmU7XHJcbiAgICAgICAgaWYgKHRoaXMucGVlayA9PSB0d29Db2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xyXG4gICAgICAgICAgICBzdHIgKz0gdHdvO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhyZWVDb2RlICE9IG51bGwgJiYgdGhpcy5wZWVrID09IHRocmVlQ29kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcclxuICAgICAgICAgICAgc3RyICs9IHRocmVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbmV3T3BlcmF0b3JUb2tlbihzdGFydCwgc3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBzY2FuSWRlbnRpZmllcigpOiBUb2tlbiB7XHJcbiAgICAgICAgY29uc3Qgc3RhcnQ6IG51bWJlciA9IHRoaXMuaW5kZXg7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlKCk7XHJcbiAgICAgICAgd2hpbGUgKGlzSWRlbnRpZmllclBhcnQodGhpcy5wZWVrKSkgdGhpcy5hZHZhbmNlKCk7XHJcbiAgICAgICAgY29uc3Qgc3RyOiBzdHJpbmcgPSB0aGlzLmlucHV0LnN1YnN0cmluZyhzdGFydCwgdGhpcy5pbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIEtFWVdPUkRTLmluZGV4T2Yoc3RyKSA+IC0xID8gbmV3S2V5d29yZFRva2VuKHN0YXJ0LCBzdHIpIDpcclxuICAgICAgICAgICAgbmV3SWRlbnRpZmllclRva2VuKHN0YXJ0LCBzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjYW5OdW1iZXIoc3RhcnQ6IG51bWJlcik6IFRva2VuIHtcclxuICAgICAgICBsZXQgc2ltcGxlOiBib29sZWFuID0gKHRoaXMuaW5kZXggPT09IHN0YXJ0KTtcclxuICAgICAgICB0aGlzLmFkdmFuY2UoKTsgIC8vIFNraXAgaW5pdGlhbCBkaWdpdC5cclxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAoY2hhcnMuaXNEaWdpdCh0aGlzLnBlZWspKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLlxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGVlayA9PSBjaGFycy4kUEVSSU9EKSB7XHJcbiAgICAgICAgICAgICAgICBzaW1wbGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0V4cG9uZW50U3RhcnQodGhpcy5wZWVrKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZHZhbmNlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNFeHBvbmVudFNpZ24odGhpcy5wZWVrKSkgdGhpcy5hZHZhbmNlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNoYXJzLmlzRGlnaXQodGhpcy5wZWVrKSkgcmV0dXJuIHRoaXMuZXJyb3IoJ0ludmFsaWQgZXhwb25lbnQnLCAtMSk7XHJcbiAgICAgICAgICAgICAgICBzaW1wbGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdHI6IHN0cmluZyA9IHRoaXMuaW5wdXQuc3Vic3RyaW5nKHN0YXJ0LCB0aGlzLmluZGV4KTtcclxuICAgICAgICBjb25zdCB2YWx1ZTogbnVtYmVyID0gc2ltcGxlID8gTnVtYmVyV3JhcHBlci5wYXJzZUludEF1dG9SYWRpeChzdHIpIDogcGFyc2VGbG9hdChzdHIpO1xyXG4gICAgICAgIHJldHVybiBuZXdOdW1iZXJUb2tlbihzdGFydCwgdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjYW5TdHJpbmcoKTogVG9rZW4ge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0OiBudW1iZXIgPSB0aGlzLmluZGV4O1xyXG4gICAgICAgIGNvbnN0IHF1b3RlOiBudW1iZXIgPSB0aGlzLnBlZWs7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlKCk7ICAvLyBTa2lwIGluaXRpYWwgcXVvdGUuXHJcblxyXG4gICAgICAgIGxldCBidWZmZXI6IHN0cmluZyA9ICcnO1xyXG4gICAgICAgIGxldCBtYXJrZXI6IG51bWJlciA9IHRoaXMuaW5kZXg7XHJcbiAgICAgICAgY29uc3QgaW5wdXQ6IHN0cmluZyA9IHRoaXMuaW5wdXQ7XHJcblxyXG4gICAgICAgIHdoaWxlICh0aGlzLnBlZWsgIT0gcXVvdGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMucGVlayA9PSBjaGFycy4kQkFDS1NMQVNIKSB7XHJcbiAgICAgICAgICAgICAgICBidWZmZXIgKz0gaW5wdXQuc3Vic3RyaW5nKG1hcmtlciwgdGhpcy5pbmRleCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcclxuICAgICAgICAgICAgICAgIGxldCB1bmVzY2FwZWRDb2RlOiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBUUzIuMS1pbnRyb2R1Y2VkIHR5cGUgc3RyaWN0bmVzc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wZWVrID0gdGhpcy5wZWVrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGVlayA9PSBjaGFycy4kdSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDQgY2hhcmFjdGVyIGhleCBjb2RlIGZvciB1bmljb2RlIGNoYXJhY3Rlci5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZXg6IHN0cmluZyA9IGlucHV0LnN1YnN0cmluZyh0aGlzLmluZGV4ICsgMSwgdGhpcy5pbmRleCArIDUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgvXlswLTlhLWZdKyQvaS50ZXN0KGhleCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkQ29kZSA9IHBhcnNlSW50KGhleCwgMTYpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVycm9yKGBJbnZhbGlkIHVuaWNvZGUgZXNjYXBlIFtcXFxcdSR7aGV4fV1gLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IDU7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZENvZGUgPSB1bmVzY2FwZSh0aGlzLnBlZWspO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWR2YW5jZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnVmZmVyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodW5lc2NhcGVkQ29kZSk7XHJcbiAgICAgICAgICAgICAgICBtYXJrZXIgPSB0aGlzLmluZGV4O1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGVlayA9PSBjaGFycy4kRU9GKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcignVW50ZXJtaW5hdGVkIHF1b3RlJywgMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkdmFuY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbGFzdDogc3RyaW5nID0gaW5wdXQuc3Vic3RyaW5nKG1hcmtlciwgdGhpcy5pbmRleCk7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlKCk7ICAvLyBTa2lwIHRlcm1pbmF0aW5nIHF1b3RlLlxyXG5cclxuICAgICAgICByZXR1cm4gbmV3U3RyaW5nVG9rZW4oc3RhcnQsIGJ1ZmZlciArIGxhc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgb2Zmc2V0OiBudW1iZXIpOiBUb2tlbiB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb246IG51bWJlciA9IHRoaXMuaW5kZXggKyBvZmZzZXQ7XHJcbiAgICAgICAgcmV0dXJuIG5ld0Vycm9yVG9rZW4oXHJcbiAgICAgICAgICAgIHBvc2l0aW9uLCBgTGV4ZXIgRXJyb3I6ICR7bWVzc2FnZX0gYXQgY29sdW1uICR7cG9zaXRpb259IGluIGV4cHJlc3Npb24gWyR7dGhpcy5pbnB1dH1dYCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChjaGFycy4kYSA8PSBjb2RlICYmIGNvZGUgPD0gY2hhcnMuJHopIHx8IChjaGFycy4kQSA8PSBjb2RlICYmIGNvZGUgPD0gY2hhcnMuJFopIHx8XHJcbiAgICAgICAgKGNvZGUgPT0gY2hhcnMuJF8pIHx8IChjb2RlID09IGNoYXJzLiQkKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzSWRlbnRpZmllcihpbnB1dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaW5wdXQubGVuZ3RoID09IDApIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IHNjYW5uZXIgPSBuZXcgX1NjYW5uZXIoaW5wdXQpO1xyXG4gICAgaWYgKCFpc0lkZW50aWZpZXJTdGFydChzY2FubmVyLnBlZWspKSByZXR1cm4gZmFsc2U7XHJcbiAgICBzY2FubmVyLmFkdmFuY2UoKTtcclxuICAgIHdoaWxlIChzY2FubmVyLnBlZWsgIT09IGNoYXJzLiRFT0YpIHtcclxuICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoc2Nhbm5lci5wZWVrKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHNjYW5uZXIuYWR2YW5jZSgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSWRlbnRpZmllclBhcnQoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY2hhcnMuaXNBc2NpaUxldHRlcihjb2RlKSB8fCBjaGFycy5pc0RpZ2l0KGNvZGUpIHx8IChjb2RlID09IGNoYXJzLiRfKSB8fFxyXG4gICAgICAgIChjb2RlID09IGNoYXJzLiQkKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFeHBvbmVudFN0YXJ0KGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvZGUgPT0gY2hhcnMuJGUgfHwgY29kZSA9PSBjaGFycy4kRTtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNFeHBvbmVudFNpZ24oY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29kZSA9PSBjaGFycy4kTUlOVVMgfHwgY29kZSA9PSBjaGFycy4kUExVUztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUXVvdGUoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gY29kZSA9PT0gY2hhcnMuJFNRIHx8IGNvZGUgPT09IGNoYXJzLiREUSB8fCBjb2RlID09PSBjaGFycy4kQlQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVuZXNjYXBlKGNvZGU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBzd2l0Y2ggKGNvZGUpIHtcclxuICAgICAgICBjYXNlIGNoYXJzLiRuOlxyXG4gICAgICAgICAgICByZXR1cm4gY2hhcnMuJExGO1xyXG4gICAgICAgIGNhc2UgY2hhcnMuJGY6XHJcbiAgICAgICAgICAgIHJldHVybiBjaGFycy4kRkY7XHJcbiAgICAgICAgY2FzZSBjaGFycy4kcjpcclxuICAgICAgICAgICAgcmV0dXJuIGNoYXJzLiRDUjtcclxuICAgICAgICBjYXNlIGNoYXJzLiR0OlxyXG4gICAgICAgICAgICByZXR1cm4gY2hhcnMuJFRBQjtcclxuICAgICAgICBjYXNlIGNoYXJzLiR2OlxyXG4gICAgICAgICAgICByZXR1cm4gY2hhcnMuJFZUQUI7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIGNvZGU7XHJcbiAgICB9XHJcbn0iXX0=
|