@cloudpss/expression 0.6.0-alpha.14 → 0.6.0-alpha.16

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 (63) hide show
  1. package/dist/definitions/argument.d.ts +1 -1
  2. package/dist/definitions/argument.d.ts.map +1 -1
  3. package/dist/definitions/parameter.d.ts.map +1 -1
  4. package/dist/definitions/parameter.js.map +1 -1
  5. package/dist/definitions/utils.d.ts +2 -1
  6. package/dist/definitions/utils.d.ts.map +1 -1
  7. package/dist/definitions/utils.js +24 -7
  8. package/dist/definitions/utils.js.map +1 -1
  9. package/dist/main.d.ts +1 -1
  10. package/dist/main.d.ts.map +1 -1
  11. package/dist/main.js +25 -17
  12. package/dist/main.js.map +1 -1
  13. package/dist/migrator/access.d.ts.map +1 -1
  14. package/dist/migrator/access.js +3 -3
  15. package/dist/migrator/access.js.map +1 -1
  16. package/dist/migrator/call.d.ts.map +1 -1
  17. package/dist/migrator/call.js +39 -13
  18. package/dist/migrator/call.js.map +1 -1
  19. package/dist/migrator/node.d.ts.map +1 -1
  20. package/dist/migrator/node.js +23 -3
  21. package/dist/migrator/node.js.map +1 -1
  22. package/dist/migrator/operator.d.ts.map +1 -1
  23. package/dist/migrator/operator.js +56 -26
  24. package/dist/migrator/operator.js.map +1 -1
  25. package/dist/migrator/state.d.ts.map +1 -1
  26. package/dist/migrator/state.js +20 -5
  27. package/dist/migrator/state.js.map +1 -1
  28. package/dist/migrator/symbol.js +2 -2
  29. package/dist/migrator/symbol.js.map +1 -1
  30. package/dist/migrator/to-type.js +2 -2
  31. package/dist/migrator/to-type.js.map +1 -1
  32. package/dist/re-exports.d.ts +3 -3
  33. package/dist/re-exports.d.ts.map +1 -1
  34. package/dist/re-exports.js +2 -2
  35. package/dist/re-exports.js.map +1 -1
  36. package/dist/scope.d.ts +0 -2
  37. package/dist/scope.d.ts.map +1 -1
  38. package/dist/scope.js +3 -3
  39. package/dist/scope.js.map +1 -1
  40. package/dist/type.d.ts +22 -10
  41. package/dist/type.d.ts.map +1 -1
  42. package/dist/type.js +19 -26
  43. package/dist/type.js.map +1 -1
  44. package/package.json +3 -3
  45. package/src/definitions/argument.ts +1 -1
  46. package/src/definitions/parameter.ts +15 -8
  47. package/src/definitions/utils.ts +29 -13
  48. package/src/main.ts +21 -14
  49. package/src/migrator/access.ts +3 -3
  50. package/src/migrator/call.ts +37 -15
  51. package/src/migrator/node.ts +24 -3
  52. package/src/migrator/operator.ts +55 -26
  53. package/src/migrator/state.ts +19 -4
  54. package/src/migrator/symbol.ts +2 -2
  55. package/src/migrator/to-type.ts +2 -2
  56. package/src/re-exports.ts +20 -1
  57. package/src/scope.ts +3 -3
  58. package/src/type.ts +36 -27
  59. package/tests/condition.ts +20 -12
  60. package/tests/definition.ts +12 -10
  61. package/tests/import.ts +3 -3
  62. package/tests/migrate.ts +52 -9
  63. package/tests/scope.ts +3 -3
package/dist/scope.d.ts CHANGED
@@ -9,8 +9,6 @@ export declare class Scope {
9
9
  readonly throws: boolean;
10
10
  /** 执行环境名称 */
11
11
  readonly name: string;
12
- /** 最大求值计数 */
13
- static readonly MAX_RECURSION = 500;
14
12
  constructor(
15
13
  /** 生成环境的工厂函数 */
16
14
  scope?: ((key: string) => ExpressionOrValue | undefined) | Record<string, ExpressionOrValue | undefined> | null,
@@ -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;AA8D3C,cAAc;AACd,qBAAa,KAAK;IAIV,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;IAXjB,aAAa;IACb,MAAM,CAAC,QAAQ,CAAC,aAAa,OAAO;;IAEhC,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,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"}
package/dist/scope.js CHANGED
@@ -58,10 +58,10 @@ class ScopeProxyHandler {
58
58
  return createProxy(value, this.scope, [...this.path, p]);
59
59
  }
60
60
  }
61
+ /** 最大求值计数 */
62
+ const MAX_RECURSION = 500;
61
63
  /** 函数的执行环境 */
62
64
  export class Scope {
63
- /** 最大求值计数 */
64
- static { this.MAX_RECURSION = 500; }
65
65
  constructor(
66
66
  /** 生成环境的工厂函数 */
67
67
  scope = null,
@@ -181,7 +181,7 @@ export class Scope {
181
181
  }
182
182
  /** 表达式递归求值 */
183
183
  eval(expression, path) {
184
- if (this.evalCounter >= Scope.MAX_RECURSION) {
184
+ if (this.evalCounter >= MAX_RECURSION) {
185
185
  this.evalCounter = 0;
186
186
  throw new Error(`Execution recursion exceeds limit`);
187
187
  }
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/dist/type.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { VmValue, VmValueMap } from '@mirascript/mirascript';
2
+ import { convert } from '@mirascript/mirascript/subtle';
2
3
  /** 类型信息 */
3
4
  export type TypeInfo = 'string' | 'number' | 'boolean';
4
5
  /** 类型映射 */
@@ -6,25 +7,36 @@ type TypeMap = VmValueMap & {
6
7
  s: string;
7
8
  f: number;
8
9
  b: boolean;
10
+ '': VmValue;
9
11
  };
10
12
  /** Ts 类型 */
11
- export type TsTypeOf<T extends TypeInfo | LegacyType> = TypeMap[T];
13
+ export type TsTypeOf<T extends TypeInfo | LegacyType | '', I extends VmValue = VmValue> = T extends '' ? I : TypeMap[T];
12
14
  /** 兼容的旧类型 */
13
15
  export type LegacyType = 's' | 'f' | 'b';
14
16
  /** 类型信息 */
15
17
  export declare namespace TypeInfo {
16
18
  /** 解析类型 */
17
- function parse(type: TypeInfo | LegacyType): TypeInfo;
19
+ export function parse(type: TypeInfo | LegacyType): TypeInfo;
18
20
  /** 判断类型 */
19
- function is<T extends TypeInfo | LegacyType>(value: VmValue | undefined, type: T): value is TsTypeOf<T>;
21
+ export function is<T extends TypeInfo | LegacyType>(value: VmValue | undefined, type: T): value is TsTypeOf<T>;
20
22
  /** 转换类型 */
21
- function to<T extends TypeInfo | LegacyType>(value: VmValue | undefined, type: T): TsTypeOf<T>;
22
- /** 转换为字符串 */
23
- function toString(value: VmValue | undefined): string;
24
- /** 转换为数字 */
25
- function toNumber(value: VmValue | undefined): number;
26
- /** 转换为布尔值 */
27
- function toBoolean(value: VmValue | undefined): boolean;
23
+ export function to<T extends TypeInfo | LegacyType | '', I extends VmValue = VmValue, F = undefined>(value: I | undefined, type: T, fallback?: F): TsTypeOf<T> | Exclude<F, undefined>;
24
+ /** 不转换 */
25
+ function identity<T extends VmValue>(value: T | undefined): T | null;
26
+ /** 获取转换器 */
27
+ type Converters = {
28
+ string: typeof convert.toString;
29
+ s: typeof convert.toString;
30
+ number: typeof convert.toNumber;
31
+ f: typeof convert.toNumber;
32
+ boolean: typeof convert.toBoolean;
33
+ b: typeof convert.toBoolean;
34
+ '': typeof identity;
35
+ };
36
+ /** 获取转换器 */
37
+ export function converter<T extends TypeInfo | LegacyType | ''>(type: T): Converters[T];
38
+ export const toBoolean: typeof convert.toBoolean, toFormat: typeof convert.toFormat, toNumber: typeof convert.toNumber, toString: typeof convert.toString;
39
+ export {};
28
40
  }
29
41
  export {};
30
42
  //# sourceMappingURL=type.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAI5E,WAAW;AACX,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAKvD,WAAW;AACX,KAAK,OAAO,GAAG,UAAU,GAAG;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,OAAO,CAAC;CACd,CAAC;AAEF,YAAY;AACZ,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;AAEnE,aAAa;AACb,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzC,WAAW;AACX,yBAAiB,QAAQ,CAAC;IACtB,WAAW;IACX,SAAgB,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAK3D;IACD,WAAW;IACX,SAAgB,EAAE,CAAC,CAAC,SAAS,QAAQ,GAAG,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAe7G;IAED,WAAW;IACX,SAAgB,EAAE,CAAC,CAAC,SAAS,QAAQ,GAAG,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAmBpG;IAED,aAAa;IACb,SAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAE3D;IAED,YAAY;IACZ,SAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAE3D;IAED,aAAa;IACb,SAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAE7D;CACJ"}
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAY,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAExD,WAAW;AACX,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAKvD,WAAW;AACX,KAAK,OAAO,GAAG,UAAU,GAAG;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,OAAO,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,YAAY;AACZ,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,QAAQ,GAAG,UAAU,GAAG,EAAE,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAExH,aAAa;AACb,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEzC,WAAW;AACX,yBAAiB,QAAQ,CAAC;IACtB,WAAW;IACX,MAAM,UAAU,KAAK,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAK3D;IACD,WAAW;IACX,MAAM,UAAU,EAAE,CAAC,CAAC,SAAS,QAAQ,GAAG,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,CAe7G;IAED,WAAW;IACX,MAAM,UAAU,EAAE,CAAC,CAAC,SAAS,QAAQ,GAAG,UAAU,GAAG,EAAE,EAAE,CAAC,SAAS,OAAO,GAAG,OAAO,EAAE,CAAC,GAAG,SAAS,EAC/F,KAAK,EAAE,CAAC,GAAG,SAAS,EACpB,IAAI,EAAE,CAAC,EACP,QAAQ,CAAC,EAAE,CAAC,GACb,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAGrC;IAED,UAAU;IACV,SAAS,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,IAAI,CAEnE;IAED,YAAY;IACZ,KAAK,UAAU,GAAG;QACd,MAAM,EAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;QAChC,CAAC,EAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;QAC3B,MAAM,EAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;QAChC,CAAC,EAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;QAC3B,OAAO,EAAE,OAAO,OAAO,CAAC,SAAS,CAAC;QAClC,CAAC,EAAE,OAAO,OAAO,CAAC,SAAS,CAAC;QAC5B,EAAE,EAAE,OAAO,QAAQ,CAAC;KACvB,CAAC;IACF,YAAY;IACZ,MAAM,UAAU,SAAS,CAAC,CAAC,SAAS,QAAQ,GAAG,UAAU,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAgBtF;IAED,MAAM,CAAC,MAAQ,SAAS,4BAAE,QAAQ,2BAAE,QAAQ,2BAAE,QAAQ,yBAAY,CAAC;;CACtE"}
package/dist/type.js CHANGED
@@ -1,5 +1,4 @@
1
- import { lib } from '@mirascript/mirascript/subtle';
2
- const { to_string, to_number, to_boolean } = lib;
1
+ import { convert } from '@mirascript/mirascript/subtle';
3
2
  const x = 'boolean';
4
3
  x;
5
4
  /** 类型信息 */
@@ -35,40 +34,34 @@ export var TypeInfo;
35
34
  }
36
35
  TypeInfo.is = is;
37
36
  /** 转换类型 */
38
- function to(value, type) {
39
- value ??= null;
40
- if (!type)
41
- return value;
37
+ function to(value, type, fallback) {
38
+ const c = converter(type);
39
+ return c(value, fallback);
40
+ }
41
+ TypeInfo.to = to;
42
+ /** 不转换 */
43
+ function identity(value) {
44
+ return value ?? null;
45
+ }
46
+ /** 获取转换器 */
47
+ function converter(type) {
48
+ // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
42
49
  switch (type) {
43
50
  case 'b':
44
51
  case 'boolean':
45
- return toBoolean(value);
52
+ return TypeInfo.toBoolean;
46
53
  case 'f':
47
54
  case 'number':
48
- return toNumber(value);
55
+ return TypeInfo.toNumber;
49
56
  case 's':
50
57
  case 'string':
51
- return toString(value);
58
+ return TypeInfo.toString;
52
59
  default:
53
60
  (type);
54
- return value;
61
+ return identity;
55
62
  }
56
63
  }
57
- TypeInfo.to = to;
58
- /** 转换为字符串 */
59
- function toString(value) {
60
- return to_string(value ?? null);
61
- }
62
- TypeInfo.toString = toString;
63
- /** 转换为数字 */
64
- function toNumber(value) {
65
- return to_number(value ?? null);
66
- }
67
- TypeInfo.toNumber = toNumber;
68
- /** 转换为布尔值 */
69
- function toBoolean(value) {
70
- return to_boolean(value ?? null);
71
- }
72
- TypeInfo.toBoolean = toBoolean;
64
+ TypeInfo.converter = converter;
65
+ TypeInfo.toBoolean = convert.toBoolean, TypeInfo.toFormat = convert.toFormat, TypeInfo.toNumber = convert.toNumber, TypeInfo.toString = convert.toString;
73
66
  })(TypeInfo || (TypeInfo = {}));
74
67
  //# sourceMappingURL=type.js.map
package/dist/type.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AACpD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;AAKjD,MAAM,CAAC,GAAa,SAAS,CAAC;AAC9B,CAAoB,CAAC;AAerB,WAAW;AACX,MAAM,KAAW,QAAQ,CA8DxB;AA9DD,WAAiB,QAAQ;IACrB,WAAW;IACX,SAAgB,KAAK,CAAC,IAA2B;QAC7C,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QACvD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QACvD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzD,MAAM,IAAI,SAAS,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IALe,cAAK,QAKpB,CAAA;IACD,WAAW;IACX,SAAgB,EAAE,CAAkC,KAA0B,EAAE,IAAO;QACnF,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,GAAG,CAAC;YACT,KAAK,SAAS;gBACV,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;YACtC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;YACrC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;YACrC;gBACI,CAAC,IAAI,CAAiB,CAAC;gBACvB,OAAO,KAAK,CAAC;QACrB,CAAC;IACL,CAAC;IAfe,WAAE,KAejB,CAAA;IAED,WAAW;IACX,SAAgB,EAAE,CAAkC,KAA0B,EAAE,IAAO;QAGnF,KAAK,KAAK,IAAI,CAAC;QACf,IAAI,CAAC,IAAI;YAAE,OAAO,KAAU,CAAC;QAC7B,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,GAAG,CAAC;YACT,KAAK,SAAS;gBACV,OAAO,SAAS,CAAC,KAAK,CAAM,CAAC;YACjC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,QAAQ,CAAC,KAAK,CAAM,CAAC;YAChC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,QAAQ,CAAC,KAAK,CAAM,CAAC;YAChC;gBACI,CAAC,IAAI,CAAiB,CAAC;gBACvB,OAAO,KAAU,CAAC;QAC1B,CAAC;IACL,CAAC;IAnBe,WAAE,KAmBjB,CAAA;IAED,aAAa;IACb,SAAgB,QAAQ,CAAC,KAA0B;QAC/C,OAAO,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IACpC,CAAC;IAFe,iBAAQ,WAEvB,CAAA;IAED,YAAY;IACZ,SAAgB,QAAQ,CAAC,KAA0B;QAC/C,OAAO,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IACpC,CAAC;IAFe,iBAAQ,WAEvB,CAAA;IAED,aAAa;IACb,SAAgB,SAAS,CAAC,KAA0B;QAChD,OAAO,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IACrC,CAAC;IAFe,kBAAS,YAExB,CAAA;AACL,CAAC,EA9DgB,QAAQ,KAAR,QAAQ,QA8DxB"}
1
+ {"version":3,"file":"type.js","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAKxD,MAAM,CAAC,GAAa,SAAS,CAAC;AAC9B,CAAoB,CAAC;AAgBrB,WAAW;AACX,MAAM,KAAW,QAAQ,CAuExB;AAvED,WAAiB,QAAQ;IACrB,WAAW;IACX,SAAgB,KAAK,CAAC,IAA2B;QAC7C,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QACvD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,QAAQ,CAAC;QACvD,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACzD,MAAM,IAAI,SAAS,CAAC,iBAAiB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IALe,cAAK,QAKpB,CAAA;IACD,WAAW;IACX,SAAgB,EAAE,CAAkC,KAA0B,EAAE,IAAO;QACnF,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,GAAG,CAAC;YACT,KAAK,SAAS;gBACV,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;YACtC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;YACrC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;YACrC;gBACI,CAAC,IAAI,CAAiB,CAAC;gBACvB,OAAO,KAAK,CAAC;QACrB,CAAC;IACL,CAAC;IAfe,WAAE,KAejB,CAAA;IAED,WAAW;IACX,SAAgB,EAAE,CACd,KAAoB,EACpB,IAAO,EACP,QAAY;QAEZ,MAAM,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAQ,CAA6B,CAAC,KAAK,EAAE,QAAQ,CAAgB,CAAC;IAC1E,CAAC;IAPe,WAAE,KAOjB,CAAA;IAED,UAAU;IACV,SAAS,QAAQ,CAAoB,KAAoB;QACrD,OAAO,KAAK,IAAI,IAAI,CAAC;IACzB,CAAC;IAYD,YAAY;IACZ,SAAgB,SAAS,CAAuC,IAAO;QACnE,0EAA0E;QAC1E,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,GAAG,CAAC;YACT,KAAK,SAAS;gBACV,OAAO,SAAA,SAA0B,CAAC;YACtC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,SAAA,QAAyB,CAAC;YACrC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,SAAA,QAAyB,CAAC;YACrC;gBACI,CAAC,IAAI,CAAc,CAAC;gBACpB,OAAO,QAAyB,CAAC;QACzC,CAAC;IACL,CAAC;IAhBe,kBAAS,YAgBxB,CAAA;IAEc,kBAAS,GAAmC,OAAO,UAA1C,EAAE,iBAAQ,GAAyB,OAAO,SAAhC,EAAE,iBAAQ,GAAe,OAAO,SAAtB,EAAE,iBAAQ,GAAK,OAAO,SAAZ,CAAa;AACvE,CAAC,EAvEgB,QAAQ,KAAR,QAAQ,QAuExB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudpss/expression",
3
- "version": "0.6.0-alpha.14",
3
+ "version": "0.6.0-alpha.16",
4
4
  "author": "CloudPSS",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,9 +12,9 @@
12
12
  "./*": "./dist/*.js"
13
13
  },
14
14
  "dependencies": {
15
- "@mirascript/mirascript": "^0.1.13",
15
+ "@mirascript/mirascript": "^0.1.18",
16
16
  "klona": "^2.0.6",
17
- "lru-cache": "^11.2.2",
17
+ "lru-cache": "^11.2.4",
18
18
  "mathjs": "^15.1.0",
19
19
  "type-fest": "^5.2.0"
20
20
  },
@@ -26,5 +26,5 @@ export type ArgumentValue = NonNullable<VmConst>;
26
26
 
27
27
  /** 未求值的参数表 */
28
28
  export type ArgumentMap<T extends Record<string, ArgumentValue> = Record<string, ArgumentValue>> = {
29
- [K in keyof T & string]?: ExpressionOrValue<NonNullable<T[K]>>;
29
+ [K in keyof T]?: ExpressionOrValue<NonNullable<T[K]>>;
30
30
  };
@@ -92,8 +92,10 @@ export function isChoice<V extends ChoiceArgumentValue = ChoiceArgumentValue>(va
92
92
  /**
93
93
  * 表示值为选择项的参数定义
94
94
  */
95
- export interface ChoiceParameter<V extends ChoiceArgumentValue = ChoiceArgumentValue>
96
- extends ParameterBase<'choice', V> {
95
+ export interface ChoiceParameter<V extends ChoiceArgumentValue = ChoiceArgumentValue> extends ParameterBase<
96
+ 'choice',
97
+ V
98
+ > {
97
99
  /**
98
100
  * 可选取值及其对应的说明文本
99
101
  */
@@ -102,8 +104,9 @@ export interface ChoiceParameter<V extends ChoiceArgumentValue = ChoiceArgumentV
102
104
  /**
103
105
  * 表示值为多选选择项的参数定义
104
106
  */
105
- export interface MultiSelectParameter<V extends readonly ChoiceArgumentValue[] = readonly ChoiceArgumentValue[]>
106
- extends ParameterBase<'multiSelect', V> {
107
+ export interface MultiSelectParameter<
108
+ V extends readonly ChoiceArgumentValue[] = readonly ChoiceArgumentValue[],
109
+ > extends ParameterBase<'multiSelect', V> {
107
110
  /**
108
111
  * 可选取值及其对应的说明文本
109
112
  */
@@ -113,8 +116,10 @@ export interface MultiSelectParameter<V extends readonly ChoiceArgumentValue[] =
113
116
  /**
114
117
  * 表示值为布尔量的参数定义
115
118
  */
116
- export interface LogicalParameter<V extends ChoiceArgumentValue = ChoiceArgumentValue>
117
- extends ParameterBase<'logical', V> {
119
+ export interface LogicalParameter<V extends ChoiceArgumentValue = ChoiceArgumentValue> extends ParameterBase<
120
+ 'logical',
121
+ V
122
+ > {
118
123
  /**
119
124
  * 可选取值及其对应的说明文本
120
125
  */
@@ -126,8 +131,10 @@ export interface LogicalParameter<V extends ChoiceArgumentValue = ChoiceArgument
126
131
  /**
127
132
  * 表示值为表格的参数定义
128
133
  */
129
- export interface TableParameter<V extends readonly ArgumentValue[] = readonly ArgumentValue[]>
130
- extends ParameterBase<'table', V> {
134
+ export interface TableParameter<V extends readonly ArgumentValue[] = readonly ArgumentValue[]> extends ParameterBase<
135
+ 'table',
136
+ V
137
+ > {
131
138
  /** 最小行数 */
132
139
  minRowCount?: number;
133
140
  /** 最大行数 */
@@ -1,6 +1,6 @@
1
1
  import { klona } from 'klona';
2
- import { isVmArray, type VmPrimitive, type VmValue } from '@mirascript/mirascript';
3
- import { Expression, isExpression } from '../expression.js';
2
+ import { isVmArray, isVmRecord, type VmPrimitive, type VmValue } from '@mirascript/mirascript';
3
+ import { Expression, isExpression, type ExpressionOrValue } from '../expression.js';
4
4
  import type { ChoiceParameterType, Parameter, ParameterMap } from './parameter.js';
5
5
  import { TypeInfo } from '../type.js';
6
6
  import type { ArgumentMap, ArgumentValue } from './argument.js';
@@ -11,7 +11,9 @@ const { isArray } = Array;
11
11
  export function enumType(definition: Pick<ParameterMap[ChoiceParameterType], 'type' | 'choices'>): TypeInfo | null {
12
12
  const { choices } = definition;
13
13
  if (typeof choices == 'function' || isExpression(choices)) return null;
14
+ // 首先根据参数类型确定默认类型
14
15
  let defaultType: TypeInfo = definition.type === 'logical' ? 'boolean' : 'number';
16
+ // 然后根据默认值调整默认类型
15
17
  if ('value' in definition) {
16
18
  const { value } = definition;
17
19
  if (typeof value == 'boolean') defaultType = 'boolean';
@@ -23,6 +25,7 @@ export function enumType(definition: Pick<ParameterMap[ChoiceParameterType], 'ty
23
25
  let type: TypeInfo | null = null;
24
26
  for (const choice of choices) {
25
27
  const v = choice?.key;
28
+ // 选项值为空时,使用默认类型
26
29
  const t = v == null ? defaultType : typeof v;
27
30
  if (t === 'string') {
28
31
  if (type == null) type = 'string';
@@ -42,15 +45,18 @@ export function enumType(definition: Pick<ParameterMap[ChoiceParameterType], 'ty
42
45
 
43
46
  /**
44
47
  * 转换参数值的类型,不回退到 {@link Parameter.value} 提供的默认值
48
+ * 转换失败时返回 null
45
49
  */
46
- export function toArgumentValue<V extends ArgumentValue>(value: VmValue, definition: Parameter): V {
50
+ export function toArgumentValue<V extends ArgumentValue>(
51
+ value: VmValue | null | undefined,
52
+ definition: Parameter,
53
+ ): V | null {
47
54
  // 避免无效的 VmValue 导致错误
48
55
  value ??= null;
49
-
50
56
  switch (definition.type) {
51
57
  case 'real':
52
58
  case 'integer':
53
- return TypeInfo.toNumber(value) as V;
59
+ return TypeInfo.toNumber(value, null) as V;
54
60
  case 'text':
55
61
  case 'file':
56
62
  case 'code':
@@ -58,16 +64,16 @@ export function toArgumentValue<V extends ArgumentValue>(value: VmValue, definit
58
64
  case 'cssColor' as never:
59
65
  case 'cssBackground' as never:
60
66
  case 'resourceId' as never:
61
- return TypeInfo.toString(value) as V;
67
+ return TypeInfo.toString(value, null) as V;
62
68
 
63
69
  case 'choice':
64
70
  case 'logical': {
65
71
  if (value == null && Array.isArray(definition.choices) && definition.choices.length > 0) {
66
- value = definition.choices[0]?.key;
72
+ value = definition.choices[0]?.key as V;
67
73
  }
68
74
  const type = enumType(definition);
69
75
  if (!type) return value as V;
70
- return TypeInfo.to(value, type) as V;
76
+ return TypeInfo.to(value, type, null) as V;
71
77
  }
72
78
 
73
79
  case 'multiSelect': {
@@ -75,7 +81,13 @@ export function toArgumentValue<V extends ArgumentValue>(value: VmValue, definit
75
81
  if (v.length === 0) return v as V;
76
82
  const type = enumType(definition);
77
83
  if (!type) return v as V;
78
- return v.map((x) => TypeInfo.to(x, type)) as readonly VmPrimitive[] as V;
84
+ const to = TypeInfo.converter(type);
85
+ const ret: VmPrimitive[] = [];
86
+ for (const x of v) {
87
+ const r = to(x, null);
88
+ if (r != null) ret.push(r);
89
+ }
90
+ return ret as readonly VmPrimitive[] as V;
79
91
  }
80
92
 
81
93
  case 'table': {
@@ -84,7 +96,10 @@ export function toArgumentValue<V extends ArgumentValue>(value: VmValue, definit
84
96
  }
85
97
 
86
98
  case 'grouped':
87
- case 'record':
99
+ case 'record': {
100
+ if (!isVmRecord(value)) return null;
101
+ return value as V;
102
+ }
88
103
  default:
89
104
  return value as V;
90
105
  }
@@ -127,7 +142,7 @@ export function fillArgumentMap<T extends Record<string, ArgumentValue>>(
127
142
  if (!checkParameterDefinitions(definition)) return args;
128
143
 
129
144
  /** 参数键的类型 */
130
- type K = keyof T & string;
145
+ type K = keyof T;
131
146
  /** 参数值的类型 */
132
147
  type V = NonNullable<T[K]>;
133
148
  const keys = new Set(Object.keys(args) as K[]);
@@ -140,13 +155,13 @@ export function fillArgumentMap<T extends Record<string, ArgumentValue>>(
140
155
  const currentValue = keys.has(key) ? args[key] : undefined;
141
156
  if (currentValue == null) {
142
157
  // 使用默认值填充
143
- const defaultValue = param.value;
158
+ const defaultValue = param.value as ExpressionOrValue<V>;
144
159
  if (isExpression(defaultValue)) {
145
160
  args[key] = Expression<V>(defaultValue.source);
146
161
  } else {
147
162
  const value =
148
163
  defaultValue != null && typeof defaultValue == 'object' ? klona(defaultValue) : defaultValue;
149
- args[key] = toArgumentValue<V>(value, param);
164
+ args[key] = toArgumentValue<V>(value, param) ?? value;
150
165
  }
151
166
  } else {
152
167
  // 已存在的参数值
@@ -167,6 +182,7 @@ export function fillArgumentMap<T extends Record<string, ArgumentValue>>(
167
182
  // 删除多余的参数
168
183
  for (const key of keys) {
169
184
  // 保留特殊参数和私有字段
185
+ if (typeof key != 'string') continue;
170
186
  const k0 = key[0];
171
187
  if (k0 === '_' || k0 === '$' || k0 === '@' || k0 === 'ɵ') continue;
172
188
  delete args[key];
package/src/main.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { isVmFunction, isVmPrimitive, wrapToVmValue, type VmValue } from '@mirascript/mirascript';
2
- import { lib } from '@mirascript/mirascript/subtle';
2
+ import { serialize } from '@mirascript/mirascript/subtle';
3
3
  import { defaultOptions, type Logger, type Options } from './interface.js';
4
4
  import { parse } from './parser.js';
5
5
  import { analyze, type AccessChain } from './analyze.js';
6
6
  import {
7
7
  type CompiledExpression,
8
- Expression,
8
+ type Expression,
9
9
  type ExpressionFunction,
10
10
  type ExpressionOrValue,
11
11
  type ExpressionSource,
@@ -30,7 +30,6 @@ import {
30
30
  } from './definitions.js';
31
31
  const { isArray } = Array;
32
32
  const { defineProperty } = Object;
33
- const { to_string } = lib;
34
33
 
35
34
  /** 选项类型 */
36
35
  export type EvaluatedChoices<T extends ChoiceParameterType> = {
@@ -80,12 +79,17 @@ export class Evaluator {
80
79
  const value = parse(this, expression.source, throws, false);
81
80
  const tag = expression[ExpressionTag];
82
81
  const type = tag ? TypeInfo.parse(tag) : '';
83
- const compiled: ExpressionFunction<T> = (scope, evaluator) => {
84
- const ret = evaluate<T>(evaluator, value, scope);
85
- if (ret == null) return null;
86
- if (!type) return ret;
87
- return TypeInfo.to(ret, type) as T;
88
- };
82
+ let compiled: ExpressionFunction<T>;
83
+ if (!type) {
84
+ compiled = (scope, evaluator) => evaluate<T>(evaluator, value, scope);
85
+ } else {
86
+ const to = TypeInfo.converter(type);
87
+ compiled = (scope, evaluator) => {
88
+ const ret = evaluate<T>(evaluator, value, scope);
89
+ if (ret == null) return null;
90
+ return to(ret) as T;
91
+ };
92
+ }
89
93
  defineProperty(compiled, ExpressionTag, { value: type, enumerable: true });
90
94
  defineProperty(compiled, 'source', { value: value.source, enumerable: true });
91
95
  return compiled as CompiledExpression<T>;
@@ -98,7 +102,7 @@ export class Evaluator {
98
102
  const value = parse(this, template, throws, true);
99
103
  const result = evaluate<string>(this, value, scope ?? this.scope) ?? template;
100
104
  if (typeof result == 'string') return result;
101
- return to_string(result);
105
+ return TypeInfo.toString(result);
102
106
  }
103
107
 
104
108
  /** 求值 */
@@ -190,14 +194,15 @@ export class Evaluator {
190
194
  scope: Scope | null | undefined,
191
195
  defaults = true,
192
196
  ): boolean {
193
- if (typeof condition == 'boolean') return condition;
194
197
  if (condition == null) return defaults;
195
- condition = to_string(condition).trim() as ConditionExpression & string;
198
+ if (typeof condition == 'boolean') return condition;
196
199
  if (condition === '') return defaults;
197
200
  if (condition === 'true') return true;
198
201
  if (condition === 'false') return false;
199
202
  try {
200
- return this.evaluate(Expression(condition, 'boolean'), scope, defaults);
203
+ const result = this.evaluateSource(condition, scope, defaults);
204
+ if (typeof result == 'boolean') return result;
205
+ throw new Error(`Condition evaluates to \`${serialize(result)}\``);
201
206
  } catch (ex) {
202
207
  if (scope?.throws) {
203
208
  throw ex;
@@ -269,8 +274,10 @@ export class Evaluator {
269
274
  ): V {
270
275
  // 默认值有可能为表达式,因此需要先填充再求值
271
276
  expression ??= definition.value as ExpressionOrValue<V>;
277
+ // 求值失败时返回默认值
272
278
  const result = this.evaluate<V>(expression, scope, definition.value as V);
273
- return toArgumentValue<V>(result, definition);
279
+ // 转换失败时返回转换前的值
280
+ return toArgumentValue<V>(result, definition) ?? result;
274
281
  }
275
282
  /** 求参数表的所有参数值 */
276
283
  evaluateArgs<T extends Record<string, ArgumentValue>>(
@@ -1,3 +1,5 @@
1
+ import { isVmPrimitive, type VmValue } from '@mirascript/mirascript';
2
+ import { operations, serialize, serializeRecordKey } from '@mirascript/mirascript/subtle';
1
3
  import {
2
4
  type ConstantNode,
3
5
  isConstantNode,
@@ -14,8 +16,6 @@ import type { Result } from './interface.js';
14
16
  import { migrateAtomic, migrateExpr } from './node.js';
15
17
  import type { State } from './state.js';
16
18
  import { len, unsupportedNode } from './utils.js';
17
- import { isVmPrimitive, type VmValue } from '@mirascript/mirascript';
18
- import { operations, serialize, serializePropName } from '@mirascript/mirascript/subtle';
19
19
 
20
20
  /** 常量访问 */
21
21
  function constIndexing(node: ConstantNode) {
@@ -57,7 +57,7 @@ function accessChain(
57
57
  const obj = migrateExpr(state, object);
58
58
  const chain = index.map((i) => {
59
59
  if (typeof i == 'number') return `[${i}]`;
60
- const s = serializePropName(i);
60
+ const s = serializeRecordKey(i);
61
61
  if (s !== i) return `[${s}]`;
62
62
  return `.${s}`;
63
63
  });
@@ -6,7 +6,6 @@ import {
6
6
  isObjectNode,
7
7
  type FunctionNode,
8
8
  type MathNode,
9
- isOperatorNode,
10
9
  } from 'mathjs';
11
10
  import type { Options, Result } from './interface.js';
12
11
  import type { State } from './state.js';
@@ -14,6 +13,7 @@ import { constantValue, equalText, globalFnName, len, symbolName } from './utils
14
13
  import { migrateAtomic, migrateExpr, migrateNode } from './node.js';
15
14
  import { concat } from './concat.js';
16
15
  import { toNumber, toString } from './to-type.js';
16
+ import { isVmArray, isVmPrimitive } from '@mirascript/mirascript';
17
17
 
18
18
  const EXACT_UNARY_FUNCTION = new Map<string, Result['type']>([
19
19
  // 只支持标量的 mathjs 函数
@@ -71,6 +71,11 @@ function migrateFunctionCall(
71
71
  type: EXACT_UNARY_FUNCTION.get(fnName)!,
72
72
  code: `${fnName}(${arg.code})`,
73
73
  };
74
+ } else if (fnName === 'random' && args.length === 0) {
75
+ return {
76
+ type: 'number',
77
+ code: `${globalFnName(state, 'random')}()`,
78
+ };
74
79
  } else if (fnName === 're' || fnName === 'im') {
75
80
  const m = migrateAtomic(state, args[0]!);
76
81
  state.err(`不支持复数`);
@@ -264,26 +269,43 @@ function migrateFunctionCall(
264
269
  type: 'string',
265
270
  code: `${g('to_string')}(${inner.code})`,
266
271
  };
267
- } else if (
268
- fnName === 'sum' &&
269
- args.length === 1 &&
270
- isArrayNode(args[0]) &&
271
- args[0].items.length === 1 &&
272
- isOperatorNode(args[0].items[0]) &&
273
- ['>=', '>', '<=', '<', '==', '!='].includes(args[0].items[0].op) &&
274
- typeof constantValue(args[0].items[0].args[1]!) === 'number'
275
- ) {
276
- // sum([a > v])
277
- const a = migrateAtomic(state, args[0].items[0].args[0]!);
278
- const v = migrateAtomic(state, args[0].items[0].args[1]!);
272
+ } else if (fnName === 'sum' || fnName === 'prod') {
273
+ const newFnName = fnName === 'sum' ? 'sum' : 'product';
274
+ if (args.length !== 1) {
275
+ return {
276
+ type: 'number',
277
+ code: `${g(newFnName)}(${args.map((a) => migrateAtomic(state, a).code).join(', ')})`,
278
+ };
279
+ }
280
+ const arg = migrateAtomic(state, args[0]!);
281
+ if (arg.literal) {
282
+ if (isVmPrimitive(arg.literal)) {
283
+ return {
284
+ type: 'number',
285
+ code: `${g(newFnName)}(${arg.code})`,
286
+ };
287
+ }
288
+ if (isVmArray(arg.literal) && arg.literal.every((v) => isVmPrimitive(v))) {
289
+ return {
290
+ type: 'number',
291
+ code: `${g(newFnName)}(${arg.code})`,
292
+ };
293
+ }
294
+ }
295
+ if (arg.type === 'array' || !arg.type) {
296
+ return {
297
+ type: 'number',
298
+ code: `${g(newFnName)}(${arg.code}::${g('flatten')}())`,
299
+ };
300
+ }
279
301
  return {
280
302
  type: 'number',
281
- code: `${g('sum')}(${g('map')}(${a.code}, fn { it ${args[0].items[0].op} ${v.code} }))`,
303
+ code: `${g(newFnName)}(${arg.code})`,
282
304
  };
283
305
  }
284
306
 
285
307
  return call(state, node, (fn, args) => {
286
- const fun = state.globals.get(fnName);
308
+ const fun = state.globals.has(fnName) ? state.globals.get(fnName) : undefined;
287
309
  if (typeof fun === 'function') {
288
310
  if (args.some((a) => a.type !== 'number' && a.type !== 'boolean' && a.type !== 'string')) {
289
311
  state.warn(`函数行为可能不一致: ${fnName}`);