@variojs/core 0.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.
Files changed (150) hide show
  1. package/README.md +270 -0
  2. package/dist/errors.d.ts +100 -0
  3. package/dist/errors.d.ts.map +1 -0
  4. package/dist/errors.js +132 -0
  5. package/dist/errors.js.map +1 -0
  6. package/dist/expression/cache.d.ts +53 -0
  7. package/dist/expression/cache.d.ts.map +1 -0
  8. package/dist/expression/cache.js +158 -0
  9. package/dist/expression/cache.js.map +1 -0
  10. package/dist/expression/compiler.d.ts +34 -0
  11. package/dist/expression/compiler.d.ts.map +1 -0
  12. package/dist/expression/compiler.js +141 -0
  13. package/dist/expression/compiler.js.map +1 -0
  14. package/dist/expression/dependencies.d.ts +17 -0
  15. package/dist/expression/dependencies.d.ts.map +1 -0
  16. package/dist/expression/dependencies.js +106 -0
  17. package/dist/expression/dependencies.js.map +1 -0
  18. package/dist/expression/evaluate.d.ts +22 -0
  19. package/dist/expression/evaluate.d.ts.map +1 -0
  20. package/dist/expression/evaluate.js +75 -0
  21. package/dist/expression/evaluate.js.map +1 -0
  22. package/dist/expression/evaluator.d.ts +22 -0
  23. package/dist/expression/evaluator.d.ts.map +1 -0
  24. package/dist/expression/evaluator.js +533 -0
  25. package/dist/expression/evaluator.js.map +1 -0
  26. package/dist/expression/index.d.ts +12 -0
  27. package/dist/expression/index.d.ts.map +1 -0
  28. package/dist/expression/index.js +12 -0
  29. package/dist/expression/index.js.map +1 -0
  30. package/dist/expression/parser.d.ts +15 -0
  31. package/dist/expression/parser.d.ts.map +1 -0
  32. package/dist/expression/parser.js +42 -0
  33. package/dist/expression/parser.js.map +1 -0
  34. package/dist/expression/utils.d.ts +46 -0
  35. package/dist/expression/utils.d.ts.map +1 -0
  36. package/dist/expression/utils.js +78 -0
  37. package/dist/expression/utils.js.map +1 -0
  38. package/dist/expression/whitelist.d.ts +24 -0
  39. package/dist/expression/whitelist.d.ts.map +1 -0
  40. package/dist/expression/whitelist.js +198 -0
  41. package/dist/expression/whitelist.js.map +1 -0
  42. package/dist/index.d.ts +18 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +21 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/runtime/context.d.ts +8 -0
  47. package/dist/runtime/context.d.ts.map +1 -0
  48. package/dist/runtime/context.js +7 -0
  49. package/dist/runtime/context.js.map +1 -0
  50. package/dist/runtime/create-context.d.ts +20 -0
  51. package/dist/runtime/create-context.d.ts.map +1 -0
  52. package/dist/runtime/create-context.js +62 -0
  53. package/dist/runtime/create-context.js.map +1 -0
  54. package/dist/runtime/index.d.ts +10 -0
  55. package/dist/runtime/index.d.ts.map +1 -0
  56. package/dist/runtime/index.js +10 -0
  57. package/dist/runtime/index.js.map +1 -0
  58. package/dist/runtime/loop-context-pool.d.ts +58 -0
  59. package/dist/runtime/loop-context-pool.d.ts.map +1 -0
  60. package/dist/runtime/loop-context-pool.js +114 -0
  61. package/dist/runtime/loop-context-pool.js.map +1 -0
  62. package/dist/runtime/path.d.ts +114 -0
  63. package/dist/runtime/path.d.ts.map +1 -0
  64. package/dist/runtime/path.js +302 -0
  65. package/dist/runtime/path.js.map +1 -0
  66. package/dist/runtime/proxy.d.ts +18 -0
  67. package/dist/runtime/proxy.d.ts.map +1 -0
  68. package/dist/runtime/proxy.js +54 -0
  69. package/dist/runtime/proxy.js.map +1 -0
  70. package/dist/runtime/sandbox.d.ts +20 -0
  71. package/dist/runtime/sandbox.d.ts.map +1 -0
  72. package/dist/runtime/sandbox.js +32 -0
  73. package/dist/runtime/sandbox.js.map +1 -0
  74. package/dist/types.d.ts +191 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +20 -0
  77. package/dist/types.js.map +1 -0
  78. package/dist/vm/errors.d.ts +5 -0
  79. package/dist/vm/errors.d.ts.map +1 -0
  80. package/dist/vm/errors.js +5 -0
  81. package/dist/vm/errors.js.map +1 -0
  82. package/dist/vm/executor.d.ts +35 -0
  83. package/dist/vm/executor.d.ts.map +1 -0
  84. package/dist/vm/executor.js +137 -0
  85. package/dist/vm/executor.js.map +1 -0
  86. package/dist/vm/handlers/array/pop.d.ts +12 -0
  87. package/dist/vm/handlers/array/pop.d.ts.map +1 -0
  88. package/dist/vm/handlers/array/pop.js +28 -0
  89. package/dist/vm/handlers/array/pop.js.map +1 -0
  90. package/dist/vm/handlers/array/push.d.ts +13 -0
  91. package/dist/vm/handlers/array/push.d.ts.map +1 -0
  92. package/dist/vm/handlers/array/push.js +42 -0
  93. package/dist/vm/handlers/array/push.js.map +1 -0
  94. package/dist/vm/handlers/array/shift.d.ts +12 -0
  95. package/dist/vm/handlers/array/shift.d.ts.map +1 -0
  96. package/dist/vm/handlers/array/shift.js +28 -0
  97. package/dist/vm/handlers/array/shift.js.map +1 -0
  98. package/dist/vm/handlers/array/splice.d.ts +12 -0
  99. package/dist/vm/handlers/array/splice.d.ts.map +1 -0
  100. package/dist/vm/handlers/array/splice.js +59 -0
  101. package/dist/vm/handlers/array/splice.js.map +1 -0
  102. package/dist/vm/handlers/array/unshift.d.ts +13 -0
  103. package/dist/vm/handlers/array/unshift.d.ts.map +1 -0
  104. package/dist/vm/handlers/array/unshift.js +42 -0
  105. package/dist/vm/handlers/array/unshift.js.map +1 -0
  106. package/dist/vm/handlers/array/utils.d.ts +10 -0
  107. package/dist/vm/handlers/array/utils.d.ts.map +1 -0
  108. package/dist/vm/handlers/array/utils.js +33 -0
  109. package/dist/vm/handlers/array/utils.js.map +1 -0
  110. package/dist/vm/handlers/batch.d.ts +12 -0
  111. package/dist/vm/handlers/batch.d.ts.map +1 -0
  112. package/dist/vm/handlers/batch.js +40 -0
  113. package/dist/vm/handlers/batch.js.map +1 -0
  114. package/dist/vm/handlers/call.d.ts +14 -0
  115. package/dist/vm/handlers/call.d.ts.map +1 -0
  116. package/dist/vm/handlers/call.js +65 -0
  117. package/dist/vm/handlers/call.js.map +1 -0
  118. package/dist/vm/handlers/emit.d.ts +12 -0
  119. package/dist/vm/handlers/emit.d.ts.map +1 -0
  120. package/dist/vm/handlers/emit.js +26 -0
  121. package/dist/vm/handlers/emit.js.map +1 -0
  122. package/dist/vm/handlers/if.d.ts +13 -0
  123. package/dist/vm/handlers/if.d.ts.map +1 -0
  124. package/dist/vm/handlers/if.js +35 -0
  125. package/dist/vm/handlers/if.js.map +1 -0
  126. package/dist/vm/handlers/index.d.ts +14 -0
  127. package/dist/vm/handlers/index.d.ts.map +1 -0
  128. package/dist/vm/handlers/index.js +55 -0
  129. package/dist/vm/handlers/index.js.map +1 -0
  130. package/dist/vm/handlers/log.d.ts +12 -0
  131. package/dist/vm/handlers/log.d.ts.map +1 -0
  132. package/dist/vm/handlers/log.js +41 -0
  133. package/dist/vm/handlers/log.js.map +1 -0
  134. package/dist/vm/handlers/loop.d.ts +12 -0
  135. package/dist/vm/handlers/loop.d.ts.map +1 -0
  136. package/dist/vm/handlers/loop.js +71 -0
  137. package/dist/vm/handlers/loop.js.map +1 -0
  138. package/dist/vm/handlers/navigate.d.ts +12 -0
  139. package/dist/vm/handlers/navigate.d.ts.map +1 -0
  140. package/dist/vm/handlers/navigate.js +43 -0
  141. package/dist/vm/handlers/navigate.js.map +1 -0
  142. package/dist/vm/handlers/set.d.ts +15 -0
  143. package/dist/vm/handlers/set.d.ts.map +1 -0
  144. package/dist/vm/handlers/set.js +30 -0
  145. package/dist/vm/handlers/set.js.map +1 -0
  146. package/dist/vm/index.d.ts +8 -0
  147. package/dist/vm/index.d.ts.map +1 -0
  148. package/dist/vm/index.js +7 -0
  149. package/dist/vm/index.js.map +1 -0
  150. package/package.json +38 -0
@@ -0,0 +1,533 @@
1
+ /**
2
+ * 表达式求值器
3
+ *
4
+ * 功能:
5
+ * - 安全求值 AST
6
+ * - 支持白名单函数调用
7
+ * - 执行步数/时间限制
8
+ */
9
+ import { ExpressionError, ErrorCodes } from '../errors.js';
10
+ import { isSafePropertyAccess } from '../runtime/sandbox.js';
11
+ /**
12
+ * 白名单全局函数
13
+ */
14
+ const WHITELISTED_GLOBALS = new Set([
15
+ 'String', 'Number', 'Boolean', 'BigInt', 'Symbol',
16
+ 'Array', 'Object', 'Math', 'Date',
17
+ ]);
18
+ /**
19
+ * 白名单函数(带命名空间)
20
+ */
21
+ const WHITELISTED_FUNCTIONS = new Set([
22
+ 'Array.isArray',
23
+ 'Object.is',
24
+ 'Number.isFinite',
25
+ 'Number.isInteger',
26
+ 'Number.isNaN',
27
+ 'Number.isSafeInteger',
28
+ 'Math.abs',
29
+ 'Math.round',
30
+ 'Math.floor',
31
+ 'Math.ceil',
32
+ 'Math.random',
33
+ 'Math.max',
34
+ 'Math.min',
35
+ 'Date.now',
36
+ ]);
37
+ /**
38
+ * 安全的数组方法(只读或返回新数组,不修改原状态)
39
+ */
40
+ const SAFE_ARRAY_METHODS = new Set([
41
+ // 返回新数组
42
+ 'slice',
43
+ 'concat',
44
+ 'filter',
45
+ 'map',
46
+ 'flat',
47
+ 'flatMap',
48
+ 'toReversed', // ES2023 不修改原数组的 reverse
49
+ 'toSorted', // ES2023 不修改原数组的 sort
50
+ 'toSpliced', // ES2023 不修改原数组的 splice
51
+ 'with', // ES2023 不修改原数组的索引赋值
52
+ // 只读方法
53
+ 'indexOf',
54
+ 'lastIndexOf',
55
+ 'includes',
56
+ 'find',
57
+ 'findIndex',
58
+ 'findLast',
59
+ 'findLastIndex',
60
+ 'every',
61
+ 'some',
62
+ 'at',
63
+ // 返回字符串
64
+ 'join',
65
+ 'toString',
66
+ 'toLocaleString',
67
+ // 在链式调用中安全使用(如 slice().reverse())
68
+ 'reverse',
69
+ 'sort',
70
+ ]);
71
+ /**
72
+ * 危险属性名称集合(用于阻止原型链污染攻击)
73
+ * - constructor: 可用于访问 Function 构造函数
74
+ * - prototype: 可用于修改原型链
75
+ * - __proto__: 可用于修改对象原型
76
+ */
77
+ const DANGEROUS_PROPERTIES = new Set([
78
+ 'constructor',
79
+ 'prototype',
80
+ '__proto__',
81
+ ]);
82
+ /**
83
+ * 检查属性名是否为危险属性
84
+ */
85
+ function isDangerousProperty(propName) {
86
+ return typeof propName === 'string' && DANGEROUS_PROPERTIES.has(propName);
87
+ }
88
+ /**
89
+ * 运行时辅助函数
90
+ */
91
+ const RUNTIME_HELPERS = {
92
+ '$truncate': (str, length) => {
93
+ if (typeof str !== 'string')
94
+ return str;
95
+ const len = typeof length === 'number' ? length : 0;
96
+ return str.length > len ? str.slice(0, len) + '...' : str;
97
+ },
98
+ '$format': (date, _format) => {
99
+ const d = typeof date === 'number' ? new Date(date) : date;
100
+ // 简单格式化,可根据需要扩展
101
+ // format 参数暂未实现,保留接口以便未来扩展
102
+ return d.toISOString();
103
+ },
104
+ };
105
+ /**
106
+ * 安全求值 AST
107
+ *
108
+ * @param ast AST 节点
109
+ * @param ctx 运行时上下文
110
+ * @param options 求值选项
111
+ * @returns 求值结果(类型无法静态推导)
112
+ *
113
+ * 注意:表达式求值结果类型无法在编译时确定,返回 unknown
114
+ */
115
+ export function evaluateExpression(ast, ctx, options = {}) {
116
+ const mergedOptions = {
117
+ ...ctx.$exprOptions,
118
+ ...options
119
+ };
120
+ const allowGlobals = mergedOptions.allowGlobals === true;
121
+ const maxSteps = mergedOptions.maxSteps ?? 1000;
122
+ const timeout = mergedOptions.timeout ?? 100;
123
+ let stepCount = 0;
124
+ const startTime = Date.now();
125
+ function getGlobalValueByName(name) {
126
+ if (!allowGlobals)
127
+ return undefined;
128
+ // 只有在 allowGlobals 为 true 时才返回全局对象
129
+ if (name === 'globalThis')
130
+ return globalThis;
131
+ if (name === 'window' && typeof window !== 'undefined')
132
+ return window;
133
+ if (name === 'document' && typeof document !== 'undefined')
134
+ return document;
135
+ if (name === 'global' && typeof global !== 'undefined')
136
+ return global;
137
+ if (name === 'self' && typeof self !== 'undefined')
138
+ return self;
139
+ // 只有在 allowGlobals 为 true 时才访问 globalThis 的属性
140
+ return globalThis[name];
141
+ }
142
+ function isGlobalObjectName(name) {
143
+ return ['window', 'document', 'global', 'globalThis', 'self'].includes(name);
144
+ }
145
+ function checkLimits() {
146
+ stepCount++;
147
+ if (stepCount > maxSteps) {
148
+ throw new ExpressionError(JSON.stringify(ast), `Expression evaluation exceeded max steps (${maxSteps})`, ErrorCodes.EXPRESSION_MAX_STEPS_EXCEEDED, {
149
+ metadata: {
150
+ maxSteps,
151
+ currentSteps: stepCount
152
+ }
153
+ });
154
+ }
155
+ if (Date.now() - startTime > timeout) {
156
+ throw new ExpressionError(JSON.stringify(ast), `Expression evaluation exceeded timeout (${timeout}ms)`, ErrorCodes.EXPRESSION_TIMEOUT, {
157
+ metadata: {
158
+ timeout,
159
+ elapsedTime: Date.now() - startTime
160
+ }
161
+ });
162
+ }
163
+ }
164
+ function evaluate(node) {
165
+ checkLimits();
166
+ // 使用类型断言处理 node.type,因为 @babel/types 的类型定义可能不完整
167
+ // TypeScript 的严格类型检查可能不识别某些节点类型,使用类型断言绕过
168
+ const nodeType = node.type;
169
+ switch (nodeType) {
170
+ case 'NumericLiteral':
171
+ case 'StringLiteral':
172
+ case 'BooleanLiteral':
173
+ case 'BigIntLiteral':
174
+ case 'DecimalLiteral':
175
+ case 'RegExpLiteral': {
176
+ // 这些字面量类型都有 value 属性
177
+ return node.value;
178
+ }
179
+ case 'NullLiteral': {
180
+ return null;
181
+ }
182
+ case 'Literal': {
183
+ const literal = node;
184
+ // 处理不同类型的字面量
185
+ // @babel/types 的 Literal 类型包含多种字面量类型
186
+ // 使用类型守卫安全访问 value 属性
187
+ if ('value' in literal && literal.value !== undefined) {
188
+ return literal.value;
189
+ }
190
+ // NullLiteral 或 BigIntLiteral 可能没有 value 属性,或 value 为 null
191
+ // 检查类型名称
192
+ const literalType = literal.type;
193
+ if (literalType === 'NullLiteral') {
194
+ return null;
195
+ }
196
+ // 其他情况:尝试访问 value,如果不存在则返回 undefined
197
+ return literal.value ?? undefined;
198
+ }
199
+ case 'Identifier': {
200
+ const name = node.name;
201
+ // 检查是否为全局对象名称(无论是否存在,都应该被禁止,除非 allowGlobals)
202
+ // 必须在检查 ctx 之前,防止 ctx 中有同名属性绕过检查
203
+ if (isGlobalObjectName(name) && !allowGlobals) {
204
+ throw new ExpressionError(name, `Access to global "${name}" is not allowed in expressions`, ErrorCodes.EXPRESSION_UNSAFE_ACCESS);
205
+ }
206
+ // 从上下文获取值(优先从 ctx,但全局对象名称已经被上面的检查拦截)
207
+ // 注意:即使 ctx 中有 window/document 等属性,也不应该访问(安全考虑)
208
+ if (name in ctx && !isGlobalObjectName(name)) {
209
+ return ctx[name];
210
+ }
211
+ // 允许直接访问全局对象(由 allowGlobals 控制)
212
+ if (allowGlobals) {
213
+ const globalValue = getGlobalValueByName(name);
214
+ if (globalValue !== undefined) {
215
+ return globalValue;
216
+ }
217
+ }
218
+ // 如果是白名单全局函数,允许访问(但仅用于函数调用,这里返回 undefined)
219
+ if (WHITELISTED_GLOBALS.has(name)) {
220
+ return globalThis[name];
221
+ }
222
+ // 未定义的标识符返回 undefined(而不是抛出错误,允许可选链等场景)
223
+ return undefined;
224
+ }
225
+ case 'MemberExpression': {
226
+ const member = node;
227
+ const object = evaluate(member.object);
228
+ // null/undefined 检查
229
+ if (object == null) {
230
+ return undefined;
231
+ }
232
+ // 禁止访问全局对象(检查对象是否为全局对象)
233
+ if (!allowGlobals) {
234
+ // 检查对象是否为全局对象
235
+ const isGlobal = object === globalThis ||
236
+ (typeof window !== 'undefined' && object === window) ||
237
+ (typeof global !== 'undefined' && object === global) ||
238
+ (typeof self !== 'undefined' && object === self);
239
+ if (isGlobal) {
240
+ throw new ExpressionError(JSON.stringify(node), 'Access to global object is not allowed in expressions', ErrorCodes.EXPRESSION_UNSAFE_ACCESS);
241
+ }
242
+ }
243
+ // 获取属性名
244
+ let propName;
245
+ if (member.computed) {
246
+ // 计算属性:obj[key]
247
+ propName = evaluate(member.property);
248
+ }
249
+ else {
250
+ // 静态属性:obj.prop
251
+ propName = member.property.name;
252
+ }
253
+ // 禁止访问危险属性(constructor, prototype, __proto__)
254
+ if (!allowGlobals && isDangerousProperty(propName)) {
255
+ throw new ExpressionError(String(propName), `Access to "${propName}" is not allowed in expressions`, ErrorCodes.EXPRESSION_UNSAFE_ACCESS);
256
+ }
257
+ return object[propName];
258
+ }
259
+ case 'OptionalMemberExpression': {
260
+ const member = node;
261
+ const object = evaluate(member.object);
262
+ // null/undefined 检查(可选链特性)
263
+ if (object == null) {
264
+ return undefined;
265
+ }
266
+ // 禁止访问全局对象(检查对象是否为全局对象)
267
+ if (!allowGlobals) {
268
+ // 检查对象是否为全局对象
269
+ const isGlobal = object === globalThis ||
270
+ (typeof window !== 'undefined' && object === window) ||
271
+ (typeof global !== 'undefined' && object === global) ||
272
+ (typeof self !== 'undefined' && object === self);
273
+ if (isGlobal) {
274
+ throw new ExpressionError(JSON.stringify(node), 'Access to global object is not allowed in expressions', ErrorCodes.EXPRESSION_UNSAFE_ACCESS);
275
+ }
276
+ }
277
+ // 获取属性名
278
+ let propName;
279
+ if (member.computed) {
280
+ // 计算属性:obj?.[key]
281
+ propName = evaluate(member.property);
282
+ }
283
+ else {
284
+ // 静态属性:obj?.prop
285
+ propName = member.property.name;
286
+ }
287
+ // 禁止访问危险属性(constructor, prototype, __proto__)
288
+ if (!allowGlobals && isDangerousProperty(propName)) {
289
+ throw new ExpressionError(String(propName), `Access to "${propName}" is not allowed in expressions`, ErrorCodes.EXPRESSION_UNSAFE_ACCESS);
290
+ }
291
+ return object?.[propName];
292
+ }
293
+ case 'BinaryExpression': {
294
+ const binary = node;
295
+ const left = evaluate(binary.left);
296
+ const right = evaluate(binary.right);
297
+ const operator = binary.operator;
298
+ // 类型安全的二元运算
299
+ switch (operator) {
300
+ case '+': return left + right;
301
+ case '-': return left - right;
302
+ case '*': return left * right;
303
+ case '/': return left / right;
304
+ case '%': return left % right;
305
+ case '**': return left ** right;
306
+ case '==': return left == right;
307
+ case '!=': return left != right;
308
+ case '===': return left === right;
309
+ case '!==': return left !== right;
310
+ case '<': return left < right;
311
+ case '<=': return left <= right;
312
+ case '>': return left > right;
313
+ case '>=': return left >= right;
314
+ case '<<': return left << right;
315
+ case '>>': return left >> right;
316
+ case '>>>': return left >>> right;
317
+ case '&': return left & right;
318
+ case '|': return left | right;
319
+ case '^': return left ^ right;
320
+ case 'in': return left in right;
321
+ case 'instanceof': {
322
+ // instanceof 需要检查 right 是否为构造函数
323
+ if (typeof right !== 'function' && typeof right !== 'object') {
324
+ throw new ExpressionError(JSON.stringify(node), 'Right-hand side of instanceof must be a constructor', ErrorCodes.EXPRESSION_EVALUATION_ERROR);
325
+ }
326
+ return left instanceof right;
327
+ }
328
+ default:
329
+ throw new ExpressionError(JSON.stringify(node), `Unsupported binary operator: ${operator}`, ErrorCodes.EXPRESSION_EVALUATION_ERROR);
330
+ }
331
+ }
332
+ case 'LogicalExpression': {
333
+ const logical = node;
334
+ const left = evaluate(logical.left);
335
+ const operator = logical.operator;
336
+ if (operator === '&&') {
337
+ return left && evaluate(logical.right);
338
+ }
339
+ else if (operator === '||') {
340
+ return left || evaluate(logical.right);
341
+ }
342
+ else if (operator === '??') {
343
+ return left ?? evaluate(logical.right);
344
+ }
345
+ throw new ExpressionError(JSON.stringify(node), `Unsupported logical operator: ${operator}`, ErrorCodes.EXPRESSION_EVALUATION_ERROR);
346
+ }
347
+ case 'UnaryExpression': {
348
+ const unary = node;
349
+ const argument = evaluate(unary.argument);
350
+ const operator = unary.operator;
351
+ switch (operator) {
352
+ case '+': return +argument;
353
+ case '-': return -argument;
354
+ case '!': return !argument;
355
+ case '~': return ~argument;
356
+ case 'typeof': return typeof argument;
357
+ case 'void': return void argument;
358
+ case 'delete': throw new ExpressionError(JSON.stringify(node), 'delete operator is not allowed', ErrorCodes.EXPRESSION_EVALUATION_ERROR);
359
+ default:
360
+ throw new ExpressionError(JSON.stringify(node), `Unsupported unary operator: ${operator}`, ErrorCodes.EXPRESSION_EVALUATION_ERROR);
361
+ }
362
+ }
363
+ case 'ConditionalExpression': {
364
+ const conditional = node;
365
+ const test = evaluate(conditional.test);
366
+ return test ? evaluate(conditional.consequent) : evaluate(conditional.alternate);
367
+ }
368
+ // NullishCoalescingExpression 在 @babel/types 中可能不存在
369
+ // 使用 LogicalExpression 处理 ?? 运算符(operator === '??')
370
+ // 如果类型系统支持,可以添加此 case
371
+ case 'CallExpression': {
372
+ const call = node;
373
+ const callee = call.callee;
374
+ // 获取函数名和对象
375
+ let funcName;
376
+ let funcObj;
377
+ let callContext = null; // 函数调用的上下文(this)
378
+ if (callee.type === 'Identifier') {
379
+ // 直接函数调用:String(), Math.max()
380
+ funcName = callee.name;
381
+ // 检查是否为全局对象(禁止访问)
382
+ if (!isSafePropertyAccess(funcName, ctx, { allowGlobals })) {
383
+ throw new ExpressionError(funcName, `Access to global "${funcName}" is not allowed in expressions`, 'UNSAFE_ACCESS');
384
+ }
385
+ // 从上下文或全局获取函数
386
+ funcObj = ctx[funcName] ?? globalThis[funcName];
387
+ callContext = null; // 全局函数调用,this 为 null
388
+ }
389
+ else if (callee.type === 'MemberExpression') {
390
+ // 成员函数调用:Math.max(), Array.isArray(), array.slice()
391
+ const member = callee;
392
+ const obj = evaluate(member.object);
393
+ // null/undefined 检查
394
+ if (obj == null) {
395
+ throw new ExpressionError(JSON.stringify(node), `Cannot call method on ${obj === null ? 'null' : 'undefined'}`, ErrorCodes.EXPRESSION_EVALUATION_ERROR);
396
+ }
397
+ // 检查对象是否为全局对象(禁止访问)
398
+ if (!allowGlobals) {
399
+ // 检查对象是否为全局对象
400
+ const isGlobal = obj === globalThis ||
401
+ (typeof window !== 'undefined' && obj === window) ||
402
+ (typeof global !== 'undefined' && obj === global) ||
403
+ (typeof self !== 'undefined' && obj === self);
404
+ if (isGlobal) {
405
+ throw new ExpressionError(JSON.stringify(node), 'Access to global object is not allowed in expressions', ErrorCodes.EXPRESSION_UNSAFE_ACCESS);
406
+ }
407
+ }
408
+ // 检查是否是数组实例方法调用(安全的只读方法)
409
+ if (Array.isArray(obj) && !member.computed && member.property.type === 'Identifier') {
410
+ const methodName = member.property.name;
411
+ if (SAFE_ARRAY_METHODS.has(methodName)) {
412
+ // 这是安全的数组方法,直接使用
413
+ funcObj = obj[methodName];
414
+ funcName = `Array.${methodName}`; // 用于标识和错误信息
415
+ callContext = obj; // 数组方法调用,this 为数组本身
416
+ }
417
+ else {
418
+ // 不是安全的数组方法,需要检查白名单
419
+ const objName = member.object.type === 'Identifier'
420
+ ? member.object.name
421
+ : String(obj);
422
+ funcName = `${objName}.${methodName}`;
423
+ funcObj = obj?.[methodName];
424
+ callContext = obj;
425
+ }
426
+ }
427
+ else {
428
+ // 非数组对象,正常处理
429
+ // 获取对象标识符名称(如果是 Identifier)
430
+ let objName = '';
431
+ if (member.object.type === 'Identifier') {
432
+ objName = member.object.name;
433
+ }
434
+ else {
435
+ // 对于其他情况,使用字符串表示,但可能不在白名单内
436
+ objName = String(obj);
437
+ }
438
+ if (member.computed) {
439
+ const prop = evaluate(member.property);
440
+ funcName = `${objName}[${String(prop)}]`;
441
+ funcObj = obj?.[prop];
442
+ callContext = obj;
443
+ }
444
+ else {
445
+ const prop = member.property.name;
446
+ funcName = `${objName}.${prop}`;
447
+ funcObj = obj?.[prop];
448
+ callContext = obj;
449
+ }
450
+ }
451
+ }
452
+ else {
453
+ throw new ExpressionError(JSON.stringify(node), 'Invalid function call: only Identifier and MemberExpression are allowed', ErrorCodes.EXPRESSION_EVALUATION_ERROR);
454
+ }
455
+ // 检查白名单
456
+ // 如果是数组方法(funcName 以 Array. 开头且方法在安全列表中),则允许
457
+ const isArrayMethod = funcName.startsWith('Array.') && SAFE_ARRAY_METHODS.has(funcName.split('.')[1]);
458
+ const isWhitelisted = isArrayMethod ||
459
+ WHITELISTED_FUNCTIONS.has(funcName) ||
460
+ WHITELISTED_GLOBALS.has(funcName.split('.')[0]) ||
461
+ RUNTIME_HELPERS[funcName] !== undefined;
462
+ if (!allowGlobals && !isWhitelisted) {
463
+ throw new ExpressionError(funcName, `Function "${funcName}" is not in whitelist`, ErrorCodes.EXPRESSION_FUNCTION_NOT_WHITELISTED);
464
+ }
465
+ // 执行函数调用
466
+ const args = call.arguments.map(arg => {
467
+ if (arg.type === 'SpreadElement') {
468
+ throw new ExpressionError(JSON.stringify(node), 'Spread operator is not allowed', ErrorCodes.EXPRESSION_EVALUATION_ERROR);
469
+ }
470
+ return evaluate(arg);
471
+ });
472
+ // 调用运行时辅助函数
473
+ if (RUNTIME_HELPERS[funcName]) {
474
+ return RUNTIME_HELPERS[funcName](...args);
475
+ }
476
+ // 调用白名单全局函数或数组方法
477
+ if (typeof funcObj === 'function') {
478
+ try {
479
+ // 如果有上下文(如数组方法),使用 apply;否则直接调用
480
+ return callContext !== null
481
+ ? funcObj.apply(callContext, args)
482
+ : funcObj(...args);
483
+ }
484
+ catch (error) {
485
+ const errorMessage = error instanceof Error ? error.message : String(error);
486
+ throw new ExpressionError(funcName, `Error calling "${funcName}": ${errorMessage}`, ErrorCodes.EXPRESSION_EVALUATION_ERROR);
487
+ }
488
+ }
489
+ throw new ExpressionError(funcName, `"${funcName}" is not a function${funcObj === undefined ? ' (undefined)' : funcObj === null ? ' (null)' : ''}`, ErrorCodes.EXPRESSION_EVALUATION_ERROR);
490
+ }
491
+ case 'ArrayExpression': {
492
+ const array = node;
493
+ return array.elements.map(el => {
494
+ if (el == null)
495
+ return null;
496
+ if (el.type === 'SpreadElement') {
497
+ throw new ExpressionError(JSON.stringify(node), 'Spread operator is not allowed', ErrorCodes.EXPRESSION_EVALUATION_ERROR);
498
+ }
499
+ return evaluate(el);
500
+ });
501
+ }
502
+ case 'ObjectExpression': {
503
+ const object = node;
504
+ const result = {};
505
+ for (const prop of object.properties) {
506
+ if (prop.type === 'ObjectMethod' || prop.type === 'SpreadElement') {
507
+ throw new ExpressionError(JSON.stringify(node), 'Object methods and spread are not allowed', ErrorCodes.EXPRESSION_EVALUATION_ERROR);
508
+ }
509
+ const key = prop.key.type === 'Identifier'
510
+ ? prop.key.name
511
+ : String(evaluate(prop.key));
512
+ result[key] = evaluate(prop.value);
513
+ }
514
+ return result;
515
+ }
516
+ case 'TemplateLiteral': {
517
+ const template = node;
518
+ let result = '';
519
+ for (let i = 0; i < template.quasis.length; i++) {
520
+ result += template.quasis[i].value.cooked;
521
+ if (i < template.expressions.length) {
522
+ result += String(evaluate(template.expressions[i]));
523
+ }
524
+ }
525
+ return result;
526
+ }
527
+ default:
528
+ throw new ExpressionError(JSON.stringify(node), `Unsupported node type: ${node.type}`, ErrorCodes.EXPRESSION_EVALUATION_ERROR);
529
+ }
530
+ }
531
+ return evaluate(ast);
532
+ }
533
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/expression/evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Expression 模块导出
3
+ */
4
+ export { parseExpression } from './parser.js';
5
+ export { validateAST } from './whitelist.js';
6
+ export { evaluateExpression } from './evaluator.js';
7
+ export { evaluate } from './evaluate.js';
8
+ export { extractDependencies } from './dependencies.js';
9
+ export { getCachedExpression, setCachedExpression, invalidateCache, clearCache, getCacheStats } from './cache.js';
10
+ export { extractExpression, normalizeExpression, isExpressionFormat, extractExpressionsRecursively } from './utils.js';
11
+ export { compileSimpleExpression, getCompiledExpression, clearCompiledCache, type CompiledExpression } from './compiler.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/expression/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,aAAa,EACd,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,6BAA6B,EAC9B,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,kBAAkB,EACxB,MAAM,eAAe,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Expression 模块导出
3
+ */
4
+ export { parseExpression } from './parser.js';
5
+ export { validateAST } from './whitelist.js';
6
+ export { evaluateExpression } from './evaluator.js';
7
+ export { evaluate } from './evaluate.js';
8
+ export { extractDependencies } from './dependencies.js';
9
+ export { getCachedExpression, setCachedExpression, invalidateCache, clearCache, getCacheStats } from './cache.js';
10
+ export { extractExpression, normalizeExpression, isExpressionFormat, extractExpressionsRecursively } from './utils.js';
11
+ export { compileSimpleExpression, getCompiledExpression, clearCompiledCache } from './compiler.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/expression/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,eAAe,EACf,UAAU,EACV,aAAa,EACd,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,6BAA6B,EAC9B,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAEnB,MAAM,eAAe,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 表达式解析器
3
+ *
4
+ * 使用 @babel/parser 解析 JavaScript 表达式为 AST
5
+ * 移除 models. 前缀支持
6
+ */
7
+ import type * as ESTree from '@babel/types';
8
+ /**
9
+ * 解析表达式为 AST
10
+ *
11
+ * @param expr 表达式字符串(如 "user.name + 1")
12
+ * @returns ESTree.Node AST 节点
13
+ */
14
+ export declare function parseExpression(expr: string): ESTree.Node;
15
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/expression/parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAG3C;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,CAoCzD"}