@cloudpss/expression 0.6.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/analyze.d.ts +7 -0
- package/dist/analyze.d.ts.map +1 -0
- package/dist/analyze.js +38 -0
- package/dist/analyze.js.map +1 -0
- package/dist/context.d.ts +41 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +18 -0
- package/dist/context.js.map +1 -0
- package/dist/definitions/argument.d.ts +33 -0
- package/dist/definitions/argument.d.ts.map +1 -0
- package/dist/definitions/argument.js +2 -0
- package/dist/definitions/argument.js.map +1 -0
- package/dist/definitions/constraint.d.ts +32 -0
- package/dist/definitions/constraint.d.ts.map +1 -0
- package/dist/definitions/constraint.js +20 -0
- package/dist/definitions/constraint.js.map +1 -0
- package/dist/definitions/parameter-decoration.d.ts +27 -0
- package/dist/definitions/parameter-decoration.d.ts.map +1 -0
- package/dist/definitions/parameter-decoration.js +17 -0
- package/dist/definitions/parameter-decoration.js.map +1 -0
- package/dist/definitions/parameter-group.d.ts +38 -0
- package/dist/definitions/parameter-group.d.ts.map +1 -0
- package/dist/definitions/parameter-group.js +31 -0
- package/dist/definitions/parameter-group.js.map +1 -0
- package/dist/definitions/parameter.d.ts +214 -0
- package/dist/definitions/parameter.d.ts.map +1 -0
- package/dist/definitions/parameter.js +44 -0
- package/dist/definitions/parameter.js.map +1 -0
- package/dist/definitions/variable.d.ts +14 -0
- package/dist/definitions/variable.d.ts.map +1 -0
- package/dist/definitions/variable.js +14 -0
- package/dist/definitions/variable.js.map +1 -0
- package/dist/definitions.d.ts +7 -0
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +7 -0
- package/dist/definitions.js.map +1 -0
- package/dist/eval.d.ts +15 -0
- package/dist/eval.d.ts.map +1 -0
- package/dist/eval.js +54 -0
- package/dist/eval.js.map +1 -0
- package/dist/expression.d.ts +37 -0
- package/dist/expression.d.ts.map +1 -0
- package/dist/expression.js +18 -0
- package/dist/expression.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/main.d.ts +49 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +238 -0
- package/dist/main.js.map +1 -0
- package/dist/migrate.d.ts +5 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +23 -0
- package/dist/migrate.js.map +1 -0
- package/dist/migrator/access.d.ts +6 -0
- package/dist/migrator/access.d.ts.map +1 -0
- package/dist/migrator/access.js +176 -0
- package/dist/migrator/access.js.map +1 -0
- package/dist/migrator/call.d.ts +6 -0
- package/dist/migrator/call.d.ts.map +1 -0
- package/dist/migrator/call.js +405 -0
- package/dist/migrator/call.js.map +1 -0
- package/dist/migrator/concat.d.ts +6 -0
- package/dist/migrator/concat.d.ts.map +1 -0
- package/dist/migrator/concat.js +32 -0
- package/dist/migrator/concat.js.map +1 -0
- package/dist/migrator/condition.d.ts +6 -0
- package/dist/migrator/condition.d.ts.map +1 -0
- package/dist/migrator/condition.js +110 -0
- package/dist/migrator/condition.js.map +1 -0
- package/dist/migrator/interface.d.ts +24 -0
- package/dist/migrator/interface.d.ts.map +1 -0
- package/dist/migrator/interface.js +8 -0
- package/dist/migrator/interface.js.map +1 -0
- package/dist/migrator/node.d.ts +12 -0
- package/dist/migrator/node.d.ts.map +1 -0
- package/dist/migrator/node.js +119 -0
- package/dist/migrator/node.js.map +1 -0
- package/dist/migrator/operator.d.ts +6 -0
- package/dist/migrator/operator.d.ts.map +1 -0
- package/dist/migrator/operator.js +299 -0
- package/dist/migrator/operator.js.map +1 -0
- package/dist/migrator/parser.d.ts +3 -0
- package/dist/migrator/parser.d.ts.map +1 -0
- package/dist/migrator/parser.js +76 -0
- package/dist/migrator/parser.js.map +1 -0
- package/dist/migrator/special.d.ts +4 -0
- package/dist/migrator/special.d.ts.map +1 -0
- package/dist/migrator/special.js +26 -0
- package/dist/migrator/special.js.map +1 -0
- package/dist/migrator/state.d.ts +64 -0
- package/dist/migrator/state.d.ts.map +1 -0
- package/dist/migrator/state.js +251 -0
- package/dist/migrator/state.js.map +1 -0
- package/dist/migrator/symbol.d.ts +6 -0
- package/dist/migrator/symbol.d.ts.map +1 -0
- package/dist/migrator/symbol.js +50 -0
- package/dist/migrator/symbol.js.map +1 -0
- package/dist/migrator/to-type.d.ts +10 -0
- package/dist/migrator/to-type.d.ts.map +1 -0
- package/dist/migrator/to-type.js +89 -0
- package/dist/migrator/to-type.js.map +1 -0
- package/dist/migrator/utils.d.ts +14 -0
- package/dist/migrator/utils.d.ts.map +1 -0
- package/dist/migrator/utils.js +64 -0
- package/dist/migrator/utils.js.map +1 -0
- package/dist/parser.d.ts +41 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +36 -0
- package/dist/parser.js.map +1 -0
- package/dist/scope.d.ts +43 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +204 -0
- package/dist/scope.js.map +1 -0
- package/dist/type.d.ts +21 -0
- package/dist/type.d.ts.map +1 -0
- package/dist/type.js +50 -0
- package/dist/type.js.map +1 -0
- package/jest.config.js +3 -0
- package/package.json +26 -0
- package/src/analyze.ts +44 -0
- package/src/context.ts +54 -0
- package/src/definitions/argument.ts +40 -0
- package/src/definitions/constraint.ts +49 -0
- package/src/definitions/parameter-decoration.ts +42 -0
- package/src/definitions/parameter-group.ts +62 -0
- package/src/definitions/parameter.ts +276 -0
- package/src/definitions/variable.ts +23 -0
- package/src/definitions.ts +6 -0
- package/src/eval.ts +64 -0
- package/src/expression.ts +62 -0
- package/src/index.ts +5 -0
- package/src/main.ts +295 -0
- package/src/migrate.ts +25 -0
- package/src/migrator/access.ts +201 -0
- package/src/migrator/call.ts +397 -0
- package/src/migrator/concat.ts +28 -0
- package/src/migrator/condition.ts +120 -0
- package/src/migrator/interface.ts +30 -0
- package/src/migrator/node.ts +131 -0
- package/src/migrator/operator.ts +339 -0
- package/src/migrator/parser.ts +106 -0
- package/src/migrator/special.ts +30 -0
- package/src/migrator/state.ts +262 -0
- package/src/migrator/symbol.ts +53 -0
- package/src/migrator/to-type.ts +93 -0
- package/src/migrator/utils.ts +67 -0
- package/src/parser.ts +69 -0
- package/src/scope.ts +208 -0
- package/src/type.ts +66 -0
- package/tests/analyze.ts +15 -0
- package/tests/condition.ts +49 -0
- package/tests/definition.ts +42 -0
- package/tests/eval-complex.ts +150 -0
- package/tests/eval.ts +42 -0
- package/tests/functions.ts +22 -0
- package/tests/import.ts +31 -0
- package/tests/scope.ts +33 -0
- package/tests/setup.ts +41 -0
- package/tests/tsconfig.json +3 -0
- package/tests/unwrap.ts +46 -0
- package/tsconfig.json +3 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { isConstantNode, isNode } from 'mathjs';
|
|
2
|
+
import { serialize } from '@mirascript/mirascript/subtle';
|
|
3
|
+
import { migrateNode } from './node.js';
|
|
4
|
+
/** 转换 AST */
|
|
5
|
+
export function toBoolean(state, node) {
|
|
6
|
+
const helper = () => {
|
|
7
|
+
state.helper("fn @@to_boolean { it != '' && it != 0 && it is not nan && !!it }");
|
|
8
|
+
};
|
|
9
|
+
if (!isNode(node)) {
|
|
10
|
+
if (node.type === 'boolean')
|
|
11
|
+
return node;
|
|
12
|
+
if (node.as_boolean) {
|
|
13
|
+
return {
|
|
14
|
+
type: 'boolean',
|
|
15
|
+
code: node.as_boolean,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
helper();
|
|
19
|
+
return {
|
|
20
|
+
type: 'boolean',
|
|
21
|
+
code: `@@to_boolean(${node.code})`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
if (isConstantNode(node)) {
|
|
25
|
+
const lit = Boolean(node.value);
|
|
26
|
+
return {
|
|
27
|
+
type: 'boolean',
|
|
28
|
+
literal: lit,
|
|
29
|
+
code: serialize(lit),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const migrated = migrateNode(state, node, { format: 'no-paren' });
|
|
33
|
+
return toBoolean(state, migrated);
|
|
34
|
+
}
|
|
35
|
+
/** 转换 AST */
|
|
36
|
+
export function toString(state, node) {
|
|
37
|
+
if (!isNode(node)) {
|
|
38
|
+
if (node.type === 'string')
|
|
39
|
+
return node;
|
|
40
|
+
if (node.as_string) {
|
|
41
|
+
return {
|
|
42
|
+
type: 'string',
|
|
43
|
+
code: node.as_string,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return {
|
|
47
|
+
type: 'string',
|
|
48
|
+
code: `to_string(${node.code})`,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
if (isConstantNode(node)) {
|
|
52
|
+
const lit = String(node.value);
|
|
53
|
+
return {
|
|
54
|
+
type: 'string',
|
|
55
|
+
literal: lit,
|
|
56
|
+
code: serialize(lit),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
const migrated = migrateNode(state, node, { format: 'no-paren' });
|
|
60
|
+
return toString(state, migrated);
|
|
61
|
+
}
|
|
62
|
+
/** 转换 AST */
|
|
63
|
+
export function toNumber(state, node) {
|
|
64
|
+
if (!isNode(node)) {
|
|
65
|
+
if (node.type === 'number')
|
|
66
|
+
return node;
|
|
67
|
+
if (node.as_number) {
|
|
68
|
+
return {
|
|
69
|
+
type: 'number',
|
|
70
|
+
code: node.as_number,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
type: 'number',
|
|
75
|
+
code: `to_number(${node.code})`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
if (isConstantNode(node)) {
|
|
79
|
+
const lit = Number(node.value);
|
|
80
|
+
return {
|
|
81
|
+
type: 'number',
|
|
82
|
+
literal: lit,
|
|
83
|
+
code: serialize(lit),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const migrated = migrateNode(state, node, { format: 'no-paren' });
|
|
87
|
+
return toNumber(state, migrated);
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=to-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-type.js","sourceRoot":"","sources":["../../src/migrator/to-type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type MathNode } from 'mathjs';
|
|
2
|
+
import type { Result } from './interface.js';
|
|
3
|
+
import type { State } from './state.js';
|
|
4
|
+
/** 获取 symbol name */
|
|
5
|
+
export declare function symbolName(node: MathNode): string | undefined;
|
|
6
|
+
/** 获取 constant value */
|
|
7
|
+
export declare function constantValue(node: MathNode): number | string | boolean | null | undefined;
|
|
8
|
+
/** 添加转换错误 */
|
|
9
|
+
export declare function unsupportedNode(state: State, node: MathNode): Result;
|
|
10
|
+
/** 可能是矩阵时报错 */
|
|
11
|
+
export declare function scalar(op: string, state: State, re: Result): Result;
|
|
12
|
+
/** 比较字符串 */
|
|
13
|
+
export declare function equalText(state: State, op: '==' | '!=', l: MathNode, r: MathNode): Result;
|
|
14
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/migrator/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAAgC,MAAM,QAAQ,CAAC;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIxC,qBAAqB;AACrB,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAG7D;AAED,wBAAwB;AACxB,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAG1F;AAED,aAAa;AACb,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAMpE;AAED,eAAe;AACf,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAOnE;AAaD,YAAY;AACZ,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,MAAM,CAiBzF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { isSymbolNode, isConstantNode } from 'mathjs';
|
|
2
|
+
import { toString } from './to-type.js';
|
|
3
|
+
import { migrateExpr } from './node.js';
|
|
4
|
+
/** 获取 symbol name */
|
|
5
|
+
export function symbolName(node) {
|
|
6
|
+
if (!isSymbolNode(node))
|
|
7
|
+
return undefined;
|
|
8
|
+
return node.name;
|
|
9
|
+
}
|
|
10
|
+
/** 获取 constant value */
|
|
11
|
+
export function constantValue(node) {
|
|
12
|
+
if (!isConstantNode(node))
|
|
13
|
+
return undefined;
|
|
14
|
+
return node.value ?? null;
|
|
15
|
+
}
|
|
16
|
+
/** 添加转换错误 */
|
|
17
|
+
export function unsupportedNode(state, node) {
|
|
18
|
+
const str = node.toString();
|
|
19
|
+
state.crit(`不支持的节点类型 ${node.type}: ${str}`);
|
|
20
|
+
return {
|
|
21
|
+
code: `/* ${str} */`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** 可能是矩阵时报错 */
|
|
25
|
+
export function scalar(op, state, re) {
|
|
26
|
+
if (re.type === 'array') {
|
|
27
|
+
state.err(`'${op.trim()}' 不支持矩阵`);
|
|
28
|
+
}
|
|
29
|
+
else if (!re.type) {
|
|
30
|
+
state.warn(`'${op.trim()}' 不支持矩阵,计算结果可能不一致`);
|
|
31
|
+
}
|
|
32
|
+
return re;
|
|
33
|
+
}
|
|
34
|
+
/** 是否可能通过其他类型 toString 得到 */
|
|
35
|
+
function maybeToString(str) {
|
|
36
|
+
// 布尔值和 null/undefined
|
|
37
|
+
if (str === 'true' || str === 'false' || str === 'null' || str === 'undefined')
|
|
38
|
+
return true;
|
|
39
|
+
// 数字
|
|
40
|
+
if (!Number.isNaN(Number(str)))
|
|
41
|
+
return true;
|
|
42
|
+
// Object.toString()
|
|
43
|
+
if (str.startsWith('[') && str.endsWith(']'))
|
|
44
|
+
return true;
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
/** 比较字符串 */
|
|
48
|
+
export function equalText(state, op, l, r) {
|
|
49
|
+
const lr = scalar(`${op}/equalText`, state, migrateExpr(state, l));
|
|
50
|
+
const rr = scalar(`${op}/equalText`, state, migrateExpr(state, r));
|
|
51
|
+
if ((lr.type === 'string' && rr.type === 'string') ||
|
|
52
|
+
(typeof lr.literal == 'string' && rr.type !== 'array' && !maybeToString(lr.literal)) ||
|
|
53
|
+
(typeof rr.literal == 'string' && lr.type !== 'array' && !maybeToString(rr.literal))) {
|
|
54
|
+
return {
|
|
55
|
+
type: 'boolean',
|
|
56
|
+
code: `${lr.code} ${op} ${rr.code}`,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
type: 'boolean',
|
|
61
|
+
code: `${toString(state, lr).code} ${op} ${toString(state, rr).code}`,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/migrator/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGrE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,qBAAqB;AACrB,MAAM,UAAU,UAAU,CAAC,IAAc;IACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,wBAAwB;AACxB,MAAM,UAAU,aAAa,CAAC,IAAc;IACxC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;AAC9B,CAAC;AAED,aAAa;AACb,MAAM,UAAU,eAAe,CAAC,KAAY,EAAE,IAAc;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;IAC5C,OAAO;QACH,IAAI,EAAE,MAAM,GAAG,KAAK;KACvB,CAAC;AACN,CAAC;AAED,eAAe;AACf,MAAM,UAAU,MAAM,CAAC,EAAU,EAAE,KAAY,EAAE,EAAU;IACvD,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACtB,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AAED,6BAA6B;AAC7B,SAAS,aAAa,CAAC,GAAW;IAC9B,sBAAsB;IACtB,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC5F,KAAK;IACL,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5C,oBAAoB;IACpB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,YAAY;AACZ,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,EAAe,EAAE,CAAW,EAAE,CAAW;IAC7E,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,IACI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC;QAC9C,CAAC,OAAO,EAAE,CAAC,OAAO,IAAI,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QACpF,CAAC,OAAO,EAAE,CAAC,OAAO,IAAI,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EACtF,CAAC;QACC,OAAO;YACH,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE;SACtC,CAAC;IACN,CAAC;IACD,OAAO;QACH,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;KACxE,CAAC;AACN,CAAC"}
|
package/dist/parser.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type VmScript } from '@mirascript/mirascript';
|
|
2
|
+
import type { Context } from './context.js';
|
|
3
|
+
/** 一般表达式 */
|
|
4
|
+
export interface EvalExpressionCache {
|
|
5
|
+
/**
|
|
6
|
+
* 源码
|
|
7
|
+
*/
|
|
8
|
+
source: string;
|
|
9
|
+
/**
|
|
10
|
+
* 求值函数
|
|
11
|
+
*/
|
|
12
|
+
func: VmScript;
|
|
13
|
+
/**
|
|
14
|
+
* 编译错误
|
|
15
|
+
*/
|
|
16
|
+
error: undefined;
|
|
17
|
+
}
|
|
18
|
+
/** 编译错误表达式 */
|
|
19
|
+
export interface ErrorExpressionCache {
|
|
20
|
+
/**
|
|
21
|
+
* 源码
|
|
22
|
+
*/
|
|
23
|
+
source: string;
|
|
24
|
+
/**
|
|
25
|
+
* 求值函数
|
|
26
|
+
*/
|
|
27
|
+
func: undefined;
|
|
28
|
+
/**
|
|
29
|
+
* 编译错误
|
|
30
|
+
*/
|
|
31
|
+
error: Error;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 表达式缓存
|
|
35
|
+
*/
|
|
36
|
+
export type ExpressionCache = ErrorExpressionCache | EvalExpressionCache;
|
|
37
|
+
/**
|
|
38
|
+
* 解析表达式
|
|
39
|
+
*/
|
|
40
|
+
export declare function parse(context: Context, expression: string, throws: boolean): ExpressionCache;
|
|
41
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY;AACZ,MAAM,WAAW,mBAAmB;IAChC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,QAAQ,CAAC;IACf;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;CACpB;AACD,cAAc;AACd,MAAM,WAAW,oBAAoB;IACjC;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,KAAK,EAAE,KAAK,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAiBzE;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,eAAe,CAY5F"}
|
package/dist/parser.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { compileSync } from '@mirascript/mirascript';
|
|
2
|
+
/**
|
|
3
|
+
* 编译表达式
|
|
4
|
+
*/
|
|
5
|
+
function compile(expression) {
|
|
6
|
+
const compiled = {
|
|
7
|
+
source: expression,
|
|
8
|
+
};
|
|
9
|
+
try {
|
|
10
|
+
const script = compileSync(expression);
|
|
11
|
+
compiled.func = script;
|
|
12
|
+
}
|
|
13
|
+
catch (ex) {
|
|
14
|
+
compiled.error = ex;
|
|
15
|
+
}
|
|
16
|
+
return compiled;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 解析表达式
|
|
20
|
+
*/
|
|
21
|
+
export function parse(context, expression, throws) {
|
|
22
|
+
if (typeof expression != 'string') {
|
|
23
|
+
throw new TypeError(`${String(expression)} is not a valid expression`);
|
|
24
|
+
}
|
|
25
|
+
const v = context.expressionCache.get(expression);
|
|
26
|
+
if (v)
|
|
27
|
+
return v;
|
|
28
|
+
const complied = compile(expression);
|
|
29
|
+
if (complied.error) {
|
|
30
|
+
if (throws)
|
|
31
|
+
throw complied.error;
|
|
32
|
+
}
|
|
33
|
+
context.expressionCache.set(expression, complied);
|
|
34
|
+
return complied;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAiB,MAAM,wBAAwB,CAAC;AAqCpE;;GAEG;AACH,SAAS,OAAO,CAAC,UAAkB;IAC/B,MAAM,QAAQ,GAAG;QACb,MAAM,EAAE,UAAU;KACF,CAAC;IACrB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QACvC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC;IAC3B,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACV,QAAQ,CAAC,KAAK,GAAG,EAAW,CAAC;IACjC,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,OAAgB,EAAE,UAAkB,EAAE,MAAe;IACvE,IAAI,OAAO,UAAU,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAChB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,MAAM;YAAE,MAAM,QAAQ,CAAC,KAAK,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,OAAO,QAAQ,CAAC;AACpB,CAAC"}
|
package/dist/scope.d.ts
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type VmAny, type VmContext, type VmValue } from '@mirascript/mirascript';
|
|
2
|
+
import type { Context } from './context.js';
|
|
3
|
+
import { type CompiledExpression, type Expression, type ExpressionOrValue } from './expression.js';
|
|
4
|
+
/** 函数的执行环境 */
|
|
5
|
+
export declare class Scope {
|
|
6
|
+
/** 生成环境的工厂函数 */
|
|
7
|
+
readonly scope?: (((key: string) => ExpressionOrValue | undefined) | Record<string, ExpressionOrValue | undefined>) | undefined;
|
|
8
|
+
/** 求值失败是否抛异常 */
|
|
9
|
+
readonly throws: boolean;
|
|
10
|
+
/** 执行环境名称 */
|
|
11
|
+
readonly name: string;
|
|
12
|
+
/** 最大求值计数 */
|
|
13
|
+
static readonly MAX_RECURSION = 500;
|
|
14
|
+
constructor(
|
|
15
|
+
/** 生成环境的工厂函数 */
|
|
16
|
+
scope?: (((key: string) => ExpressionOrValue | undefined) | Record<string, ExpressionOrValue | undefined>) | undefined,
|
|
17
|
+
/** 求值失败是否抛异常 */
|
|
18
|
+
throws?: boolean,
|
|
19
|
+
/** 执行环境名称 */
|
|
20
|
+
name?: string);
|
|
21
|
+
protected readonly getter: (key: string) => VmAny;
|
|
22
|
+
/** 上下文 */
|
|
23
|
+
protected context: Context | null;
|
|
24
|
+
/** 求值计数 */
|
|
25
|
+
protected evalCounter: number;
|
|
26
|
+
/** 重置执行环境 */
|
|
27
|
+
reset(context: Context | null): () => void;
|
|
28
|
+
/** 函数的执行环境,惰性求值 */
|
|
29
|
+
protected _proxy?: VmContext;
|
|
30
|
+
/** 函数的执行环境,惰性求值 */
|
|
31
|
+
get proxy(): VmContext;
|
|
32
|
+
/** 检查环境中是否有值 */
|
|
33
|
+
has(key: string): boolean;
|
|
34
|
+
/** 获取环境中的值 */
|
|
35
|
+
get(key: string): VmAny;
|
|
36
|
+
/**
|
|
37
|
+
* 表达式递归求值
|
|
38
|
+
*/
|
|
39
|
+
eval(expression: Expression | CompiledExpression, path: readonly PropertyKey[]): VmValue;
|
|
40
|
+
}
|
|
41
|
+
/** 移除 PROXY */
|
|
42
|
+
export declare function unwrap<T>(value: T): T;
|
|
43
|
+
//# sourceMappingURL=scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC/G,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,iBAAiB,EAGzB,MAAM,iBAAiB,CAAC;AA0DzB,cAAc;AACd,qBAAa,KAAK;IAIV,gBAAgB;IAChB,QAAQ,CAAC,KAAK,CAAC,GACT,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC,GAChD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACnD,gBAAgB;IAChB,QAAQ,CAAC,MAAM;IACf,aAAa;IACb,QAAQ,CAAC,IAAI;IAVjB,aAAa;IACb,MAAM,CAAC,QAAQ,CAAC,aAAa,OAAO;;IAEhC,gBAAgB;IACP,KAAK,CAAC,GACT,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC,GAChD,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC,aAAA;IACnD,gBAAgB;IACP,MAAM,UAAO;IACtB,aAAa;IACJ,IAAI,SAAgB;IAqBjC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,CAAC;IAClD,UAAU;IACV,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;IACzC,WAAW;IACX,SAAS,CAAC,WAAW,SAAK;IAC1B,aAAa;IACb,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,IAAI;IAU1C,mBAAmB;IACnB,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;IAC7B,mBAAmB;IACnB,IAAI,KAAK,IAAI,SAAS,CAGrB;IAED,gBAAgB;IAChB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAYzB,cAAc;IACd,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK;IAavB;;OAEG;IACH,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,kBAAkB,EAAE,IAAI,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO;CAgC3F;AAmBD,eAAe;AACf,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAErC"}
|
package/dist/scope.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { createVmContext, isVmExtern } from '@mirascript/mirascript';
|
|
2
|
+
import { ExpressionTag, isExpression, } from './expression.js';
|
|
3
|
+
import { DEFAULTS, evaluateEval } from './eval.js';
|
|
4
|
+
import { parse } from './parser.js';
|
|
5
|
+
import { TypeInfo } from './type.js';
|
|
6
|
+
const { hasOwn } = Object;
|
|
7
|
+
const RAW = Symbol.for('@private/expression:raw');
|
|
8
|
+
/** 是否需要创建代理对象 */
|
|
9
|
+
function needsProxy(value) {
|
|
10
|
+
return isExpression(value) || (value != null && typeof value == 'object');
|
|
11
|
+
}
|
|
12
|
+
/** 创建代理对象 */
|
|
13
|
+
function createProxy(value, scope, path) {
|
|
14
|
+
// 先检查 isExpression,因为 'function' 也有可能是 Expression
|
|
15
|
+
if (isExpression(value)) {
|
|
16
|
+
return scope.eval(value, path);
|
|
17
|
+
}
|
|
18
|
+
if (typeof value != 'object' || value == null) {
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
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;
|
|
28
|
+
}
|
|
29
|
+
return new Proxy(value, new ScopeProxyHandler(scope, path));
|
|
30
|
+
}
|
|
31
|
+
/** 函数的执行环境 */
|
|
32
|
+
class ScopeProxyHandler {
|
|
33
|
+
constructor(scope, path) {
|
|
34
|
+
this.scope = scope;
|
|
35
|
+
this.path = path;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @inheritdoc
|
|
39
|
+
*/
|
|
40
|
+
get(target, p) {
|
|
41
|
+
if (p === RAW) {
|
|
42
|
+
return target;
|
|
43
|
+
}
|
|
44
|
+
const value = Reflect.get(target, p);
|
|
45
|
+
if (!needsProxy(value)) {
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
if (isVmExtern(target)) {
|
|
49
|
+
return createProxy(value, this.scope, this.path);
|
|
50
|
+
}
|
|
51
|
+
return createProxy(value, this.scope, [...this.path, p]);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/** 函数的执行环境 */
|
|
55
|
+
export class Scope {
|
|
56
|
+
/** 最大求值计数 */
|
|
57
|
+
static { this.MAX_RECURSION = 500; }
|
|
58
|
+
constructor(
|
|
59
|
+
/** 生成环境的工厂函数 */
|
|
60
|
+
scope,
|
|
61
|
+
/** 求值失败是否抛异常 */
|
|
62
|
+
throws = true,
|
|
63
|
+
/** 执行环境名称 */
|
|
64
|
+
name = '<anonymous>') {
|
|
65
|
+
this.scope = scope;
|
|
66
|
+
this.throws = throws;
|
|
67
|
+
this.name = name;
|
|
68
|
+
/** 上下文 */
|
|
69
|
+
this.context = null;
|
|
70
|
+
/** 求值计数 */
|
|
71
|
+
this.evalCounter = 0;
|
|
72
|
+
if (scope == null) {
|
|
73
|
+
this.getter = (key) => this.context?.imported.get(key);
|
|
74
|
+
}
|
|
75
|
+
else if (typeof scope == 'function') {
|
|
76
|
+
this.getter = (key) => {
|
|
77
|
+
const v = scope(key);
|
|
78
|
+
if (v === undefined)
|
|
79
|
+
return this.context?.imported.get(key);
|
|
80
|
+
if (!needsProxy(v))
|
|
81
|
+
return v;
|
|
82
|
+
return createProxy(v, this, [key]);
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.getter = (key) => {
|
|
87
|
+
if (!hasOwn(scope, key))
|
|
88
|
+
return this.context?.imported.get(key);
|
|
89
|
+
const v = scope[key];
|
|
90
|
+
if (!needsProxy(v))
|
|
91
|
+
return v;
|
|
92
|
+
return createProxy(v, this, [key]);
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
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
|
+
/** 检查环境中是否有值 */
|
|
113
|
+
has(key) {
|
|
114
|
+
const { scope } = this;
|
|
115
|
+
if (scope == null)
|
|
116
|
+
return false;
|
|
117
|
+
let v;
|
|
118
|
+
if (typeof scope == 'function') {
|
|
119
|
+
v = scope(key);
|
|
120
|
+
}
|
|
121
|
+
else if (hasOwn(scope, key)) {
|
|
122
|
+
v = scope[key];
|
|
123
|
+
}
|
|
124
|
+
return v !== undefined;
|
|
125
|
+
}
|
|
126
|
+
/** 获取环境中的值 */
|
|
127
|
+
get(key) {
|
|
128
|
+
const { scope } = this;
|
|
129
|
+
if (scope == null)
|
|
130
|
+
return undefined;
|
|
131
|
+
let v;
|
|
132
|
+
if (typeof scope == 'function') {
|
|
133
|
+
v = scope(key);
|
|
134
|
+
}
|
|
135
|
+
else if (hasOwn(scope, key)) {
|
|
136
|
+
v = scope[key];
|
|
137
|
+
}
|
|
138
|
+
if (!isExpression(v))
|
|
139
|
+
return v;
|
|
140
|
+
return this.eval(v, [key]);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* 表达式递归求值
|
|
144
|
+
*/
|
|
145
|
+
eval(expression, path) {
|
|
146
|
+
if (this.evalCounter >= Scope.MAX_RECURSION) {
|
|
147
|
+
throw new Error(`Execution recursion exceeds limit`);
|
|
148
|
+
}
|
|
149
|
+
this.evalCounter++;
|
|
150
|
+
try {
|
|
151
|
+
let result;
|
|
152
|
+
if (typeof expression == 'function') {
|
|
153
|
+
result = expression(this);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
const { context } = this;
|
|
157
|
+
if (!context) {
|
|
158
|
+
throw new Error(`Undefined context`);
|
|
159
|
+
}
|
|
160
|
+
const exp = parse(context, expression.source, this.throws);
|
|
161
|
+
if (exp.func != null) {
|
|
162
|
+
result = evaluateEval(context, exp, this);
|
|
163
|
+
}
|
|
164
|
+
else if (exp.error != null) {
|
|
165
|
+
throw exp.error;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
result = DEFAULTS;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (result === DEFAULTS)
|
|
172
|
+
return null;
|
|
173
|
+
const tag = expression[ExpressionTag];
|
|
174
|
+
if (!tag)
|
|
175
|
+
return result;
|
|
176
|
+
return TypeInfo.to(result, TypeInfo.parse(tag));
|
|
177
|
+
}
|
|
178
|
+
catch (ex) {
|
|
179
|
+
throw new Error(`${ex.message || String(ex)}\nIn ${this.name}: @ ${path.join('/')}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/** 移除 PROXY */
|
|
184
|
+
function unwrapCore(value) {
|
|
185
|
+
if (value == null || (typeof value != 'object' && typeof value != 'function')) {
|
|
186
|
+
return undefined;
|
|
187
|
+
}
|
|
188
|
+
const raw = value[RAW];
|
|
189
|
+
const obj = raw ?? value;
|
|
190
|
+
for (const key in obj) {
|
|
191
|
+
if (!hasOwn(obj, key))
|
|
192
|
+
continue;
|
|
193
|
+
const unwrapped = unwrapCore(obj[key]);
|
|
194
|
+
if (unwrapped !== undefined) {
|
|
195
|
+
obj[key] = unwrapped;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return raw;
|
|
199
|
+
}
|
|
200
|
+
/** 移除 PROXY */
|
|
201
|
+
export function unwrap(value) {
|
|
202
|
+
return unwrapCore(value) ?? value;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../src/scope.ts"],"names":[],"mappings":"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"}
|
package/dist/type.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { VmValue, VmValueMap } from '@mirascript/mirascript';
|
|
2
|
+
/** 类型信息 */
|
|
3
|
+
export type TypeInfo = 'string' | 'number' | 'boolean';
|
|
4
|
+
/** 类型映射 */
|
|
5
|
+
type TypeMap = VmValueMap & {
|
|
6
|
+
s: string;
|
|
7
|
+
f: number;
|
|
8
|
+
b: boolean;
|
|
9
|
+
};
|
|
10
|
+
/** Ts 类型 */
|
|
11
|
+
export type TsTypeOf<T extends TypeInfo | LegacyType> = TypeMap[T];
|
|
12
|
+
/** 兼容的旧类型 */
|
|
13
|
+
export type LegacyType = 's' | 'f' | 'b';
|
|
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
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=type.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/type.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { lib } from '@mirascript/mirascript/subtle';
|
|
2
|
+
const x = 'boolean';
|
|
3
|
+
x;
|
|
4
|
+
/** 类型信息 */
|
|
5
|
+
export const TypeInfo = {
|
|
6
|
+
parse: (type) => {
|
|
7
|
+
if (type === 's' || type === 'string')
|
|
8
|
+
return 'string';
|
|
9
|
+
if (type === 'f' || type === 'number')
|
|
10
|
+
return 'number';
|
|
11
|
+
if (type === 'b' || type === 'boolean')
|
|
12
|
+
return 'boolean';
|
|
13
|
+
throw new TypeError(`Invalid type '${String(type)}'`);
|
|
14
|
+
},
|
|
15
|
+
is: (value, type) => {
|
|
16
|
+
switch (type) {
|
|
17
|
+
case 'b':
|
|
18
|
+
case 'boolean':
|
|
19
|
+
return typeof value === 'boolean';
|
|
20
|
+
case 'f':
|
|
21
|
+
case 'number':
|
|
22
|
+
return typeof value === 'number';
|
|
23
|
+
case 's':
|
|
24
|
+
case 'string':
|
|
25
|
+
return typeof value === 'string';
|
|
26
|
+
default:
|
|
27
|
+
(type);
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
to: (value, type) => {
|
|
32
|
+
if (!type)
|
|
33
|
+
return value;
|
|
34
|
+
switch (type) {
|
|
35
|
+
case 'b':
|
|
36
|
+
case 'boolean':
|
|
37
|
+
return lib.to_boolean(value);
|
|
38
|
+
case 'f':
|
|
39
|
+
case 'number':
|
|
40
|
+
return lib.to_number(value);
|
|
41
|
+
case 's':
|
|
42
|
+
case 'string':
|
|
43
|
+
return lib.to_string(value);
|
|
44
|
+
default:
|
|
45
|
+
(type);
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=type.js.map
|
package/dist/type.js.map
ADDED
|
@@ -0,0 +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"}
|
package/jest.config.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cloudpss/expression",
|
|
3
|
+
"version": "0.6.0-alpha.1",
|
|
4
|
+
"author": "CloudPSS",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"module": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": "./dist/index.js",
|
|
12
|
+
"./*": "./dist/*.js"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@mirascript/mirascript": "^0.0.17",
|
|
16
|
+
"klona": "^2.0.6",
|
|
17
|
+
"lru-cache": "^11.2.2",
|
|
18
|
+
"mathjs": "^14.7.0",
|
|
19
|
+
"type-fest": "^5.0.1"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "pnpm clean && tsc --build --force",
|
|
23
|
+
"clean": "rimraf dist",
|
|
24
|
+
"test": "NODE_OPTIONS=\"${NODE_OPTIONS:-} --experimental-vm-modules\" jest"
|
|
25
|
+
}
|
|
26
|
+
}
|