@cloudpss/expression 0.6.0-alpha.9 → 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.
Files changed (157) hide show
  1. package/dist/analyze.d.ts +6 -3
  2. package/dist/analyze.d.ts.map +1 -1
  3. package/dist/analyze.js +13 -33
  4. package/dist/analyze.js.map +1 -1
  5. package/dist/definitions/argument.d.ts +3 -11
  6. package/dist/definitions/argument.d.ts.map +1 -1
  7. package/dist/definitions/constraint.d.ts +2 -2
  8. package/dist/definitions/constraint.d.ts.map +1 -1
  9. package/dist/definitions/constraint.js +1 -1
  10. package/dist/definitions/constraint.js.map +1 -1
  11. package/dist/definitions/parameter-group.js +4 -4
  12. package/dist/definitions/parameter-group.js.map +1 -1
  13. package/dist/definitions/parameter.d.ts +22 -14
  14. package/dist/definitions/parameter.d.ts.map +1 -1
  15. package/dist/definitions/parameter.js +10 -1
  16. package/dist/definitions/parameter.js.map +1 -1
  17. package/dist/definitions/utils.d.ts +28 -0
  18. package/dist/definitions/utils.d.ts.map +1 -0
  19. package/dist/definitions/utils.js +272 -0
  20. package/dist/definitions/utils.js.map +1 -0
  21. package/dist/definitions/variable.js +1 -1
  22. package/dist/definitions/variable.js.map +1 -1
  23. package/dist/definitions.d.ts +1 -2
  24. package/dist/definitions.d.ts.map +1 -1
  25. package/dist/definitions.js +1 -1
  26. package/dist/definitions.js.map +1 -1
  27. package/dist/eval.d.ts +3 -5
  28. package/dist/eval.d.ts.map +1 -1
  29. package/dist/eval.js +12 -20
  30. package/dist/eval.js.map +1 -1
  31. package/dist/expression.d.ts +10 -4
  32. package/dist/expression.d.ts.map +1 -1
  33. package/dist/expression.js +6 -6
  34. package/dist/expression.js.map +1 -1
  35. package/dist/index.d.ts +3 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +1 -0
  38. package/dist/index.js.map +1 -1
  39. package/dist/interface.d.ts +30 -0
  40. package/dist/interface.d.ts.map +1 -0
  41. package/dist/interface.js +6 -0
  42. package/dist/interface.js.map +1 -0
  43. package/dist/main.d.ts +41 -28
  44. package/dist/main.d.ts.map +1 -1
  45. package/dist/main.js +165 -149
  46. package/dist/main.js.map +1 -1
  47. package/dist/migrate.d.ts +1 -1
  48. package/dist/migrate.d.ts.map +1 -1
  49. package/dist/migrate.js +25 -4
  50. package/dist/migrate.js.map +1 -1
  51. package/dist/migrator/access.d.ts.map +1 -1
  52. package/dist/migrator/access.js +64 -29
  53. package/dist/migrator/access.js.map +1 -1
  54. package/dist/migrator/call.d.ts.map +1 -1
  55. package/dist/migrator/call.js +298 -201
  56. package/dist/migrator/call.js.map +1 -1
  57. package/dist/migrator/concat.d.ts.map +1 -1
  58. package/dist/migrator/concat.js +15 -2
  59. package/dist/migrator/concat.js.map +1 -1
  60. package/dist/migrator/function.d.ts +6 -0
  61. package/dist/migrator/function.d.ts.map +1 -0
  62. package/dist/migrator/function.js +25 -0
  63. package/dist/migrator/function.js.map +1 -0
  64. package/dist/migrator/interface.d.ts +3 -1
  65. package/dist/migrator/interface.d.ts.map +1 -1
  66. package/dist/migrator/interface.js.map +1 -1
  67. package/dist/migrator/node.d.ts.map +1 -1
  68. package/dist/migrator/node.js +55 -7
  69. package/dist/migrator/node.js.map +1 -1
  70. package/dist/migrator/operator.d.ts.map +1 -1
  71. package/dist/migrator/operator.js +107 -60
  72. package/dist/migrator/operator.js.map +1 -1
  73. package/dist/migrator/serialize.d.ts +4 -0
  74. package/dist/migrator/serialize.d.ts.map +1 -0
  75. package/dist/migrator/serialize.js +21 -0
  76. package/dist/migrator/serialize.js.map +1 -0
  77. package/dist/migrator/special.d.ts.map +1 -1
  78. package/dist/migrator/special.js +31 -0
  79. package/dist/migrator/special.js.map +1 -1
  80. package/dist/migrator/state.d.ts +4 -4
  81. package/dist/migrator/state.d.ts.map +1 -1
  82. package/dist/migrator/state.js +29 -31
  83. package/dist/migrator/state.js.map +1 -1
  84. package/dist/migrator/symbol.d.ts.map +1 -1
  85. package/dist/migrator/symbol.js +34 -12
  86. package/dist/migrator/symbol.js.map +1 -1
  87. package/dist/migrator/to-type.d.ts.map +1 -1
  88. package/dist/migrator/to-type.js +21 -4
  89. package/dist/migrator/to-type.js.map +1 -1
  90. package/dist/migrator/utils.d.ts +6 -0
  91. package/dist/migrator/utils.d.ts.map +1 -1
  92. package/dist/migrator/utils.js +48 -1
  93. package/dist/migrator/utils.js.map +1 -1
  94. package/dist/parser.d.ts +2 -2
  95. package/dist/parser.d.ts.map +1 -1
  96. package/dist/parser.js +27 -8
  97. package/dist/parser.js.map +1 -1
  98. package/dist/re-exports.d.ts +4 -0
  99. package/dist/re-exports.d.ts.map +1 -0
  100. package/dist/re-exports.js +3 -0
  101. package/dist/re-exports.js.map +1 -0
  102. package/dist/scope.d.ts +16 -17
  103. package/dist/scope.d.ts.map +1 -1
  104. package/dist/scope.js +127 -66
  105. package/dist/scope.js.map +1 -1
  106. package/dist/type.d.ts +22 -10
  107. package/dist/type.d.ts.map +1 -1
  108. package/dist/type.js +21 -24
  109. package/dist/type.js.map +1 -1
  110. package/package.json +8 -5
  111. package/src/analyze.ts +20 -39
  112. package/src/definitions/argument.ts +3 -13
  113. package/src/definitions/constraint.ts +3 -3
  114. package/src/definitions/parameter-group.ts +4 -4
  115. package/src/definitions/parameter.ts +47 -24
  116. package/src/definitions/utils.ts +288 -0
  117. package/src/definitions/variable.ts +1 -1
  118. package/src/definitions.ts +1 -28
  119. package/src/eval.ts +16 -25
  120. package/src/expression.ts +16 -8
  121. package/src/index.ts +3 -1
  122. package/src/interface.ts +35 -0
  123. package/src/main.ts +232 -200
  124. package/src/migrate.ts +27 -4
  125. package/src/migrator/access.ts +67 -37
  126. package/src/migrator/call.ts +287 -190
  127. package/src/migrator/concat.ts +15 -2
  128. package/src/migrator/function.ts +27 -0
  129. package/src/migrator/interface.ts +3 -1
  130. package/src/migrator/node.ts +56 -6
  131. package/src/migrator/operator.ts +110 -64
  132. package/src/migrator/serialize.ts +21 -0
  133. package/src/migrator/special.ts +31 -0
  134. package/src/migrator/state.ts +31 -34
  135. package/src/migrator/symbol.ts +33 -12
  136. package/src/migrator/to-type.ts +23 -4
  137. package/src/migrator/utils.ts +48 -1
  138. package/src/parser.ts +33 -8
  139. package/src/re-exports.ts +47 -0
  140. package/src/scope.ts +146 -77
  141. package/src/type.ts +40 -25
  142. package/tests/analyze.ts +45 -6
  143. package/tests/compile.ts +65 -0
  144. package/tests/condition.ts +33 -17
  145. package/tests/definition.ts +237 -18
  146. package/tests/eval-complex.ts +79 -13
  147. package/tests/eval.ts +59 -12
  148. package/tests/import.ts +21 -7
  149. package/tests/main.ts +58 -0
  150. package/tests/migrate.ts +317 -0
  151. package/tests/scope.ts +3 -3
  152. package/tests/template.ts +36 -0
  153. package/dist/context.d.ts +0 -41
  154. package/dist/context.d.ts.map +0 -1
  155. package/dist/context.js +0 -18
  156. package/dist/context.js.map +0 -1
  157. package/src/context.ts +0 -54
package/dist/scope.js CHANGED
@@ -1,35 +1,50 @@
1
- import { createVmContext, isVmExtern } from '@mirascript/mirascript';
1
+ import { createVmContext, isVmWrapper, isVmFunction, } from '@mirascript/mirascript';
2
2
  import { ExpressionTag, isExpression, } from './expression.js';
3
- import { DEFAULTS, evaluateEval } from './eval.js';
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
- return isExpression(value) || (value != null && typeof value == 'object');
20
+ if (value == null || (typeof value != 'object' && typeof value != 'function')) {
21
+ return false;
22
+ }
23
+ if (isExpression(value)) {
24
+ return true;
25
+ }
26
+ if (isVmWrapper(value) || isVmFunction(value) || isSpecialHostObject(value)) {
27
+ return false;
28
+ }
29
+ return true;
11
30
  }
12
31
  /** 创建代理对象 */
13
32
  function createProxy(value, scope, path) {
14
- // 先检查 isExpression,因为 'function' 也有可能是 Expression
15
33
  if (isExpression(value)) {
16
34
  return scope.eval(value, path);
17
35
  }
18
36
  if (typeof value != 'object' || value == null) {
19
37
  return value;
20
38
  }
21
- if (value instanceof Date ||
22
- value instanceof Promise ||
23
- value instanceof RegExp ||
24
- ArrayBuffer.isView(value) ||
25
- value instanceof ArrayBuffer ||
26
- (typeof SharedArrayBuffer != 'undefined' && value instanceof SharedArrayBuffer)) {
27
- 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));
28
44
  }
29
- return new Proxy(value, new ScopeProxyHandler(scope, path));
30
45
  }
31
46
  /** 函数的执行环境 */
32
- class ScopeProxyHandler {
47
+ class ArrayScopeProxyHandler {
33
48
  constructor(scope, path) {
34
49
  this.scope = scope;
35
50
  this.path = path;
@@ -42,22 +57,39 @@ class ScopeProxyHandler {
42
57
  return target;
43
58
  }
44
59
  const value = Reflect.get(target, p);
45
- if (!needsProxy(value)) {
60
+ if (typeof p == 'symbol' || String(Number(p)) !== p || !needsProxy(value)) {
46
61
  return value;
47
62
  }
48
- if (isVmExtern(target)) {
49
- return createProxy(value, this.scope, this.path);
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)) {
81
+ return value;
50
82
  }
51
83
  return createProxy(value, this.scope, [...this.path, p]);
52
84
  }
53
85
  }
86
+ /** 最大求值计数 */
87
+ const MAX_RECURSION = 500;
54
88
  /** 函数的执行环境 */
55
89
  export class Scope {
56
- /** 最大求值计数 */
57
- static { this.MAX_RECURSION = 500; }
58
90
  constructor(
59
91
  /** 生成环境的工厂函数 */
60
- scope,
92
+ scope = null,
61
93
  /** 求值失败是否抛异常 */
62
94
  throws = true,
63
95
  /** 执行环境名称 */
@@ -65,51 +97,84 @@ export class Scope {
65
97
  this.scope = scope;
66
98
  this.throws = throws;
67
99
  this.name = name;
68
- /** 上下文 */
69
- this.context = null;
100
+ /** 枚举环境中的值 */
101
+ this.enumerator = null;
102
+ /** 描述环境中的值 */
103
+ this.describer = null;
104
+ /** 执行器上下文 */
105
+ this.evaluator = null;
70
106
  /** 求值计数 */
71
107
  this.evalCounter = 0;
108
+ /** 函数的执行环境,惰性求值 */
109
+ this._proxy = null;
110
+ }
111
+ /** 重置执行器 */
112
+ reset(evaluator) {
113
+ const oldEvaluator = this.evaluator;
114
+ const oldCounter = this.evalCounter;
115
+ this.evaluator = evaluator;
116
+ this.evalCounter = 0;
117
+ return () => {
118
+ this.evaluator = oldEvaluator;
119
+ this.evalCounter = oldCounter;
120
+ };
121
+ }
122
+ /** 函数的执行环境,惰性求值 */
123
+ get proxy() {
124
+ if (this._proxy != null)
125
+ return this._proxy;
126
+ let getter;
127
+ let enumerate;
128
+ let describe;
129
+ const { scope, enumerator, describer } = this;
72
130
  if (scope == null) {
73
- this.getter = (key) => this.context?.imported.get(key);
131
+ getter = (key) => this.evaluator?.imported.get(key);
132
+ enumerate = () => this.evaluator?.imported.keys() ?? [];
133
+ describe = () => undefined;
74
134
  }
75
135
  else if (typeof scope == 'function') {
76
- this.getter = (key) => {
136
+ getter = (key) => {
77
137
  const v = scope(key);
78
138
  if (v === undefined)
79
- return this.context?.imported.get(key);
139
+ return this.evaluator?.imported.get(key);
80
140
  if (!needsProxy(v))
81
141
  return v;
82
142
  return createProxy(v, this, [key]);
83
143
  };
84
144
  }
85
145
  else {
86
- this.getter = (key) => {
146
+ getter = (key) => {
87
147
  if (!hasOwn(scope, key))
88
- return this.context?.imported.get(key);
148
+ return this.evaluator?.imported.get(key);
89
149
  const v = scope[key];
90
150
  if (!needsProxy(v))
91
151
  return v;
92
152
  return createProxy(v, this, [key]);
93
153
  };
94
154
  }
155
+ if (typeof enumerator == 'function') {
156
+ enumerate = () => {
157
+ const keys = enumerator();
158
+ const imported = this.evaluator?.imported.keys() ?? [];
159
+ return [...keys, ...imported];
160
+ };
161
+ }
162
+ else {
163
+ enumerate = () => this.evaluator?.imported.keys() ?? [];
164
+ }
165
+ if (typeof describer == 'function') {
166
+ describe = (key) => {
167
+ const d = describer(key);
168
+ if (d)
169
+ return d;
170
+ return undefined;
171
+ };
172
+ }
173
+ const proxy = createVmContext(getter, enumerate, describe);
174
+ this._proxy = proxy;
175
+ return proxy;
95
176
  }
96
- /** 重置执行环境 */
97
- reset(context) {
98
- const oldContext = this.context;
99
- const oldCounter = this.evalCounter;
100
- this.context = context;
101
- this.evalCounter = 0;
102
- return () => {
103
- this.context = oldContext;
104
- this.evalCounter = oldCounter;
105
- };
106
- }
107
- /** 函数的执行环境,惰性求值 */
108
- get proxy() {
109
- this._proxy ??= createVmContext(this.getter);
110
- return this._proxy;
111
- }
112
- /** 检查环境中是否有值 */
177
+ /** 检查环境中是否有值,不包含 evaluator 和 default context 中的值 */
113
178
  has(key) {
114
179
  const { scope } = this;
115
180
  if (scope == null)
@@ -123,7 +188,7 @@ export class Scope {
123
188
  }
124
189
  return v !== undefined;
125
190
  }
126
- /** 获取环境中的值 */
191
+ /** 获取环境中的值,不包含 evaluator 和 default context 中的值 */
127
192
  get(key) {
128
193
  const { scope } = this;
129
194
  if (scope == null)
@@ -139,41 +204,32 @@ export class Scope {
139
204
  return v;
140
205
  return this.eval(v, [key]);
141
206
  }
142
- /**
143
- * 表达式递归求值
144
- */
207
+ /** 表达式递归求值 */
145
208
  eval(expression, path) {
146
- if (this.evalCounter >= Scope.MAX_RECURSION) {
209
+ if (this.evalCounter >= MAX_RECURSION) {
210
+ this.evalCounter = 0;
147
211
  throw new Error(`Execution recursion exceeds limit`);
148
212
  }
149
213
  this.evalCounter++;
150
214
  try {
151
- let result;
215
+ let result = null;
152
216
  if (typeof expression == 'function') {
153
- result = expression(this);
217
+ result = expression(this, this.evaluator);
154
218
  }
155
219
  else {
156
- const { context } = this;
157
- if (!context) {
158
- throw new Error(`Undefined context`);
159
- }
160
- const exp = parse(context, expression.source, this.throws);
220
+ const { evaluator } = this;
221
+ const exp = parse(evaluator, expression.source, this.throws, false);
161
222
  if (exp.func != null) {
162
- result = evaluateEval(context, exp, this);
223
+ result = evaluateEval(evaluator, exp, this);
163
224
  }
164
225
  else if (exp.error != null) {
165
226
  throw exp.error;
166
227
  }
167
- else {
168
- result = DEFAULTS;
169
- }
170
228
  }
171
- if (result === DEFAULTS)
172
- return null;
173
229
  const tag = expression[ExpressionTag];
174
230
  if (!tag)
175
231
  return result;
176
- return TypeInfo.to(result, TypeInfo.parse(tag));
232
+ return TypeInfo.to(result, tag);
177
233
  }
178
234
  catch (ex) {
179
235
  throw new Error(`${ex.message || String(ex)}\nIn ${this.name}: @ ${path.join('/')}`);
@@ -185,16 +241,21 @@ function unwrapCore(value) {
185
241
  if (value == null || (typeof value != 'object' && typeof value != 'function')) {
186
242
  return undefined;
187
243
  }
244
+ if (isVmWrapper(value) || isVmFunction(value) || isSpecialHostObject(value)) {
245
+ return undefined;
246
+ }
247
+ // 是否有 proxy
188
248
  const raw = value[RAW];
249
+ // 不论是否被代理,均须递归处理子项
189
250
  const obj = raw ?? value;
190
- for (const key in obj) {
191
- if (!hasOwn(obj, key))
192
- continue;
251
+ // 只处理 own enumerable 属性
252
+ for (const key of keys(obj)) {
193
253
  const unwrapped = unwrapCore(obj[key]);
194
254
  if (unwrapped !== undefined) {
195
255
  obj[key] = unwrapped;
196
256
  }
197
257
  }
258
+ // 返回被代理的对象,如没有 proxy 则返回 undefined
198
259
  return raw;
199
260
  }
200
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/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, F = undefined>(value: T | undefined, _fallback?: F): T;
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;AAG5E,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,CAkBpG;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,CAAC,GAAG,SAAS,EAC9C,KAAK,EAAE,CAAC,GAAG,SAAS,EACpB,SAAS,CAAC,EAAE,CAAC,GACd,CAAC,CAGH;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,4 +1,4 @@
1
- import { lib } from '@mirascript/mirascript/subtle';
1
+ import { convert } from '@mirascript/mirascript/subtle';
2
2
  const x = 'boolean';
3
3
  x;
4
4
  /** 类型信息 */
@@ -34,39 +34,36 @@ export var TypeInfo;
34
34
  }
35
35
  TypeInfo.is = is;
36
36
  /** 转换类型 */
37
- function to(value, type) {
38
- if (!type)
39
- 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, _fallback) {
44
+ if (value == null)
45
+ return null;
46
+ return value;
47
+ }
48
+ /** 获取转换器 */
49
+ function converter(type) {
50
+ // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
40
51
  switch (type) {
41
52
  case 'b':
42
53
  case 'boolean':
43
- return lib.to_boolean(value);
54
+ return TypeInfo.toBoolean;
44
55
  case 'f':
45
56
  case 'number':
46
- return lib.to_number(value);
57
+ return TypeInfo.toNumber;
47
58
  case 's':
48
59
  case 'string':
49
- return lib.to_string(value);
60
+ return TypeInfo.toString;
50
61
  default:
51
62
  (type);
52
- return value;
63
+ return identity;
53
64
  }
54
65
  }
55
- TypeInfo.to = to;
56
- /** 转换为字符串 */
57
- function toString(value) {
58
- return lib.to_string(value);
59
- }
60
- TypeInfo.toString = toString;
61
- /** 转换为数字 */
62
- function toNumber(value) {
63
- return lib.to_number(value);
64
- }
65
- TypeInfo.toNumber = toNumber;
66
- /** 转换为布尔值 */
67
- function toBoolean(value) {
68
- return lib.to_boolean(value);
69
- }
70
- TypeInfo.toBoolean = toBoolean;
66
+ TypeInfo.converter = converter;
67
+ TypeInfo.toBoolean = convert.toBoolean, TypeInfo.toFormat = convert.toFormat, TypeInfo.toNumber = convert.toNumber, TypeInfo.toString = convert.toString;
71
68
  })(TypeInfo || (TypeInfo = {}));
72
69
  //# 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;AAKpD,MAAM,CAAC,GAAa,SAAS,CAAC;AAC9B,CAAoB,CAAC;AAerB,WAAW;AACX,MAAM,KAAW,QAAQ,CA6DxB;AA7DD,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,IAAI,CAAC,IAAI;YAAE,OAAO,KAAU,CAAC;QAC7B,QAAQ,IAAI,EAAE,CAAC;YACX,KAAK,GAAG,CAAC;YACT,KAAK,SAAS;gBACV,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,CAAM,CAAC;YACtC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAM,CAAC;YACrC,KAAK,GAAG,CAAC;YACT,KAAK,QAAQ;gBACT,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAM,CAAC;YACrC;gBACI,CAAC,IAAI,CAAiB,CAAC;gBACvB,OAAO,KAAU,CAAC;QAC1B,CAAC;IACL,CAAC;IAlBe,WAAE,KAkBjB,CAAA;IAED,aAAa;IACb,SAAgB,QAAQ,CAAC,KAA0B;QAC/C,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAFe,iBAAQ,WAEvB,CAAA;IAED,YAAY;IACZ,SAAgB,QAAQ,CAAC,KAA0B;QAC/C,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAFe,iBAAQ,WAEvB,CAAA;IAED,aAAa;IACb,SAAgB,SAAS,CAAC,KAA0B;QAChD,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAFe,kBAAS,YAExB,CAAA;AACL,CAAC,EA7DgB,QAAQ,KAAR,QAAQ,QA6DxB"}
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,CA2ExB;AA3ED,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,CACb,KAAoB,EACpB,SAAa;QAEb,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,IAAS,CAAC;QACpC,OAAO,KAAK,CAAC;IACjB,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,EA3EgB,QAAQ,KAAR,QAAQ,QA2ExB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudpss/expression",
3
- "version": "0.6.0-alpha.9",
3
+ "version": "0.6.0",
4
4
  "author": "CloudPSS",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,11 +12,14 @@
12
12
  "./*": "./dist/*.js"
13
13
  },
14
14
  "dependencies": {
15
- "@mirascript/mirascript": "^0.0.18",
15
+ "@mirascript/mirascript": "^0.1.26",
16
16
  "klona": "^2.0.6",
17
- "lru-cache": "^11.2.2",
18
- "mathjs": "^14.8.1",
19
- "type-fest": "^5.0.1"
17
+ "lru-cache": "^11.2.4",
18
+ "mathjs": "^15.1.0",
19
+ "type-fest": "^5.3.1"
20
+ },
21
+ "devDependencies": {
22
+ "dedent": "^1.7.1"
20
23
  },
21
24
  "scripts": {
22
25
  "build": "pnpm clean && tsc --build --force",
package/src/analyze.ts CHANGED
@@ -1,44 +1,25 @@
1
- import type { Context } from './context.js';
2
- import type { ExpressionCache } from './parser.js';
1
+ import { DefaultVmContext, type GlobalReferenceChain, analyzeGlobalReferences } from '@mirascript/mirascript/subtle';
2
+ import type { EvalExpressionCache } from './parser.js';
3
+ import type { Scope } from './scope.js';
4
+ import type { Evaluator } from './main.js';
3
5
 
6
+ const kAnalyze = Symbol('cloudpss.expression.analyzeCache');
7
+ export type { GlobalReferenceChain };
4
8
  /**
5
9
  * 分析依赖
6
10
  */
7
- export function analyze(context: Context, expression: ExpressionCache): string[][] {
8
- // TODO:
9
- return [];
10
- // if (expression.ast == null) return [];
11
-
12
- // const deps: string[][] = [];
13
-
14
- // const analyzeNode = (node: MathNode): string[] | undefined => {
15
- // if (isSymbolNode(node) && node.name) {
16
- // return [node.name];
17
- // }
18
- // if (isAccessorNode(node)) {
19
- // const { index } = node;
20
- // if (index.dimensions.length !== 1 || !isConstantNode(index.dimensions[0])) {
21
- // return undefined;
22
- // }
23
- // const indexValue = index.dimensions[0].value;
24
- // // 暂时不考虑,两边索引 base 不一致
25
- // if (typeof indexValue != 'string' /*&& typeof indexValue != 'number'*/) {
26
- // return undefined;
27
- // }
28
- // const deps = analyzeNode(node.object);
29
- // if (!deps) return undefined;
30
-
31
- // return [...deps, indexValue];
32
- // }
33
- // return undefined;
34
- // };
35
-
36
- // const analyzeAndPush = (node: MathNode): void => {
37
- // const dep = analyzeNode(node);
38
- // if (dep) deps.push(dep);
39
- // // eslint-disable-next-line unicorn/no-array-for-each
40
- // else node.forEach(analyzeAndPush);
41
- // };
42
- // analyzeAndPush(expression.ast);
43
- // return deps;
11
+ export function analyze(
12
+ expression: EvalExpressionCache,
13
+ evaluator: Evaluator,
14
+ scope: Scope,
15
+ ): readonly GlobalReferenceChain[] {
16
+ let result = (expression as EvalExpressionCache & { [kAnalyze]?: readonly GlobalReferenceChain[] })[kAnalyze];
17
+ if (result == null) {
18
+ result = analyzeGlobalReferences(expression.source);
19
+ (expression as EvalExpressionCache & { [kAnalyze]?: readonly GlobalReferenceChain[] })[kAnalyze] = result;
20
+ }
21
+ return result.filter(([global]) => {
22
+ if (scope.has(global)) return true;
23
+ return !(evaluator.imported.has(global) || DefaultVmContext.has(global));
24
+ });
44
25
  }
@@ -6,7 +6,7 @@ import type { Evaluator } from '../main.js';
6
6
  /**
7
7
  * 表示一个具有类似表达式功能的 JS 函数,与某个 {@link ArgumentValue} 相关联,在其之后求值
8
8
  */
9
- export type ExpressionFunction<out R, in V extends VmValue = ArgumentValue> = (
9
+ export type ArgumentFunction<out R, in V extends VmValue = ArgumentValue> = (
10
10
  /** 相关联的参数值 */
11
11
  value: V,
12
12
  /** 当前作用域 */
@@ -15,26 +15,16 @@ export type ExpressionFunction<out R, in V extends VmValue = ArgumentValue> = (
15
15
  evaluator: Evaluator,
16
16
  ) => R;
17
17
 
18
- /**
19
- * 表示一个具有类似表达式功能的 JS 函数,与某个 {@link ArgumentValue} 相关联,在其之前求值
20
- */
21
- export type ParameterFunction<out R> = (
22
- /** 当前作用域 */
23
- scope: Scope,
24
- /** 当前求值器 */
25
- evaluator: Evaluator,
26
- ) => R;
27
-
28
18
  /** 条件表达式 */
29
19
  export type ConditionExpression = boolean | ExpressionSource<boolean>;
30
20
 
31
21
  /** 条件函数 */
32
- export type ConditionFunction<in V extends VmValue = ArgumentValue> = ExpressionFunction<boolean, V>;
22
+ export type ConditionFunction<in V extends VmValue = ArgumentValue> = ArgumentFunction<boolean, V>;
33
23
 
34
24
  /** 参数值 */
35
25
  export type ArgumentValue = NonNullable<VmConst>;
36
26
 
37
27
  /** 未求值的参数表 */
38
28
  export type ArgumentMap<T extends Record<string, ArgumentValue> = Record<string, ArgumentValue>> = {
39
- [K in keyof T & string]?: ExpressionOrValue<NonNullable<T[K]>>;
29
+ [K in keyof T]?: ExpressionOrValue<NonNullable<T[K]>>;
40
30
  };
@@ -1,5 +1,5 @@
1
1
  import type { VmRecord, VmValue } from '@mirascript/mirascript';
2
- import type { ArgumentValue, ConditionExpression, ConditionFunction, ExpressionFunction } from './argument.js';
2
+ import type { ArgumentValue, ConditionExpression, ConditionFunction, ArgumentFunction } from './argument.js';
3
3
  import type { ExpressionSource } from '../expression.js';
4
4
 
5
5
  export const ConstraintLevel = Object.freeze(['info', 'warning', 'error'] as const);
@@ -23,7 +23,7 @@ export interface Constraint<V extends VmValue = ArgumentValue> {
23
23
  /**
24
24
  * 不满足条件的提示附加参数
25
25
  */
26
- messageData?: ExpressionSource<VmRecord> | VmRecord | ExpressionFunction<VmRecord, V>;
26
+ messageData?: ExpressionSource<VmRecord> | VmRecord | ArgumentFunction<VmRecord, V>;
27
27
  /**
28
28
  * 约束条件
29
29
  */
@@ -33,7 +33,7 @@ export interface Constraint<V extends VmValue = ArgumentValue> {
33
33
  /** 检查是否为 Constraint */
34
34
  export function isConstraint(value: unknown): value is Constraint {
35
35
  if (value == null || typeof value !== 'object') return false;
36
- if ('key' in value || 'description' in value || 'items' in value) return false;
36
+ if ('key' in value || 'name' in value || 'description' in value || 'items' in value) return false;
37
37
 
38
38
  const v = value as Constraint;
39
39
  if (typeof v.message != 'string') return false;