@player-ui/player 0.8.0--canary.307.9621 → 0.8.0-next.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/dist/Player.native.js +11630 -0
- package/dist/Player.native.js.map +1 -0
- package/dist/cjs/index.cjs +5626 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/{index.esm.js → index.legacy-esm.js} +2044 -1667
- package/dist/{index.cjs.js → index.mjs} +2052 -1761
- package/dist/index.mjs.map +1 -0
- package/package.json +29 -63
- package/src/__tests__/data.test.ts +498 -0
- package/src/__tests__/flow.test.ts +312 -0
- package/src/__tests__/helpers/action-exp.plugin.ts +22 -0
- package/src/__tests__/helpers/actions.flow.ts +67 -0
- package/src/__tests__/helpers/binding.plugin.ts +125 -0
- package/src/__tests__/helpers/expression.plugin.ts +88 -0
- package/src/__tests__/helpers/transform-plugin.ts +19 -0
- package/src/__tests__/helpers/validation.flow.ts +56 -0
- package/src/__tests__/player.test.ts +597 -0
- package/src/__tests__/string-resolver.test.ts +186 -0
- package/src/__tests__/validation.test.ts +3555 -0
- package/src/__tests__/view.test.ts +715 -0
- package/src/binding/__tests__/binding.test.ts +113 -0
- package/src/binding/__tests__/index.test.ts +208 -0
- package/src/binding/__tests__/resolver.test.ts +83 -0
- package/src/binding/binding.ts +6 -6
- package/src/binding/index.ts +34 -34
- package/src/binding/resolver.ts +19 -19
- package/src/binding/utils.ts +7 -7
- package/src/binding-grammar/__tests__/parser.test.ts +64 -0
- package/src/binding-grammar/__tests__/test-utils/ast-cases.ts +198 -0
- package/src/binding-grammar/__tests__/test-utils/perf-test.ts +66 -0
- package/src/binding-grammar/ast.ts +11 -11
- package/src/binding-grammar/custom/index.ts +19 -22
- package/src/binding-grammar/ebnf/index.ts +20 -21
- package/src/binding-grammar/ebnf/types.ts +13 -13
- package/src/binding-grammar/index.ts +4 -4
- package/src/binding-grammar/parsimmon/index.ts +14 -14
- package/src/controllers/constants/__tests__/index.test.ts +106 -0
- package/src/controllers/constants/index.ts +3 -3
- package/src/controllers/constants/utils.ts +4 -4
- package/src/controllers/data/controller.ts +22 -22
- package/src/controllers/data/index.ts +1 -1
- package/src/controllers/data/utils.ts +7 -7
- package/src/controllers/flow/__tests__/controller.test.ts +195 -0
- package/src/controllers/flow/__tests__/flow.test.ts +381 -0
- package/src/controllers/flow/controller.ts +13 -13
- package/src/controllers/flow/flow.ts +23 -23
- package/src/controllers/flow/index.ts +2 -2
- package/src/controllers/index.ts +5 -5
- package/src/controllers/validation/binding-tracker.ts +71 -59
- package/src/controllers/validation/controller.ts +104 -104
- package/src/controllers/validation/index.ts +2 -2
- package/src/controllers/view/asset-transform.ts +20 -20
- package/src/controllers/view/controller.ts +27 -27
- package/src/controllers/view/index.ts +4 -4
- package/src/controllers/view/store.ts +3 -3
- package/src/controllers/view/types.ts +7 -7
- package/src/data/__tests__/__snapshots__/dependency-tracker.test.ts.snap +64 -0
- package/src/data/__tests__/dependency-tracker.test.ts +146 -0
- package/src/data/__tests__/local-model.test.ts +46 -0
- package/src/data/__tests__/model.test.ts +78 -0
- package/src/data/dependency-tracker.ts +16 -16
- package/src/data/index.ts +4 -4
- package/src/data/local-model.ts +6 -6
- package/src/data/model.ts +17 -17
- package/src/data/noop-model.ts +1 -1
- package/src/expressions/__tests__/__snapshots__/parser.test.ts.snap +854 -0
- package/src/expressions/__tests__/evaluator-functions.test.ts +47 -0
- package/src/expressions/__tests__/evaluator.test.ts +410 -0
- package/src/expressions/__tests__/parser.test.ts +115 -0
- package/src/expressions/__tests__/utils.test.ts +44 -0
- package/src/expressions/evaluator-functions.ts +6 -6
- package/src/expressions/evaluator.ts +71 -67
- package/src/expressions/index.ts +4 -4
- package/src/expressions/parser.ts +102 -105
- package/src/expressions/types.ts +29 -21
- package/src/expressions/utils.ts +32 -21
- package/src/index.ts +13 -13
- package/src/logger/__tests__/consoleLogger.test.ts +46 -0
- package/src/logger/__tests__/noopLogger.test.ts +13 -0
- package/src/logger/__tests__/proxyLogger.test.ts +31 -0
- package/src/logger/__tests__/tapableLogger.test.ts +41 -0
- package/src/logger/consoleLogger.ts +9 -9
- package/src/logger/index.ts +5 -5
- package/src/logger/noopLogger.ts +1 -1
- package/src/logger/proxyLogger.ts +6 -6
- package/src/logger/tapableLogger.ts +7 -7
- package/src/logger/types.ts +2 -2
- package/src/player.ts +60 -58
- package/src/plugins/default-exp-plugin.ts +10 -10
- package/src/plugins/default-view-plugin.ts +29 -0
- package/src/plugins/flow-exp-plugin.ts +6 -6
- package/src/schema/__tests__/schema.test.ts +243 -0
- package/src/schema/index.ts +2 -2
- package/src/schema/schema.ts +24 -24
- package/src/schema/types.ts +4 -4
- package/src/string-resolver/__tests__/index.test.ts +361 -0
- package/src/string-resolver/index.ts +17 -17
- package/src/types.ts +17 -17
- package/src/utils/__tests__/replaceParams.test.ts +33 -0
- package/src/utils/index.ts +1 -1
- package/src/utils/replaceParams.ts +1 -1
- package/src/validator/__tests__/binding-map-splice.test.ts +53 -0
- package/src/validator/__tests__/validation-middleware.test.ts +127 -0
- package/src/validator/binding-map-splice.ts +5 -5
- package/src/validator/index.ts +4 -4
- package/src/validator/registry.ts +1 -1
- package/src/validator/types.ts +13 -13
- package/src/validator/validation-middleware.ts +15 -15
- package/src/view/__tests__/view.immutable.test.ts +269 -0
- package/src/view/__tests__/view.test.ts +959 -0
- package/src/view/builder/index.test.ts +69 -0
- package/src/view/builder/index.ts +3 -3
- package/src/view/index.ts +5 -5
- package/src/view/parser/__tests__/__snapshots__/parser.test.ts.snap +394 -0
- package/src/view/parser/__tests__/parser.test.ts +264 -0
- package/src/view/parser/index.ts +43 -33
- package/src/view/parser/types.ts +11 -11
- package/src/view/parser/utils.ts +5 -5
- package/src/view/plugins/__tests__/__snapshots__/template.test.ts.snap +278 -0
- package/src/view/plugins/__tests__/applicability.test.ts +265 -0
- package/src/view/plugins/__tests__/string.test.ts +122 -0
- package/src/view/plugins/__tests__/template.test.ts +724 -0
- package/src/view/plugins/applicability.ts +19 -19
- package/src/view/plugins/index.ts +4 -5
- package/src/view/plugins/options.ts +1 -1
- package/src/view/plugins/string-resolver.ts +22 -22
- package/src/view/plugins/switch.ts +22 -23
- package/src/view/plugins/template-plugin.ts +26 -27
- package/src/view/resolver/__tests__/dependencies.test.ts +321 -0
- package/src/view/resolver/__tests__/edgecases.test.ts +626 -0
- package/src/view/resolver/index.ts +42 -42
- package/src/view/resolver/types.ts +21 -20
- package/src/view/resolver/utils.ts +9 -9
- package/src/view/view.ts +32 -22
- package/types/binding/binding.d.ts +50 -0
- package/types/binding/index.d.ts +29 -0
- package/types/binding/resolver.d.ts +26 -0
- package/types/binding/utils.d.ts +12 -0
- package/types/binding-grammar/ast.d.ts +67 -0
- package/types/binding-grammar/custom/index.d.ts +4 -0
- package/types/binding-grammar/ebnf/index.d.ts +4 -0
- package/types/binding-grammar/ebnf/types.d.ts +75 -0
- package/types/binding-grammar/index.d.ts +5 -0
- package/types/binding-grammar/parsimmon/index.d.ts +4 -0
- package/types/controllers/constants/index.d.ts +45 -0
- package/types/controllers/constants/utils.d.ts +6 -0
- package/types/controllers/data/controller.d.ts +45 -0
- package/types/controllers/data/index.d.ts +2 -0
- package/types/controllers/data/utils.d.ts +14 -0
- package/types/controllers/flow/controller.d.ts +25 -0
- package/types/controllers/flow/flow.d.ts +50 -0
- package/types/controllers/flow/index.d.ts +3 -0
- package/types/controllers/index.d.ts +6 -0
- package/types/controllers/validation/binding-tracker.d.ts +32 -0
- package/types/controllers/validation/controller.d.ts +151 -0
- package/types/controllers/validation/index.d.ts +3 -0
- package/types/controllers/view/asset-transform.d.ts +19 -0
- package/types/controllers/view/controller.d.ts +37 -0
- package/types/controllers/view/index.d.ts +5 -0
- package/types/controllers/view/store.d.ts +20 -0
- package/types/controllers/view/types.d.ts +16 -0
- package/types/data/dependency-tracker.d.ts +49 -0
- package/types/data/index.d.ts +5 -0
- package/types/data/local-model.d.ts +16 -0
- package/types/data/model.d.ts +86 -0
- package/types/data/noop-model.d.ts +13 -0
- package/types/expressions/evaluator-functions.d.ts +15 -0
- package/types/expressions/evaluator.d.ts +52 -0
- package/types/expressions/index.d.ts +5 -0
- package/types/expressions/parser.d.ts +10 -0
- package/types/expressions/types.d.ts +144 -0
- package/types/expressions/utils.d.ts +12 -0
- package/types/index.d.ts +14 -0
- package/types/logger/consoleLogger.d.ts +17 -0
- package/types/logger/index.d.ts +6 -0
- package/types/logger/noopLogger.d.ts +10 -0
- package/types/logger/proxyLogger.d.ts +15 -0
- package/types/logger/tapableLogger.d.ts +23 -0
- package/types/logger/types.d.ts +6 -0
- package/types/player.d.ts +101 -0
- package/types/plugins/default-exp-plugin.d.ts +9 -0
- package/types/plugins/default-view-plugin.d.ts +9 -0
- package/types/plugins/flow-exp-plugin.d.ts +11 -0
- package/types/schema/index.d.ts +3 -0
- package/types/schema/schema.d.ts +36 -0
- package/types/schema/types.d.ts +38 -0
- package/types/string-resolver/index.d.ts +30 -0
- package/types/types.d.ts +73 -0
- package/types/utils/index.d.ts +2 -0
- package/types/utils/replaceParams.d.ts +9 -0
- package/types/validator/binding-map-splice.d.ts +10 -0
- package/types/validator/index.d.ts +5 -0
- package/types/validator/registry.d.ts +11 -0
- package/types/validator/types.d.ts +53 -0
- package/types/validator/validation-middleware.d.ts +36 -0
- package/types/view/builder/index.d.ts +35 -0
- package/types/view/index.d.ts +6 -0
- package/types/view/parser/index.d.ts +52 -0
- package/types/view/parser/types.d.ts +109 -0
- package/types/view/parser/utils.d.ts +6 -0
- package/types/view/plugins/applicability.d.ts +10 -0
- package/types/view/plugins/index.d.ts +5 -0
- package/types/view/plugins/options.d.ts +4 -0
- package/types/view/plugins/string-resolver.d.ts +13 -0
- package/types/view/plugins/switch.d.ts +14 -0
- package/types/view/plugins/template-plugin.d.ts +33 -0
- package/types/view/resolver/index.d.ts +73 -0
- package/types/view/resolver/types.d.ts +129 -0
- package/types/view/resolver/utils.d.ts +11 -0
- package/types/view/view.d.ts +37 -0
- package/dist/index.d.ts +0 -1814
- package/dist/player.dev.js +0 -11472
- package/dist/player.prod.js +0 -2
- package/src/view/plugins/plugin.ts +0 -21
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { SyncWaterfallHook, SyncBailHook } from
|
|
2
|
-
import { NestedError } from
|
|
3
|
-
import { parseExpression } from
|
|
4
|
-
import * as DEFAULT_EXPRESSION_HANDLERS from
|
|
5
|
-
import { isExpressionNode } from
|
|
6
|
-
import { isObjectExpression } from
|
|
1
|
+
import { SyncWaterfallHook, SyncBailHook } from "tapable-ts";
|
|
2
|
+
import { NestedError } from "ts-nested-error";
|
|
3
|
+
import { parseExpression } from "./parser";
|
|
4
|
+
import * as DEFAULT_EXPRESSION_HANDLERS from "./evaluator-functions";
|
|
5
|
+
import { isExpressionNode } from "./types";
|
|
6
|
+
import { isObjectExpression } from "./utils";
|
|
7
7
|
import type {
|
|
8
8
|
ExpressionNode,
|
|
9
9
|
BinaryOperator,
|
|
@@ -11,7 +11,7 @@ import type {
|
|
|
11
11
|
ExpressionType,
|
|
12
12
|
ExpressionContext,
|
|
13
13
|
ExpressionHandler,
|
|
14
|
-
} from
|
|
14
|
+
} from "./types";
|
|
15
15
|
|
|
16
16
|
/** a && b -- but handles short cutting if the first value is false */
|
|
17
17
|
const andandOperator: BinaryOperator = (ctx, a, b) => {
|
|
@@ -29,45 +29,45 @@ ororOperator.resolveParams = false;
|
|
|
29
29
|
|
|
30
30
|
const DEFAULT_BINARY_OPERATORS: Record<string, BinaryOperator> = {
|
|
31
31
|
// TODO: A lot of these functions used to do type coercion. Not sure if we want to keep that behavior or not.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
"+": (a: any, b: any) => a + b,
|
|
33
|
+
"-": (a: any, b: any) => a - b,
|
|
34
|
+
"*": (a: any, b: any) => a * b,
|
|
35
|
+
"/": (a: any, b: any) => a / b,
|
|
36
|
+
"%": (a: any, b: any) => a % b,
|
|
37
37
|
|
|
38
38
|
// eslint-disable-next-line
|
|
39
|
-
|
|
39
|
+
"==": (a: any, b: any) => a == b,
|
|
40
40
|
|
|
41
41
|
// eslint-disable-next-line
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
42
|
+
"!=": (a: any, b: any) => a != b,
|
|
43
|
+
">": (a: any, b: any) => a > b,
|
|
44
|
+
">=": (a: any, b: any) => a >= b,
|
|
45
|
+
"<": (a: any, b: any) => a < b,
|
|
46
|
+
"<=": (a: any, b: any) => a <= b,
|
|
47
|
+
"&&": andandOperator,
|
|
48
|
+
"||": ororOperator,
|
|
49
|
+
"!==": (a: any, b: any) => a !== b,
|
|
50
|
+
"===": (a: any, b: any) => a === b,
|
|
51
51
|
|
|
52
52
|
// eslint-disable-next-line
|
|
53
|
-
|
|
53
|
+
"|": (a: any, b: any) => a | b,
|
|
54
54
|
|
|
55
55
|
// eslint-disable-next-line
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
"&": (a: any, b: any) => a & b,
|
|
57
|
+
"+=": (a: any, b: any) => a + b,
|
|
58
|
+
"-=": (a: any, b: any) => a - b,
|
|
59
59
|
|
|
60
60
|
// eslint-disable-next-line
|
|
61
|
-
|
|
61
|
+
"&=": (a: any, b: any) => a & b,
|
|
62
62
|
|
|
63
63
|
// eslint-disable-next-line
|
|
64
|
-
|
|
64
|
+
"|=": (a: any, b: any) => a | b,
|
|
65
65
|
};
|
|
66
66
|
|
|
67
67
|
const DEFAULT_UNARY_OPERATORS: Record<string, UnaryOperator> = {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
68
|
+
"-": (a: any) => -a,
|
|
69
|
+
"+": (a: any) => Number(a),
|
|
70
|
+
"!": (a: any) => !a,
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
export interface HookOptions extends ExpressionContext {
|
|
@@ -78,16 +78,19 @@ export interface HookOptions extends ExpressionContext {
|
|
|
78
78
|
* The caller is responsible for handling the error.
|
|
79
79
|
*/
|
|
80
80
|
throwErrors?: boolean;
|
|
81
|
+
|
|
82
|
+
/** Whether expressions should be parsed strictly or not */
|
|
83
|
+
strict?: boolean;
|
|
81
84
|
}
|
|
82
85
|
|
|
83
86
|
export type ExpressionEvaluatorOptions = Omit<
|
|
84
87
|
HookOptions,
|
|
85
|
-
|
|
88
|
+
"resolveNode" | "evaluate"
|
|
86
89
|
>;
|
|
87
90
|
|
|
88
91
|
export type ExpressionEvaluatorFunction = (
|
|
89
92
|
exp: ExpressionType,
|
|
90
|
-
options?: ExpressionEvaluatorOptions
|
|
93
|
+
options?: ExpressionEvaluatorOptions,
|
|
91
94
|
) => any;
|
|
92
95
|
|
|
93
96
|
/**
|
|
@@ -120,7 +123,7 @@ export class ExpressionEvaluator {
|
|
|
120
123
|
binary: new Map(Object.entries(DEFAULT_BINARY_OPERATORS)),
|
|
121
124
|
unary: new Map(Object.entries(DEFAULT_UNARY_OPERATORS)),
|
|
122
125
|
expressions: new Map<string, ExpressionHandler<any, any>>(
|
|
123
|
-
Object.entries(DEFAULT_EXPRESSION_HANDLERS)
|
|
126
|
+
Object.entries(DEFAULT_EXPRESSION_HANDLERS),
|
|
124
127
|
),
|
|
125
128
|
};
|
|
126
129
|
|
|
@@ -136,13 +139,13 @@ export class ExpressionEvaluator {
|
|
|
136
139
|
this._execAST(node, this.defaultHookOptions),
|
|
137
140
|
};
|
|
138
141
|
|
|
139
|
-
this.hooks.resolve.tap(
|
|
142
|
+
this.hooks.resolve.tap("ExpressionEvaluator", this._resolveNode.bind(this));
|
|
140
143
|
this.evaluate = this.evaluate.bind(this);
|
|
141
144
|
}
|
|
142
145
|
|
|
143
146
|
public evaluate(
|
|
144
147
|
expr: ExpressionType,
|
|
145
|
-
options?: ExpressionEvaluatorOptions
|
|
148
|
+
options?: ExpressionEvaluatorOptions,
|
|
146
149
|
): any {
|
|
147
150
|
const resolvedOpts = this.hooks.resolveOptions.call({
|
|
148
151
|
...this.defaultHookOptions,
|
|
@@ -160,8 +163,8 @@ export class ExpressionEvaluator {
|
|
|
160
163
|
|
|
161
164
|
// Check for literals
|
|
162
165
|
if (
|
|
163
|
-
typeof expression ===
|
|
164
|
-
typeof expression ===
|
|
166
|
+
typeof expression === "number" ||
|
|
167
|
+
typeof expression === "boolean" ||
|
|
165
168
|
expression === undefined ||
|
|
166
169
|
expression === null
|
|
167
170
|
) {
|
|
@@ -176,7 +179,7 @@ export class ExpressionEvaluator {
|
|
|
176
179
|
if (Array.isArray(expression)) {
|
|
177
180
|
return expression.reduce(
|
|
178
181
|
(_nothing, exp) => this.evaluate(exp, options),
|
|
179
|
-
null
|
|
182
|
+
null,
|
|
180
183
|
);
|
|
181
184
|
}
|
|
182
185
|
|
|
@@ -185,7 +188,7 @@ export class ExpressionEvaluator {
|
|
|
185
188
|
|
|
186
189
|
public addExpressionFunction<T extends readonly unknown[], R>(
|
|
187
190
|
name: string,
|
|
188
|
-
handler: ExpressionHandler<T, R
|
|
191
|
+
handler: ExpressionHandler<T, R>,
|
|
189
192
|
): void {
|
|
190
193
|
this.operators.expressions.set(name, handler);
|
|
191
194
|
}
|
|
@@ -211,7 +214,7 @@ export class ExpressionEvaluator {
|
|
|
211
214
|
}
|
|
212
215
|
|
|
213
216
|
private _execString(exp: string, options: HookOptions) {
|
|
214
|
-
if (exp ===
|
|
217
|
+
if (exp === "") {
|
|
215
218
|
return exp;
|
|
216
219
|
}
|
|
217
220
|
|
|
@@ -226,7 +229,8 @@ export class ExpressionEvaluator {
|
|
|
226
229
|
|
|
227
230
|
try {
|
|
228
231
|
storedAST =
|
|
229
|
-
this.expressionsCache.get(matchedExp) ??
|
|
232
|
+
this.expressionsCache.get(matchedExp) ??
|
|
233
|
+
parseExpression(matchedExp, { strict: options.strict });
|
|
230
234
|
this.expressionsCache.set(matchedExp, storedAST);
|
|
231
235
|
} catch (e: any) {
|
|
232
236
|
if (options.throwErrors || !this.hooks.onError.call(e)) {
|
|
@@ -250,7 +254,7 @@ export class ExpressionEvaluator {
|
|
|
250
254
|
private _resolveNode(
|
|
251
255
|
_currentValue: any,
|
|
252
256
|
node: ExpressionNode,
|
|
253
|
-
options: HookOptions
|
|
257
|
+
options: HookOptions,
|
|
254
258
|
) {
|
|
255
259
|
const { resolveNode, model } = options;
|
|
256
260
|
|
|
@@ -259,23 +263,23 @@ export class ExpressionEvaluator {
|
|
|
259
263
|
evaluate: (expr) => this.evaluate(expr, options),
|
|
260
264
|
};
|
|
261
265
|
|
|
262
|
-
if (node.type ===
|
|
266
|
+
if (node.type === "Literal") {
|
|
263
267
|
return node.value;
|
|
264
268
|
}
|
|
265
269
|
|
|
266
|
-
if (node.type ===
|
|
270
|
+
if (node.type === "Identifier") {
|
|
267
271
|
return this.vars[node.name];
|
|
268
272
|
}
|
|
269
273
|
|
|
270
|
-
if (node.type ===
|
|
274
|
+
if (node.type === "Compound" || node.type === "ThisExpression") {
|
|
271
275
|
throw new Error(`Expression type: ${node.type} is not supported`);
|
|
272
276
|
}
|
|
273
277
|
|
|
274
|
-
if (node.type ===
|
|
278
|
+
if (node.type === "BinaryExpression" || node.type === "LogicalExpression") {
|
|
275
279
|
const operator = this.operators.binary.get(node.operator);
|
|
276
280
|
|
|
277
281
|
if (operator) {
|
|
278
|
-
if (
|
|
282
|
+
if ("resolveParams" in operator) {
|
|
279
283
|
if (operator.resolveParams === false) {
|
|
280
284
|
return operator(expressionContext, node.left, node.right);
|
|
281
285
|
}
|
|
@@ -283,7 +287,7 @@ export class ExpressionEvaluator {
|
|
|
283
287
|
return operator(
|
|
284
288
|
expressionContext,
|
|
285
289
|
resolveNode(node.left),
|
|
286
|
-
resolveNode(node.right)
|
|
290
|
+
resolveNode(node.right),
|
|
287
291
|
);
|
|
288
292
|
}
|
|
289
293
|
|
|
@@ -293,16 +297,16 @@ export class ExpressionEvaluator {
|
|
|
293
297
|
return;
|
|
294
298
|
}
|
|
295
299
|
|
|
296
|
-
if (node.type ===
|
|
300
|
+
if (node.type === "UnaryExpression") {
|
|
297
301
|
const operator = this.operators.unary.get(node.operator);
|
|
298
302
|
|
|
299
303
|
if (operator) {
|
|
300
|
-
if (
|
|
304
|
+
if ("resolveParams" in operator) {
|
|
301
305
|
return operator(
|
|
302
306
|
expressionContext,
|
|
303
307
|
operator.resolveParams === false
|
|
304
308
|
? node.argument
|
|
305
|
-
: resolveNode(node.argument)
|
|
309
|
+
: resolveNode(node.argument),
|
|
306
310
|
);
|
|
307
311
|
}
|
|
308
312
|
|
|
@@ -312,7 +316,7 @@ export class ExpressionEvaluator {
|
|
|
312
316
|
return;
|
|
313
317
|
}
|
|
314
318
|
|
|
315
|
-
if (node.type ===
|
|
319
|
+
if (node.type === "Object") {
|
|
316
320
|
const { attributes } = node;
|
|
317
321
|
const resolvedAttributes: any = {};
|
|
318
322
|
|
|
@@ -325,7 +329,7 @@ export class ExpressionEvaluator {
|
|
|
325
329
|
return resolvedAttributes;
|
|
326
330
|
}
|
|
327
331
|
|
|
328
|
-
if (node.type ===
|
|
332
|
+
if (node.type === "CallExpression") {
|
|
329
333
|
const expressionName = node.callTarget.name;
|
|
330
334
|
|
|
331
335
|
const operator = this.operators.expressions.get(expressionName);
|
|
@@ -334,7 +338,7 @@ export class ExpressionEvaluator {
|
|
|
334
338
|
throw new Error(`Unknown expression function: ${expressionName}`);
|
|
335
339
|
}
|
|
336
340
|
|
|
337
|
-
if (
|
|
341
|
+
if ("resolveParams" in operator && operator.resolveParams === false) {
|
|
338
342
|
return operator(expressionContext, ...node.args);
|
|
339
343
|
}
|
|
340
344
|
|
|
@@ -343,26 +347,26 @@ export class ExpressionEvaluator {
|
|
|
343
347
|
return operator(expressionContext, ...args);
|
|
344
348
|
}
|
|
345
349
|
|
|
346
|
-
if (node.type ===
|
|
350
|
+
if (node.type === "ModelRef") {
|
|
347
351
|
return model.get(node.ref, { context: { model: options.model } });
|
|
348
352
|
}
|
|
349
353
|
|
|
350
|
-
if (node.type ===
|
|
354
|
+
if (node.type === "MemberExpression") {
|
|
351
355
|
const obj = resolveNode(node.object);
|
|
352
356
|
const prop = resolveNode(node.property);
|
|
353
357
|
|
|
354
358
|
return obj[prop];
|
|
355
359
|
}
|
|
356
360
|
|
|
357
|
-
if (node.type ===
|
|
358
|
-
if (node.left.type ===
|
|
361
|
+
if (node.type === "Assignment") {
|
|
362
|
+
if (node.left.type === "ModelRef") {
|
|
359
363
|
const value = resolveNode(node.right);
|
|
360
364
|
model.set([[node.left.ref, value]]);
|
|
361
365
|
|
|
362
366
|
return value;
|
|
363
367
|
}
|
|
364
368
|
|
|
365
|
-
if (node.left.type ===
|
|
369
|
+
if (node.left.type === "Identifier") {
|
|
366
370
|
const value = resolveNode(node.right);
|
|
367
371
|
this.vars[node.left.name] = value;
|
|
368
372
|
return value;
|
|
@@ -371,39 +375,39 @@ export class ExpressionEvaluator {
|
|
|
371
375
|
return;
|
|
372
376
|
}
|
|
373
377
|
|
|
374
|
-
if (node.type ===
|
|
378
|
+
if (node.type === "ConditionalExpression") {
|
|
375
379
|
const result = resolveNode(node.test) ? node.consequent : node.alternate;
|
|
376
380
|
|
|
377
381
|
return resolveNode(result);
|
|
378
382
|
}
|
|
379
383
|
|
|
380
|
-
if (node.type ===
|
|
384
|
+
if (node.type === "ArrayExpression") {
|
|
381
385
|
return node.elements.map((ele) => resolveNode(ele));
|
|
382
386
|
}
|
|
383
387
|
|
|
384
|
-
if (node.type ===
|
|
388
|
+
if (node.type === "Modification") {
|
|
385
389
|
const operation = this.operators.binary.get(node.operator);
|
|
386
390
|
|
|
387
391
|
if (operation) {
|
|
388
392
|
let newValue;
|
|
389
393
|
|
|
390
|
-
if (
|
|
394
|
+
if ("resolveParams" in operation) {
|
|
391
395
|
if (operation.resolveParams === false) {
|
|
392
396
|
newValue = operation(expressionContext, node.left, node.right);
|
|
393
397
|
} else {
|
|
394
398
|
newValue = operation(
|
|
395
399
|
expressionContext,
|
|
396
400
|
resolveNode(node.left),
|
|
397
|
-
resolveNode(node.right)
|
|
401
|
+
resolveNode(node.right),
|
|
398
402
|
);
|
|
399
403
|
}
|
|
400
404
|
} else {
|
|
401
405
|
newValue = operation(resolveNode(node.left), resolveNode(node.right));
|
|
402
406
|
}
|
|
403
407
|
|
|
404
|
-
if (node.left.type ===
|
|
408
|
+
if (node.left.type === "ModelRef") {
|
|
405
409
|
model.set([[node.left.ref, newValue]]);
|
|
406
|
-
} else if (node.left.type ===
|
|
410
|
+
} else if (node.left.type === "Identifier") {
|
|
407
411
|
this.vars[node.left.name] = newValue;
|
|
408
412
|
}
|
|
409
413
|
|
package/src/expressions/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
4
|
-
export * from
|
|
1
|
+
export * from "./evaluator";
|
|
2
|
+
export * from "./types";
|
|
3
|
+
export * from "./utils";
|
|
4
|
+
export * from "./parser";
|