@auscope/angular2parse 2.0.0 → 2.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/auscope-angular2parse.d.ts +5 -0
- package/esm2020/auscope-angular2parse.mjs +5 -0
- package/esm2020/lib/angular/compiler/assertions.mjs +45 -0
- package/esm2020/lib/angular/compiler/ast.mjs +393 -0
- package/esm2020/lib/angular/compiler/chars.mjs +78 -0
- package/esm2020/lib/angular/compiler/interpolation-config.mjs +24 -0
- package/esm2020/lib/angular/compiler/lexer.mjs +344 -0
- package/esm2020/lib/angular/compiler/parser.mjs +721 -0
- package/esm2020/lib/angular/compiler.mjs +7 -0
- package/esm2020/lib/angular/facade/lang.mjs +85 -0
- package/esm2020/lib/angular/facade.mjs +2 -0
- package/esm2020/lib/angular.mjs +3 -0
- package/esm2020/lib/module.mjs +18 -0
- package/esm2020/lib/parse.mjs +66 -0
- package/esm2020/lib/util/binary-operations.mjs +18 -0
- package/esm2020/lib/util/lang.mjs +13 -0
- package/esm2020/lib/util.mjs +3 -0
- package/esm2020/lib/visitors/parse-visitor-compiler.mjs +96 -0
- package/esm2020/lib/visitors/parse-visitor-resolver.mjs +141 -0
- package/esm2020/lib/visitors.mjs +3 -0
- package/esm2020/public-api.mjs +6 -0
- package/fesm2015/auscope-angular2parse.mjs +2035 -0
- package/fesm2015/auscope-angular2parse.mjs.map +1 -0
- package/fesm2020/auscope-angular2parse.mjs +2033 -0
- package/fesm2020/auscope-angular2parse.mjs.map +1 -0
- package/lib/angular/compiler/assertions.d.ts +9 -0
- package/lib/angular/compiler/ast.d.ts +242 -0
- package/lib/angular/compiler/chars.d.ts +69 -0
- package/lib/angular/compiler/interpolation-config.d.ts +14 -0
- package/lib/angular/compiler/lexer.d.ts +44 -0
- package/lib/angular/compiler/parser.d.ts +92 -0
- package/{src/lib/angular/compiler.ts → lib/angular/compiler.d.ts} +1 -1
- package/lib/angular/facade/lang.d.ts +44 -0
- package/lib/angular/facade.d.ts +1 -0
- package/{src/lib/angular.ts → lib/angular.d.ts} +1 -1
- package/lib/module.d.ts +9 -0
- package/lib/parse.d.ts +21 -0
- package/lib/util/binary-operations.d.ts +1 -0
- package/lib/util/lang.d.ts +4 -0
- package/{src/lib/util.ts → lib/util.d.ts} +1 -1
- package/lib/visitors/parse-visitor-compiler.d.ts +23 -0
- package/lib/visitors/parse-visitor-resolver.d.ts +25 -0
- package/lib/visitors.d.ts +2 -0
- package/package.json +41 -18
- package/public-api.d.ts +2 -0
- package/ng-package.json +0 -7
- package/src/lib/angular/compiler/assertions.ts +0 -49
- package/src/lib/angular/compiler/ast.ts +0 -393
- package/src/lib/angular/compiler/chars.ts +0 -89
- package/src/lib/angular/compiler/interpolation-config.ts +0 -25
- package/src/lib/angular/compiler/lexer.ts +0 -383
- package/src/lib/angular/compiler/parser.ts +0 -811
- package/src/lib/angular/facade/lang.ts +0 -124
- package/src/lib/angular/facade.ts +0 -1
- package/src/lib/module.ts +0 -12
- package/src/lib/parse.ts +0 -78
- package/src/lib/util/binary-operations.ts +0 -17
- package/src/lib/util/lang.ts +0 -15
- package/src/lib/visitors/parse-visitor-compiler.ts +0 -149
- package/src/lib/visitors/parse-visitor-resolver.ts +0 -208
- package/src/lib/visitors.ts +0 -2
- package/src/public-api.ts +0 -5
- package/tsconfig.lib.json +0 -20
- package/tsconfig.lib.prod.json +0 -9
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVzY29wZS1hbmd1bGFyMnBhcnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhcjJwYXJzZS9zcmMvYXVzY29wZS1hbmd1bGFyMnBhcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -0,0 +1,45 @@
|
|
|
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 { isBlank, isPresent } from '../facade/lang';
|
|
9
|
+
const isDevMode = () => false;
|
|
10
|
+
export function assertArrayOfStrings(identifier, value) {
|
|
11
|
+
if (!isDevMode() || isBlank(value)) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
if (!Array.isArray(value)) {
|
|
15
|
+
throw new Error(`Expected '${identifier}' to be an array of strings.`);
|
|
16
|
+
}
|
|
17
|
+
for (let i = 0; i < value.length; i += 1) {
|
|
18
|
+
if (typeof value[i] !== 'string') {
|
|
19
|
+
throw new Error(`Expected '${identifier}' to be an array of strings.`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const INTERPOLATION_BLACKLIST_REGEXPS = [
|
|
24
|
+
/^\s*$/,
|
|
25
|
+
/[<>]/,
|
|
26
|
+
/^[{}]$/,
|
|
27
|
+
/&(#|[a-z])/i,
|
|
28
|
+
/^\/\//, // comment
|
|
29
|
+
];
|
|
30
|
+
export function assertInterpolationSymbols(identifier, value) {
|
|
31
|
+
if (isPresent(value) && !(Array.isArray(value) && value.length == 2)) {
|
|
32
|
+
throw new Error(`Expected '${identifier}' to be an array, [start, end].`);
|
|
33
|
+
}
|
|
34
|
+
else if (isDevMode() && !isBlank(value)) {
|
|
35
|
+
const start = value[0];
|
|
36
|
+
const end = value[1];
|
|
37
|
+
// black list checking
|
|
38
|
+
INTERPOLATION_BLACKLIST_REGEXPS.forEach(regexp => {
|
|
39
|
+
if (regexp.test(start) || regexp.test(end)) {
|
|
40
|
+
throw new Error(`['${start}', '${end}'] contains unusable interpolation symbol.`);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIycGFyc2Uvc3JjL2xpYi9hbmd1bGFyL2NvbXBpbGVyL2Fzc2VydGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBR0gsT0FBTyxFQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUM7QUFFOUIsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQWtCLEVBQUUsS0FBVTtJQUMvRCxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2hDLE9BQU87S0FDVjtJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxVQUFVLDhCQUE4QixDQUFDLENBQUM7S0FDMUU7SUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3RDLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxVQUFVLDhCQUE4QixDQUFDLENBQUM7U0FDMUU7S0FDSjtBQUNMLENBQUM7QUFFRCxNQUFNLCtCQUErQixHQUFHO0lBQ3BDLE9BQU87SUFDUCxNQUFNO0lBQ04sUUFBUTtJQUNSLGFBQWE7SUFDYixPQUFPLEVBQVMsVUFBVTtDQUM3QixDQUFDO0FBRUYsTUFBTSxVQUFVLDBCQUEwQixDQUFDLFVBQWtCLEVBQUUsS0FBVTtJQUNyRSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxVQUFVLGlDQUFpQyxDQUFDLENBQUM7S0FDN0U7U0FBTSxJQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQVcsQ0FBQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFXLENBQUM7UUFDL0Isc0JBQXNCO1FBQ3RCLCtCQUErQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssT0FBTyxHQUFHLDRDQUE0QyxDQUFDLENBQUM7YUFDckY7UUFDTCxDQUFDLENBQUMsQ0FBQztLQUNOO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxyXG4gKi9cclxuXHJcblxyXG5pbXBvcnQge2lzQmxhbmssIGlzUHJlc2VudH0gZnJvbSAnLi4vZmFjYWRlL2xhbmcnO1xyXG5cclxuY29uc3QgaXNEZXZNb2RlID0gKCkgPT4gZmFsc2U7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QXJyYXlPZlN0cmluZ3MoaWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAoIWlzRGV2TW9kZSgpIHx8IGlzQmxhbmsodmFsdWUpKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJyR7aWRlbnRpZmllcn0nIHRvIGJlIGFuIGFycmF5IG9mIHN0cmluZ3MuYCk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZVtpXSAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAnJHtpZGVudGlmaWVyfScgdG8gYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncy5gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmNvbnN0IElOVEVSUE9MQVRJT05fQkxBQ0tMSVNUX1JFR0VYUFMgPSBbXHJcbiAgICAvXlxccyokLywgICAgICAgIC8vIGVtcHR5XHJcbiAgICAvWzw+XS8sICAgICAgICAgLy8gaHRtbCB0YWdcclxuICAgIC9eW3t9XSQvLCAgICAgICAvLyBpMThuIGV4cGFuc2lvblxyXG4gICAgLyYoI3xbYS16XSkvaSwgIC8vIGNoYXJhY3RlciByZWZlcmVuY2UsXHJcbiAgICAvXlxcL1xcLy8sICAgICAgICAvLyBjb21tZW50XHJcbl07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SW50ZXJwb2xhdGlvblN5bWJvbHMoaWRlbnRpZmllcjogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoaXNQcmVzZW50KHZhbHVlKSAmJiAhKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PSAyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJyR7aWRlbnRpZmllcn0nIHRvIGJlIGFuIGFycmF5LCBbc3RhcnQsIGVuZF0uYCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzRGV2TW9kZSgpICYmICFpc0JsYW5rKHZhbHVlKSkge1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmFsdWVbMF0gYXMgc3RyaW5nO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IHZhbHVlWzFdIGFzIHN0cmluZztcclxuICAgICAgICAvLyBibGFjayBsaXN0IGNoZWNraW5nXHJcbiAgICAgICAgSU5URVJQT0xBVElPTl9CTEFDS0xJU1RfUkVHRVhQUy5mb3JFYWNoKHJlZ2V4cCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZWdleHAudGVzdChzdGFydCkgfHwgcmVnZXhwLnRlc3QoZW5kKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbJyR7c3RhcnR9JywgJyR7ZW5kfSddIGNvbnRhaW5zIHVudXNhYmxlIGludGVycG9sYXRpb24gc3ltYm9sLmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -0,0 +1,393 @@
|
|
|
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 { isBlank } from '../facade/lang';
|
|
9
|
+
export class ParserError {
|
|
10
|
+
constructor(message, input, errLocation, ctxLocation) {
|
|
11
|
+
this.input = input;
|
|
12
|
+
this.errLocation = errLocation;
|
|
13
|
+
this.ctxLocation = ctxLocation;
|
|
14
|
+
this.message = `Parser Error: ${message} ${errLocation} [${input}] in ${ctxLocation}`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class ParseSpan {
|
|
18
|
+
constructor(start, end) {
|
|
19
|
+
this.start = start;
|
|
20
|
+
this.end = end;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export class AST {
|
|
24
|
+
constructor(span) {
|
|
25
|
+
this.span = span;
|
|
26
|
+
}
|
|
27
|
+
visit(visitor, context = null) { return null; }
|
|
28
|
+
toString() { return 'AST'; }
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Represents a quoted expression of the form:
|
|
32
|
+
*
|
|
33
|
+
* quote = prefix `:` uninterpretedExpression
|
|
34
|
+
* prefix = identifier
|
|
35
|
+
* uninterpretedExpression = arbitrary string
|
|
36
|
+
*
|
|
37
|
+
* A quoted expression is meant to be pre-processed by an AST transformer that
|
|
38
|
+
* converts it into another AST that no longer contains quoted expressions.
|
|
39
|
+
* It is meant to allow third-party developers to extend Angular template
|
|
40
|
+
* expression language. The `uninterpretedExpression` part of the quote is
|
|
41
|
+
* therefore not interpreted by the Angular's own expression parser.
|
|
42
|
+
*/
|
|
43
|
+
export class Quote extends AST {
|
|
44
|
+
constructor(span, prefix, uninterpretedExpression, location) {
|
|
45
|
+
super(span);
|
|
46
|
+
this.prefix = prefix;
|
|
47
|
+
this.uninterpretedExpression = uninterpretedExpression;
|
|
48
|
+
this.location = location;
|
|
49
|
+
}
|
|
50
|
+
visit(visitor, context = null) { return visitor.visitQuote(this, context); }
|
|
51
|
+
toString() { return 'Quote'; }
|
|
52
|
+
}
|
|
53
|
+
export class EmptyExpr extends AST {
|
|
54
|
+
visit(visitor, context = null) {
|
|
55
|
+
// do nothing
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export class ImplicitReceiver extends AST {
|
|
59
|
+
visit(visitor, context = null) {
|
|
60
|
+
return visitor.visitImplicitReceiver(this, context);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Multiple expressions separated by a semicolon.
|
|
65
|
+
*/
|
|
66
|
+
export class Chain extends AST {
|
|
67
|
+
constructor(span, expressions) {
|
|
68
|
+
super(span);
|
|
69
|
+
this.expressions = expressions;
|
|
70
|
+
}
|
|
71
|
+
visit(visitor, context = null) { return visitor.visitChain(this, context); }
|
|
72
|
+
}
|
|
73
|
+
export class Conditional extends AST {
|
|
74
|
+
constructor(span, condition, trueExp, falseExp) {
|
|
75
|
+
super(span);
|
|
76
|
+
this.condition = condition;
|
|
77
|
+
this.trueExp = trueExp;
|
|
78
|
+
this.falseExp = falseExp;
|
|
79
|
+
}
|
|
80
|
+
visit(visitor, context = null) {
|
|
81
|
+
return visitor.visitConditional(this, context);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
export class PropertyRead extends AST {
|
|
85
|
+
constructor(span, receiver, name) {
|
|
86
|
+
super(span);
|
|
87
|
+
this.receiver = receiver;
|
|
88
|
+
this.name = name;
|
|
89
|
+
}
|
|
90
|
+
visit(visitor, context = null) {
|
|
91
|
+
return visitor.visitPropertyRead(this, context);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
export class PropertyWrite extends AST {
|
|
95
|
+
constructor(span, receiver, name, value) {
|
|
96
|
+
super(span);
|
|
97
|
+
this.receiver = receiver;
|
|
98
|
+
this.name = name;
|
|
99
|
+
this.value = value;
|
|
100
|
+
}
|
|
101
|
+
visit(visitor, context = null) {
|
|
102
|
+
return visitor.visitPropertyWrite(this, context);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export class SafePropertyRead extends AST {
|
|
106
|
+
constructor(span, receiver, name) {
|
|
107
|
+
super(span);
|
|
108
|
+
this.receiver = receiver;
|
|
109
|
+
this.name = name;
|
|
110
|
+
}
|
|
111
|
+
visit(visitor, context = null) {
|
|
112
|
+
return visitor.visitSafePropertyRead(this, context);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
export class KeyedRead extends AST {
|
|
116
|
+
constructor(span, obj, key) {
|
|
117
|
+
super(span);
|
|
118
|
+
this.obj = obj;
|
|
119
|
+
this.key = key;
|
|
120
|
+
}
|
|
121
|
+
visit(visitor, context = null) {
|
|
122
|
+
return visitor.visitKeyedRead(this, context);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export class KeyedWrite extends AST {
|
|
126
|
+
constructor(span, obj, key, value) {
|
|
127
|
+
super(span);
|
|
128
|
+
this.obj = obj;
|
|
129
|
+
this.key = key;
|
|
130
|
+
this.value = value;
|
|
131
|
+
}
|
|
132
|
+
visit(visitor, context = null) {
|
|
133
|
+
return visitor.visitKeyedWrite(this, context);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
export class BindingPipe extends AST {
|
|
137
|
+
constructor(span, exp, name, args) {
|
|
138
|
+
super(span);
|
|
139
|
+
this.exp = exp;
|
|
140
|
+
this.name = name;
|
|
141
|
+
this.args = args;
|
|
142
|
+
}
|
|
143
|
+
visit(visitor, context = null) { return visitor.visitPipe(this, context); }
|
|
144
|
+
}
|
|
145
|
+
export class LiteralPrimitive extends AST {
|
|
146
|
+
constructor(span, value) {
|
|
147
|
+
super(span);
|
|
148
|
+
this.value = value;
|
|
149
|
+
}
|
|
150
|
+
visit(visitor, context = null) {
|
|
151
|
+
return visitor.visitLiteralPrimitive(this, context);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export class LiteralArray extends AST {
|
|
155
|
+
constructor(span, expressions) {
|
|
156
|
+
super(span);
|
|
157
|
+
this.expressions = expressions;
|
|
158
|
+
}
|
|
159
|
+
visit(visitor, context = null) {
|
|
160
|
+
return visitor.visitLiteralArray(this, context);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
export class LiteralMap extends AST {
|
|
164
|
+
constructor(span, keys, values) {
|
|
165
|
+
super(span);
|
|
166
|
+
this.keys = keys;
|
|
167
|
+
this.values = values;
|
|
168
|
+
}
|
|
169
|
+
visit(visitor, context = null) {
|
|
170
|
+
return visitor.visitLiteralMap(this, context);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
export class Interpolation extends AST {
|
|
174
|
+
constructor(span, strings, expressions) {
|
|
175
|
+
super(span);
|
|
176
|
+
this.strings = strings;
|
|
177
|
+
this.expressions = expressions;
|
|
178
|
+
}
|
|
179
|
+
visit(visitor, context = null) {
|
|
180
|
+
return visitor.visitInterpolation(this, context);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
export class Binary extends AST {
|
|
184
|
+
constructor(span, operation, left, right) {
|
|
185
|
+
super(span);
|
|
186
|
+
this.operation = operation;
|
|
187
|
+
this.left = left;
|
|
188
|
+
this.right = right;
|
|
189
|
+
}
|
|
190
|
+
visit(visitor, context = null) {
|
|
191
|
+
return visitor.visitBinary(this, context);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
export class PrefixNot extends AST {
|
|
195
|
+
constructor(span, expression) {
|
|
196
|
+
super(span);
|
|
197
|
+
this.expression = expression;
|
|
198
|
+
}
|
|
199
|
+
visit(visitor, context = null) {
|
|
200
|
+
return visitor.visitPrefixNot(this, context);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
export class MethodCall extends AST {
|
|
204
|
+
constructor(span, receiver, name, args) {
|
|
205
|
+
super(span);
|
|
206
|
+
this.receiver = receiver;
|
|
207
|
+
this.name = name;
|
|
208
|
+
this.args = args;
|
|
209
|
+
}
|
|
210
|
+
visit(visitor, context = null) {
|
|
211
|
+
return visitor.visitMethodCall(this, context);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
export class SafeMethodCall extends AST {
|
|
215
|
+
constructor(span, receiver, name, args) {
|
|
216
|
+
super(span);
|
|
217
|
+
this.receiver = receiver;
|
|
218
|
+
this.name = name;
|
|
219
|
+
this.args = args;
|
|
220
|
+
}
|
|
221
|
+
visit(visitor, context = null) {
|
|
222
|
+
return visitor.visitSafeMethodCall(this, context);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
export class FunctionCall extends AST {
|
|
226
|
+
constructor(span, target, args) {
|
|
227
|
+
super(span);
|
|
228
|
+
this.target = target;
|
|
229
|
+
this.args = args;
|
|
230
|
+
}
|
|
231
|
+
visit(visitor, context = null) {
|
|
232
|
+
return visitor.visitFunctionCall(this, context);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
export class ASTWithSource extends AST {
|
|
236
|
+
constructor(ast, source, location, errors) {
|
|
237
|
+
super(new ParseSpan(0, isBlank(source) ? 0 : source.length));
|
|
238
|
+
this.ast = ast;
|
|
239
|
+
this.source = source;
|
|
240
|
+
this.location = location;
|
|
241
|
+
this.errors = errors;
|
|
242
|
+
}
|
|
243
|
+
visit(visitor, context = null) { return this.ast.visit(visitor, context); }
|
|
244
|
+
toString() { return `${this.source} in ${this.location}`; }
|
|
245
|
+
}
|
|
246
|
+
export class TemplateBinding {
|
|
247
|
+
constructor(span, key, keyIsVar, name, expression) {
|
|
248
|
+
this.span = span;
|
|
249
|
+
this.key = key;
|
|
250
|
+
this.keyIsVar = keyIsVar;
|
|
251
|
+
this.name = name;
|
|
252
|
+
this.expression = expression;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
export class RecursiveAstVisitor {
|
|
256
|
+
visitBinary(ast, context) {
|
|
257
|
+
ast.left.visit(this);
|
|
258
|
+
ast.right.visit(this);
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
visitChain(ast, context) { return this.visitAll(ast.expressions, context); }
|
|
262
|
+
visitConditional(ast, context) {
|
|
263
|
+
ast.condition.visit(this);
|
|
264
|
+
ast.trueExp.visit(this);
|
|
265
|
+
ast.falseExp.visit(this);
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
visitPipe(ast, context) {
|
|
269
|
+
ast.exp.visit(this);
|
|
270
|
+
this.visitAll(ast.args, context);
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
visitFunctionCall(ast, context) {
|
|
274
|
+
ast.target.visit(this);
|
|
275
|
+
this.visitAll(ast.args, context);
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
visitImplicitReceiver(ast, context) { return null; }
|
|
279
|
+
visitInterpolation(ast, context) {
|
|
280
|
+
return this.visitAll(ast.expressions, context);
|
|
281
|
+
}
|
|
282
|
+
visitKeyedRead(ast, context) {
|
|
283
|
+
ast.obj.visit(this);
|
|
284
|
+
ast.key.visit(this);
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
visitKeyedWrite(ast, context) {
|
|
288
|
+
ast.obj.visit(this);
|
|
289
|
+
ast.key.visit(this);
|
|
290
|
+
ast.value.visit(this);
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
visitLiteralArray(ast, context) {
|
|
294
|
+
return this.visitAll(ast.expressions, context);
|
|
295
|
+
}
|
|
296
|
+
visitLiteralMap(ast, context) { return this.visitAll(ast.values, context); }
|
|
297
|
+
visitLiteralPrimitive(ast, context) { return null; }
|
|
298
|
+
visitMethodCall(ast, context) {
|
|
299
|
+
ast.receiver.visit(this);
|
|
300
|
+
return this.visitAll(ast.args, context);
|
|
301
|
+
}
|
|
302
|
+
visitPrefixNot(ast, context) {
|
|
303
|
+
ast.expression.visit(this);
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
visitPropertyRead(ast, context) {
|
|
307
|
+
ast.receiver.visit(this);
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
visitPropertyWrite(ast, context) {
|
|
311
|
+
ast.receiver.visit(this);
|
|
312
|
+
ast.value.visit(this);
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
visitSafePropertyRead(ast, context) {
|
|
316
|
+
ast.receiver.visit(this);
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
visitSafeMethodCall(ast, context) {
|
|
320
|
+
ast.receiver.visit(this);
|
|
321
|
+
return this.visitAll(ast.args, context);
|
|
322
|
+
}
|
|
323
|
+
visitAll(asts, context) {
|
|
324
|
+
asts.forEach(ast => ast.visit(this, context));
|
|
325
|
+
return null;
|
|
326
|
+
}
|
|
327
|
+
visitQuote(ast, context) { return null; }
|
|
328
|
+
}
|
|
329
|
+
export class AstTransformer {
|
|
330
|
+
visitImplicitReceiver(ast, context) { return ast; }
|
|
331
|
+
visitInterpolation(ast, context) {
|
|
332
|
+
return new Interpolation(ast.span, ast.strings, this.visitAll(ast.expressions));
|
|
333
|
+
}
|
|
334
|
+
visitLiteralPrimitive(ast, context) {
|
|
335
|
+
return new LiteralPrimitive(ast.span, ast.value);
|
|
336
|
+
}
|
|
337
|
+
visitPropertyRead(ast, context) {
|
|
338
|
+
return new PropertyRead(ast.span, ast.receiver.visit(this), ast.name);
|
|
339
|
+
}
|
|
340
|
+
visitPropertyWrite(ast, context) {
|
|
341
|
+
return new PropertyWrite(ast.span, ast.receiver.visit(this), ast.name, ast.value);
|
|
342
|
+
}
|
|
343
|
+
visitSafePropertyRead(ast, context) {
|
|
344
|
+
return new SafePropertyRead(ast.span, ast.receiver.visit(this), ast.name);
|
|
345
|
+
}
|
|
346
|
+
visitMethodCall(ast, context) {
|
|
347
|
+
return new MethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
|
|
348
|
+
}
|
|
349
|
+
visitSafeMethodCall(ast, context) {
|
|
350
|
+
return new SafeMethodCall(ast.span, ast.receiver.visit(this), ast.name, this.visitAll(ast.args));
|
|
351
|
+
}
|
|
352
|
+
visitFunctionCall(ast, context) {
|
|
353
|
+
return new FunctionCall(ast.span, ast.target.visit(this), this.visitAll(ast.args));
|
|
354
|
+
}
|
|
355
|
+
visitLiteralArray(ast, context) {
|
|
356
|
+
return new LiteralArray(ast.span, this.visitAll(ast.expressions));
|
|
357
|
+
}
|
|
358
|
+
visitLiteralMap(ast, context) {
|
|
359
|
+
return new LiteralMap(ast.span, ast.keys, this.visitAll(ast.values));
|
|
360
|
+
}
|
|
361
|
+
visitBinary(ast, context) {
|
|
362
|
+
return new Binary(ast.span, ast.operation, ast.left.visit(this), ast.right.visit(this));
|
|
363
|
+
}
|
|
364
|
+
visitPrefixNot(ast, context) {
|
|
365
|
+
return new PrefixNot(ast.span, ast.expression.visit(this));
|
|
366
|
+
}
|
|
367
|
+
visitConditional(ast, context) {
|
|
368
|
+
return new Conditional(ast.span, ast.condition.visit(this), ast.trueExp.visit(this), ast.falseExp.visit(this));
|
|
369
|
+
}
|
|
370
|
+
visitPipe(ast, context) {
|
|
371
|
+
return new BindingPipe(ast.span, ast.exp.visit(this), ast.name, this.visitAll(ast.args));
|
|
372
|
+
}
|
|
373
|
+
visitKeyedRead(ast, context) {
|
|
374
|
+
return new KeyedRead(ast.span, ast.obj.visit(this), ast.key.visit(this));
|
|
375
|
+
}
|
|
376
|
+
visitKeyedWrite(ast, context) {
|
|
377
|
+
return new KeyedWrite(ast.span, ast.obj.visit(this), ast.key.visit(this), ast.value.visit(this));
|
|
378
|
+
}
|
|
379
|
+
visitAll(asts) {
|
|
380
|
+
const res = new Array(asts.length);
|
|
381
|
+
for (let i = 0; i < asts.length; ++i) {
|
|
382
|
+
res[i] = asts[i].visit(this);
|
|
383
|
+
}
|
|
384
|
+
return res;
|
|
385
|
+
}
|
|
386
|
+
visitChain(ast, context) {
|
|
387
|
+
return new Chain(ast.span, this.visitAll(ast.expressions));
|
|
388
|
+
}
|
|
389
|
+
visitQuote(ast, context) {
|
|
390
|
+
return new Quote(ast.span, ast.prefix, ast.uninterpretedExpression, ast.location);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhcjJwYXJzZS9zcmMvbGliL2FuZ3VsYXIvY29tcGlsZXIvYXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUdILE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxNQUFNLE9BQU8sV0FBVztJQUVwQixZQUNJLE9BQWUsRUFBUyxLQUFhLEVBQVMsV0FBbUIsRUFBUyxXQUFpQjtRQUFuRSxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBTTtRQUMzRixJQUFJLENBQUMsT0FBTyxHQUFHLGlCQUFpQixPQUFPLElBQUksV0FBVyxLQUFLLEtBQUssUUFBUSxXQUFXLEVBQUUsQ0FBQztJQUMxRixDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUNsQixZQUFtQixLQUFhLEVBQVMsR0FBVztRQUFqQyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUFHLENBQUM7Q0FDM0Q7QUFFRCxNQUFNLE9BQU8sR0FBRztJQUNaLFlBQW1CLElBQWU7UUFBZixTQUFJLEdBQUosSUFBSSxDQUFXO0lBQUcsQ0FBQztJQUN0QyxLQUFLLENBQUMsT0FBbUIsRUFBRSxVQUFlLElBQUksSUFBUyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckUsUUFBUSxLQUFhLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQztDQUN2QztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sT0FBTyxLQUFNLFNBQVEsR0FBRztJQUMxQixZQUNJLElBQWUsRUFBUyxNQUFjLEVBQVMsdUJBQStCLEVBQ3ZFLFFBQWE7UUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRlksV0FBTSxHQUFOLE1B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LENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ2xDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQVUsRUFBRSxPQUFZO1FBQy9CLE9BQU8sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVSxFQUFFLE9BQVk7UUFDL0IsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN0RixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2VcclxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXHJcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcclxuICovXHJcblxyXG5cclxuaW1wb3J0IHtpc0JsYW5rfSBmcm9tICcuLi9mYWNhZGUvbGFuZyc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFyc2VyRXJyb3Ige1xyXG4gICAgcHVibGljIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGlucHV0OiBzdHJpbmcsIHB1YmxpYyBlcnJMb2NhdGlvbjogc3RyaW5nLCBwdWJsaWMgY3R4TG9jYXRpb24/OiBhbnkpIHtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBgUGFyc2VyIEVycm9yOiAke21lc3NhZ2V9ICR7ZXJyTG9jYXRpb259IFske2lucHV0fV0gaW4gJHtjdHhMb2NhdGlvbn1gO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGFyc2VTcGFuIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBzdGFydDogbnVtYmVyLCBwdWJsaWMgZW5kOiBudW1iZXIpIHt9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBU1Qge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHNwYW46IFBhcnNlU3Bhbikge31cclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnkgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHsgcmV0dXJuICdBU1QnOyB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgcXVvdGVkIGV4cHJlc3Npb24gb2YgdGhlIGZvcm06XHJcbiAqXHJcbiAqIHF1b3RlID0gcHJlZml4IGA6YCB1bmludGVycHJldGVkRXhwcmVzc2lvblxyXG4gKiBwcmVmaXggPSBpZGVudGlmaWVyXHJcbiAqIHVuaW50ZXJwcmV0ZWRFeHByZXNzaW9uID0gYXJiaXRyYXJ5IHN0cmluZ1xyXG4gKlxyXG4gKiBBIHF1b3RlZCBleHByZXNzaW9uIGlzIG1lYW50IHRvIGJlIHByZS1wcm9jZXNzZWQgYnkgYW4gQVNUIHRyYW5zZm9ybWVyIHRoYXRcclxuICogY29udmVydHMgaXQgaW50byBhbm90aGVyIEFTVCB0aGF0IG5vIGxvbmdlciBjb250YWlucyBxdW90ZWQgZXhwcmVzc2lvbnMuXHJcbiAqIEl0IGlzIG1lYW50IHRvIGFsbG93IHRoaXJkLXBhcnR5IGRldmVsb3BlcnMgdG8gZXh0ZW5kIEFuZ3VsYXIgdGVtcGxhdGVcclxuICogZXhwcmVzc2lvbiBsYW5ndWFnZS4gVGhlIGB1bmludGVycHJldGVkRXhwcmVzc2lvbmAgcGFydCBvZiB0aGUgcXVvdGUgaXNcclxuICogdGhlcmVmb3JlIG5vdCBpbnRlcnByZXRlZCBieSB0aGUgQW5ndWxhcidzIG93biBleHByZXNzaW9uIHBhcnNlci5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBRdW90ZSBleHRlbmRzIEFTVCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBzcGFuOiBQYXJzZVNwYW4sIHB1YmxpYyBwcmVmaXg6IHN0cmluZywgcHVibGljIHVuaW50ZXJwcmV0ZWRFeHByZXNzaW9uOiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGxvY2F0aW9uOiBhbnkpIHtcclxuICAgICAgICBzdXBlcihzcGFuKTtcclxuICAgIH1cclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnkgeyByZXR1cm4gdmlzaXRvci52aXNpdFF1b3RlKHRoaXMsIGNvbnRleHQpOyB9XHJcbiAgICB0b1N0cmluZygpOiBzdHJpbmcgeyByZXR1cm4gJ1F1b3RlJzsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wdHlFeHByIGV4dGVuZHMgQVNUIHtcclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpIHtcclxuICAgICAgICAvLyBkbyBub3RoaW5nXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJbXBsaWNpdFJlY2VpdmVyIGV4dGVuZHMgQVNUIHtcclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW1wbGljaXRSZWNlaXZlcih0aGlzLCBjb250ZXh0KTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIE11bHRpcGxlIGV4cHJlc3Npb25zIHNlcGFyYXRlZCBieSBhIHNlbWljb2xvbi5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBDaGFpbiBleHRlbmRzIEFTVCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzcGFuOiBQYXJzZVNwYW4sIHB1YmxpYyBleHByZXNzaW9uczogYW55W10pIHsgc3VwZXIoc3Bhbik7IH1cclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnkgeyByZXR1cm4gdmlzaXRvci52aXNpdENoYWluKHRoaXMsIGNvbnRleHQpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25hbCBleHRlbmRzIEFTVCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzcGFuOiBQYXJzZVNwYW4sIHB1YmxpYyBjb25kaXRpb246IEFTVCwgcHVibGljIHRydWVFeHA6IEFTVCwgcHVibGljIGZhbHNlRXhwOiBBU1QpIHtcclxuICAgICAgICBzdXBlcihzcGFuKTtcclxuICAgIH1cclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29uZGl0aW9uYWwodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVJlYWQgZXh0ZW5kcyBBU1Qge1xyXG4gICAgY29uc3RydWN0b3Ioc3BhbjogUGFyc2VTcGFuLCBwdWJsaWMgcmVjZWl2ZXI6IEFTVCwgcHVibGljIG5hbWU6IHN0cmluZykgeyBzdXBlcihzcGFuKTsgfVxyXG4gICAgdmlzaXQodmlzaXRvcjogQXN0VmlzaXRvciwgY29udGV4dDogYW55ID0gbnVsbCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRQcm9wZXJ0eVJlYWQodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eVdyaXRlIGV4dGVuZHMgQVNUIHtcclxuICAgIGNvbnN0cnVjdG9yKHNwYW46IFBhcnNlU3BhbiwgcHVibGljIHJlY2VpdmVyOiBBU1QsIHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyB2YWx1ZTogQVNUKSB7XHJcbiAgICAgICAgc3VwZXIoc3Bhbik7XHJcbiAgICB9XHJcbiAgICB2aXNpdCh2aXNpdG9yOiBBc3RWaXNpdG9yLCBjb250ZXh0OiBhbnkgPSBudWxsKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdFByb3BlcnR5V3JpdGUodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTYWZlUHJvcGVydHlSZWFkIGV4dGVuZHMgQVNUIHtcclxuICAgIGNvbnN0cnVjdG9yKHNwYW46IFBhcnNlU3BhbiwgcHVibGljIHJlY2VpdmVyOiBBU1QsIHB1YmxpYyBuYW1lOiBzdHJpbmcpIHsgc3VwZXIoc3Bhbik7IH1cclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2FmZVByb3BlcnR5UmVhZCh0aGlzLCBjb250ZXh0KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEtleWVkUmVhZCBleHRlbmRzIEFTVCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzcGFuOiBQYXJzZVNwYW4sIHB1YmxpYyBvYmo6IEFTVCwgcHVibGljIGtleTogQVNUKSB7IHN1cGVyKHNwYW4pOyB9XHJcbiAgICB2aXNpdCh2aXNpdG9yOiBBc3RWaXNpdG9yLCBjb250ZXh0OiBhbnkgPSBudWxsKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdEtleWVkUmVhZCh0aGlzLCBjb250ZXh0KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEtleWVkV3JpdGUgZXh0ZW5kcyBBU1Qge1xyXG4gICAgY29uc3RydWN0b3Ioc3BhbjogUGFyc2VTcGFuLCBwdWJsaWMgb2JqOiBBU1QsIHB1YmxpYyBrZXk6IEFTVCwgcHVibGljIHZhbHVlOiBBU1QpIHsgc3VwZXIoc3Bhbik7IH1cclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0S2V5ZWRXcml0ZSh0aGlzLCBjb250ZXh0KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJpbmRpbmdQaXBlIGV4dGVuZHMgQVNUIHtcclxuICAgIGNvbnN0cnVjdG9yKHNwYW46IFBhcnNlU3BhbiwgcHVibGljIGV4cDogQVNULCBwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgYXJnczogYW55W10pIHtcclxuICAgICAgICBzdXBlcihzcGFuKTtcclxuICAgIH1cclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnkgeyByZXR1cm4gdmlzaXRvci52aXNpdFBpcGUodGhpcywgY29udGV4dCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIExpdGVyYWxQcmltaXRpdmUgZXh0ZW5kcyBBU1Qge1xyXG4gICAgY29uc3RydWN0b3Ioc3BhbjogUGFyc2VTcGFuLCBwdWJsaWMgdmFsdWU6IGFueSkgeyBzdXBlcihzcGFuKTsgfVxyXG4gICAgdmlzaXQodmlzaXRvcjogQXN0VmlzaXRvciwgY29udGV4dDogYW55ID0gbnVsbCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMaXRlcmFsUHJpbWl0aXZlKHRoaXMsIGNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTGl0ZXJhbEFycmF5IGV4dGVuZHMgQVNUIHtcclxuICAgIGNvbnN0cnVjdG9yKHNwYW46IFBhcnNlU3BhbiwgcHVibGljIGV4cHJlc3Npb25zOiBhbnlbXSkgeyBzdXBlcihzcGFuKTsgfVxyXG4gICAgdmlzaXQodmlzaXRvcjogQXN0VmlzaXRvciwgY29udGV4dDogYW55ID0gbnVsbCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMaXRlcmFsQXJyYXkodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBMaXRlcmFsTWFwIGV4dGVuZHMgQVNUIHtcclxuICAgIGNvbnN0cnVjdG9yKHNwYW46IFBhcnNlU3BhbiwgcHVibGljIGtleXM6IGFueVtdLCBwdWJsaWMgdmFsdWVzOiBhbnlbXSkgeyBzdXBlcihzcGFuKTsgfVxyXG4gICAgdmlzaXQodmlzaXRvcjogQXN0VmlzaXRvciwgY29udGV4dDogYW55ID0gbnVsbCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMaXRlcmFsTWFwKHRoaXMsIGNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSW50ZXJwb2xhdGlvbiBleHRlbmRzIEFTVCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzcGFuOiBQYXJzZVNwYW4sIHB1YmxpYyBzdHJpbmdzOiBhbnlbXSwgcHVibGljIGV4cHJlc3Npb25zOiBhbnlbXSkgeyBzdXBlcihzcGFuKTsgfVxyXG4gICAgdmlzaXQodmlzaXRvcjogQXN0VmlzaXRvciwgY29udGV4dDogYW55ID0gbnVsbCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnRlcnBvbGF0aW9uKHRoaXMsIGNvbnRleHQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQmluYXJ5IGV4dGVuZHMgQVNUIHtcclxuICAgIGNvbnN0cnVjdG9yKHNwYW46IFBhcnNlU3BhbiwgcHVibGljIG9wZXJhdGlvbjogc3RyaW5nLCBwdWJsaWMgbGVmdDogQVNULCBwdWJsaWMgcmlnaHQ6IEFTVCkge1xyXG4gICAgICAgIHN1cGVyKHNwYW4pO1xyXG4gICAgfVxyXG4gICAgdmlzaXQodmlzaXRvcjogQXN0VmlzaXRvciwgY29udGV4dDogYW55ID0gbnVsbCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRCaW5hcnkodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBQcmVmaXhOb3QgZXh0ZW5kcyBBU1Qge1xyXG4gICAgY29uc3RydWN0b3Ioc3BhbjogUGFyc2VTcGFuLCBwdWJsaWMgZXhwcmVzc2lvbjogQVNUKSB7IHN1cGVyKHNwYW4pOyB9XHJcbiAgICB2aXNpdCh2aXNpdG9yOiBBc3RWaXNpdG9yLCBjb250ZXh0OiBhbnkgPSBudWxsKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdFByZWZpeE5vdCh0aGlzLCBjb250ZXh0KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE1ldGhvZENhbGwgZXh0ZW5kcyBBU1Qge1xyXG4gICAgY29uc3RydWN0b3Ioc3BhbjogUGFyc2VTcGFuLCBwdWJsaWMgcmVjZWl2ZXI6IEFTVCwgcHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIGFyZ3M6IGFueVtdKSB7XHJcbiAgICAgICAgc3VwZXIoc3Bhbik7XHJcbiAgICB9XHJcbiAgICB2aXNpdCh2aXNpdG9yOiBBc3RWaXNpdG9yLCBjb250ZXh0OiBhbnkgPSBudWxsKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdmlzaXRvci52aXNpdE1ldGhvZENhbGwodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBTYWZlTWV0aG9kQ2FsbCBleHRlbmRzIEFTVCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzcGFuOiBQYXJzZVNwYW4sIHB1YmxpYyByZWNlaXZlcjogQVNULCBwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgYXJnczogYW55W10pIHtcclxuICAgICAgICBzdXBlcihzcGFuKTtcclxuICAgIH1cclxuICAgIHZpc2l0KHZpc2l0b3I6IEFzdFZpc2l0b3IsIGNvbnRleHQ6IGFueSA9IG51bGwpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2FmZU1ldGhvZENhbGwodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkNhbGwgZXh0ZW5kcyBBU1Qge1xyXG4gICAgY29uc3RydWN0b3Ioc3BhbjogUGFyc2VTcGFuLCBwdWJsaWMgdGFyZ2V0OiBBU1QsIHB1YmxpYyBhcmdzOiBhbnlbXSkgeyBzdXBlcihzcGFuKTsgfVxyXG4gICAgdmlzaXQodmlzaXRvcjogQXN0VmlzaXRvciwgY29udGV4dDogYW55ID0gbnVsbCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHZpc2l0b3IudmlzaXRGdW5jdGlvbkNhbGwodGhpcywgY29udGV4dCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBU1RXaXRoU291cmNlIGV4dGVuZHMgQVNUIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBhc3Q6IEFTVCwgcHVibGljIHNvdXJjZTogc3RyaW5nLCBwdWJsaWMgbG9jYXRpb246IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgZXJyb3JzOiBQYXJzZXJFcnJvcltdKSB7XHJcbiAgICAgICAgc3VwZXIobmV3IFBhcnNlU3BhbigwLCBpc0JsYW5rKHNvdXJjZSkgPyAwIDogc291cmNlLmxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgdmlzaXQodmlzaXRvcjogQXN0VmlzaXRvciwgY29udGV4dDogYW55ID0gbnVsbCk6IGFueSB7IHJldHVybiB0aGlzLmFzdC52aXNpdCh2aXNpdG9yLCBjb250ZXh0KTsgfVxyXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHsgcmV0dXJuIGAke3RoaXMuc291cmNlfSBpbiAke3RoaXMubG9jYXRpb259YDsgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVCaW5kaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBzcGFuOiBQYXJzZVNwYW4sIHB1YmxpYyBrZXk6IHN0cmluZywgcHVibGljIGtleUlzVmFyOiBib29sZWFuLCBwdWJsaWMgbmFtZTogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBleHByZXNzaW9uOiBBU1RXaXRoU291cmNlKSB7fVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFzdFZpc2l0b3Ige1xyXG4gICAgdmlzaXRCaW5hcnkoYXN0OiBCaW5hcnksIGNvbnRleHQ6IGFueSk6IGFueTtcclxuICAgIHZpc2l0Q2hhaW4oYXN0OiBDaGFpbiwgY29udGV4dDogYW55KTogYW55O1xyXG4gICAgdmlzaXRDb25kaXRpb25hbChhc3Q6IENvbmRpdGlvbmFsLCBjb250ZXh0OiBhbnkpOiBhbnk7XHJcbiAgICB2aXNpdEZ1bmN0aW9uQ2FsbChhc3Q6IEZ1bmN0aW9uQ2FsbCwgY29udGV4dDogYW55KTogYW55O1xyXG4gICAgdmlzaXRJbXBsaWNpdFJlY2VpdmVyKGFzdDogSW1wbGljaXRSZWNlaXZlciwgY29udGV4dDogYW55KTogYW55O1xyXG4gICAgdmlzaXRJbnRlcnBvbGF0aW9uKGFzdDogSW50ZXJwb2xhdGlvbiwgY29udGV4dDogYW55KTogYW55O1xyXG4gICAgdmlzaXRLZXllZFJlYWQoYXN0OiBLZXllZFJlYWQsIGNvbnRleHQ6IGFueSk6IGFueTtcclxuICAgIHZpc2l0S2V5ZWRXcml0ZShhc3Q6IEtleWVkV3JpdGUsIGNvbnRleHQ6IGFueSk6IGFueTtcclxuICAgIHZpc2l0TGl0ZXJhbEFycmF5KGFzdDogTGl0ZXJhbEFycmF5LCBjb250ZXh0OiBhbnkpOiBhbnk7XHJcbiAgICB2aXNpdExpdGVyYWxNYXAoYXN0OiBMaXRlcmFsTWFwLCBjb250ZXh0OiBhbnkpOiBhbnk7XHJcbiAgICB2aXNpdExpdGVyYWxQcmltaXRpdmUoYXN0OiBMaXRlcmFsUHJpbWl0aXZlLCBjb250ZXh0OiBhbnkpOiBhbnk7XHJcbiAgICB2aXNpdE1ldGhvZENhbGwoYXN0OiBNZXRob2RDYWxsLCBjb250ZXh0OiBhbnkpOiBhbnk7XHJcbiAgICB2aXNpdFBpcGUoYXN0OiBCaW5kaW5nUGlwZSwgY29udGV4dDogYW55KTogYW55O1xyXG4gICAgdmlzaXRQcmVmaXhOb3QoYXN0OiBQcmVmaXhOb3QsIGNvbnRleHQ6IGFueSk6IGFueTtcclxuICAgIHZpc2l0UHJvcGVydHlSZWFkKGFzdDogUHJvcGVydHlSZWFkLCBjb250ZXh0OiBhbnkpOiBhbnk7XHJcbiAgICB2aXNpdFByb3BlcnR5V3JpdGUoYXN0OiBQcm9wZXJ0eVdyaXRlLCBjb250ZXh0OiBhbnkpOiBhbnk7XHJcbiAgICB2aXNpdFF1b3RlKGFzdDogUXVvdGUsIGNvbnRleHQ6IGFueSk6IGFueTtcclxuICAgIHZpc2l0U2FmZU1ldGhvZENhbGwoYXN0OiBTYWZlTWV0aG9kQ2FsbCwgY29udGV4dDogYW55KTogYW55O1xyXG4gICAgdmlzaXRTYWZlUHJvcGVydHlSZWFkKGFzdDogU2FmZVByb3BlcnR5UmVhZCwgY29udGV4dDogYW55KTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVjdXJzaXZlQXN0VmlzaXRvciBpbXBsZW1lbnRzIEFzdFZpc2l0b3Ige1xyXG4gICAgdmlzaXRCaW5hcnkoYXN0OiBCaW5hcnksIGNvbnRleHQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgYXN0LmxlZnQudmlzaXQodGhpcyk7XHJcbiAgICAgICAgYXN0LnJpZ2h0LnZpc2l0KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdmlzaXRDaGFpbihhc3Q6IENoYWluLCBjb250ZXh0OiBhbnkpOiBhbnkgeyByZXR1cm4gdGhpcy52aXNpdEFsbChhc3QuZXhwcmVzc2lvbnMsIGNvbnRleHQpOyB9XHJcbiAgICB2aXNpdENvbmRpdGlvbmFsKGFzdDogQ29uZGl0aW9uYWwsIGNvbnRleHQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgYXN0LmNvbmRpdGlvbi52aXNpdCh0aGlzKTtcclxuICAgICAgICBhc3QudHJ1ZUV4cC52aXNpdCh0aGlzKTtcclxuICAgICAgICBhc3QuZmFsc2VFeHAudmlzaXQodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB2aXNpdFBpcGUoYXN0OiBCaW5kaW5nUGlwZSwgY29udGV4dDogYW55KTogYW55IHtcclxuICAgICAgICBhc3QuZXhwLnZpc2l0KHRoaXMpO1xyXG4gICAgICAgIHRoaXMudmlzaXRBbGwoYXN0LmFyZ3MsIGNvbnRleHQpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdmlzaXRGdW5jdGlvbkNhbGwoYXN0OiBGdW5jdGlvbkNhbGwsIGNvbnRleHQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgYXN0LnRhcmdldC52aXNpdCh0aGlzKTtcclxuICAgICAgICB0aGlzLnZpc2l0QWxsKGFzdC5hcmdzLCBjb250ZXh0KTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHZpc2l0SW1wbGljaXRSZWNlaXZlcihhc3Q6IEltcGxpY2l0UmVjZWl2ZXIsIGNvbnRleHQ6IGFueSk6IGFueSB7IHJldHVybiBudWxsOyB9XHJcbiAgICB2aXNpdEludGVycG9sYXRpb24oYXN0OiBJbnRlcnBvbGF0aW9uLCBjb250ZXh0OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpc2l0QWxsKGFzdC5leHByZXNzaW9ucywgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICB2aXNpdEtleWVkUmVhZChhc3Q6IEtleWVkUmVhZCwgY29udGV4dDogYW55KTogYW55IHtcclxuICAgICAgICBhc3Qub2JqLnZpc2l0KHRoaXMpO1xyXG4gICAgICAgIGFzdC5rZXkudmlzaXQodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB2aXNpdEtleWVkV3JpdGUoYXN0OiBLZXllZFdyaXRlLCBjb250ZXh0OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGFzdC5vYmoudmlzaXQodGhpcyk7XHJcbiAgICAgICAgYXN0LmtleS52aXNpdCh0aGlzKTtcclxuICAgICAgICBhc3QudmFsdWUudmlzaXQodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB2aXNpdExpdGVyYWxBcnJheShhc3Q6IExpdGVyYWxBcnJheSwgY29udGV4dDogYW55KTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpdEFsbChhc3QuZXhwcmVzc2lvbnMsIGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgdmlzaXRMaXRlcmFsTWFwKGFzdDogTGl0ZXJhbE1hcCwgY29udGV4dDogYW55KTogYW55IHsgcmV0dXJuIHRoaXMudmlzaXRBbGwoYXN0LnZhbHVlcywgY29udGV4dCk7IH1cclxuICAgIHZpc2l0TGl0ZXJhbFByaW1pdGl2ZShhc3Q6IExpdGVyYWxQcmltaXRpdmUsIGNvbnRleHQ6IGFueSk6IGFueSB7IHJldHVybiBudWxsOyB9XHJcbiAgICB2aXNpdE1ldGhvZENhbGwoYXN0OiBNZXRob2RDYWxsLCBjb250ZXh0OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGFzdC5yZWNlaXZlci52aXNpdCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpdEFsbChhc3QuYXJncywgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICB2aXNpdFByZWZpeE5vdChhc3Q6IFByZWZpeE5vdCwgY29udGV4dDogYW55KTogYW55IHtcclxuICAgICAgICBhc3QuZXhwcmVzc2lvbi52aXNpdCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHZpc2l0UHJvcGVydHlSZWFkKGFzdDogUHJvcGVydHlSZWFkLCBjb250ZXh0OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGFzdC5yZWNlaXZlci52aXNpdCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHZpc2l0UHJvcGVydHlXcml0ZShhc3Q6IFByb3BlcnR5V3JpdGUsIGNvbnRleHQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgYXN0LnJlY2VpdmVyLnZpc2l0KHRoaXMpO1xyXG4gICAgICAgIGFzdC52YWx1ZS52aXNpdCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHZpc2l0U2FmZVByb3BlcnR5UmVhZChhc3Q6IFNhZmVQcm9wZXJ0eVJlYWQsIGNvbnRleHQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgYXN0LnJlY2VpdmVyLnZpc2l0KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdmlzaXRTYWZlTWV0aG9kQ2FsbChhc3Q6IFNhZmVNZXRob2RDYWxsLCBjb250ZXh0OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGFzdC5yZWNlaXZlci52aXNpdCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gdGhpcy52aXNpdEFsbChhc3QuYXJncywgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICB2aXNpdEFsbChhc3RzOiBBU1RbXSwgY29udGV4dDogYW55KTogYW55IHtcclxuICAgICAgICBhc3RzLmZvckVhY2goYXN0ID0+IGFzdC52aXNpdCh0aGlzLCBjb250ZXh0KSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB2aXNpdFF1b3RlKGFzdDogUXVvdGUsIGNvbnRleHQ6IGFueSk6IGFueSB7IHJldHVybiBudWxsOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBc3RUcmFuc2Zvcm1lciBpbXBsZW1lbnRzIEFzdFZpc2l0b3Ige1xyXG4gICAgdmlzaXRJbXBsaWNpdFJlY2VpdmVyKGFzdDogSW1wbGljaXRSZWNlaXZlciwgY29udGV4dDogYW55KTogQVNUIHsgcmV0dXJuIGFzdDsgfVxyXG5cclxuICAgIHZpc2l0SW50ZXJwb2xhdGlvbihhc3Q6IEludGVycG9sYXRpb24sIGNvbnRleHQ6IGFueSk6IEFTVCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnBvbGF0aW9uKGFzdC5zcGFuLCBhc3Quc3RyaW5ncywgdGhpcy52aXNpdEFsbChhc3QuZXhwcmVzc2lvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICB2aXNpdExpdGVyYWxQcmltaXRpdmUoYXN0OiBMaXRlcmFsUHJpbWl0aXZlLCBjb250ZXh0OiBhbnkpOiBBU1Qge1xyXG4gICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbFByaW1pdGl2ZShhc3Quc3BhbiwgYXN0LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICB2aXNpdFByb3BlcnR5UmVhZChhc3Q6IFByb3BlcnR5UmVhZCwgY29udGV4dDogYW55KTogQVNUIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5UmVhZChhc3Quc3BhbiwgYXN0LnJlY2VpdmVyLnZpc2l0KHRoaXMpLCBhc3QubmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaXRQcm9wZXJ0eVdyaXRlKGFzdDogUHJvcGVydHlXcml0ZSwgY29udGV4dDogYW55KTogQVNUIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5V3JpdGUoYXN0LnNwYW4sIGFzdC5yZWNlaXZlci52aXNpdCh0aGlzKSwgYXN0Lm5hbWUsIGFzdC52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaXRTYWZlUHJvcGVydHlSZWFkKGFzdDogU2FmZVByb3BlcnR5UmVhZCwgY29udGV4dDogYW55KTogQVNUIHtcclxuICAgICAgICByZXR1cm4gbmV3IFNhZmVQcm9wZXJ0eVJlYWQoYXN0LnNwYW4sIGFzdC5yZWNlaXZlci52aXNpdCh0aGlzKSwgYXN0Lm5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHZpc2l0TWV0aG9kQ2FsbChhc3Q6IE1ldGhvZENhbGwsIGNvbnRleHQ6IGFueSk6IEFTVCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBNZXRob2RDYWxsKGFzdC5zcGFuLCBhc3QucmVjZWl2ZXIudmlzaXQodGhpcyksIGFzdC5uYW1lLCB0aGlzLnZpc2l0QWxsKGFzdC5hcmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaXRTYWZlTWV0aG9kQ2FsbChhc3Q6IFNhZmVNZXRob2RDYWxsLCBjb250ZXh0OiBhbnkpOiBBU1Qge1xyXG4gICAgICAgIHJldHVybiBuZXcgU2FmZU1ldGhvZENhbGwoXHJcbiAgICAgICAgICAgIGFzdC5zcGFuLCBhc3QucmVjZWl2ZXIudmlzaXQodGhpcyksIGFzdC5uYW1lLCB0aGlzLnZpc2l0QWxsKGFzdC5hcmdzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaXRGdW5jdGlvbkNhbGwoYXN0OiBGdW5jdGlvbkNhbGwsIGNvbnRleHQ6IGFueSk6IEFTVCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkNhbGwoYXN0LnNwYW4sIGFzdC50YXJnZXQudmlzaXQodGhpcyksIHRoaXMudmlzaXRBbGwoYXN0LmFyZ3MpKTtcclxuICAgIH1cclxuXHJcbiAgICB2aXNpdExpdGVyYWxBcnJheShhc3Q6IExpdGVyYWxBcnJheSwgY29udGV4dDogYW55KTogQVNUIHtcclxuICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxBcnJheShhc3Quc3BhbiwgdGhpcy52aXNpdEFsbChhc3QuZXhwcmVzc2lvbnMpKTtcclxuICAgIH1cclxuXHJcbiAgICB2aXNpdExpdGVyYWxNYXAoYXN0OiBMaXRlcmFsTWFwLCBjb250ZXh0OiBhbnkpOiBBU1Qge1xyXG4gICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbE1hcChhc3Quc3BhbiwgYXN0LmtleXMsIHRoaXMudmlzaXRBbGwoYXN0LnZhbHVlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHZpc2l0QmluYXJ5KGFzdDogQmluYXJ5LCBjb250ZXh0OiBhbnkpOiBBU1Qge1xyXG4gICAgICAgIHJldHVybiBuZXcgQmluYXJ5KGFzdC5zcGFuLCBhc3Qub3BlcmF0aW9uLCBhc3QubGVmdC52aXNpdCh0aGlzKSwgYXN0LnJpZ2h0LnZpc2l0KHRoaXMpKTtcclxuICAgIH1cclxuXHJcbiAgICB2aXNpdFByZWZpeE5vdChhc3Q6IFByZWZpeE5vdCwgY29udGV4dDogYW55KTogQVNUIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByZWZpeE5vdChhc3Quc3BhbiwgYXN0LmV4cHJlc3Npb24udmlzaXQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHZpc2l0Q29uZGl0aW9uYWwoYXN0OiBDb25kaXRpb25hbCwgY29udGV4dDogYW55KTogQVNUIHtcclxuICAgICAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsKFxyXG4gICAgICAgICAgICBhc3Quc3BhbiwgYXN0LmNvbmRpdGlvbi52aXNpdCh0aGlzKSwgYXN0LnRydWVFeHAudmlzaXQodGhpcyksIGFzdC5mYWxzZUV4cC52aXNpdCh0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaXRQaXBlKGFzdDogQmluZGluZ1BpcGUsIGNvbnRleHQ6IGFueSk6IEFTVCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBCaW5kaW5nUGlwZShhc3Quc3BhbiwgYXN0LmV4cC52aXNpdCh0aGlzKSwgYXN0Lm5hbWUsIHRoaXMudmlzaXRBbGwoYXN0LmFyZ3MpKTtcclxuICAgIH1cclxuXHJcbiAgICB2aXNpdEtleWVkUmVhZChhc3Q6IEtleWVkUmVhZCwgY29udGV4dDogYW55KTogQVNUIHtcclxuICAgICAgICByZXR1cm4gbmV3IEtleWVkUmVhZChhc3Quc3BhbiwgYXN0Lm9iai52aXNpdCh0aGlzKSwgYXN0LmtleS52aXNpdCh0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaXRLZXllZFdyaXRlKGFzdDogS2V5ZWRXcml0ZSwgY29udGV4dDogYW55KTogQVNUIHtcclxuICAgICAgICByZXR1cm4gbmV3IEtleWVkV3JpdGUoXHJcbiAgICAgICAgICAgIGFzdC5zcGFuLCBhc3Qub2JqLnZpc2l0KHRoaXMpLCBhc3Qua2V5LnZpc2l0KHRoaXMpLCBhc3QudmFsdWUudmlzaXQodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHZpc2l0QWxsKGFzdHM6IGFueVtdKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBBcnJheShhc3RzLmxlbmd0aCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhc3RzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIHJlc1tpXSA9IGFzdHNbaV0udmlzaXQodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaXRDaGFpbihhc3Q6IENoYWluLCBjb250ZXh0OiBhbnkpOiBBU1Qge1xyXG4gICAgICAgIHJldHVybiBuZXcgQ2hhaW4oYXN0LnNwYW4sIHRoaXMudmlzaXRBbGwoYXN0LmV4cHJlc3Npb25zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzaXRRdW90ZShhc3Q6IFF1b3RlLCBjb250ZXh0OiBhbnkpOiBBU1Qge1xyXG4gICAgICAgIHJldHVybiBuZXcgUXVvdGUoYXN0LnNwYW4sIGFzdC5wcmVmaXgsIGFzdC51bmludGVycHJldGVkRXhwcmVzc2lvbiwgYXN0LmxvY2F0aW9uKTtcclxuICAgIH1cclxufSJdfQ==
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
+
export const $EOF = 0;
|
|
9
|
+
export const $TAB = 9;
|
|
10
|
+
export const $LF = 10;
|
|
11
|
+
export const $VTAB = 11;
|
|
12
|
+
export const $FF = 12;
|
|
13
|
+
export const $CR = 13;
|
|
14
|
+
export const $SPACE = 32;
|
|
15
|
+
export const $BANG = 33;
|
|
16
|
+
export const $DQ = 34;
|
|
17
|
+
export const $HASH = 35;
|
|
18
|
+
export const $$ = 36;
|
|
19
|
+
export const $PERCENT = 37;
|
|
20
|
+
export const $AMPERSAND = 38;
|
|
21
|
+
export const $SQ = 39;
|
|
22
|
+
export const $LPAREN = 40;
|
|
23
|
+
export const $RPAREN = 41;
|
|
24
|
+
export const $STAR = 42;
|
|
25
|
+
export const $PLUS = 43;
|
|
26
|
+
export const $COMMA = 44;
|
|
27
|
+
export const $MINUS = 45;
|
|
28
|
+
export const $PERIOD = 46;
|
|
29
|
+
export const $SLASH = 47;
|
|
30
|
+
export const $COLON = 58;
|
|
31
|
+
export const $SEMICOLON = 59;
|
|
32
|
+
export const $LT = 60;
|
|
33
|
+
export const $EQ = 61;
|
|
34
|
+
export const $GT = 62;
|
|
35
|
+
export const $QUESTION = 63;
|
|
36
|
+
export const $0 = 48;
|
|
37
|
+
export const $9 = 57;
|
|
38
|
+
export const $A = 65;
|
|
39
|
+
export const $E = 69;
|
|
40
|
+
export const $F = 70;
|
|
41
|
+
export const $X = 88;
|
|
42
|
+
export const $Z = 90;
|
|
43
|
+
export const $LBRACKET = 91;
|
|
44
|
+
export const $BACKSLASH = 92;
|
|
45
|
+
export const $RBRACKET = 93;
|
|
46
|
+
export const $CARET = 94;
|
|
47
|
+
export const $_ = 95;
|
|
48
|
+
export const $a = 97;
|
|
49
|
+
export const $e = 101;
|
|
50
|
+
export const $f = 102;
|
|
51
|
+
export const $n = 110;
|
|
52
|
+
export const $r = 114;
|
|
53
|
+
export const $t = 116;
|
|
54
|
+
export const $u = 117;
|
|
55
|
+
export const $v = 118;
|
|
56
|
+
export const $x = 120;
|
|
57
|
+
export const $z = 122;
|
|
58
|
+
export const $LBRACE = 123;
|
|
59
|
+
export const $BAR = 124;
|
|
60
|
+
export const $RBRACE = 125;
|
|
61
|
+
export const $NBSP = 160;
|
|
62
|
+
export const $PIPE = 124;
|
|
63
|
+
export const $TILDA = 126;
|
|
64
|
+
export const $AT = 64;
|
|
65
|
+
export const $BT = 96;
|
|
66
|
+
export function isWhitespace(code) {
|
|
67
|
+
return (code >= $TAB && code <= $SPACE) || (code == $NBSP);
|
|
68
|
+
}
|
|
69
|
+
export function isDigit(code) {
|
|
70
|
+
return $0 <= code && code <= $9;
|
|
71
|
+
}
|
|
72
|
+
export function isAsciiLetter(code) {
|
|
73
|
+
return code >= $a && code <= $z || code >= $A && code <= $Z;
|
|
74
|
+
}
|
|
75
|
+
export function isAsciiHexDigit(code) {
|
|
76
|
+
return code >= $a && code <= $f || code >= $A && code <= $F || isDigit(code);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyMnBhcnNlL3NyYy9saWIvYW5ndWxhci9jb21waWxlci9jaGFycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEIsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMxQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDdEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBRTVCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUVyQixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFckIsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUM1QixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzdCLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDNUIsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRXJCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDdEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDdEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUN0QixNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFFdEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUMzQixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDM0IsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUV6QixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDMUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUV0QixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBRXRCLE1BQU0sVUFBVSxZQUFZLENBQUMsSUFBWTtJQUNyQyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsSUFBWTtJQUNoQyxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxJQUFZO0lBQ3RDLE9BQU8sSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNoRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFZO0lBQ3hDLE9BQU8sSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxyXG4gKi9cclxuXHJcbmV4cG9ydCBjb25zdCAkRU9GID0gMDtcclxuZXhwb3J0IGNvbnN0ICRUQUIgPSA5O1xyXG5leHBvcnQgY29uc3QgJExGID0gMTA7XHJcbmV4cG9ydCBjb25zdCAkVlRBQiA9IDExO1xyXG5leHBvcnQgY29uc3QgJEZGID0gMTI7XHJcbmV4cG9ydCBjb25zdCAkQ1IgPSAxMztcclxuZXhwb3J0IGNvbnN0ICRTUEFDRSA9IDMyO1xyXG5leHBvcnQgY29uc3QgJEJBTkcgPSAzMztcclxuZXhwb3J0IGNvbnN0ICREUSA9IDM0O1xyXG5leHBvcnQgY29uc3QgJEhBU0ggPSAzNTtcclxuZXhwb3J0IGNvbnN0ICQkID0gMzY7XHJcbmV4cG9ydCBjb25zdCAkUEVSQ0VOVCA9IDM3O1xyXG5leHBvcnQgY29uc3QgJEFNUEVSU0FORCA9IDM4O1xyXG5leHBvcnQgY29uc3QgJFNRID0gMzk7XHJcbmV4cG9ydCBjb25zdCAkTFBBUkVOID0gNDA7XHJcbmV4cG9ydCBjb25zdCAkUlBBUkVOID0gNDE7XHJcbmV4cG9ydCBjb25zdCAkU1RBUiA9IDQyO1xyXG5leHBvcnQgY29uc3QgJFBMVVMgPSA0MztcclxuZXhwb3J0IGNvbnN0ICRDT01NQSA9IDQ0O1xyXG5leHBvcnQgY29uc3QgJE1JTlVTID0gNDU7XHJcbmV4cG9ydCBjb25zdCAkUEVSSU9EID0gNDY7XHJcbmV4cG9ydCBjb25zdCAkU0xBU0ggPSA0NztcclxuZXhwb3J0IGNvbnN0ICRDT0xPTiA9IDU4O1xyXG5leHBvcnQgY29uc3QgJFNFTUlDT0xPTiA9IDU5O1xyXG5leHBvcnQgY29uc3QgJExUID0gNjA7XHJcbmV4cG9ydCBjb25zdCAkRVEgPSA2MTtcclxuZXhwb3J0IGNvbnN0ICRHVCA9IDYyO1xyXG5leHBvcnQgY29uc3QgJFFVRVNUSU9OID0gNjM7XHJcblxyXG5leHBvcnQgY29uc3QgJDAgPSA0ODtcclxuZXhwb3J0IGNvbnN0ICQ5ID0gNTc7XHJcblxyXG5leHBvcnQgY29uc3QgJEEgPSA2NTtcclxuZXhwb3J0IGNvbnN0ICRFID0gNjk7XHJcbmV4cG9ydCBjb25zdCAkRiA9IDcwO1xyXG5leHBvcnQgY29uc3QgJFggPSA4ODtcclxuZXhwb3J0IGNvbnN0ICRaID0gOTA7XHJcblxyXG5leHBvcnQgY29uc3QgJExCUkFDS0VUID0gOTE7XHJcbmV4cG9ydCBjb25zdCAkQkFDS1NMQVNIID0gOTI7XHJcbmV4cG9ydCBjb25zdCAkUkJSQUNLRVQgPSA5MztcclxuZXhwb3J0IGNvbnN0ICRDQVJFVCA9IDk0O1xyXG5leHBvcnQgY29uc3QgJF8gPSA5NTtcclxuXHJcbmV4cG9ydCBjb25zdCAkYSA9IDk3O1xyXG5leHBvcnQgY29uc3QgJGUgPSAxMDE7XHJcbmV4cG9ydCBjb25zdCAkZiA9IDEwMjtcclxuZXhwb3J0IGNvbnN0ICRuID0gMTEwO1xyXG5leHBvcnQgY29uc3QgJHIgPSAxMTQ7XHJcbmV4cG9ydCBjb25zdCAkdCA9IDExNjtcclxuZXhwb3J0IGNvbnN0ICR1ID0gMTE3O1xyXG5leHBvcnQgY29uc3QgJHYgPSAxMTg7XHJcbmV4cG9ydCBjb25zdCAkeCA9IDEyMDtcclxuZXhwb3J0IGNvbnN0ICR6ID0gMTIyO1xyXG5cclxuZXhwb3J0IGNvbnN0ICRMQlJBQ0UgPSAxMjM7XHJcbmV4cG9ydCBjb25zdCAkQkFSID0gMTI0O1xyXG5leHBvcnQgY29uc3QgJFJCUkFDRSA9IDEyNTtcclxuZXhwb3J0IGNvbnN0ICROQlNQID0gMTYwO1xyXG5cclxuZXhwb3J0IGNvbnN0ICRQSVBFID0gMTI0O1xyXG5leHBvcnQgY29uc3QgJFRJTERBID0gMTI2O1xyXG5leHBvcnQgY29uc3QgJEFUID0gNjQ7XHJcblxyXG5leHBvcnQgY29uc3QgJEJUID0gOTY7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChjb2RlID49ICRUQUIgJiYgY29kZSA8PSAkU1BBQ0UpIHx8IChjb2RlID09ICROQlNQKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGlnaXQoY29kZTogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gJDAgPD0gY29kZSAmJiBjb2RlIDw9ICQ5O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBc2NpaUxldHRlcihjb2RlOiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBjb2RlID49ICRhICYmIGNvZGUgPD0gJHogfHwgY29kZSA+PSAkQSAmJiBjb2RlIDw9ICRaO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBc2NpaUhleERpZ2l0KGNvZGU6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGNvZGUgPj0gJGEgJiYgY29kZSA8PSAkZiB8fCBjb2RlID49ICRBICYmIGNvZGUgPD0gJEYgfHwgaXNEaWdpdChjb2RlKTtcclxufSJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
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
|
+
constructor(start, end) {
|
|
11
|
+
this.start = start;
|
|
12
|
+
this.end = end;
|
|
13
|
+
}
|
|
14
|
+
static fromArray(markers) {
|
|
15
|
+
if (!markers) {
|
|
16
|
+
return DEFAULT_INTERPOLATION_CONFIG;
|
|
17
|
+
}
|
|
18
|
+
assertInterpolationSymbols('interpolation', markers);
|
|
19
|
+
return new InterpolationConfig(markers[0], markers[1]);
|
|
20
|
+
}
|
|
21
|
+
;
|
|
22
|
+
}
|
|
23
|
+
export const DEFAULT_INTERPOLATION_CONFIG = new InterpolationConfig('{{', '}}');
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJwb2xhdGlvbi1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyMnBhcnNlL3NyYy9saWIvYW5ndWxhci9jb21waWxlci9pbnRlcnBvbGF0aW9uLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEQsTUFBTSxPQUFPLG1CQUFtQjtJQVU1QixZQUFtQixLQUFhLEVBQVMsR0FBVztRQUFqQyxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQVMsUUFBRyxHQUFILEdBQUcsQ0FBUTtJQUFFLENBQUM7SUFUdkQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUF5QjtRQUN0QyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTyw0QkFBNEIsQ0FBQztTQUN2QztRQUVELDBCQUEwQixDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRCxPQUFPLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFc0QsQ0FBQztDQUMzRDtBQUVELE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQUNyQyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBAbGljZW5zZVxyXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxyXG4gKi9cclxuXHJcbmltcG9ydCB7YXNzZXJ0SW50ZXJwb2xhdGlvblN5bWJvbHN9IGZyb20gJy4vYXNzZXJ0aW9ucyc7XHJcblxyXG5leHBvcnQgY2xhc3MgSW50ZXJwb2xhdGlvbkNvbmZpZyB7XHJcbiAgICBzdGF0aWMgZnJvbUFycmF5KG1hcmtlcnM6IFtzdHJpbmcsIHN0cmluZ10pOiBJbnRlcnBvbGF0aW9uQ29uZmlnIHtcclxuICAgICAgICBpZiAoIW1hcmtlcnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIERFRkFVTFRfSU5URVJQT0xBVElPTl9DT05GSUc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhc3NlcnRJbnRlcnBvbGF0aW9uU3ltYm9scygnaW50ZXJwb2xhdGlvbicsIG1hcmtlcnMpO1xyXG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJwb2xhdGlvbkNvbmZpZyhtYXJrZXJzWzBdLCBtYXJrZXJzWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgc3RhcnQ6IHN0cmluZywgcHVibGljIGVuZDogc3RyaW5nKXt9O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlRFUlBPTEFUSU9OX0NPTkZJRzogSW50ZXJwb2xhdGlvbkNvbmZpZyA9XHJcbiAgICBuZXcgSW50ZXJwb2xhdGlvbkNvbmZpZygne3snLCAnfX0nKTsiXX0=
|