@cloudpss/expression 0.6.24 → 0.6.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional.d.ts","sourceRoot":"","sources":["../../src/migrator/conditional.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"conditional.d.ts","sourceRoot":"","sources":["../../src/migrator/conditional.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKtD,WAAW;AACX,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CA6GhG"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isFunctionNode, isOperatorNode
|
|
1
|
+
import { isFunctionNode, isOperatorNode } from 'mathjs';
|
|
2
2
|
import { toBoolean } from './to-type.js';
|
|
3
3
|
import { migrateAtomic } from './node.js';
|
|
4
4
|
import { constantValue } from './utils.js';
|
|
@@ -9,6 +9,7 @@ export function migrateConditional(state, node, options) {
|
|
|
9
9
|
// x ? true : false
|
|
10
10
|
const condRet = toBoolean(state, condition);
|
|
11
11
|
let { code } = condRet;
|
|
12
|
+
code += ' ?? false';
|
|
12
13
|
if (options.format === 'paren') {
|
|
13
14
|
code = `(${code})`;
|
|
14
15
|
}
|
|
@@ -19,12 +20,9 @@ export function migrateConditional(state, node, options) {
|
|
|
19
20
|
}
|
|
20
21
|
if (constantValue(trueExpr) === false && constantValue(falseExpr) === true) {
|
|
21
22
|
// x ? false : true
|
|
22
|
-
const
|
|
23
|
-
const condRet = toBoolean(state, c2);
|
|
23
|
+
const condRet = toBoolean(state, condition);
|
|
24
24
|
let { code } = condRet;
|
|
25
|
-
|
|
26
|
-
code = `(${code})`;
|
|
27
|
-
}
|
|
25
|
+
code = `!(${code} ?? false)`;
|
|
28
26
|
return {
|
|
29
27
|
type: 'boolean',
|
|
30
28
|
code,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditional.js","sourceRoot":"","sources":["../../src/migrator/conditional.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"conditional.js","sourceRoot":"","sources":["../../src/migrator/conditional.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudpss/expression",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.26",
|
|
4
4
|
"author": "CloudPSS",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"klona": "^2.0.6",
|
|
17
17
|
"lru-cache": "^11.2.7",
|
|
18
18
|
"mathjs": "^15.1.1",
|
|
19
|
-
"type-fest": "^5.
|
|
19
|
+
"type-fest": "^5.5.0"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"dedent": "^1.7.2"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isFunctionNode, isOperatorNode,
|
|
1
|
+
import { isFunctionNode, isOperatorNode, type ConditionalNode } from 'mathjs';
|
|
2
2
|
import type { State } from './state.js';
|
|
3
3
|
import type { Options, Result } from './interface.js';
|
|
4
4
|
import { toBoolean } from './to-type.js';
|
|
@@ -13,6 +13,7 @@ export function migrateConditional(state: State, node: ConditionalNode, options:
|
|
|
13
13
|
// x ? true : false
|
|
14
14
|
const condRet = toBoolean(state, condition);
|
|
15
15
|
let { code } = condRet;
|
|
16
|
+
code += ' ?? false';
|
|
16
17
|
if (options.format === 'paren') {
|
|
17
18
|
code = `(${code})`;
|
|
18
19
|
}
|
|
@@ -24,12 +25,9 @@ export function migrateConditional(state: State, node: ConditionalNode, options:
|
|
|
24
25
|
|
|
25
26
|
if (constantValue(trueExpr) === false && constantValue(falseExpr) === true) {
|
|
26
27
|
// x ? false : true
|
|
27
|
-
const
|
|
28
|
-
const condRet = toBoolean(state, c2);
|
|
28
|
+
const condRet = toBoolean(state, condition);
|
|
29
29
|
let { code } = condRet;
|
|
30
|
-
|
|
31
|
-
code = `(${code})`;
|
|
32
|
-
}
|
|
30
|
+
code = `!(${code} ?? false)`;
|
|
33
31
|
return {
|
|
34
32
|
type: 'boolean',
|
|
35
33
|
code,
|
package/tests/migrate.ts
CHANGED
|
@@ -57,11 +57,21 @@ describe('migrate', () => {
|
|
|
57
57
|
['$a + 1', 'matrix.add($a, 1)', VmError],
|
|
58
58
|
['size(a)[1]', 'len(a)', 3],
|
|
59
59
|
['size(s)[1]', 'len(chars(s))', 3],
|
|
60
|
+
[
|
|
61
|
+
'size(null)[1]',
|
|
62
|
+
dedent`
|
|
63
|
+
return @@length(nil);
|
|
64
|
+
// # 帮助函数
|
|
65
|
+
fn @@length(x) { if type(x) == 'string' { len(chars(x)) } else if type(x) == 'array' { len(x) } else { x.length ?? 0 } }
|
|
66
|
+
// # 原始 math.js 表达式
|
|
67
|
+
// size(null)[1]`,
|
|
68
|
+
0,
|
|
69
|
+
],
|
|
60
70
|
['(a).length', 'len((a))', 3],
|
|
61
71
|
['(s).length', 'len(chars((s)))', 3],
|
|
62
72
|
['count(s)', 'len(chars(s))', 3],
|
|
63
|
-
['b ? true : false', 'b', false],
|
|
64
|
-
['b ? false : true', '!b', true],
|
|
73
|
+
['b ? true : false', 'b ?? false', false],
|
|
74
|
+
['b ? false : true', '!(b ?? false)', true],
|
|
65
75
|
['is(f, "string") ? count(f) != 0 : false', "type(f) == 'string' && f != ''", false],
|
|
66
76
|
['is(f, "string") ? equalText(f, "xyz") : false', "f == 'xyz'", false],
|
|
67
77
|
['b ? 1 : 2', 'if b { 1 } else { 2 }', 2],
|
|
@@ -533,6 +543,26 @@ describe('migrate', () => {
|
|
|
533
543
|
[`round([1.54, 2.63, -1.71], 1)`, `matrix.entrywise([1.54, 2.63, -1.71], 1, round)`, [1.5, 2.6, -1.7]],
|
|
534
544
|
[`ceil(1.32, 1)`, `ceil(1.32, 1)`, 1.4],
|
|
535
545
|
[`max([1,2,3])`, `max([1, 2, 3])`, 3],
|
|
546
|
+
[
|
|
547
|
+
`n ? true : false`,
|
|
548
|
+
dedent`
|
|
549
|
+
return @@to_boolean(n) ?? false;
|
|
550
|
+
// # 帮助函数
|
|
551
|
+
fn @@to_boolean { if it is nil { nil } else { it != '' && it != '0' && it != 0 && it is not nan && it != false } }
|
|
552
|
+
// # 原始 math.js 表达式
|
|
553
|
+
// n ? true : false`,
|
|
554
|
+
false,
|
|
555
|
+
],
|
|
556
|
+
[
|
|
557
|
+
`n ? false : true`,
|
|
558
|
+
dedent`
|
|
559
|
+
return !(@@to_boolean(n) ?? false);
|
|
560
|
+
// # 帮助函数
|
|
561
|
+
fn @@to_boolean { if it is nil { nil } else { it != '' && it != '0' && it != 0 && it is not nan && it != false } }
|
|
562
|
+
// # 原始 math.js 表达式
|
|
563
|
+
// n ? false : true`,
|
|
564
|
+
true,
|
|
565
|
+
],
|
|
536
566
|
])('should migrate expression: %s', (f, t, r) => {
|
|
537
567
|
const migrated = migrateMathJs(f as ExpressionSource, false, s);
|
|
538
568
|
expect(migrated).toBe(t);
|