@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.
Files changed (214) hide show
  1. package/dist/Player.native.js +11630 -0
  2. package/dist/Player.native.js.map +1 -0
  3. package/dist/cjs/index.cjs +5626 -0
  4. package/dist/cjs/index.cjs.map +1 -0
  5. package/dist/{index.esm.js → index.legacy-esm.js} +2044 -1667
  6. package/dist/{index.cjs.js → index.mjs} +2052 -1761
  7. package/dist/index.mjs.map +1 -0
  8. package/package.json +29 -63
  9. package/src/__tests__/data.test.ts +498 -0
  10. package/src/__tests__/flow.test.ts +312 -0
  11. package/src/__tests__/helpers/action-exp.plugin.ts +22 -0
  12. package/src/__tests__/helpers/actions.flow.ts +67 -0
  13. package/src/__tests__/helpers/binding.plugin.ts +125 -0
  14. package/src/__tests__/helpers/expression.plugin.ts +88 -0
  15. package/src/__tests__/helpers/transform-plugin.ts +19 -0
  16. package/src/__tests__/helpers/validation.flow.ts +56 -0
  17. package/src/__tests__/player.test.ts +597 -0
  18. package/src/__tests__/string-resolver.test.ts +186 -0
  19. package/src/__tests__/validation.test.ts +3555 -0
  20. package/src/__tests__/view.test.ts +715 -0
  21. package/src/binding/__tests__/binding.test.ts +113 -0
  22. package/src/binding/__tests__/index.test.ts +208 -0
  23. package/src/binding/__tests__/resolver.test.ts +83 -0
  24. package/src/binding/binding.ts +6 -6
  25. package/src/binding/index.ts +34 -34
  26. package/src/binding/resolver.ts +19 -19
  27. package/src/binding/utils.ts +7 -7
  28. package/src/binding-grammar/__tests__/parser.test.ts +64 -0
  29. package/src/binding-grammar/__tests__/test-utils/ast-cases.ts +198 -0
  30. package/src/binding-grammar/__tests__/test-utils/perf-test.ts +66 -0
  31. package/src/binding-grammar/ast.ts +11 -11
  32. package/src/binding-grammar/custom/index.ts +19 -22
  33. package/src/binding-grammar/ebnf/index.ts +20 -21
  34. package/src/binding-grammar/ebnf/types.ts +13 -13
  35. package/src/binding-grammar/index.ts +4 -4
  36. package/src/binding-grammar/parsimmon/index.ts +14 -14
  37. package/src/controllers/constants/__tests__/index.test.ts +106 -0
  38. package/src/controllers/constants/index.ts +3 -3
  39. package/src/controllers/constants/utils.ts +4 -4
  40. package/src/controllers/data/controller.ts +22 -22
  41. package/src/controllers/data/index.ts +1 -1
  42. package/src/controllers/data/utils.ts +7 -7
  43. package/src/controllers/flow/__tests__/controller.test.ts +195 -0
  44. package/src/controllers/flow/__tests__/flow.test.ts +381 -0
  45. package/src/controllers/flow/controller.ts +13 -13
  46. package/src/controllers/flow/flow.ts +23 -23
  47. package/src/controllers/flow/index.ts +2 -2
  48. package/src/controllers/index.ts +5 -5
  49. package/src/controllers/validation/binding-tracker.ts +71 -59
  50. package/src/controllers/validation/controller.ts +104 -104
  51. package/src/controllers/validation/index.ts +2 -2
  52. package/src/controllers/view/asset-transform.ts +20 -20
  53. package/src/controllers/view/controller.ts +27 -27
  54. package/src/controllers/view/index.ts +4 -4
  55. package/src/controllers/view/store.ts +3 -3
  56. package/src/controllers/view/types.ts +7 -7
  57. package/src/data/__tests__/__snapshots__/dependency-tracker.test.ts.snap +64 -0
  58. package/src/data/__tests__/dependency-tracker.test.ts +146 -0
  59. package/src/data/__tests__/local-model.test.ts +46 -0
  60. package/src/data/__tests__/model.test.ts +78 -0
  61. package/src/data/dependency-tracker.ts +16 -16
  62. package/src/data/index.ts +4 -4
  63. package/src/data/local-model.ts +6 -6
  64. package/src/data/model.ts +17 -17
  65. package/src/data/noop-model.ts +1 -1
  66. package/src/expressions/__tests__/__snapshots__/parser.test.ts.snap +854 -0
  67. package/src/expressions/__tests__/evaluator-functions.test.ts +47 -0
  68. package/src/expressions/__tests__/evaluator.test.ts +410 -0
  69. package/src/expressions/__tests__/parser.test.ts +115 -0
  70. package/src/expressions/__tests__/utils.test.ts +44 -0
  71. package/src/expressions/evaluator-functions.ts +6 -6
  72. package/src/expressions/evaluator.ts +71 -67
  73. package/src/expressions/index.ts +4 -4
  74. package/src/expressions/parser.ts +102 -105
  75. package/src/expressions/types.ts +29 -21
  76. package/src/expressions/utils.ts +32 -21
  77. package/src/index.ts +13 -13
  78. package/src/logger/__tests__/consoleLogger.test.ts +46 -0
  79. package/src/logger/__tests__/noopLogger.test.ts +13 -0
  80. package/src/logger/__tests__/proxyLogger.test.ts +31 -0
  81. package/src/logger/__tests__/tapableLogger.test.ts +41 -0
  82. package/src/logger/consoleLogger.ts +9 -9
  83. package/src/logger/index.ts +5 -5
  84. package/src/logger/noopLogger.ts +1 -1
  85. package/src/logger/proxyLogger.ts +6 -6
  86. package/src/logger/tapableLogger.ts +7 -7
  87. package/src/logger/types.ts +2 -2
  88. package/src/player.ts +60 -58
  89. package/src/plugins/default-exp-plugin.ts +10 -10
  90. package/src/plugins/default-view-plugin.ts +29 -0
  91. package/src/plugins/flow-exp-plugin.ts +6 -6
  92. package/src/schema/__tests__/schema.test.ts +243 -0
  93. package/src/schema/index.ts +2 -2
  94. package/src/schema/schema.ts +24 -24
  95. package/src/schema/types.ts +4 -4
  96. package/src/string-resolver/__tests__/index.test.ts +361 -0
  97. package/src/string-resolver/index.ts +17 -17
  98. package/src/types.ts +17 -17
  99. package/src/utils/__tests__/replaceParams.test.ts +33 -0
  100. package/src/utils/index.ts +1 -1
  101. package/src/utils/replaceParams.ts +1 -1
  102. package/src/validator/__tests__/binding-map-splice.test.ts +53 -0
  103. package/src/validator/__tests__/validation-middleware.test.ts +127 -0
  104. package/src/validator/binding-map-splice.ts +5 -5
  105. package/src/validator/index.ts +4 -4
  106. package/src/validator/registry.ts +1 -1
  107. package/src/validator/types.ts +13 -13
  108. package/src/validator/validation-middleware.ts +15 -15
  109. package/src/view/__tests__/view.immutable.test.ts +269 -0
  110. package/src/view/__tests__/view.test.ts +959 -0
  111. package/src/view/builder/index.test.ts +69 -0
  112. package/src/view/builder/index.ts +3 -3
  113. package/src/view/index.ts +5 -5
  114. package/src/view/parser/__tests__/__snapshots__/parser.test.ts.snap +394 -0
  115. package/src/view/parser/__tests__/parser.test.ts +264 -0
  116. package/src/view/parser/index.ts +43 -33
  117. package/src/view/parser/types.ts +11 -11
  118. package/src/view/parser/utils.ts +5 -5
  119. package/src/view/plugins/__tests__/__snapshots__/template.test.ts.snap +278 -0
  120. package/src/view/plugins/__tests__/applicability.test.ts +265 -0
  121. package/src/view/plugins/__tests__/string.test.ts +122 -0
  122. package/src/view/plugins/__tests__/template.test.ts +724 -0
  123. package/src/view/plugins/applicability.ts +19 -19
  124. package/src/view/plugins/index.ts +4 -5
  125. package/src/view/plugins/options.ts +1 -1
  126. package/src/view/plugins/string-resolver.ts +22 -22
  127. package/src/view/plugins/switch.ts +22 -23
  128. package/src/view/plugins/template-plugin.ts +26 -27
  129. package/src/view/resolver/__tests__/dependencies.test.ts +321 -0
  130. package/src/view/resolver/__tests__/edgecases.test.ts +626 -0
  131. package/src/view/resolver/index.ts +42 -42
  132. package/src/view/resolver/types.ts +21 -20
  133. package/src/view/resolver/utils.ts +9 -9
  134. package/src/view/view.ts +32 -22
  135. package/types/binding/binding.d.ts +50 -0
  136. package/types/binding/index.d.ts +29 -0
  137. package/types/binding/resolver.d.ts +26 -0
  138. package/types/binding/utils.d.ts +12 -0
  139. package/types/binding-grammar/ast.d.ts +67 -0
  140. package/types/binding-grammar/custom/index.d.ts +4 -0
  141. package/types/binding-grammar/ebnf/index.d.ts +4 -0
  142. package/types/binding-grammar/ebnf/types.d.ts +75 -0
  143. package/types/binding-grammar/index.d.ts +5 -0
  144. package/types/binding-grammar/parsimmon/index.d.ts +4 -0
  145. package/types/controllers/constants/index.d.ts +45 -0
  146. package/types/controllers/constants/utils.d.ts +6 -0
  147. package/types/controllers/data/controller.d.ts +45 -0
  148. package/types/controllers/data/index.d.ts +2 -0
  149. package/types/controllers/data/utils.d.ts +14 -0
  150. package/types/controllers/flow/controller.d.ts +25 -0
  151. package/types/controllers/flow/flow.d.ts +50 -0
  152. package/types/controllers/flow/index.d.ts +3 -0
  153. package/types/controllers/index.d.ts +6 -0
  154. package/types/controllers/validation/binding-tracker.d.ts +32 -0
  155. package/types/controllers/validation/controller.d.ts +151 -0
  156. package/types/controllers/validation/index.d.ts +3 -0
  157. package/types/controllers/view/asset-transform.d.ts +19 -0
  158. package/types/controllers/view/controller.d.ts +37 -0
  159. package/types/controllers/view/index.d.ts +5 -0
  160. package/types/controllers/view/store.d.ts +20 -0
  161. package/types/controllers/view/types.d.ts +16 -0
  162. package/types/data/dependency-tracker.d.ts +49 -0
  163. package/types/data/index.d.ts +5 -0
  164. package/types/data/local-model.d.ts +16 -0
  165. package/types/data/model.d.ts +86 -0
  166. package/types/data/noop-model.d.ts +13 -0
  167. package/types/expressions/evaluator-functions.d.ts +15 -0
  168. package/types/expressions/evaluator.d.ts +52 -0
  169. package/types/expressions/index.d.ts +5 -0
  170. package/types/expressions/parser.d.ts +10 -0
  171. package/types/expressions/types.d.ts +144 -0
  172. package/types/expressions/utils.d.ts +12 -0
  173. package/types/index.d.ts +14 -0
  174. package/types/logger/consoleLogger.d.ts +17 -0
  175. package/types/logger/index.d.ts +6 -0
  176. package/types/logger/noopLogger.d.ts +10 -0
  177. package/types/logger/proxyLogger.d.ts +15 -0
  178. package/types/logger/tapableLogger.d.ts +23 -0
  179. package/types/logger/types.d.ts +6 -0
  180. package/types/player.d.ts +101 -0
  181. package/types/plugins/default-exp-plugin.d.ts +9 -0
  182. package/types/plugins/default-view-plugin.d.ts +9 -0
  183. package/types/plugins/flow-exp-plugin.d.ts +11 -0
  184. package/types/schema/index.d.ts +3 -0
  185. package/types/schema/schema.d.ts +36 -0
  186. package/types/schema/types.d.ts +38 -0
  187. package/types/string-resolver/index.d.ts +30 -0
  188. package/types/types.d.ts +73 -0
  189. package/types/utils/index.d.ts +2 -0
  190. package/types/utils/replaceParams.d.ts +9 -0
  191. package/types/validator/binding-map-splice.d.ts +10 -0
  192. package/types/validator/index.d.ts +5 -0
  193. package/types/validator/registry.d.ts +11 -0
  194. package/types/validator/types.d.ts +53 -0
  195. package/types/validator/validation-middleware.d.ts +36 -0
  196. package/types/view/builder/index.d.ts +35 -0
  197. package/types/view/index.d.ts +6 -0
  198. package/types/view/parser/index.d.ts +52 -0
  199. package/types/view/parser/types.d.ts +109 -0
  200. package/types/view/parser/utils.d.ts +6 -0
  201. package/types/view/plugins/applicability.d.ts +10 -0
  202. package/types/view/plugins/index.d.ts +5 -0
  203. package/types/view/plugins/options.d.ts +4 -0
  204. package/types/view/plugins/string-resolver.d.ts +13 -0
  205. package/types/view/plugins/switch.d.ts +14 -0
  206. package/types/view/plugins/template-plugin.d.ts +33 -0
  207. package/types/view/resolver/index.d.ts +73 -0
  208. package/types/view/resolver/types.d.ts +129 -0
  209. package/types/view/resolver/utils.d.ts +11 -0
  210. package/types/view/view.d.ts +37 -0
  211. package/dist/index.d.ts +0 -1814
  212. package/dist/player.dev.js +0 -11472
  213. package/dist/player.prod.js +0 -2
  214. package/src/view/plugins/plugin.ts +0 -21
@@ -1,9 +1,9 @@
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';
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 './types';
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
- '+': (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,
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
- '==': (a: any, b: any) => a == b,
39
+ "==": (a: any, b: any) => a == b,
40
40
 
41
41
  // eslint-disable-next-line
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,
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
- '|': (a: any, b: any) => a | b,
53
+ "|": (a: any, b: any) => a | b,
54
54
 
55
55
  // eslint-disable-next-line
56
- '&': (a: any, b: any) => a & b,
57
- '+=': (a: any, b: any) => a + b,
58
- '-=': (a: any, b: any) => a - b,
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
- '&=': (a: any, b: any) => a & b,
61
+ "&=": (a: any, b: any) => a & b,
62
62
 
63
63
  // eslint-disable-next-line
64
- '|=': (a: any, b: any) => a | b,
64
+ "|=": (a: any, b: any) => a | b,
65
65
  };
66
66
 
67
67
  const DEFAULT_UNARY_OPERATORS: Record<string, UnaryOperator> = {
68
- '-': (a: any) => -a,
69
- '+': (a: any) => Number(a),
70
- '!': (a: any) => !a,
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
- 'resolveNode' | 'evaluate'
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('ExpressionEvaluator', this._resolveNode.bind(this));
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 === 'number' ||
164
- typeof expression === 'boolean' ||
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) ?? parseExpression(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 === 'Literal') {
266
+ if (node.type === "Literal") {
263
267
  return node.value;
264
268
  }
265
269
 
266
- if (node.type === 'Identifier') {
270
+ if (node.type === "Identifier") {
267
271
  return this.vars[node.name];
268
272
  }
269
273
 
270
- if (node.type === 'Compound' || node.type === 'ThisExpression') {
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 === 'BinaryExpression' || node.type === 'LogicalExpression') {
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 ('resolveParams' in operator) {
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 === 'UnaryExpression') {
300
+ if (node.type === "UnaryExpression") {
297
301
  const operator = this.operators.unary.get(node.operator);
298
302
 
299
303
  if (operator) {
300
- if ('resolveParams' in operator) {
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 === 'Object') {
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 === 'CallExpression') {
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 ('resolveParams' in operator && operator.resolveParams === false) {
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 === 'ModelRef') {
350
+ if (node.type === "ModelRef") {
347
351
  return model.get(node.ref, { context: { model: options.model } });
348
352
  }
349
353
 
350
- if (node.type === 'MemberExpression') {
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 === 'Assignment') {
358
- if (node.left.type === 'ModelRef') {
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 === 'Identifier') {
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 === 'ConditionalExpression') {
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 === 'ArrayExpression') {
384
+ if (node.type === "ArrayExpression") {
381
385
  return node.elements.map((ele) => resolveNode(ele));
382
386
  }
383
387
 
384
- if (node.type === 'Modification') {
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 ('resolveParams' in operation) {
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 === 'ModelRef') {
408
+ if (node.left.type === "ModelRef") {
405
409
  model.set([[node.left.ref, newValue]]);
406
- } else if (node.left.type === 'Identifier') {
410
+ } else if (node.left.type === "Identifier") {
407
411
  this.vars[node.left.name] = newValue;
408
412
  }
409
413
 
@@ -1,4 +1,4 @@
1
- export * from './evaluator';
2
- export * from './types';
3
- export * from './utils';
4
- export * from './parser';
1
+ export * from "./evaluator";
2
+ export * from "./types";
3
+ export * from "./utils";
4
+ export * from "./parser";