@cloudpss/expression 0.6.0-beta.1 → 0.6.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.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/migrator/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAgD,MAAM,QAAQ,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIxC,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,qBAAqB;AACrB,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAG7D;AAGD,wBAAwB;AACxB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAItE;AAED,wBAAwB;AACxB,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAa1F;AAED,aAAa;AACb,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAMpE;AAED,eAAe;AACf,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAOnE;AAaD,YAAY;AACZ,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAiBzF;AAED,WAAW;AACX,wBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBrD"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/migrator/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAgD,MAAM,QAAQ,CAAC;AAErF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIxC,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,qBAAqB;AACrB,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAG7D;AAED,wBAAwB;AACxB,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAItE;AAED,wBAAwB;AACxB,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAa1F;AAED,aAAa;AACb,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAMpE;AAED,eAAe;AACf,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAOnE;AAaD,YAAY;AACZ,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAiBzF;AAED,WAAW;AACX,wBAAgB,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAkBrD"}
@@ -1,5 +1,5 @@
1
1
  import { isSymbolNode, isConstantNode, isOperatorNode } from 'mathjs';
2
- import { keywords } from '@mirascript/mirascript/subtle';
2
+ import { isKeyword } from '@mirascript/mirascript/subtle';
3
3
  import { toString } from './to-type.js';
4
4
  import { migrateExpr } from './node.js';
5
5
  /** 获取全局函数的名字 */
@@ -15,10 +15,9 @@ export function symbolName(node) {
15
15
  return undefined;
16
16
  return node.name;
17
17
  }
18
- const kw = new Set(keywords());
19
18
  /** 转换为 mirascript 符号 */
20
19
  export function migrateSymbolName(name, local) {
21
- if (!kw.has(name))
20
+ if (!isKeyword(name))
22
21
  return name;
23
22
  if (local)
24
23
  return `__${name}__`;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/migrator/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/migrator/utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAKH,KAAK,SAAS,EAEd,KAAK,OAAO,EAEf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,iBAAiB,EAGzB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAgE3C,cAAc;AACd,qBAAa,KAAK;IAEV,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EACR,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC,GAChD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC,GAC7C,IAAI;IACV,gBAAgB;IAChB,QAAQ,CAAC,MAAM;IACf,aAAa;IACb,QAAQ,CAAC,IAAI;;IARb,gBAAgB;IACP,KAAK,GACR,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC,GAChD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC,GAC7C,IAAW;IACjB,gBAAgB;IACP,MAAM,UAAO;IACtB,aAAa;IACJ,IAAI,SAAgB;IAEjC,cAAc;IACd,UAAU,EAAE,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAQ;IAC/D,cAAc;IACd,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,CAAQ;IAE3E,aAAa;IACb,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC7C,WAAW;IACX,SAAS,CAAC,WAAW,SAAK;IAC1B,YAAY;IACZ,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,IAAI;IAU9C,mBAAmB;IACnB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC1C,mBAAmB;IACnB,IAAI,KAAK,IAAI,SAAS,CA4CrB;IAED,oDAAoD;IACpD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYzB,kDAAkD;IAClD,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAalD,cAAc;IACd,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,kBAAkB,EAAE,IAAI,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO;CA2B3F;AAmBD,eAAe;AACf,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAErC"}
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,SAAS,EAEd,KAAK,OAAO,EAGf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,iBAAiB,EAGzB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAyF3C,cAAc;AACd,qBAAa,KAAK;IAEV,gBAAgB;IAChB,QAAQ,CAAC,KAAK,EACR,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC,GAChD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC,GAC7C,IAAI;IACV,gBAAgB;IAChB,QAAQ,CAAC,MAAM;IACf,aAAa;IACb,QAAQ,CAAC,IAAI;;IARb,gBAAgB;IACP,KAAK,GACR,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC,GAChD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC,GAC7C,IAAW;IACjB,gBAAgB;IACP,MAAM,UAAO;IACtB,aAAa;IACJ,IAAI,SAAgB;IAEjC,cAAc;IACd,UAAU,EAAE,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAQ;IAC/D,cAAc;IACd,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,CAAQ;IAE3E,aAAa;IACb,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC7C,WAAW;IACX,SAAS,CAAC,WAAW,SAAK;IAC1B,YAAY;IACZ,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,IAAI;IAU9C,mBAAmB;IACnB,SAAS,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC1C,mBAAmB;IACnB,IAAI,KAAK,IAAI,SAAS,CA4CrB;IAED,oDAAoD;IACpD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYzB,kDAAkD;IAClD,GAAG,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAalD,cAAc;IACd,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,kBAAkB,EAAE,IAAI,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO;CA2B3F;AA2BD,eAAe;AACf,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAErC"}
package/dist/scope.js CHANGED
@@ -1,45 +1,50 @@
1
- import { createVmContext, isVmExtern, isVmModule, } from '@mirascript/mirascript';
1
+ import { createVmContext, isVmWrapper, isVmFunction, } from '@mirascript/mirascript';
2
2
  import { ExpressionTag, isExpression, } from './expression.js';
3
3
  import { evaluateEval } from './eval.js';
4
4
  import { parse } from './parser.js';
5
5
  import { TypeInfo } from './type.js';
6
- const { hasOwn } = Object;
6
+ const { hasOwn, keys } = Object;
7
+ const { isArray } = Array;
7
8
  const RAW = Symbol.for('@private/expression:raw');
8
9
  /** 是否需要创建代理对象 */
10
+ function isSpecialHostObject(value) {
11
+ return (value instanceof Date ||
12
+ value instanceof Promise ||
13
+ value instanceof RegExp ||
14
+ ArrayBuffer.isView(value) ||
15
+ value instanceof ArrayBuffer ||
16
+ (typeof SharedArrayBuffer != 'undefined' && value instanceof SharedArrayBuffer));
17
+ }
18
+ /** 是否需要创建代理对象 */
9
19
  function needsProxy(value) {
10
- // 先检查 isExpression,因为 'function' 也有可能是 Expression
20
+ if (value == null || (typeof value != 'object' && typeof value != 'function')) {
21
+ return false;
22
+ }
11
23
  if (isExpression(value)) {
12
24
  return true;
13
25
  }
14
- if (value == null || typeof value != 'object') {
15
- return false;
16
- }
17
- if (isVmExtern(value) || isVmModule(value)) {
26
+ if (isVmWrapper(value) || isVmFunction(value) || isSpecialHostObject(value)) {
18
27
  return false;
19
28
  }
20
29
  return true;
21
30
  }
22
31
  /** 创建代理对象 */
23
32
  function createProxy(value, scope, path) {
24
- // 先检查 isExpression,因为 'function' 也有可能是 Expression
25
33
  if (isExpression(value)) {
26
34
  return scope.eval(value, path);
27
35
  }
28
36
  if (typeof value != 'object' || value == null) {
29
37
  return value;
30
38
  }
31
- if (value instanceof Date ||
32
- value instanceof Promise ||
33
- value instanceof RegExp ||
34
- ArrayBuffer.isView(value) ||
35
- value instanceof ArrayBuffer ||
36
- (typeof SharedArrayBuffer != 'undefined' && value instanceof SharedArrayBuffer)) {
37
- return value;
39
+ if (isArray(value)) {
40
+ return new Proxy(value, new ArrayScopeProxyHandler(scope, path));
41
+ }
42
+ else {
43
+ return new Proxy(value, new RecordScopeProxyHandler(scope, path));
38
44
  }
39
- return new Proxy(value, new ScopeProxyHandler(scope, path));
40
45
  }
41
46
  /** 函数的执行环境 */
42
- class ScopeProxyHandler {
47
+ class ArrayScopeProxyHandler {
43
48
  constructor(scope, path) {
44
49
  this.scope = scope;
45
50
  this.path = path;
@@ -52,7 +57,27 @@ class ScopeProxyHandler {
52
57
  return target;
53
58
  }
54
59
  const value = Reflect.get(target, p);
55
- if (isVmExtern(target) || !needsProxy(value)) {
60
+ if (typeof p == 'symbol' || String(Number(p)) !== p || !needsProxy(value)) {
61
+ return value;
62
+ }
63
+ return createProxy(value, this.scope, [...this.path, p]);
64
+ }
65
+ }
66
+ /** 函数的执行环境 */
67
+ class RecordScopeProxyHandler {
68
+ constructor(scope, path) {
69
+ this.scope = scope;
70
+ this.path = path;
71
+ }
72
+ /**
73
+ * @inheritdoc
74
+ */
75
+ get(target, p) {
76
+ if (p === RAW) {
77
+ return target;
78
+ }
79
+ const value = Reflect.get(target, p);
80
+ if (typeof p == 'symbol' || !hasOwn(target, p) || !needsProxy(value)) {
56
81
  return value;
57
82
  }
58
83
  return createProxy(value, this.scope, [...this.path, p]);
@@ -216,16 +241,21 @@ function unwrapCore(value) {
216
241
  if (value == null || (typeof value != 'object' && typeof value != 'function')) {
217
242
  return undefined;
218
243
  }
244
+ if (isVmWrapper(value) || isVmFunction(value) || isSpecialHostObject(value)) {
245
+ return undefined;
246
+ }
247
+ // 是否有 proxy
219
248
  const raw = value[RAW];
249
+ // 不论是否被代理,均须递归处理子项
220
250
  const obj = raw ?? value;
221
- for (const key in obj) {
222
- if (!hasOwn(obj, key))
223
- continue;
251
+ // 只处理 own enumerable 属性
252
+ for (const key of keys(obj)) {
224
253
  const unwrapped = unwrapCore(obj[key]);
225
254
  if (unwrapped !== undefined) {
226
255
  obj[key] = unwrapped;
227
256
  }
228
257
  }
258
+ // 返回被代理的对象,如没有 proxy 则返回 undefined
229
259
  return raw;
230
260
  }
231
261
  /** 移除 PROXY */
package/dist/scope.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudpss/expression",
3
- "version": "0.6.0-beta.1",
3
+ "version": "0.6.0",
4
4
  "author": "CloudPSS",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,7 +12,7 @@
12
12
  "./*": "./dist/*.js"
13
13
  },
14
14
  "dependencies": {
15
- "@mirascript/mirascript": "^0.1.25",
15
+ "@mirascript/mirascript": "^0.1.26",
16
16
  "klona": "^2.0.6",
17
17
  "lru-cache": "^11.2.4",
18
18
  "mathjs": "^15.1.0",
@@ -1,5 +1,5 @@
1
1
  import { type MathNode, isSymbolNode, isConstantNode, isOperatorNode } from 'mathjs';
2
- import { keywords } from '@mirascript/mirascript/subtle';
2
+ import { isKeyword } from '@mirascript/mirascript/subtle';
3
3
  import type { Result } from './interface.js';
4
4
  import type { State } from './state.js';
5
5
  import { toString } from './to-type.js';
@@ -19,10 +19,9 @@ export function symbolName(node: MathNode): string | undefined {
19
19
  return node.name;
20
20
  }
21
21
 
22
- const kw = new Set(keywords());
23
22
  /** 转换为 mirascript 符号 */
24
23
  export function migrateSymbolName(name: string, local: boolean): string {
25
- if (!kw.has(name)) return name;
24
+ if (!isKeyword(name)) return name;
26
25
  if (local) return `__${name}__`;
27
26
  return `global.${name}`;
28
27
  }
package/src/scope.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  createVmContext,
3
- isVmExtern,
4
3
  type VmAny,
5
4
  type VmArray,
6
5
  type VmContext,
7
6
  type VmRecord,
8
7
  type VmValue,
9
- isVmModule,
8
+ isVmWrapper,
9
+ isVmFunction,
10
10
  } from '@mirascript/mirascript';
11
11
  import {
12
12
  type CompiledExpression,
@@ -19,48 +19,53 @@ import { evaluateEval } from './eval.js';
19
19
  import { parse } from './parser.js';
20
20
  import { TypeInfo } from './type.js';
21
21
  import type { Evaluator } from './main.js';
22
- const { hasOwn } = Object;
22
+ const { hasOwn, keys } = Object;
23
+ const { isArray } = Array;
23
24
 
24
25
  const RAW = Symbol.for('@private/expression:raw');
25
26
 
27
+ /** 是否需要创建代理对象 */
28
+ function isSpecialHostObject(value: object): boolean {
29
+ return (
30
+ value instanceof Date ||
31
+ value instanceof Promise ||
32
+ value instanceof RegExp ||
33
+ ArrayBuffer.isView(value) ||
34
+ value instanceof ArrayBuffer ||
35
+ (typeof SharedArrayBuffer != 'undefined' && value instanceof SharedArrayBuffer)
36
+ );
37
+ }
38
+
26
39
  /** 是否需要创建代理对象 */
27
40
  function needsProxy(value: ExpressionOrValue | undefined): value is Expression | VmArray | VmRecord {
28
- // 先检查 isExpression,因为 'function' 也有可能是 Expression
41
+ if (value == null || (typeof value != 'object' && typeof value != 'function')) {
42
+ return false;
43
+ }
29
44
  if (isExpression(value)) {
30
45
  return true;
31
46
  }
32
- if (value == null || typeof value != 'object') {
33
- return false;
34
- }
35
- if (isVmExtern(value) || isVmModule(value)) {
47
+ if (isVmWrapper(value) || isVmFunction(value) || isSpecialHostObject(value)) {
36
48
  return false;
37
49
  }
38
50
  return true;
39
51
  }
40
52
 
41
53
  /** 创建代理对象 */
42
- function createProxy(value: Expression | object, scope: Scope, path: readonly PropertyKey[]): unknown {
43
- // 先检查 isExpression,因为 'function' 也有可能是 Expression
54
+ function createProxy(value: Expression | VmArray | VmRecord, scope: Scope, path: readonly PropertyKey[]): unknown {
44
55
  if (isExpression(value)) {
45
56
  return scope.eval(value, path);
46
57
  }
47
58
  if (typeof value != 'object' || value == null) {
48
59
  return value;
49
60
  }
50
- if (
51
- value instanceof Date ||
52
- value instanceof Promise ||
53
- value instanceof RegExp ||
54
- ArrayBuffer.isView(value) ||
55
- value instanceof ArrayBuffer ||
56
- (typeof SharedArrayBuffer != 'undefined' && value instanceof SharedArrayBuffer)
57
- ) {
58
- return value;
61
+ if (isArray(value)) {
62
+ return new Proxy(value, new ArrayScopeProxyHandler(scope, path));
63
+ } else {
64
+ return new Proxy(value, new RecordScopeProxyHandler(scope, path));
59
65
  }
60
- return new Proxy(value, new ScopeProxyHandler(scope, path));
61
66
  }
62
67
  /** 函数的执行环境 */
63
- class ScopeProxyHandler implements ProxyHandler<object> {
68
+ class ArrayScopeProxyHandler implements ProxyHandler<object> {
64
69
  constructor(
65
70
  readonly scope: Scope,
66
71
  readonly path: readonly PropertyKey[],
@@ -73,7 +78,27 @@ class ScopeProxyHandler implements ProxyHandler<object> {
73
78
  return target;
74
79
  }
75
80
  const value = Reflect.get(target, p) as ExpressionOrValue;
76
- if (isVmExtern(target) || !needsProxy(value)) {
81
+ if (typeof p == 'symbol' || String(Number(p)) !== p || !needsProxy(value)) {
82
+ return value;
83
+ }
84
+ return createProxy(value, this.scope, [...this.path, p]);
85
+ }
86
+ }
87
+ /** 函数的执行环境 */
88
+ class RecordScopeProxyHandler implements ProxyHandler<object> {
89
+ constructor(
90
+ readonly scope: Scope,
91
+ readonly path: readonly PropertyKey[],
92
+ ) {}
93
+ /**
94
+ * @inheritdoc
95
+ */
96
+ get(target: object, p: string | symbol): unknown {
97
+ if (p === RAW) {
98
+ return target;
99
+ }
100
+ const value = Reflect.get(target, p) as ExpressionOrValue;
101
+ if (typeof p == 'symbol' || !hasOwn(target, p) || !needsProxy(value)) {
77
102
  return value;
78
103
  }
79
104
  return createProxy(value, this.scope, [...this.path, p]);
@@ -226,15 +251,23 @@ function unwrapCore<T>(value: T): T | undefined {
226
251
  if (value == null || (typeof value != 'object' && typeof value != 'function')) {
227
252
  return undefined;
228
253
  }
254
+ if (isVmWrapper(value) || isVmFunction(value) || isSpecialHostObject(value)) {
255
+ return undefined;
256
+ }
257
+ // 是否有 proxy
229
258
  const raw = (value as T & { [RAW]?: T })[RAW];
259
+
260
+ // 不论是否被代理,均须递归处理子项
230
261
  const obj = raw ?? value;
231
- for (const key in obj) {
232
- if (!hasOwn(obj, key)) continue;
262
+ // 只处理 own enumerable 属性
263
+ for (const key of keys(obj) as Array<Extract<keyof T, string>>) {
233
264
  const unwrapped = unwrapCore(obj[key]);
234
265
  if (unwrapped !== undefined) {
235
266
  obj[key] = unwrapped;
236
267
  }
237
268
  }
269
+
270
+ // 返回被代理的对象,如没有 proxy 则返回 undefined
238
271
  return raw;
239
272
  }
240
273
 
@@ -1,5 +1,5 @@
1
1
  import { VmExtern } from '@mirascript/mirascript';
2
- import { Evaluator, Expression, Scope } from '../dist/index.js';
2
+ import { Evaluator, Expression, isExpression, Scope } from '../dist/index.js';
3
3
 
4
4
  const e = new Evaluator();
5
5
 
@@ -55,10 +55,12 @@ describe('Evaluator should work correctly', () => {
55
55
  expect(result?.value).toStrictEqual(Expression('1'));
56
56
  });
57
57
  it('should eval deep with compiled expression', () => {
58
+ const b = e.compile(Expression('c+d'));
59
+ expect(isExpression(b)).toBe(true);
58
60
  const s = new Scope(
59
61
  {
60
62
  a: Expression('b+d'),
61
- b: e.compile(Expression('c+d')),
63
+ b: b,
62
64
  c: 12,
63
65
  d: Expression('c'),
64
66
  },
@@ -67,6 +69,62 @@ describe('Evaluator should work correctly', () => {
67
69
  const result = e.evaluate(Expression('a'), s);
68
70
  expect(result).toBe(36);
69
71
  });
72
+ it('should eval deep with object and array', () => {
73
+ const s = new Scope(
74
+ {
75
+ arr: [1, 2, Expression('arr.0 + obj.x'), Expression('arr.2 + obj.y')],
76
+ obj: { x: 3, y: Expression('arr.1 + obj.x') },
77
+ arr_copy: Expression('[..arr]'),
78
+ },
79
+ false,
80
+ );
81
+ const result = e.evaluate<{
82
+ arr: number[];
83
+ obj: Record<string, number>;
84
+ }>(Expression('(arr: [..arr], obj: (..obj))'), s)!;
85
+ expect(result).toStrictEqual({ arr: [1, 2, 4, 9], obj: { x: 3, y: 5 } });
86
+ expect(result).not.toBeProxy();
87
+ expect(result.arr).not.toBeProxy();
88
+ expect(result.obj).not.toBeProxy();
89
+ const copy = e.evaluate<number[]>(Expression('[..arr_copy]'), s);
90
+ expect(copy).toStrictEqual([1, 2, 4, 9]);
91
+ expect(copy).not.toBeProxy();
92
+ });
93
+ it('should eval with arr expr', () => {
94
+ const s = new Scope(
95
+ {
96
+ arr: Expression('[a0, 2, 3..5]'),
97
+ a0: Expression('0.4 + 0.6'),
98
+ start: Expression('0'),
99
+ end: Expression('start + 2'),
100
+ },
101
+ false,
102
+ );
103
+ const result = e.evaluate<number[]>(Expression('arr'), s);
104
+ expect(result).toStrictEqual([1, 2, 3, 4, 5]);
105
+ expect(result).not.toBeProxy();
106
+ const slice = e.evaluate<number[]>(Expression('arr[start..end]'), s);
107
+ expect(slice).toStrictEqual([1, 2, 3]);
108
+ expect(slice).not.toBeProxy();
109
+ const field = e.evaluate<number>(Expression('arr.0'), s);
110
+ expect(field).toBe(1);
111
+ });
112
+ it('should eval with obj expr', () => {
113
+ const s = new Scope(
114
+ {
115
+ o0: Expression('"s$(arr)"'),
116
+ arr: Expression('[1, 2, 3..5]'),
117
+ obj: Expression('(x: o0, y: 2 + arr.0, z: arr[1..arr.1 + 2])'),
118
+ },
119
+ false,
120
+ );
121
+ const result = e.evaluate<{ x: string; y: number; z: number[] }>(Expression('obj'), s)!;
122
+ expect(result).toStrictEqual({ x: 's1, 2, 3, 4, 5', y: 3, z: [2, 3, 4, 5] });
123
+ expect(result).not.toBeProxy();
124
+ expect(result.z).not.toBeProxy();
125
+ const field = e.evaluate<string>(Expression('obj.x'), s);
126
+ expect(field).toStrictEqual('s1, 2, 3, 4, 5');
127
+ });
70
128
  it('should eval complex', () => {
71
129
  const s = new Scope(
72
130
  {