@cloudpss/expression 0.6.25 → 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,EAAgD,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC5F,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,CA+GhG"}
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, OperatorNode } from 'mathjs';
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 c2 = new OperatorNode('not', 'not', [condition]);
23
- const condRet = toBoolean(state, c2);
23
+ const condRet = toBoolean(state, condition);
24
24
  let { code } = condRet;
25
- if (options.format === 'paren') {
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":"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"}
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.25",
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.4.4"
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, OperatorNode, type ConditionalNode } from 'mathjs';
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 c2 = new OperatorNode('not', 'not', [condition]);
28
- const condRet = toBoolean(state, c2);
28
+ const condRet = toBoolean(state, condition);
29
29
  let { code } = condRet;
30
- if (options.format === 'paren') {
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);