@cloudpss/expression 0.6.0-alpha.1 → 0.6.0-alpha.10

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/dist/analyze.d.ts +6 -3
  2. package/dist/analyze.d.ts.map +1 -1
  3. package/dist/analyze.js +67 -33
  4. package/dist/analyze.js.map +1 -1
  5. package/dist/definitions/argument.d.ts +2 -10
  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-decoration.d.ts +3 -3
  12. package/dist/definitions/parameter-decoration.d.ts.map +1 -1
  13. package/dist/definitions/parameter-decoration.js +0 -7
  14. package/dist/definitions/parameter-decoration.js.map +1 -1
  15. package/dist/definitions/parameter-group.d.ts +0 -4
  16. package/dist/definitions/parameter-group.d.ts.map +1 -1
  17. package/dist/definitions/parameter-group.js +5 -17
  18. package/dist/definitions/parameter-group.js.map +1 -1
  19. package/dist/definitions/parameter.d.ts +47 -40
  20. package/dist/definitions/parameter.d.ts.map +1 -1
  21. package/dist/definitions/parameter.js +9 -21
  22. package/dist/definitions/parameter.js.map +1 -1
  23. package/dist/definitions/utils.d.ts +19 -0
  24. package/dist/definitions/utils.d.ts.map +1 -0
  25. package/dist/definitions/utils.js +177 -0
  26. package/dist/definitions/utils.js.map +1 -0
  27. package/dist/definitions/variable.d.ts +0 -2
  28. package/dist/definitions/variable.d.ts.map +1 -1
  29. package/dist/definitions/variable.js +1 -5
  30. package/dist/definitions/variable.js.map +1 -1
  31. package/dist/definitions.d.ts +1 -0
  32. package/dist/definitions.d.ts.map +1 -1
  33. package/dist/definitions.js +1 -0
  34. package/dist/definitions.js.map +1 -1
  35. package/dist/eval.d.ts +3 -5
  36. package/dist/eval.d.ts.map +1 -1
  37. package/dist/eval.js +12 -20
  38. package/dist/eval.js.map +1 -1
  39. package/dist/expression.d.ts +10 -4
  40. package/dist/expression.d.ts.map +1 -1
  41. package/dist/expression.js +4 -4
  42. package/dist/expression.js.map +1 -1
  43. package/dist/index.d.ts +3 -1
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +1 -0
  46. package/dist/index.js.map +1 -1
  47. package/dist/interface.d.ts +30 -0
  48. package/dist/interface.d.ts.map +1 -0
  49. package/dist/interface.js +6 -0
  50. package/dist/interface.js.map +1 -0
  51. package/dist/main.d.ts +41 -28
  52. package/dist/main.d.ts.map +1 -1
  53. package/dist/main.js +145 -141
  54. package/dist/main.js.map +1 -1
  55. package/dist/migrate.d.ts +3 -2
  56. package/dist/migrate.d.ts.map +1 -1
  57. package/dist/migrate.js +12 -3
  58. package/dist/migrate.js.map +1 -1
  59. package/dist/migrator/access.d.ts.map +1 -1
  60. package/dist/migrator/access.js +22 -24
  61. package/dist/migrator/access.js.map +1 -1
  62. package/dist/migrator/call.d.ts.map +1 -1
  63. package/dist/migrator/call.js +235 -209
  64. package/dist/migrator/call.js.map +1 -1
  65. package/dist/migrator/interface.d.ts +3 -1
  66. package/dist/migrator/interface.d.ts.map +1 -1
  67. package/dist/migrator/interface.js.map +1 -1
  68. package/dist/migrator/node.js +1 -1
  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 +19 -5
  72. package/dist/migrator/operator.js.map +1 -1
  73. package/dist/migrator/state.d.ts +2 -2
  74. package/dist/migrator/state.d.ts.map +1 -1
  75. package/dist/migrator/state.js +1 -2
  76. package/dist/migrator/state.js.map +1 -1
  77. package/dist/migrator/symbol.d.ts.map +1 -1
  78. package/dist/migrator/symbol.js +13 -0
  79. package/dist/migrator/symbol.js.map +1 -1
  80. package/dist/migrator/to-type.d.ts.map +1 -1
  81. package/dist/migrator/to-type.js +16 -0
  82. package/dist/migrator/to-type.js.map +1 -1
  83. package/dist/migrator/utils.d.ts +2 -0
  84. package/dist/migrator/utils.d.ts.map +1 -1
  85. package/dist/migrator/utils.js +18 -0
  86. package/dist/migrator/utils.js.map +1 -1
  87. package/dist/parser.d.ts +2 -2
  88. package/dist/parser.d.ts.map +1 -1
  89. package/dist/parser.js +25 -8
  90. package/dist/parser.js.map +1 -1
  91. package/dist/re-exports.d.ts +4 -0
  92. package/dist/re-exports.d.ts.map +1 -0
  93. package/dist/re-exports.js +3 -0
  94. package/dist/re-exports.js.map +1 -0
  95. package/dist/scope.d.ts +13 -16
  96. package/dist/scope.d.ts.map +1 -1
  97. package/dist/scope.js +56 -49
  98. package/dist/scope.js.map +1 -1
  99. package/dist/type.d.ts +14 -5
  100. package/dist/type.d.ts.map +1 -1
  101. package/dist/type.js +35 -11
  102. package/dist/type.js.map +1 -1
  103. package/package.json +4 -4
  104. package/src/analyze.ts +77 -37
  105. package/src/definitions/argument.ts +2 -12
  106. package/src/definitions/constraint.ts +3 -3
  107. package/src/definitions/parameter-decoration.ts +3 -9
  108. package/src/definitions/parameter-group.ts +4 -19
  109. package/src/definitions/parameter.ts +62 -61
  110. package/src/definitions/utils.ts +175 -0
  111. package/src/definitions/variable.ts +1 -6
  112. package/src/definitions.ts +1 -0
  113. package/src/eval.ts +13 -26
  114. package/src/expression.ts +14 -6
  115. package/src/index.ts +3 -1
  116. package/src/interface.ts +35 -0
  117. package/src/main.ts +213 -194
  118. package/src/migrate.ts +15 -6
  119. package/src/migrator/access.ts +21 -26
  120. package/src/migrator/call.ts +225 -194
  121. package/src/migrator/interface.ts +3 -1
  122. package/src/migrator/node.ts +1 -1
  123. package/src/migrator/operator.ts +19 -5
  124. package/src/migrator/state.ts +2 -2
  125. package/src/migrator/symbol.ts +13 -0
  126. package/src/migrator/to-type.ts +16 -0
  127. package/src/migrator/utils.ts +21 -0
  128. package/src/parser.ts +27 -8
  129. package/src/re-exports.ts +28 -0
  130. package/src/scope.ts +75 -61
  131. package/src/type.ts +32 -11
  132. package/tests/analyze.ts +40 -6
  133. package/tests/compile.ts +65 -0
  134. package/tests/condition.ts +13 -5
  135. package/tests/definition.ts +205 -18
  136. package/tests/eval-complex.ts +7 -10
  137. package/tests/eval.ts +59 -12
  138. package/tests/import.ts +18 -4
  139. package/tests/main.ts +9 -0
  140. package/tests/migrate.ts +77 -0
  141. package/tests/scope.ts +3 -3
  142. package/tests/template.ts +36 -0
  143. package/dist/context.d.ts +0 -41
  144. package/dist/context.d.ts.map +0 -1
  145. package/dist/context.js +0 -18
  146. package/dist/context.js.map +0 -1
  147. package/jest.config.js +0 -3
  148. package/src/context.ts +0 -54
  149. package/tests/tsconfig.json +0 -3
  150. package/tsconfig.json +0 -3
package/dist/scope.js CHANGED
@@ -1,13 +1,23 @@
1
- import { createVmContext, isVmExtern } from '@mirascript/mirascript';
1
+ import { createVmContext, isVmExtern, isVmModule, } 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
6
  const { hasOwn } = Object;
7
7
  const RAW = Symbol.for('@private/expression:raw');
8
8
  /** 是否需要创建代理对象 */
9
9
  function needsProxy(value) {
10
- return isExpression(value) || (value != null && typeof value == 'object');
10
+ // 先检查 isExpression,因为 'function' 也有可能是 Expression
11
+ if (isExpression(value)) {
12
+ return true;
13
+ }
14
+ if (value == null || typeof value != 'object') {
15
+ return false;
16
+ }
17
+ if (isVmExtern(value) || isVmModule(value)) {
18
+ return false;
19
+ }
20
+ return true;
11
21
  }
12
22
  /** 创建代理对象 */
13
23
  function createProxy(value, scope, path) {
@@ -42,12 +52,9 @@ class ScopeProxyHandler {
42
52
  return target;
43
53
  }
44
54
  const value = Reflect.get(target, p);
45
- if (!needsProxy(value)) {
55
+ if (isVmExtern(target) || !needsProxy(value)) {
46
56
  return value;
47
57
  }
48
- if (isVmExtern(target)) {
49
- return createProxy(value, this.scope, this.path);
50
- }
51
58
  return createProxy(value, this.scope, [...this.path, p]);
52
59
  }
53
60
  }
@@ -57,7 +64,7 @@ export class Scope {
57
64
  static { this.MAX_RECURSION = 500; }
58
65
  constructor(
59
66
  /** 生成环境的工厂函数 */
60
- scope,
67
+ scope = null,
61
68
  /** 求值失败是否抛异常 */
62
69
  throws = true,
63
70
  /** 执行环境名称 */
@@ -65,51 +72,58 @@ export class Scope {
65
72
  this.scope = scope;
66
73
  this.throws = throws;
67
74
  this.name = name;
68
- /** 上下文 */
69
- this.context = null;
75
+ /** 执行器上下文 */
76
+ this.evaluator = null;
70
77
  /** 求值计数 */
71
78
  this.evalCounter = 0;
79
+ /** 函数的执行环境,惰性求值 */
80
+ this._proxy = null;
81
+ }
82
+ /** 重置执行器 */
83
+ reset(evaluator) {
84
+ const oldEvaluator = this.evaluator;
85
+ const oldCounter = this.evalCounter;
86
+ this.evaluator = evaluator;
87
+ this.evalCounter = 0;
88
+ return () => {
89
+ this.evaluator = oldEvaluator;
90
+ this.evalCounter = oldCounter;
91
+ };
92
+ }
93
+ /** 函数的执行环境,惰性求值 */
94
+ get proxy() {
95
+ if (this._proxy != null)
96
+ return this._proxy;
97
+ let getter;
98
+ const { scope } = this;
72
99
  if (scope == null) {
73
- this.getter = (key) => this.context?.imported.get(key);
100
+ getter = (key) => this.evaluator?.imported.get(key);
74
101
  }
75
102
  else if (typeof scope == 'function') {
76
- this.getter = (key) => {
103
+ getter = (key) => {
77
104
  const v = scope(key);
78
105
  if (v === undefined)
79
- return this.context?.imported.get(key);
106
+ return this.evaluator?.imported.get(key);
80
107
  if (!needsProxy(v))
81
108
  return v;
82
109
  return createProxy(v, this, [key]);
83
110
  };
84
111
  }
85
112
  else {
86
- this.getter = (key) => {
113
+ getter = (key) => {
87
114
  if (!hasOwn(scope, key))
88
- return this.context?.imported.get(key);
115
+ return this.evaluator?.imported.get(key);
89
116
  const v = scope[key];
90
117
  if (!needsProxy(v))
91
118
  return v;
92
119
  return createProxy(v, this, [key]);
93
120
  };
94
121
  }
122
+ const proxy = createVmContext(getter);
123
+ this._proxy = proxy;
124
+ return proxy;
95
125
  }
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
- /** 检查环境中是否有值 */
126
+ /** 检查环境中是否有值,不包含 evaluator 和 default context 中的值 */
113
127
  has(key) {
114
128
  const { scope } = this;
115
129
  if (scope == null)
@@ -123,7 +137,7 @@ export class Scope {
123
137
  }
124
138
  return v !== undefined;
125
139
  }
126
- /** 获取环境中的值 */
140
+ /** 获取环境中的值,不包含 evaluator 和 default context 中的值 */
127
141
  get(key) {
128
142
  const { scope } = this;
129
143
  if (scope == null)
@@ -139,41 +153,34 @@ export class Scope {
139
153
  return v;
140
154
  return this.eval(v, [key]);
141
155
  }
142
- /**
143
- * 表达式递归求值
144
- */
156
+ /** 表达式递归求值 */
145
157
  eval(expression, path) {
146
158
  if (this.evalCounter >= Scope.MAX_RECURSION) {
147
159
  throw new Error(`Execution recursion exceeds limit`);
148
160
  }
149
161
  this.evalCounter++;
150
162
  try {
151
- let result;
163
+ let result = null;
152
164
  if (typeof expression == 'function') {
153
- result = expression(this);
165
+ result = expression(this, this.evaluator);
154
166
  }
155
167
  else {
156
- const { context } = this;
157
- if (!context) {
158
- throw new Error(`Undefined context`);
168
+ const { evaluator } = this;
169
+ if (!evaluator) {
170
+ throw new Error(`Undefined evaluator`);
159
171
  }
160
- const exp = parse(context, expression.source, this.throws);
172
+ const exp = parse(evaluator, expression.source, this.throws, false);
161
173
  if (exp.func != null) {
162
- result = evaluateEval(context, exp, this);
174
+ result = evaluateEval(evaluator, exp, this);
163
175
  }
164
176
  else if (exp.error != null) {
165
177
  throw exp.error;
166
178
  }
167
- else {
168
- result = DEFAULTS;
169
- }
170
179
  }
171
- if (result === DEFAULTS)
172
- return null;
173
180
  const tag = expression[ExpressionTag];
174
181
  if (!tag)
175
182
  return result;
176
- return TypeInfo.to(result, TypeInfo.parse(tag));
183
+ return TypeInfo.to(result, tag);
177
184
  }
178
185
  catch (ex) {
179
186
  throw new Error(`${ex.message || String(ex)}\nIn ${this.name}: @ ${path.join('/')}`);
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
@@ -12,10 +12,19 @@ export type TsTypeOf<T extends TypeInfo | LegacyType> = TypeMap[T];
12
12
  /** 兼容的旧类型 */
13
13
  export type LegacyType = 's' | 'f' | 'b';
14
14
  /** 类型信息 */
15
- export declare const TypeInfo: {
16
- parse: (type: TypeInfo | LegacyType) => TypeInfo;
17
- is: <T extends TypeInfo | LegacyType>(value: VmValue | undefined, type: T) => value is TsTypeOf<T>;
18
- to: <T extends TypeInfo | LegacyType>(value: VmValue | undefined, type: T) => TsTypeOf<T>;
19
- };
15
+ export declare namespace TypeInfo {
16
+ /** 解析类型 */
17
+ function parse(type: TypeInfo | LegacyType): TypeInfo;
18
+ /** 判断类型 */
19
+ function is<T extends TypeInfo | LegacyType>(value: VmValue | undefined, type: T): value is TsTypeOf<T>;
20
+ /** 转换类型 */
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;
28
+ }
20
29
  export {};
21
30
  //# 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,eAAO,MAAM,QAAQ;kBACH,QAAQ,GAAG,UAAU,KAAG,QAAQ;SAMzC,CAAC,SAAS,QAAQ,GAAG,UAAU,SAAS,OAAO,GAAG,SAAS,QAAQ,CAAC,KAAG,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC;SAgB3F,CAAC,SAAS,QAAQ,GAAG,UAAU,SAAS,OAAO,GAAG,SAAS,QAAQ,CAAC,KAAG,QAAQ,CAAC,CAAC,CAAC;CAmB1F,CAAC"}
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"}
package/dist/type.js CHANGED
@@ -1,9 +1,12 @@
1
1
  import { lib } from '@mirascript/mirascript/subtle';
2
+ const { to_string, to_number, to_boolean } = lib;
2
3
  const x = 'boolean';
3
4
  x;
4
5
  /** 类型信息 */
5
- export const TypeInfo = {
6
- parse: (type) => {
6
+ export var TypeInfo;
7
+ (function (TypeInfo) {
8
+ /** 解析类型 */
9
+ function parse(type) {
7
10
  if (type === 's' || type === 'string')
8
11
  return 'string';
9
12
  if (type === 'f' || type === 'number')
@@ -11,8 +14,10 @@ export const TypeInfo = {
11
14
  if (type === 'b' || type === 'boolean')
12
15
  return 'boolean';
13
16
  throw new TypeError(`Invalid type '${String(type)}'`);
14
- },
15
- is: (value, type) => {
17
+ }
18
+ TypeInfo.parse = parse;
19
+ /** 判断类型 */
20
+ function is(value, type) {
16
21
  switch (type) {
17
22
  case 'b':
18
23
  case 'boolean':
@@ -27,24 +32,43 @@ export const TypeInfo = {
27
32
  (type);
28
33
  return false;
29
34
  }
30
- },
31
- to: (value, type) => {
35
+ }
36
+ TypeInfo.is = is;
37
+ /** 转换类型 */
38
+ function to(value, type) {
39
+ value ??= null;
32
40
  if (!type)
33
41
  return value;
34
42
  switch (type) {
35
43
  case 'b':
36
44
  case 'boolean':
37
- return lib.to_boolean(value);
45
+ return toBoolean(value);
38
46
  case 'f':
39
47
  case 'number':
40
- return lib.to_number(value);
48
+ return toNumber(value);
41
49
  case 's':
42
50
  case 'string':
43
- return lib.to_string(value);
51
+ return toString(value);
44
52
  default:
45
53
  (type);
46
54
  return value;
47
55
  }
48
- },
49
- };
56
+ }
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;
73
+ })(TypeInfo || (TypeInfo = {}));
50
74
  //# 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,CAAC,MAAM,QAAQ,GAAG;IACpB,KAAK,EAAE,CAAC,IAA2B,EAAY,EAAE;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;IACD,EAAE,EAAE,CAAkC,KAA0B,EAAE,IAAO,EAAwB,EAAE;QAC/F,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;IACD,EAAE,EAAE,CAAkC,KAA0B,EAAE,IAAO,EAAe,EAAE;QAGtF,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;CACJ,CAAC"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudpss/expression",
3
- "version": "0.6.0-alpha.1",
3
+ "version": "0.6.0-alpha.10",
4
4
  "author": "CloudPSS",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,11 +12,11 @@
12
12
  "./*": "./dist/*.js"
13
13
  },
14
14
  "dependencies": {
15
- "@mirascript/mirascript": "^0.0.17",
15
+ "@mirascript/mirascript": "^0.1.7",
16
16
  "klona": "^2.0.6",
17
17
  "lru-cache": "^11.2.2",
18
- "mathjs": "^14.7.0",
19
- "type-fest": "^5.0.1"
18
+ "mathjs": "^15.1.0",
19
+ "type-fest": "^5.2.0"
20
20
  },
21
21
  "scripts": {
22
22
  "build": "pnpm clean && tsc --build --force",
package/src/analyze.ts CHANGED
@@ -1,44 +1,84 @@
1
- import type { Context } from './context.js';
2
- import type { ExpressionCache } from './parser.js';
1
+ import {
2
+ parseDiagnostics,
3
+ generateBytecodeSync,
4
+ DiagnosticCode,
5
+ DefaultVmContext,
6
+ } from '@mirascript/mirascript/subtle';
7
+ import type { TranspileOptions } from '@mirascript/mirascript';
8
+ import type { EvalExpressionCache } from './parser.js';
9
+ import type { Scope } from './scope.js';
10
+ import type { Evaluator } from './main.js';
11
+
12
+ /** 一个访问链,第一个元素为变量名称 */
13
+ export type AccessChain = readonly [string, ...ReadonlyArray<string | number>];
14
+
15
+ const config: TranspileOptions = Object.freeze({
16
+ input_mode: 'Script',
17
+ track_references: false,
18
+ diagnostic_position_encoding: 'Utf16',
19
+ diagnostic_error: false,
20
+ diagnostic_warning: false,
21
+ diagnostic_info: false,
22
+ diagnostic_hint: false,
23
+ diagnostic_other: true,
24
+ trivia: false,
25
+ });
3
26
 
4
27
  /**
5
28
  * 分析依赖
6
29
  */
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
+ function analyzeImpl(expression: string): readonly AccessChain[] {
31
+ if (expression.trim() === '') {
32
+ return [];
33
+ }
34
+ const [code, diagnostics] = generateBytecodeSync(expression, config);
35
+ if (code == null || diagnostics.length === 0) {
36
+ return [];
37
+ }
38
+ const parsedDiagnostics = parseDiagnostics(expression, diagnostics);
39
+ const globals = parsedDiagnostics.tags.filter((t) => t.code === DiagnosticCode.GlobalVariable);
40
+ if (globals.length === 0) {
41
+ return [];
42
+ }
43
+ const lines = expression.split(/\r?\n/);
44
+ const result = new Set<string>();
45
+ for (const global of globals) {
46
+ // 分析每个全局变量访问
47
+ const line = lines[global.range.startLineNumber - 1];
48
+ if (!line) continue;
49
+ const access = line.slice(global.range.startColumn - 1);
50
+ const chain =
51
+ /^((?:@+|\$+|[a-zA-Z_])[a-zA-Z0-9_]*)(?:\s*!?\.\s*(?:\d+|(?:@+|\$+|[a-zA-Z_])[a-zA-Z0-9_]*))*/.exec(access);
52
+ if (chain == null) continue;
53
+ const globalName = chain[1];
54
+ if (globalName?.length !== global.range.endColumn - global.range.startColumn) continue;
55
+ const chainStr = chain[0].split(/\s*!?\.\s*/).join('.');
56
+ result.add(chainStr);
57
+ }
58
+ const accessChains: AccessChain[] = [];
59
+ for (const chainStr of result) {
60
+ const parts = chainStr.split('.').map((part) => {
61
+ const num = Number.parseInt(part, 10);
62
+ return Number.isNaN(num) ? part : num;
63
+ });
64
+ accessChains.push(parts as unknown as AccessChain);
65
+ }
66
+ return accessChains;
67
+ }
30
68
 
31
- // return [...deps, indexValue];
32
- // }
33
- // return undefined;
34
- // };
69
+ const kAnalyze = Symbol('cloudpss.expression.analyzeCache');
35
70
 
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;
71
+ /**
72
+ * 分析依赖
73
+ */
74
+ export function analyze(expression: EvalExpressionCache, evaluator: Evaluator, scope: Scope): readonly AccessChain[] {
75
+ let result = (expression as EvalExpressionCache & { [kAnalyze]?: readonly AccessChain[] })[kAnalyze];
76
+ if (result == null) {
77
+ result = analyzeImpl(expression.source);
78
+ (expression as EvalExpressionCache & { [kAnalyze]?: readonly AccessChain[] })[kAnalyze] = result;
79
+ }
80
+ return result.filter(([global]) => {
81
+ if (scope.has(global)) return true;
82
+ return !(evaluator.imported.has(global) || DefaultVmContext.has(global));
83
+ });
44
84
  }
@@ -6,7 +6,7 @@ import type { Evaluator } from '../main.js';
6
6
  /**
7
7
  * 表示一个具有类似表达式功能的 JS 函数,与某个 {@link ArgumentValue} 相关联,在其之后求值
8
8
  */
9
- export type ExpressionFunction<R, V extends VmValue = ArgumentValue> = (
9
+ export type ArgumentFunction<out R, in V extends VmValue = ArgumentValue> = (
10
10
  /** 相关联的参数值 */
11
11
  value: V,
12
12
  /** 当前作用域 */
@@ -15,21 +15,11 @@ export type ExpressionFunction<R, V extends VmValue = ArgumentValue> = (
15
15
  evaluator: Evaluator,
16
16
  ) => R;
17
17
 
18
- /**
19
- * 表示一个具有类似表达式功能的 JS 函数,与某个 {@link ArgumentValue} 相关联,在其之前求值
20
- */
21
- export type ParameterFunction<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<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>;
@@ -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) 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;
@@ -22,8 +22,10 @@ export interface ParameterDecorationMap {
22
22
  label: ParameterLabelDecoration;
23
23
  }
24
24
 
25
+ /** 参数界面装饰 type */
26
+ export type ParameterDecorationType = keyof ParameterDecorationMap;
25
27
  /** 参数界面装饰 */
26
- export type ParameterDecoration = ParameterDecorationMap[keyof ParameterDecorationMap];
28
+ export type ParameterDecoration = ParameterDecorationMap[ParameterDecorationType];
27
29
 
28
30
  /** 是否为参数界面装饰 */
29
31
  export function isParameterDecoration(value: unknown): value is ParameterDecoration {
@@ -32,11 +34,3 @@ export function isParameterDecoration(value: unknown): value is ParameterDecorat
32
34
  if ('key' in v || 'name' in v || 'description' in v) return false;
33
35
  return typeof v.type == 'string' && v.type.length > 0;
34
36
  }
35
-
36
- /** 创建参数界面装饰 */
37
- export function ParameterDecoration(): ParameterLabelDecoration {
38
- return {
39
- type: 'label',
40
- label: '',
41
- };
42
- }
@@ -16,18 +16,11 @@ export interface ParameterDecorationGroup extends ParameterGroupBase {
16
16
  items: ParameterDecoration[];
17
17
  }
18
18
 
19
- /** 创建装饰分组 */
20
- export function ParameterDecorationGroup(): ParameterDecorationGroup {
21
- return {
22
- items: [],
23
- };
24
- }
25
-
26
19
  /** 判断是否为装饰分组 */
27
20
  export function isParameterDecorationGroup(value: unknown): value is ParameterDecorationGroup {
28
21
  if (value == null || typeof value !== 'object') return false;
29
22
  const v = value as ParameterDecorationGroup;
30
- if ('key' in v || 'name' in v || 'description' in v) return false;
23
+ if ('key' in v || 'name' in v || 'description' in v || 'value' in v) return false;
31
24
  return Array.isArray(v.items);
32
25
  }
33
26
 
@@ -45,18 +38,10 @@ export interface ParameterGroup extends ParameterGroupBase {
45
38
  after?: ParameterDecorationGroup;
46
39
  }
47
40
 
48
- /** 创建参数分组 */
49
- export function ParameterGroup(): ParameterGroup {
50
- return {
51
- name: '',
52
- description: '',
53
- items: [],
54
- };
55
- }
56
-
57
41
  /** 判断是否为参数分组 */
58
42
  export function isParameterGroup(item: unknown): item is ParameterGroup {
59
43
  if (item == null || typeof item !== 'object') return false;
60
- const group = item as ParameterGroup;
61
- return typeof group.name === 'string' && typeof group.description === 'string' && Array.isArray(group.items);
44
+ const v = item as ParameterGroup;
45
+ if ('key' in v || 'value' in v) return false;
46
+ return typeof v.name === 'string' && typeof v.description === 'string' && Array.isArray(v.items);
62
47
  }