@auscope/angular2parse 20.3.0 → 22.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +13 -0
- package/LICENSE +21 -0
- package/README.md +66 -49
- package/angular.json +56 -0
- package/package.json +41 -33
- package/projects/angular2parse/README.md +49 -0
- package/projects/angular2parse/ng-package.json +7 -0
- package/projects/angular2parse/package.json +19 -0
- package/projects/angular2parse/src/lib/angular/compiler/assertions.d.ts +10 -0
- package/projects/angular2parse/src/lib/angular/compiler/assertions.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/assertions.js +45 -0
- package/projects/angular2parse/src/lib/angular/compiler/assertions.js.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/assertions.ts +49 -0
- package/projects/angular2parse/src/lib/angular/compiler/ast.d.ts +243 -0
- package/projects/angular2parse/src/lib/angular/compiler/ast.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/ast.js +393 -0
- package/projects/angular2parse/src/lib/angular/compiler/ast.js.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/ast.ts +393 -0
- package/projects/angular2parse/src/lib/angular/compiler/chars.d.ts +70 -0
- package/projects/angular2parse/src/lib/angular/compiler/chars.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/chars.js +78 -0
- package/projects/angular2parse/src/lib/angular/compiler/chars.js.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/chars.ts +89 -0
- package/projects/angular2parse/src/lib/angular/compiler/interpolation-config.d.ts +15 -0
- package/projects/angular2parse/src/lib/angular/compiler/interpolation-config.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/interpolation-config.js +24 -0
- package/projects/angular2parse/src/lib/angular/compiler/interpolation-config.js.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/interpolation-config.ts +25 -0
- package/projects/angular2parse/src/lib/angular/compiler/lexer.d.ts +45 -0
- package/projects/angular2parse/src/lib/angular/compiler/lexer.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/lexer.js +344 -0
- package/projects/angular2parse/src/lib/angular/compiler/lexer.js.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/lexer.ts +383 -0
- package/projects/angular2parse/src/lib/angular/compiler/parser.d.ts +93 -0
- package/projects/angular2parse/src/lib/angular/compiler/parser.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/parser.js +735 -0
- package/projects/angular2parse/src/lib/angular/compiler/parser.js.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler/parser.ts +825 -0
- package/projects/angular2parse/src/lib/angular/compiler.d.ts +7 -0
- package/projects/angular2parse/src/lib/angular/compiler.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler.js +7 -0
- package/projects/angular2parse/src/lib/angular/compiler.js.map +1 -0
- package/projects/angular2parse/src/lib/angular/compiler.ts +6 -0
- package/projects/angular2parse/src/lib/angular/facade/lang.d.ts +45 -0
- package/projects/angular2parse/src/lib/angular/facade/lang.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular/facade/lang.js +85 -0
- package/projects/angular2parse/src/lib/angular/facade/lang.js.map +1 -0
- package/projects/angular2parse/src/lib/angular/facade/lang.ts +124 -0
- package/projects/angular2parse/src/lib/angular/facade.d.ts +2 -0
- package/projects/angular2parse/src/lib/angular/facade.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular/facade.js +2 -0
- package/projects/angular2parse/src/lib/angular/facade.js.map +1 -0
- package/projects/angular2parse/src/lib/angular/facade.ts +1 -0
- package/projects/angular2parse/src/lib/angular.d.ts +3 -0
- package/projects/angular2parse/src/lib/angular.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/angular.js +3 -0
- package/projects/angular2parse/src/lib/angular.js.map +1 -0
- package/projects/angular2parse/src/lib/angular.ts +2 -0
- package/projects/angular2parse/src/lib/module.d.ts +6 -0
- package/projects/angular2parse/src/lib/module.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/module.js +17 -0
- package/projects/angular2parse/src/lib/module.js.map +1 -0
- package/projects/angular2parse/src/lib/module.ts +12 -0
- package/projects/angular2parse/src/lib/parse.d.ts +19 -0
- package/projects/angular2parse/src/lib/parse.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/parse.js +61 -0
- package/projects/angular2parse/src/lib/parse.js.map +1 -0
- package/projects/angular2parse/src/lib/parse.ts +78 -0
- package/projects/angular2parse/src/lib/util/binary-operations.d.ts +2 -0
- package/projects/angular2parse/src/lib/util/binary-operations.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/util/binary-operations.js +18 -0
- package/projects/angular2parse/src/lib/util/binary-operations.js.map +1 -0
- package/projects/angular2parse/src/lib/util/binary-operations.ts +17 -0
- package/projects/angular2parse/src/lib/util/lang.d.ts +5 -0
- package/projects/angular2parse/src/lib/util/lang.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/util/lang.js +13 -0
- package/projects/angular2parse/src/lib/util/lang.js.map +1 -0
- package/projects/angular2parse/src/lib/util/lang.ts +15 -0
- package/projects/angular2parse/src/lib/util.d.ts +3 -0
- package/projects/angular2parse/src/lib/util.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/util.js +3 -0
- package/projects/angular2parse/src/lib/util.js.map +1 -0
- package/projects/angular2parse/src/lib/util.ts +2 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-compiler.d.ts +24 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-compiler.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-compiler.js +96 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-compiler.js.map +1 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-compiler.ts +149 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-resolver.d.ts +26 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-resolver.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-resolver.js +141 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-resolver.js.map +1 -0
- package/projects/angular2parse/src/lib/visitors/parse-visitor-resolver.ts +208 -0
- package/projects/angular2parse/src/lib/visitors.d.ts +3 -0
- package/projects/angular2parse/src/lib/visitors.d.ts.map +1 -0
- package/projects/angular2parse/src/lib/visitors.js +3 -0
- package/projects/angular2parse/src/lib/visitors.js.map +1 -0
- package/projects/angular2parse/src/lib/visitors.ts +2 -0
- package/projects/angular2parse/src/public-api.d.ts +3 -0
- package/projects/angular2parse/src/public-api.d.ts.map +1 -0
- package/projects/angular2parse/src/public-api.js +6 -0
- package/projects/angular2parse/src/public-api.js.map +1 -0
- package/projects/angular2parse/src/public-api.ts +5 -0
- package/projects/angular2parse/tsconfig.lib.json +22 -0
- package/projects/angular2parse/tsconfig.lib.prod.json +15 -0
- package/tsconfig.json +21 -0
- package/fesm2022/auscope-angular2parse.mjs +0 -2033
- package/fesm2022/auscope-angular2parse.mjs.map +0 -1
- package/index.d.ts +0 -32
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function compileToJSON(json) {
|
|
2
|
+
return JSON.stringify(json).replace(/"/g, '');
|
|
3
|
+
}
|
|
4
|
+
export function isPresent(obj) {
|
|
5
|
+
return obj !== null && obj !== undefined;
|
|
6
|
+
}
|
|
7
|
+
export function isJsObject(obj) {
|
|
8
|
+
return obj !== null && (typeof obj === 'function' || typeof obj === 'object');
|
|
9
|
+
}
|
|
10
|
+
export function isFunction(val) {
|
|
11
|
+
return typeof val === 'function';
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=lang.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lang.js","sourceRoot":"","sources":["lang.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,IAAS;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAQ;IAC9B,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAQ;IAC/B,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,GAAG,KAAK,UAAU,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAQ;IAC/B,OAAO,OAAO,GAAG,KAAK,UAAU,CAAC;AACrC,CAAC","sourcesContent":["export function compileToJSON(json: any) {\r\n return JSON.stringify(json).replace(/\"/g, '');\r\n}\r\n\r\nexport function isPresent(obj: any) {\r\n return obj !== null && obj !== undefined;\r\n}\r\n\r\nexport function isJsObject(obj: any) {\r\n return obj !== null && (typeof obj === 'function' || typeof obj === 'object');\r\n}\r\n\r\nexport function isFunction(val: any) {\r\n return typeof val === 'function';\r\n}"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function compileToJSON(json: any) {
|
|
2
|
+
return JSON.stringify(json).replace(/"/g, '');
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function isPresent(obj: any) {
|
|
6
|
+
return obj !== null && obj !== undefined;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function isJsObject(obj: any) {
|
|
10
|
+
return obj !== null && (typeof obj === 'function' || typeof obj === 'object');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function isFunction(val: any) {
|
|
14
|
+
return typeof val === 'function';
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["util.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["util.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC","sourcesContent":["export * from './util/binary-operations';\r\nexport * from './util/lang';"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { AST, RecursiveAstVisitor, PropertyRead, MethodCall, KeyedRead, ImplicitReceiver, LiteralPrimitive, Binary, Chain, Conditional, BindingPipe, FunctionCall, Interpolation, KeyedWrite, LiteralArray, LiteralMap, PrefixNot, PropertyWrite, SafePropertyRead, SafeMethodCall, Quote } from '../angular';
|
|
2
|
+
export declare class ParseVisitorCompiler extends RecursiveAstVisitor {
|
|
3
|
+
visitBinary(ast: Binary): any;
|
|
4
|
+
visitChain(ast: Chain): any;
|
|
5
|
+
visitConditional(ast: Conditional): any;
|
|
6
|
+
visitPipe(ast: BindingPipe): any;
|
|
7
|
+
visitFunctionCall(ast: FunctionCall): any;
|
|
8
|
+
visitImplicitReceiver(ast: ImplicitReceiver): any;
|
|
9
|
+
visitInterpolation(ast: Interpolation): any;
|
|
10
|
+
visitKeyedRead(ast: KeyedRead): any;
|
|
11
|
+
visitKeyedWrite(ast: KeyedWrite): any;
|
|
12
|
+
visitLiteralArray(ast: LiteralArray): any;
|
|
13
|
+
visitLiteralMap(ast: LiteralMap): any;
|
|
14
|
+
visitLiteralPrimitive(ast: LiteralPrimitive): any;
|
|
15
|
+
visitMethodCall(ast: MethodCall): any;
|
|
16
|
+
visitPrefixNot(ast: PrefixNot): any;
|
|
17
|
+
visitPropertyRead(ast: PropertyRead): any;
|
|
18
|
+
visitPropertyWrite(ast: PropertyWrite): any;
|
|
19
|
+
visitSafePropertyRead(ast: SafePropertyRead): any;
|
|
20
|
+
visitSafeMethodCall(ast: SafeMethodCall): any;
|
|
21
|
+
visitAll(asts: AST[]): any;
|
|
22
|
+
visitQuote(ast: Quote): any;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=parse-visitor-compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-visitor-compiler.d.ts","sourceRoot":"","sources":["parse-visitor-compiler.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,GAAG,EACH,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,KAAK,EACR,MAAM,YAAY,CAAC;AAGpB,qBAAa,oBAAqB,SAAQ,mBAAmB;IAEzD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IAQ7B,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG;IAI3B,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG;IAQvC,SAAS,CAAC,GAAG,EAAE,WAAW,GAAG,GAAG;IAUhC,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,GAAG;IAOzC,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,GAAG;IAIjD,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG;IAI3C,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG;IAOnC,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG;IAIrC,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,GAAG;IAIzC,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG;IAYrC,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,GAAG;IAIjD,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG;IAQrC,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG;IAInC,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,GAAG;IAOzC,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,GAAG;IAI3C,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,GAAG;IAOjD,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,GAAG;IAQ7C,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG;IAI1B,UAAU,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG;CAG9B"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { RecursiveAstVisitor } from '../angular';
|
|
2
|
+
import { compileToJSON } from '../util';
|
|
3
|
+
export class ParseVisitorCompiler extends RecursiveAstVisitor {
|
|
4
|
+
visitBinary(ast) {
|
|
5
|
+
const left = ast.left.visit(this);
|
|
6
|
+
const right = ast.right.visit(this);
|
|
7
|
+
return `${left} ${ast.operation} ${right}`;
|
|
8
|
+
}
|
|
9
|
+
// TODO
|
|
10
|
+
visitChain(ast) {
|
|
11
|
+
return compileToJSON(this.visitAll(ast.expressions));
|
|
12
|
+
}
|
|
13
|
+
visitConditional(ast) {
|
|
14
|
+
const condition = ast.condition.visit(this);
|
|
15
|
+
const trueExp = ast.trueExp.visit(this);
|
|
16
|
+
const falseExp = ast.falseExp.visit(this);
|
|
17
|
+
return `${condition} ? ${trueExp} : ${falseExp}`;
|
|
18
|
+
}
|
|
19
|
+
visitPipe(ast) {
|
|
20
|
+
const pipe = ast.name;
|
|
21
|
+
const args = this.visitAll(ast.args);
|
|
22
|
+
const value = ast.exp.visit(this);
|
|
23
|
+
args.unshift(value);
|
|
24
|
+
return `pipesCache.get('${pipe}').transform.apply(null, ${compileToJSON(args)})`;
|
|
25
|
+
}
|
|
26
|
+
// TODO
|
|
27
|
+
visitFunctionCall(ast) {
|
|
28
|
+
const target = ast.target.visit(this);
|
|
29
|
+
const args = compileToJSON(this.visitAll(ast.args));
|
|
30
|
+
return `${target}.apply(${target}, ${args})`;
|
|
31
|
+
}
|
|
32
|
+
visitImplicitReceiver(ast) {
|
|
33
|
+
return `context`;
|
|
34
|
+
}
|
|
35
|
+
visitInterpolation(ast) {
|
|
36
|
+
return this.visitAll(ast.expressions)[0];
|
|
37
|
+
}
|
|
38
|
+
visitKeyedRead(ast) {
|
|
39
|
+
const obj = ast.obj.visit(this);
|
|
40
|
+
const key = ast.key.visit(this);
|
|
41
|
+
return `${obj}[${key}]`;
|
|
42
|
+
}
|
|
43
|
+
visitKeyedWrite(ast) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
visitLiteralArray(ast) {
|
|
47
|
+
return compileToJSON(this.visitAll(ast.expressions));
|
|
48
|
+
}
|
|
49
|
+
visitLiteralMap(ast) {
|
|
50
|
+
const result = {};
|
|
51
|
+
const keys = ast.keys;
|
|
52
|
+
const values = this.visitAll(ast.values);
|
|
53
|
+
for (let i = 0, length = keys.length; i < length; i++) {
|
|
54
|
+
result[keys[i]] = values[i];
|
|
55
|
+
}
|
|
56
|
+
return compileToJSON(result);
|
|
57
|
+
}
|
|
58
|
+
visitLiteralPrimitive(ast) {
|
|
59
|
+
return typeof ast.value === 'string' ? `'${ast.value}'` : ast.value;
|
|
60
|
+
}
|
|
61
|
+
visitMethodCall(ast) {
|
|
62
|
+
const methodName = ast.name;
|
|
63
|
+
const receiver = ast.receiver.visit(this);
|
|
64
|
+
const args = compileToJSON(this.visitAll(ast.args));
|
|
65
|
+
return `${receiver}['${methodName}'].apply(${receiver}, ${args})`;
|
|
66
|
+
}
|
|
67
|
+
visitPrefixNot(ast) {
|
|
68
|
+
return ast.expression.visit(this);
|
|
69
|
+
}
|
|
70
|
+
visitPropertyRead(ast) {
|
|
71
|
+
const property = ast.name;
|
|
72
|
+
const receiver = ast.receiver.visit(this);
|
|
73
|
+
return `${receiver}['${property}']`;
|
|
74
|
+
}
|
|
75
|
+
visitPropertyWrite(ast) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
visitSafePropertyRead(ast) {
|
|
79
|
+
const property = ast.name;
|
|
80
|
+
const receiver = ast.receiver.visit(this);
|
|
81
|
+
return `${receiver}['${property}']`;
|
|
82
|
+
}
|
|
83
|
+
visitSafeMethodCall(ast) {
|
|
84
|
+
const methodName = ast.name;
|
|
85
|
+
const receiver = ast.receiver.visit(this);
|
|
86
|
+
const args = compileToJSON(this.visitAll(ast.args));
|
|
87
|
+
return `${receiver}['${methodName}'].apply(${receiver}, ${args})`;
|
|
88
|
+
}
|
|
89
|
+
visitAll(asts) {
|
|
90
|
+
return asts.map(ast => ast.visit(this));
|
|
91
|
+
}
|
|
92
|
+
visitQuote(ast) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=parse-visitor-compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-visitor-compiler.js","sourceRoot":"","sources":["parse-visitor-compiler.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AST,\r\n RecursiveAstVisitor,\r\n PropertyRead,\r\n MethodCall,\r\n KeyedRead,\r\n ImplicitReceiver,\r\n LiteralPrimitive,\r\n Binary,\r\n Chain,\r\n Conditional,\r\n BindingPipe,\r\n FunctionCall,\r\n Interpolation,\r\n KeyedWrite,\r\n LiteralArray,\r\n LiteralMap,\r\n PrefixNot,\r\n PropertyWrite,\r\n SafePropertyRead,\r\n SafeMethodCall,\r\n Quote\r\n} from '../angular';\r\nimport { compileToJSON } from '../util';\r\n\r\nexport class ParseVisitorCompiler extends RecursiveAstVisitor {\r\n\r\n visitBinary(ast: Binary): any {\r\n const left = ast.left.visit(this);\r\n const right = ast.right.visit(this);\r\n\r\n return `${left} ${ast.operation} ${right}`;\r\n }\r\n\r\n // TODO\r\n visitChain(ast: Chain): any {\r\n return compileToJSON(this.visitAll(ast.expressions));\r\n }\r\n\r\n visitConditional(ast: Conditional): any {\r\n const condition = ast.condition.visit(this);\r\n const trueExp = ast.trueExp.visit(this);\r\n const falseExp = ast.falseExp.visit(this);\r\n\r\n return `${condition} ? ${trueExp} : ${falseExp}`;\r\n }\r\n\r\n visitPipe(ast: BindingPipe): any {\r\n const pipe = ast.name;\r\n const args = this.visitAll(ast.args);\r\n const value = ast.exp.visit(this);\r\n args.unshift(value);\r\n\r\n return `pipesCache.get('${pipe}').transform.apply(null, ${compileToJSON(args)})`;\r\n }\r\n\r\n // TODO\r\n visitFunctionCall(ast: FunctionCall): any {\r\n const target = ast.target.visit(this);\r\n const args = compileToJSON(this.visitAll(ast.args));\r\n\r\n return `${target}.apply(${target}, ${args})`;\r\n }\r\n\r\n visitImplicitReceiver(ast: ImplicitReceiver): any {\r\n return `context`;\r\n }\r\n\r\n visitInterpolation(ast: Interpolation): any {\r\n return this.visitAll(ast.expressions)[0];\r\n }\r\n\r\n visitKeyedRead(ast: KeyedRead): any {\r\n const obj = ast.obj.visit(this);\r\n const key = ast.key.visit(this);\r\n\r\n return `${obj}[${key}]`;\r\n }\r\n\r\n visitKeyedWrite(ast: KeyedWrite): any {\r\n return null;\r\n }\r\n\r\n visitLiteralArray(ast: LiteralArray): any {\r\n return compileToJSON(this.visitAll(ast.expressions));\r\n }\r\n\r\n visitLiteralMap(ast: LiteralMap): any {\r\n const result = {};\r\n const keys = ast.keys;\r\n const values = this.visitAll(ast.values);\r\n\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n result[keys[i]] = values[i];\r\n }\r\n\r\n return compileToJSON(result);\r\n }\r\n\r\n visitLiteralPrimitive(ast: LiteralPrimitive): any {\r\n return typeof ast.value === 'string' ? `'${ast.value}'` : ast.value;\r\n }\r\n\r\n visitMethodCall(ast: MethodCall): any {\r\n const methodName = ast.name;\r\n const receiver = ast.receiver.visit(this);\r\n const args = compileToJSON(this.visitAll(ast.args));\r\n\r\n return `${receiver}['${methodName}'].apply(${receiver}, ${args})`;\r\n }\r\n\r\n visitPrefixNot(ast: PrefixNot): any {\r\n return ast.expression.visit(this);\r\n }\r\n\r\n visitPropertyRead(ast: PropertyRead): any {\r\n const property = ast.name;\r\n const receiver = ast.receiver.visit(this);\r\n\r\n return `${receiver}['${property}']`;\r\n }\r\n\r\n visitPropertyWrite(ast: PropertyWrite): any {\r\n return null;\r\n }\r\n\r\n visitSafePropertyRead(ast: SafePropertyRead): any {\r\n const property = ast.name;\r\n const receiver = ast.receiver.visit(this);\r\n\r\n return `${receiver}['${property}']`;\r\n }\r\n\r\n visitSafeMethodCall(ast: SafeMethodCall): any {\r\n const methodName = ast.name;\r\n const receiver = ast.receiver.visit(this);\r\n const args = compileToJSON(this.visitAll(ast.args));\r\n\r\n return `${receiver}['${methodName}'].apply(${receiver}, ${args})`;\r\n }\r\n\r\n visitAll(asts: AST[]): any {\r\n return asts.map(ast => ast.visit(this));\r\n }\r\n\r\n visitQuote(ast: Quote): any {\r\n return null;\r\n }\r\n}"]}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AST,
|
|
3
|
+
RecursiveAstVisitor,
|
|
4
|
+
PropertyRead,
|
|
5
|
+
MethodCall,
|
|
6
|
+
KeyedRead,
|
|
7
|
+
ImplicitReceiver,
|
|
8
|
+
LiteralPrimitive,
|
|
9
|
+
Binary,
|
|
10
|
+
Chain,
|
|
11
|
+
Conditional,
|
|
12
|
+
BindingPipe,
|
|
13
|
+
FunctionCall,
|
|
14
|
+
Interpolation,
|
|
15
|
+
KeyedWrite,
|
|
16
|
+
LiteralArray,
|
|
17
|
+
LiteralMap,
|
|
18
|
+
PrefixNot,
|
|
19
|
+
PropertyWrite,
|
|
20
|
+
SafePropertyRead,
|
|
21
|
+
SafeMethodCall,
|
|
22
|
+
Quote
|
|
23
|
+
} from '../angular';
|
|
24
|
+
import { compileToJSON } from '../util';
|
|
25
|
+
|
|
26
|
+
export class ParseVisitorCompiler extends RecursiveAstVisitor {
|
|
27
|
+
|
|
28
|
+
visitBinary(ast: Binary): any {
|
|
29
|
+
const left = ast.left.visit(this);
|
|
30
|
+
const right = ast.right.visit(this);
|
|
31
|
+
|
|
32
|
+
return `${left} ${ast.operation} ${right}`;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// TODO
|
|
36
|
+
visitChain(ast: Chain): any {
|
|
37
|
+
return compileToJSON(this.visitAll(ast.expressions));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
visitConditional(ast: Conditional): any {
|
|
41
|
+
const condition = ast.condition.visit(this);
|
|
42
|
+
const trueExp = ast.trueExp.visit(this);
|
|
43
|
+
const falseExp = ast.falseExp.visit(this);
|
|
44
|
+
|
|
45
|
+
return `${condition} ? ${trueExp} : ${falseExp}`;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
visitPipe(ast: BindingPipe): any {
|
|
49
|
+
const pipe = ast.name;
|
|
50
|
+
const args = this.visitAll(ast.args);
|
|
51
|
+
const value = ast.exp.visit(this);
|
|
52
|
+
args.unshift(value);
|
|
53
|
+
|
|
54
|
+
return `pipesCache.get('${pipe}').transform.apply(null, ${compileToJSON(args)})`;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// TODO
|
|
58
|
+
visitFunctionCall(ast: FunctionCall): any {
|
|
59
|
+
const target = ast.target.visit(this);
|
|
60
|
+
const args = compileToJSON(this.visitAll(ast.args));
|
|
61
|
+
|
|
62
|
+
return `${target}.apply(${target}, ${args})`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
visitImplicitReceiver(ast: ImplicitReceiver): any {
|
|
66
|
+
return `context`;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
visitInterpolation(ast: Interpolation): any {
|
|
70
|
+
return this.visitAll(ast.expressions)[0];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
visitKeyedRead(ast: KeyedRead): any {
|
|
74
|
+
const obj = ast.obj.visit(this);
|
|
75
|
+
const key = ast.key.visit(this);
|
|
76
|
+
|
|
77
|
+
return `${obj}[${key}]`;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
visitKeyedWrite(ast: KeyedWrite): any {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
visitLiteralArray(ast: LiteralArray): any {
|
|
85
|
+
return compileToJSON(this.visitAll(ast.expressions));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
visitLiteralMap(ast: LiteralMap): any {
|
|
89
|
+
const result: any = {};
|
|
90
|
+
const keys = ast.keys;
|
|
91
|
+
const values = this.visitAll(ast.values);
|
|
92
|
+
|
|
93
|
+
for (let i = 0, length = keys.length; i < length; i++) {
|
|
94
|
+
result[keys[i]] = values[i];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return compileToJSON(result);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
visitLiteralPrimitive(ast: LiteralPrimitive): any {
|
|
101
|
+
return typeof ast.value === 'string' ? `'${ast.value}'` : ast.value;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
visitMethodCall(ast: MethodCall): any {
|
|
105
|
+
const methodName = ast.name;
|
|
106
|
+
const receiver = ast.receiver.visit(this);
|
|
107
|
+
const args = compileToJSON(this.visitAll(ast.args));
|
|
108
|
+
|
|
109
|
+
return `${receiver}['${methodName}'].apply(${receiver}, ${args})`;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
visitPrefixNot(ast: PrefixNot): any {
|
|
113
|
+
return ast.expression.visit(this);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
visitPropertyRead(ast: PropertyRead): any {
|
|
117
|
+
const property = ast.name;
|
|
118
|
+
const receiver = ast.receiver.visit(this);
|
|
119
|
+
|
|
120
|
+
return `${receiver}['${property}']`;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
visitPropertyWrite(ast: PropertyWrite): any {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
visitSafePropertyRead(ast: SafePropertyRead): any {
|
|
128
|
+
const property = ast.name;
|
|
129
|
+
const receiver = ast.receiver.visit(this);
|
|
130
|
+
|
|
131
|
+
return `${receiver}['${property}']`;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
visitSafeMethodCall(ast: SafeMethodCall): any {
|
|
135
|
+
const methodName = ast.name;
|
|
136
|
+
const receiver = ast.receiver.visit(this);
|
|
137
|
+
const args = compileToJSON(this.visitAll(ast.args));
|
|
138
|
+
|
|
139
|
+
return `${receiver}['${methodName}'].apply(${receiver}, ${args})`;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
visitAll(asts: AST[]): any {
|
|
143
|
+
return asts.map(ast => ast.visit(this));
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
visitQuote(ast: Quote): any {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { AST, RecursiveAstVisitor, PropertyRead, MethodCall, KeyedRead, ImplicitReceiver, LiteralPrimitive, Binary, Chain, Conditional, BindingPipe, FunctionCall, Interpolation, KeyedWrite, LiteralArray, LiteralMap, PrefixNot, PropertyWrite, SafePropertyRead, SafeMethodCall, Quote } from '../angular';
|
|
2
|
+
export declare class ParseVisitorResolver extends RecursiveAstVisitor {
|
|
3
|
+
private pipes;
|
|
4
|
+
constructor(pipes: Map<string, any>);
|
|
5
|
+
visitBinary(ast: Binary, context: any): any;
|
|
6
|
+
visitChain(ast: Chain, context: any): any;
|
|
7
|
+
visitConditional(ast: Conditional, context: any): any;
|
|
8
|
+
visitPipe(ast: BindingPipe, context: any): any;
|
|
9
|
+
visitFunctionCall(ast: FunctionCall, context: any): any;
|
|
10
|
+
visitImplicitReceiver(ast: ImplicitReceiver, context: any): any;
|
|
11
|
+
visitInterpolation(ast: Interpolation, context: any): any;
|
|
12
|
+
visitKeyedRead(ast: KeyedRead, context: any): any;
|
|
13
|
+
visitKeyedWrite(ast: KeyedWrite, context: any): any;
|
|
14
|
+
visitLiteralArray(ast: LiteralArray, context: any): any;
|
|
15
|
+
visitLiteralMap(ast: LiteralMap, context: any): any;
|
|
16
|
+
visitLiteralPrimitive(ast: LiteralPrimitive, context: any): any;
|
|
17
|
+
visitMethodCall(ast: MethodCall, context: any): any;
|
|
18
|
+
visitPrefixNot(ast: PrefixNot, context: any): any;
|
|
19
|
+
visitPropertyRead(ast: PropertyRead, context: any): any;
|
|
20
|
+
visitPropertyWrite(ast: PropertyWrite, context: any): any;
|
|
21
|
+
visitSafePropertyRead(ast: SafePropertyRead, context: any): any;
|
|
22
|
+
visitSafeMethodCall(ast: SafeMethodCall, context: any): any;
|
|
23
|
+
visitAll(asts: AST[], context: any): any;
|
|
24
|
+
visitQuote(ast: Quote, context: any): any;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=parse-visitor-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-visitor-resolver.d.ts","sourceRoot":"","sources":["parse-visitor-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,GAAG,EACH,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,MAAM,EACN,KAAK,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,KAAK,EACR,MAAM,YAAY,CAAC;AAIpB,qBAAa,oBAAqB,SAAQ,mBAAmB;IAE7C,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC;IAI3C,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAW3C,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAIzC,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAWrD,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAoB9C,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAWvD,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAI/D,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAIzD,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAMjD,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAQnD,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAIvD,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAYnD,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAI/D,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAiBnD,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAIjD,iBAAiB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAUvD,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAWzD,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAU/D,mBAAmB,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAiB3D,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAIxC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;CAG5C"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { RecursiveAstVisitor } from '../angular';
|
|
2
|
+
import * as util from '../util';
|
|
3
|
+
import { BinaryOperations } from '../util/binary-operations';
|
|
4
|
+
export class ParseVisitorResolver extends RecursiveAstVisitor {
|
|
5
|
+
constructor(pipes) {
|
|
6
|
+
super();
|
|
7
|
+
this.pipes = pipes;
|
|
8
|
+
}
|
|
9
|
+
;
|
|
10
|
+
visitBinary(ast, context) {
|
|
11
|
+
const execFn = BinaryOperations.get(ast.operation);
|
|
12
|
+
if (!execFn) {
|
|
13
|
+
throw new Error(`Parse ERROR: on visitBinary, unknown operator ${ast.operation}`);
|
|
14
|
+
}
|
|
15
|
+
return execFn(ast.left.visit(this, context), ast.right.visit(this, context));
|
|
16
|
+
}
|
|
17
|
+
// TODO
|
|
18
|
+
visitChain(ast, context) {
|
|
19
|
+
return this.visitAll(ast.expressions, context);
|
|
20
|
+
}
|
|
21
|
+
visitConditional(ast, context) {
|
|
22
|
+
if (ast.condition.visit(this, context)) {
|
|
23
|
+
return ast.trueExp.visit(this, context);
|
|
24
|
+
}
|
|
25
|
+
else if (util.isPresent(ast.falseExp)) {
|
|
26
|
+
return ast.falseExp.visit(this, context);
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
visitPipe(ast, context) {
|
|
31
|
+
const pipe = this.pipes.get(ast.name);
|
|
32
|
+
if (!pipe) {
|
|
33
|
+
throw new Error(`pipe ${ast.name} not found.`);
|
|
34
|
+
}
|
|
35
|
+
if (!pipe.transform) {
|
|
36
|
+
throw new Error(`Parse ERROR: on visitPipe, transform method doesn't exist on pipe ${ast.name}.`);
|
|
37
|
+
}
|
|
38
|
+
const value = ast.exp.visit(this, context);
|
|
39
|
+
const pipeArgs = this.visitAll(ast.args, context);
|
|
40
|
+
pipeArgs.unshift(value);
|
|
41
|
+
return pipe.transform.apply(null, pipeArgs);
|
|
42
|
+
}
|
|
43
|
+
// TODO
|
|
44
|
+
visitFunctionCall(ast, context) {
|
|
45
|
+
const target = ast.target.visit(this, context);
|
|
46
|
+
if (!util.isFunction(target)) {
|
|
47
|
+
throw new Error(`Parse ERROR: on visitFunctionCall, target is not a function.`);
|
|
48
|
+
}
|
|
49
|
+
const args = this.visitAll(ast.args, context);
|
|
50
|
+
return target.apply(target, args);
|
|
51
|
+
}
|
|
52
|
+
visitImplicitReceiver(ast, context) {
|
|
53
|
+
return context;
|
|
54
|
+
}
|
|
55
|
+
visitInterpolation(ast, context) {
|
|
56
|
+
return this.visitAll(ast.expressions, context)[0];
|
|
57
|
+
}
|
|
58
|
+
visitKeyedRead(ast, context) {
|
|
59
|
+
const obj = ast.obj.visit(this, context);
|
|
60
|
+
const key = ast.key.visit(this, context);
|
|
61
|
+
return obj[key];
|
|
62
|
+
}
|
|
63
|
+
visitKeyedWrite(ast, context) {
|
|
64
|
+
const obj = ast.obj.visit(this, context);
|
|
65
|
+
const key = ast.key.visit(this, context);
|
|
66
|
+
const value = ast.value.visit(this, context);
|
|
67
|
+
obj[key] = value;
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
visitLiteralArray(ast, context) {
|
|
71
|
+
return this.visitAll(ast.expressions, context);
|
|
72
|
+
}
|
|
73
|
+
visitLiteralMap(ast, context) {
|
|
74
|
+
const result = {};
|
|
75
|
+
const keys = ast.keys;
|
|
76
|
+
const values = this.visitAll(ast.values, context);
|
|
77
|
+
for (let i = 0, length = keys.length; i < length; i++) {
|
|
78
|
+
result[keys[i]] = values[i];
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
visitLiteralPrimitive(ast, context) {
|
|
83
|
+
return ast.value;
|
|
84
|
+
}
|
|
85
|
+
visitMethodCall(ast, context) {
|
|
86
|
+
const receiver = ast.receiver.visit(this, context);
|
|
87
|
+
if (!util.isJsObject(receiver)) {
|
|
88
|
+
throw new Error(`Parse ERROR: on visitMethodCall, invalid method receiver.`);
|
|
89
|
+
}
|
|
90
|
+
const method = receiver[ast.name];
|
|
91
|
+
if (!util.isFunction(method)) {
|
|
92
|
+
throw new Error(`Parse ERROR: on visitMethodCall, method ${ast.name} doesn't exist on receiver.`);
|
|
93
|
+
}
|
|
94
|
+
const args = this.visitAll(ast.args, context);
|
|
95
|
+
return method.apply(receiver, args);
|
|
96
|
+
}
|
|
97
|
+
visitPrefixNot(ast, context) {
|
|
98
|
+
return ast.expression.visit(this, context);
|
|
99
|
+
}
|
|
100
|
+
visitPropertyRead(ast, context) {
|
|
101
|
+
const receiver = ast.receiver.visit(this, context);
|
|
102
|
+
if (!util.isJsObject(receiver)) {
|
|
103
|
+
throw new Error(`Parse ERROR: on visitPropertyRead, invalid property receiver.`);
|
|
104
|
+
}
|
|
105
|
+
return receiver[ast.name];
|
|
106
|
+
}
|
|
107
|
+
visitPropertyWrite(ast, context) {
|
|
108
|
+
const receiver = ast.receiver.visit(this, context);
|
|
109
|
+
if (!util.isJsObject(receiver)) {
|
|
110
|
+
throw new Error(`Parse ERROR: on visitPropertyRead, invalid property receiver.`);
|
|
111
|
+
}
|
|
112
|
+
receiver[ast.name] = ast.value.visit(this, context);
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
visitSafePropertyRead(ast, context) {
|
|
116
|
+
const receiver = ast.receiver.visit(this, context);
|
|
117
|
+
if (!util.isJsObject(receiver)) {
|
|
118
|
+
throw new Error(`Parse ERROR: on visitSafePropertyRead, invalid property receiver.`);
|
|
119
|
+
}
|
|
120
|
+
return receiver[ast.name];
|
|
121
|
+
}
|
|
122
|
+
visitSafeMethodCall(ast, context) {
|
|
123
|
+
const receiver = ast.receiver.visit(this, context);
|
|
124
|
+
if (!util.isJsObject(receiver)) {
|
|
125
|
+
throw new Error(`Parse ERROR: on visitSafeMethodCall, invalid method receiver.`);
|
|
126
|
+
}
|
|
127
|
+
const method = receiver[ast.name];
|
|
128
|
+
if (!util.isFunction(method)) {
|
|
129
|
+
throw new Error(`Parse ERROR: on visitSafeMethodCall, method ${ast.name} doesn't exist on receiver.`);
|
|
130
|
+
}
|
|
131
|
+
const args = this.visitAll(ast.args, context);
|
|
132
|
+
return method.apply(receiver, args);
|
|
133
|
+
}
|
|
134
|
+
visitAll(asts, context) {
|
|
135
|
+
return asts.map(ast => ast.visit(this, context));
|
|
136
|
+
}
|
|
137
|
+
visitQuote(ast, context) {
|
|
138
|
+
throw new Error(`Parse ERROR: on visitQuote, quote expression not allowed.`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=parse-visitor-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-visitor-resolver.js","sourceRoot":"","sources":["parse-visitor-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import {\r\n AST,\r\n RecursiveAstVisitor,\r\n PropertyRead,\r\n MethodCall,\r\n KeyedRead,\r\n ImplicitReceiver,\r\n LiteralPrimitive,\r\n Binary,\r\n Chain,\r\n Conditional,\r\n BindingPipe,\r\n FunctionCall,\r\n Interpolation,\r\n KeyedWrite,\r\n LiteralArray,\r\n LiteralMap,\r\n PrefixNot,\r\n PropertyWrite,\r\n SafePropertyRead,\r\n SafeMethodCall,\r\n Quote\r\n} from '../angular';\r\nimport * as util from '../util';\r\nimport { BinaryOperations } from '../util/binary-operations';\r\n\r\nexport class ParseVisitorResolver extends RecursiveAstVisitor {\r\n\r\n constructor(private pipes: Map<string, any>) {\r\n super();\r\n };\r\n\r\n visitBinary(ast: Binary, context: any): any {\r\n const execFn = BinaryOperations.get(ast.operation);\r\n\r\n if (!execFn) {\r\n throw new Error(`Parse ERROR: on visitBinary, unknown operator ${ast.operation}`);\r\n }\r\n\r\n return execFn(ast.left.visit(this, context), ast.right.visit(this, context));\r\n }\r\n\r\n // TODO\r\n visitChain(ast: Chain, context: any): any {\r\n return this.visitAll(ast.expressions, context);\r\n }\r\n\r\n visitConditional(ast: Conditional, context: any): any {\r\n if (ast.condition.visit(this, context)) {\r\n return ast.trueExp.visit(this, context);\r\n }\r\n else if (util.isPresent(ast.falseExp)) {\r\n return ast.falseExp.visit(this, context);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n visitPipe(ast: BindingPipe, context: any): any {\r\n const pipe = this.pipes.get(ast.name);\r\n\r\n if (!pipe) {\r\n throw new Error(`pipe ${ast.name} not found.`);\r\n }\r\n\r\n if (!pipe.transform) {\r\n throw new Error(`Parse ERROR: on visitPipe, transform method doesn't exist on pipe ${ast.name}.`);\r\n }\r\n\r\n const value = ast.exp.visit(this, context);\r\n const pipeArgs = this.visitAll(ast.args, context);\r\n\r\n pipeArgs.unshift(value);\r\n\r\n return pipe.transform.apply(null, pipeArgs);\r\n }\r\n\r\n // TODO\r\n visitFunctionCall(ast: FunctionCall, context: any): any {\r\n const target = ast.target.visit(this, context);\r\n\r\n if (!util.isFunction(target)) {\r\n throw new Error(`Parse ERROR: on visitFunctionCall, target is not a function.`);\r\n }\r\n\r\n const args = this.visitAll(ast.args, context);\r\n return target.apply(target, args);\r\n }\r\n\r\n visitImplicitReceiver(ast: ImplicitReceiver, context: any): any {\r\n return context;\r\n }\r\n\r\n visitInterpolation(ast: Interpolation, context: any): any {\r\n return this.visitAll(ast.expressions, context)[0];\r\n }\r\n\r\n visitKeyedRead(ast: KeyedRead, context: any): any {\r\n const obj = ast.obj.visit(this, context);\r\n const key = ast.key.visit(this, context);\r\n return obj[key];\r\n }\r\n\r\n visitKeyedWrite(ast: KeyedWrite, context: any): any {\r\n const obj = ast.obj.visit(this, context);\r\n const key = ast.key.visit(this, context);\r\n const value = ast.value.visit(this, context);\r\n obj[key] = value;\r\n return null;\r\n }\r\n\r\n visitLiteralArray(ast: LiteralArray, context: any): any {\r\n return this.visitAll(ast.expressions, context);\r\n }\r\n\r\n visitLiteralMap(ast: LiteralMap, context: any): any {\r\n const result = {};\r\n const keys = ast.keys;\r\n const values = this.visitAll(ast.values, context);\r\n\r\n for (let i = 0, length = keys.length; i < length; i++) {\r\n result[keys[i]] = values[i];\r\n }\r\n\r\n return result;\r\n }\r\n\r\n visitLiteralPrimitive(ast: LiteralPrimitive, context: any): any {\r\n return ast.value;\r\n }\r\n\r\n visitMethodCall(ast: MethodCall, context: any): any {\r\n const receiver = ast.receiver.visit(this, context);\r\n\r\n if (!util.isJsObject(receiver)) {\r\n throw new Error(`Parse ERROR: on visitMethodCall, invalid method receiver.`);\r\n }\r\n\r\n const method = receiver[ast.name];\r\n\r\n if (!util.isFunction(method)) {\r\n throw new Error(`Parse ERROR: on visitMethodCall, method ${ast.name} doesn't exist on receiver.`);\r\n }\r\n\r\n const args = this.visitAll(ast.args, context);\r\n return method.apply(receiver, args);\r\n }\r\n\r\n visitPrefixNot(ast: PrefixNot, context: any): any {\r\n return ast.expression.visit(this, context);\r\n }\r\n\r\n visitPropertyRead(ast: PropertyRead, context: any): any {\r\n const receiver = ast.receiver.visit(this, context);\r\n\r\n if (!util.isJsObject(receiver)) {\r\n throw new Error(`Parse ERROR: on visitPropertyRead, invalid property receiver.`);\r\n }\r\n\r\n return receiver[ast.name];\r\n }\r\n\r\n visitPropertyWrite(ast: PropertyWrite, context: any): any {\r\n const receiver = ast.receiver.visit(this, context);\r\n\r\n if (!util.isJsObject(receiver)) {\r\n throw new Error(`Parse ERROR: on visitPropertyRead, invalid property receiver.`);\r\n }\r\n\r\n receiver[ast.name] = ast.value.visit(this, context);\r\n return null;\r\n }\r\n\r\n visitSafePropertyRead(ast: SafePropertyRead, context: any): any {\r\n const receiver = ast.receiver.visit(this, context);\r\n\r\n if (!util.isJsObject(receiver)) {\r\n throw new Error(`Parse ERROR: on visitSafePropertyRead, invalid property receiver.`);\r\n }\r\n\r\n return receiver[ast.name];\r\n }\r\n\r\n visitSafeMethodCall(ast: SafeMethodCall, context: any): any {\r\n const receiver = ast.receiver.visit(this, context);\r\n\r\n if (!util.isJsObject(receiver)) {\r\n throw new Error(`Parse ERROR: on visitSafeMethodCall, invalid method receiver.`);\r\n }\r\n\r\n const method = receiver[ast.name];\r\n\r\n if (!util.isFunction(method)) {\r\n throw new Error(`Parse ERROR: on visitSafeMethodCall, method ${ast.name} doesn't exist on receiver.`);\r\n }\r\n\r\n const args = this.visitAll(ast.args, context);\r\n return method.apply(receiver, args);\r\n }\r\n\r\n visitAll(asts: AST[], context: any): any {\r\n return asts.map(ast => ast.visit(this, context));\r\n }\r\n\r\n visitQuote(ast: Quote, context: any): any {\r\n throw new Error(`Parse ERROR: on visitQuote, quote expression not allowed.`);\r\n }\r\n}"]}
|