mathjs 10.6.0 → 10.6.3

Sign up to get free protection for your applications and to get access to all the features.
package/lib/cjs/header.js CHANGED
@@ -6,8 +6,8 @@
6
6
  * It features real and complex numbers, units, matrices, a large set of
7
7
  * mathematical functions, and a flexible expression parser.
8
8
  *
9
- * @version 10.6.0
10
- * @date 2022-05-24
9
+ * @version 10.6.3
10
+ * @date 2022-06-24
11
11
  *
12
12
  * @license
13
13
  * Copyright (C) 2013-2022 Jos de Jong <wjosdejong@gmail.com>
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- var version = '10.6.0'; // Note: This file is automatically generated when building math.js.
7
+ var version = '10.6.3'; // Note: This file is automatically generated when building math.js.
8
8
  // Changes made in this file will be overwritten.
9
9
 
10
10
  exports.version = version;
@@ -1,2 +1,2 @@
1
- export var version = '10.6.0'; // Note: This file is automatically generated when building math.js.
1
+ export var version = '10.6.3'; // Note: This file is automatically generated when building math.js.
2
2
  // Changes made in this file will be overwritten.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mathjs",
3
- "version": "10.6.0",
3
+ "version": "10.6.3",
4
4
  "description": "Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser with support for symbolic computation, comes with a large set of built-in functions and constants, and offers an integrated solution to work with different data types like numbers, big numbers, complex numbers, fractions, units, and matrices.",
5
5
  "author": "Jos de Jong <wjosdejong@gmail.com> (https://github.com/josdejong)",
6
6
  "homepage": "https://mathjs.org",
@@ -25,7 +25,7 @@
25
25
  "unit"
26
26
  ],
27
27
  "dependencies": {
28
- "@babel/runtime": "^7.17.9",
28
+ "@babel/runtime": "^7.18.3",
29
29
  "complex.js": "^2.1.1",
30
30
  "decimal.js": "^10.3.1",
31
31
  "escape-latex": "^1.2.0",
@@ -36,28 +36,28 @@
36
36
  "typed-function": "^2.1.0"
37
37
  },
38
38
  "devDependencies": {
39
- "@babel/core": "7.17.10",
39
+ "@babel/core": "7.18.5",
40
40
  "@babel/plugin-transform-object-assign": "7.16.7",
41
- "@babel/plugin-transform-runtime": "7.17.10",
42
- "@babel/preset-env": "7.17.10",
41
+ "@babel/plugin-transform-runtime": "7.18.5",
42
+ "@babel/preset-env": "7.18.2",
43
43
  "@babel/register": "7.17.7",
44
44
  "@types/assert": "1.5.6",
45
45
  "@types/mocha": "9.1.1",
46
- "@typescript-eslint/eslint-plugin": "5.22.0",
47
- "@typescript-eslint/parser": "5.22.0",
46
+ "@typescript-eslint/eslint-plugin": "5.29.0",
47
+ "@typescript-eslint/parser": "5.29.0",
48
48
  "assert": "2.0.0",
49
49
  "babel-loader": "8.2.5",
50
50
  "benchmark": "2.1.4",
51
51
  "codecov": "3.8.3",
52
- "core-js": "3.22.4",
53
- "del": "6.0.0",
52
+ "core-js": "3.23.2",
53
+ "del": "6.1.1",
54
54
  "dtslint": "4.2.1",
55
- "eslint": "8.15.0",
55
+ "eslint": "8.18.0",
56
56
  "eslint-config-prettier": "8.5.0",
57
57
  "eslint-config-standard": "17.0.0",
58
58
  "eslint-plugin-import": "2.26.0",
59
- "eslint-plugin-mocha": "10.0.4",
60
- "eslint-plugin-n": "15.2.0",
59
+ "eslint-plugin-mocha": "10.0.5",
60
+ "eslint-plugin-n": "15.2.3",
61
61
  "eslint-plugin-prettier": "4.0.0",
62
62
  "eslint-plugin-promise": "6.0.0",
63
63
  "expect-type": "0.13.0",
@@ -69,7 +69,7 @@
69
69
  "handlebars": "4.7.7",
70
70
  "istanbul": "0.4.5",
71
71
  "jsep": "1.3.6",
72
- "karma": "6.3.19",
72
+ "karma": "6.4.0",
73
73
  "karma-browserstack-launcher": "1.6.0",
74
74
  "karma-firefox-launcher": "2.1.2",
75
75
  "karma-mocha": "2.0.1",
@@ -86,11 +86,11 @@
86
86
  "numericjs": "1.2.6",
87
87
  "nyc": "15.1.0",
88
88
  "pad-right": "0.2.2",
89
- "prettier": "2.6.2",
89
+ "prettier": "2.7.1",
90
90
  "process": "0.11.10",
91
91
  "sylvester": "0.0.21",
92
- "ts-node": "10.7.0",
93
- "typescript": "4.6.4",
92
+ "ts-node": "10.8.1",
93
+ "typescript": "4.7.4",
94
94
  "webpack": "4.46.0",
95
95
  "zeros": "1.0.0"
96
96
  },
package/types/index.d.ts CHANGED
@@ -276,32 +276,77 @@ declare namespace math {
276
276
  new (properties: Record<string, MathNode>): ObjectNode
277
277
  }
278
278
 
279
- interface OperatorNode extends MathNodeCommon {
279
+ type OperatorNodeMap = {
280
+ xor: 'xor'
281
+ and: 'and'
282
+ bitOr: '|'
283
+ bitXor: '^|'
284
+ bitAnd: '&'
285
+ equal: '=='
286
+ unequal: '!='
287
+ smaller: '<'
288
+ larger: '>'
289
+ smallerEq: '<='
290
+ leftShift: '<<'
291
+ rightArithShift: '>>'
292
+ rightLogShift: '>>>'
293
+ to: 'to'
294
+ add: '+'
295
+ subtract: '-'
296
+ multiply: '*'
297
+ divide: '/'
298
+ dotMultiply: '.*'
299
+ dotDivide: './'
300
+ mod: 'mod'
301
+ unaryPlus: '+'
302
+ unaryMinus: '-'
303
+ bitNot: '~'
304
+ not: 'not'
305
+ pow: '^'
306
+ dotPow: '.^'
307
+ factorial: '!'
308
+ }
309
+
310
+ type OperatorNodeOp = OperatorNodeMap[keyof OperatorNodeMap]
311
+ type OperatorNodeFn = keyof OperatorNodeMap
312
+
313
+ interface OperatorNode<
314
+ TOp extends OperatorNodeMap[TFn] = never,
315
+ TFn extends OperatorNodeFn = never,
316
+ TArgs extends MathNode[] = MathNode[]
317
+ > extends MathNodeCommon {
280
318
  type: 'OperatorNode'
281
319
  isOperatorNode: true
282
- op: string
283
- fn: string
284
- args: MathNode[]
320
+ op: TOp
321
+ fn: TFn
322
+ args: TArgs
285
323
  implicit: boolean
286
324
  isUnary(): boolean
287
325
  isBinary(): boolean
288
326
  }
289
- interface OperatorNodeCtor {
290
- new (
291
- op: string,
292
- fn: string,
293
- args: MathNode[],
327
+
328
+ interface OperatorNodeCtor extends MathNodeCommon {
329
+ new <
330
+ TOp extends OperatorNodeMap[TFn],
331
+ TFn extends OperatorNodeFn,
332
+ TArgs extends MathNode[]
333
+ >(
334
+ op: TOp,
335
+ fn: TFn,
336
+ args: TArgs,
294
337
  implicit?: boolean
295
- ): OperatorNode
338
+ ): OperatorNode<TOp, TFn, TArgs>
296
339
  }
297
-
298
- interface ParenthesisNode extends MathNodeCommon {
340
+ interface ParenthesisNode<TContent extends MathNode = MathNode>
341
+ extends MathNodeCommon {
299
342
  type: 'ParenthesisNode'
300
343
  isParenthesisNode: true
301
- content: MathNode
344
+ content: TContent
302
345
  }
303
346
  interface ParenthesisNodeCtor {
304
- new (content: MathNode): ParenthesisNode
347
+ new <TContent extends MathNode>(
348
+ content: TContent
349
+ ): ParenthesisNode<TContent>
305
350
  }
306
351
 
307
352
  interface RangeNode extends MathNodeCommon {
@@ -345,7 +390,7 @@ declare namespace math {
345
390
  | FunctionNode
346
391
  | IndexNode
347
392
  | ObjectNode
348
- | OperatorNode
393
+ | OperatorNode<OperatorNodeOp, OperatorNodeFn>
349
394
  | ParenthesisNode
350
395
  | RangeNode
351
396
  | RelationalNode
@@ -3095,7 +3140,9 @@ declare namespace math {
3095
3140
 
3096
3141
  isObjectNode(x: unknown): x is ObjectNode
3097
3142
 
3098
- isOperatorNode(x: unknown): x is OperatorNode
3143
+ isOperatorNode(
3144
+ x: unknown
3145
+ ): x is OperatorNode<OperatorNodeOp, OperatorNodeFn>
3099
3146
 
3100
3147
  isParenthesisNode(x: unknown): x is ParenthesisNode
3101
3148
 
@@ -3762,22 +3809,7 @@ declare namespace math {
3762
3809
  interface MathNodeCommon {
3763
3810
  isNode: true
3764
3811
  comment: string
3765
- type:
3766
- | 'AccessorNode'
3767
- | 'ArrayNode'
3768
- | 'AssignmentNode'
3769
- | 'BlockNode'
3770
- | 'ConditionalNode'
3771
- | 'ConstantNode'
3772
- | 'FunctionAssignmentNode'
3773
- | 'FunctionNode'
3774
- | 'IndexNode'
3775
- | 'ObjectNode'
3776
- | 'OperatorNode'
3777
- | 'ParenthesisNode'
3778
- | 'RangeNode'
3779
- | 'RelationalNode'
3780
- | 'SymbolNode'
3812
+ type: string
3781
3813
 
3782
3814
  isUpdateNode?: boolean
3783
3815
 
@@ -3901,9 +3933,9 @@ declare namespace math {
3901
3933
  * transformed.toString(); // returns '(3 ^ 2) + (5 * 3)'
3902
3934
  * ```
3903
3935
  */
3904
- transform(
3905
- callback: (node: MathNode, path: string, parent: MathNode) => MathNode
3906
- ): MathNode
3936
+ transform<TResult>(
3937
+ callback: (node: this, path: string, parent: MathNode) => TResult
3938
+ ): TResult
3907
3939
 
3908
3940
  /**
3909
3941
  * `traverse(callback)`
package/types/index.ts CHANGED
@@ -25,6 +25,10 @@ import {
25
25
  MathNumericType,
26
26
  ConstantNode,
27
27
  OperatorNode,
28
+ OperatorNodeFn,
29
+ OperatorNodeOp,
30
+ SymbolNode,
31
+ ParenthesisNode,
28
32
  } from 'mathjs'
29
33
  import * as assert from 'assert'
30
34
  import { expectTypeOf } from 'expect-type'
@@ -822,6 +826,17 @@ Complex numbers examples
822
826
  }
823
827
  }
824
828
 
829
+ /*
830
+ Parenthesis examples
831
+ */
832
+ {
833
+ const math = create(all, {})
834
+
835
+ expectTypeOf(
836
+ new math.ParenthesisNode(new math.ConstantNode(3))
837
+ ).toMatchTypeOf<ParenthesisNode<ConstantNode>>()
838
+ }
839
+
825
840
  /*
826
841
  Expressions examples
827
842
  */
@@ -921,6 +936,46 @@ Fractions examples
921
936
  const _a = math.fraction('2/3')
922
937
  }
923
938
 
939
+ /*
940
+ Transform examples
941
+ */
942
+ {
943
+ const math = create(all, {})
944
+ {
945
+ const myTransform1 = (node: MathNode): OperatorNode<'+', 'add'> =>
946
+ new OperatorNode('+', 'add', [node, new ConstantNode(1)])
947
+ const myTransform2 = (
948
+ node: OperatorNode<'+', 'add'>
949
+ ): OperatorNode<'-', 'subtract'> =>
950
+ new OperatorNode('-', 'subtract', [node, new ConstantNode(5)])
951
+
952
+ expectTypeOf(
953
+ math.parse('sqrt(3^2 + 4^2)').transform(myTransform1)
954
+ ).toMatchTypeOf<OperatorNode<'+', 'add', MathNode[]>>()
955
+
956
+ assert.deepStrictEqual(
957
+ math.parse('sqrt(3^2 + 4^2)').transform(myTransform1).toString(),
958
+ 'sqrt(3 ^ 2 + 4 ^ 2) + 1'
959
+ )
960
+
961
+ expectTypeOf(
962
+ math
963
+ .parse('sqrt(3^2 + 4^2)')
964
+ .transform(myTransform1)
965
+ .transform(myTransform2)
966
+ ).toMatchTypeOf<OperatorNode<'-', 'subtract', MathNode[]>>()
967
+
968
+ assert.deepStrictEqual(
969
+ math
970
+ .parse('sqrt(3^2 + 4^2)')
971
+ .transform(myTransform1)
972
+ .transform(myTransform2)
973
+ .toString(),
974
+ 'sqrt(3 ^ 2 + 4 ^ 2) + 1 - 5'
975
+ )
976
+ }
977
+ }
978
+
924
979
  /*
925
980
  Matrices examples
926
981
  */
@@ -1527,23 +1582,34 @@ Function round examples
1527
1582
  */
1528
1583
  {
1529
1584
  const math = create(all, {})
1585
+ expectTypeOf(
1586
+ new math.OperatorNode('/', 'divide', [
1587
+ new math.ConstantNode(3),
1588
+ new math.SymbolNode('x'),
1589
+ ])
1590
+ ).toMatchTypeOf<OperatorNode<'/', 'divide', (ConstantNode | SymbolNode)[]>>()
1591
+
1530
1592
  expectTypeOf(new math.ConstantNode(1).clone()).toMatchTypeOf<ConstantNode>()
1531
1593
  expectTypeOf(
1532
1594
  new math.OperatorNode('*', 'multiply', [
1533
1595
  new math.ConstantNode(3),
1534
1596
  new math.SymbolNode('x'),
1535
1597
  ]).clone()
1536
- ).toMatchTypeOf<OperatorNode>()
1598
+ ).toMatchTypeOf<
1599
+ OperatorNode<'*', 'multiply', (ConstantNode | SymbolNode)[]>
1600
+ >()
1537
1601
 
1538
1602
  expectTypeOf(
1539
1603
  new math.ConstantNode(1).cloneDeep()
1540
1604
  ).toMatchTypeOf<ConstantNode>()
1541
1605
  expectTypeOf(
1542
- new math.OperatorNode('*', 'multiply', [
1606
+ new math.OperatorNode('+', 'unaryPlus', [
1543
1607
  new math.ConstantNode(3),
1544
1608
  new math.SymbolNode('x'),
1545
1609
  ]).cloneDeep()
1546
- ).toMatchTypeOf<OperatorNode>()
1610
+ ).toMatchTypeOf<
1611
+ OperatorNode<'+', 'unaryPlus', (ConstantNode | SymbolNode)[]>
1612
+ >()
1547
1613
 
1548
1614
  expectTypeOf(
1549
1615
  math.clone(new math.ConstantNode(1))
@@ -1900,7 +1966,9 @@ Factory Test
1900
1966
  expectTypeOf(x).toMatchTypeOf<math.ObjectNode>()
1901
1967
  }
1902
1968
  if (math.isOperatorNode(x)) {
1903
- expectTypeOf(x).toMatchTypeOf<math.OperatorNode>()
1969
+ expectTypeOf(x).toMatchTypeOf<
1970
+ OperatorNode<OperatorNodeOp, OperatorNodeFn, MathNode[]>
1971
+ >()
1904
1972
  }
1905
1973
  if (math.isParenthesisNode(x)) {
1906
1974
  expectTypeOf(x).toMatchTypeOf<math.ParenthesisNode>()