mathjs 12.2.1 → 12.3.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.
Files changed (58) hide show
  1. package/HISTORY.md +27 -0
  2. package/NOTICE +1 -1
  3. package/README.md +4 -3
  4. package/bin/cli.js +1 -1
  5. package/lib/browser/math.js +1 -1
  6. package/lib/browser/math.js.LICENSE.txt +3 -3
  7. package/lib/browser/math.js.map +1 -1
  8. package/lib/cjs/entry/configReadonly.js +1 -1
  9. package/lib/cjs/entry/dependenciesAny/dependenciesHelpClass.generated.js +2 -2
  10. package/lib/cjs/entry/dependenciesNumber/dependenciesHelpClass.generated.js +2 -2
  11. package/lib/cjs/entry/impureFunctionsAny.generated.js +14 -14
  12. package/lib/cjs/entry/impureFunctionsNumber.generated.js +1 -1
  13. package/lib/cjs/entry/pureFunctionsAny.generated.js +11 -11
  14. package/lib/cjs/expression/Help.js +21 -4
  15. package/lib/cjs/expression/node/AccessorNode.js +4 -5
  16. package/lib/cjs/expression/node/ArrayNode.js +4 -5
  17. package/lib/cjs/expression/node/AssignmentNode.js +4 -5
  18. package/lib/cjs/expression/node/BlockNode.js +4 -5
  19. package/lib/cjs/expression/node/ConditionalNode.js +4 -5
  20. package/lib/cjs/expression/node/ConstantNode.js +4 -5
  21. package/lib/cjs/expression/node/FunctionAssignmentNode.js +4 -5
  22. package/lib/cjs/expression/node/FunctionNode.js +5 -6
  23. package/lib/cjs/expression/node/IndexNode.js +4 -5
  24. package/lib/cjs/expression/node/ObjectNode.js +4 -5
  25. package/lib/cjs/expression/node/OperatorNode.js +4 -5
  26. package/lib/cjs/expression/node/ParenthesisNode.js +4 -5
  27. package/lib/cjs/expression/node/RangeNode.js +4 -5
  28. package/lib/cjs/expression/node/RelationalNode.js +4 -5
  29. package/lib/cjs/expression/node/SymbolNode.js +4 -5
  30. package/lib/cjs/function/string/bin.js +3 -3
  31. package/lib/cjs/function/string/format.js +3 -3
  32. package/lib/cjs/function/string/hex.js +3 -3
  33. package/lib/cjs/function/string/oct.js +3 -3
  34. package/lib/cjs/header.js +3 -3
  35. package/lib/cjs/type/unit/Unit.js +86 -2
  36. package/lib/cjs/type/unit/physicalConstants.js +1 -1
  37. package/lib/cjs/utils/bignumber/formatter.js +17 -27
  38. package/lib/cjs/utils/number.js +75 -33
  39. package/lib/cjs/version.js +1 -1
  40. package/lib/esm/entry/configReadonly.js +1 -1
  41. package/lib/esm/entry/dependenciesAny/dependenciesHelpClass.generated.js +2 -2
  42. package/lib/esm/entry/dependenciesNumber/dependenciesHelpClass.generated.js +2 -2
  43. package/lib/esm/entry/impureFunctionsAny.generated.js +16 -16
  44. package/lib/esm/entry/impureFunctionsNumber.generated.js +1 -1
  45. package/lib/esm/entry/pureFunctionsAny.generated.js +12 -12
  46. package/lib/esm/expression/Help.js +21 -4
  47. package/lib/esm/function/string/bin.js +3 -3
  48. package/lib/esm/function/string/format.js +3 -3
  49. package/lib/esm/function/string/hex.js +3 -3
  50. package/lib/esm/function/string/oct.js +3 -3
  51. package/lib/esm/header.js +1 -1
  52. package/lib/esm/type/unit/Unit.js +86 -2
  53. package/lib/esm/type/unit/physicalConstants.js +1 -1
  54. package/lib/esm/utils/bignumber/formatter.js +19 -28
  55. package/lib/esm/utils/number.js +76 -34
  56. package/lib/esm/version.js +1 -1
  57. package/package.json +14 -14
  58. package/types/index.d.ts +30 -18
@@ -731,7 +731,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
731
731
  Unit.prototype.abs = function () {
732
732
  var ret = this.clone();
733
733
  if (ret.value !== null) {
734
- if (ret._isDerived() || ret.units[0].unit.offset === 0) {
734
+ if (ret._isDerived() || ret.units.length === 0 || ret.units[0].unit.offset === 0) {
735
735
  ret.value = abs(ret.value);
736
736
  } else {
737
737
  // To give the correct, but unexpected, results for units with an offset.
@@ -774,7 +774,7 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
774
774
  if (other.value !== null) {
775
775
  throw new Error('Cannot convert to a unit with a value');
776
776
  }
777
- if (this.value === null || this._isDerived() || this.units[0].unit.offset === other.units[0].unit.offset) {
777
+ if (this.value === null || this._isDerived() || this.units.length === 0 || other.units.length === 0 || this.units[0].unit.offset === other.units[0].unit.offset) {
778
778
  other.value = clone(value);
779
779
  } else {
780
780
  /* Need to adjust value by difference in offset to convert */
@@ -962,6 +962,10 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
962
962
  ret.units = proposedUnitList;
963
963
  ret.fixPrefix = true;
964
964
  ret.skipAutomaticSimplification = true;
965
+ if (this.value !== null) {
966
+ ret.value = null;
967
+ return this.to(ret);
968
+ }
965
969
  return ret;
966
970
  };
967
971
 
@@ -1242,6 +1246,16 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
1242
1246
  value: 1e24,
1243
1247
  scientific: true
1244
1248
  },
1249
+ R: {
1250
+ name: 'R',
1251
+ value: 1e27,
1252
+ scientific: true
1253
+ },
1254
+ Q: {
1255
+ name: 'Q',
1256
+ value: 1e30,
1257
+ scientific: true
1258
+ },
1245
1259
  d: {
1246
1260
  name: 'd',
1247
1261
  value: 1e-1,
@@ -1291,6 +1305,16 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
1291
1305
  name: 'y',
1292
1306
  value: 1e-24,
1293
1307
  scientific: true
1308
+ },
1309
+ r: {
1310
+ name: 'r',
1311
+ value: 1e-27,
1312
+ scientific: true
1313
+ },
1314
+ q: {
1315
+ name: 'q',
1316
+ value: 1e-30,
1317
+ scientific: true
1294
1318
  }
1295
1319
  },
1296
1320
  LONG: {
@@ -1349,6 +1373,16 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
1349
1373
  value: 1e24,
1350
1374
  scientific: true
1351
1375
  },
1376
+ ronna: {
1377
+ name: 'ronna',
1378
+ value: 1e27,
1379
+ scientific: true
1380
+ },
1381
+ quetta: {
1382
+ name: 'quetta',
1383
+ value: 1e30,
1384
+ scientific: true
1385
+ },
1352
1386
  deci: {
1353
1387
  name: 'deci',
1354
1388
  value: 1e-1,
@@ -1398,6 +1432,16 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
1398
1432
  name: 'yocto',
1399
1433
  value: 1e-24,
1400
1434
  scientific: true
1435
+ },
1436
+ ronto: {
1437
+ name: 'ronto',
1438
+ value: 1e-27,
1439
+ scientific: true
1440
+ },
1441
+ quecto: {
1442
+ name: 'quecto',
1443
+ value: 1e-30,
1444
+ scientific: true
1401
1445
  }
1402
1446
  },
1403
1447
  SQUARED: {
@@ -1456,6 +1500,16 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
1456
1500
  value: 1e48,
1457
1501
  scientific: true
1458
1502
  },
1503
+ R: {
1504
+ name: 'R',
1505
+ value: 1e54,
1506
+ scientific: true
1507
+ },
1508
+ Q: {
1509
+ name: 'Q',
1510
+ value: 1e60,
1511
+ scientific: true
1512
+ },
1459
1513
  d: {
1460
1514
  name: 'd',
1461
1515
  value: 1e-2,
@@ -1505,6 +1559,16 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
1505
1559
  name: 'y',
1506
1560
  value: 1e-48,
1507
1561
  scientific: true
1562
+ },
1563
+ r: {
1564
+ name: 'r',
1565
+ value: 1e-54,
1566
+ scientific: true
1567
+ },
1568
+ q: {
1569
+ name: 'q',
1570
+ value: 1e-60,
1571
+ scientific: true
1508
1572
  }
1509
1573
  },
1510
1574
  CUBIC: {
@@ -1563,6 +1627,16 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
1563
1627
  value: 1e72,
1564
1628
  scientific: true
1565
1629
  },
1630
+ R: {
1631
+ name: 'R',
1632
+ value: 1e81,
1633
+ scientific: true
1634
+ },
1635
+ Q: {
1636
+ name: 'Q',
1637
+ value: 1e90,
1638
+ scientific: true
1639
+ },
1566
1640
  d: {
1567
1641
  name: 'd',
1568
1642
  value: 1e-3,
@@ -1612,6 +1686,16 @@ export var createUnitClass = /* #__PURE__ */factory(name, dependencies, _ref =>
1612
1686
  name: 'y',
1613
1687
  value: 1e-72,
1614
1688
  scientific: true
1689
+ },
1690
+ r: {
1691
+ name: 'r',
1692
+ value: 1e-81,
1693
+ scientific: true
1694
+ },
1695
+ q: {
1696
+ name: 'q',
1697
+ value: 1e-90,
1698
+ scientific: true
1615
1699
  }
1616
1700
  },
1617
1701
  BINARY_SHORT_SI: {
@@ -44,7 +44,7 @@ export var createAvogadro = /* #__PURE__ */unitFactory('avogadro', '6.02214076e2
44
44
  export var createBoltzmann = /* #__PURE__ */unitFactory('boltzmann', '1.380649e-23', 'J K^-1');
45
45
  export var createFaraday = /* #__PURE__ */unitFactory('faraday', '96485.33212331001', 'C mol^-1');
46
46
  export var createFirstRadiation = /* #__PURE__ */unitFactory('firstRadiation', '3.7417718521927573e-16', 'W m^2');
47
- // export const createSpectralRadiance = /* #__PURE__ */ unitFactory('spectralRadiance', '1.1910429723971881e-16', 'W m^2 sr^-1') // TODO spectralRadiance
47
+ // TODO spectralRadiance = 1.1910429723971881e-16 W m^2 sr^-1
48
48
  export var createLoschmidt = /* #__PURE__ */unitFactory('loschmidt', '2.686780111798444e25', 'm^-3');
49
49
  export var createGasConstant = /* #__PURE__ */unitFactory('gasConstant', '8.31446261815324', 'J K^-1 mol^-1');
50
50
  export var createMolarPlanckConstant = /* #__PURE__ */unitFactory('molarPlanckConstant', '3.990312712893431e-10', 'J s mol^-1');
@@ -1,4 +1,5 @@
1
- import { isInteger } from '../number.js';
1
+ import { isBigNumber, isNumber } from '../is.js';
2
+ import { isInteger, normalizeFormatOptions } from '../number.js';
2
3
 
3
4
  /**
4
5
  * Formats a BigNumber in a given base
@@ -119,7 +120,7 @@ function formatBigNumberToBase(n, base, size) {
119
120
  * format(12400, {notation: 'engineering'}) // returns '12.400e+3'
120
121
  *
121
122
  * @param {BigNumber} value
122
- * @param {Object | Function | number} [options]
123
+ * @param {Object | Function | number | BigNumber} [options]
123
124
  * @return {string} str The formatted value
124
125
  */
125
126
  export function format(value, options) {
@@ -132,30 +133,11 @@ export function format(value, options) {
132
133
  if (!value.isFinite()) {
133
134
  return value.isNaN() ? 'NaN' : value.gt(0) ? 'Infinity' : '-Infinity';
134
135
  }
135
-
136
- // default values for options
137
- var notation = 'auto';
138
- var precision;
139
- var wordSize;
140
- if (options !== undefined) {
141
- // determine notation from options
142
- if (options.notation) {
143
- notation = options.notation;
144
- }
145
-
146
- // determine precision from options
147
- if (typeof options === 'number') {
148
- precision = options;
149
- } else if (options.precision !== undefined) {
150
- precision = options.precision;
151
- }
152
- if (options.wordSize) {
153
- wordSize = options.wordSize;
154
- if (typeof wordSize !== 'number') {
155
- throw new Error('Option "wordSize" must be a number');
156
- }
157
- }
158
- }
136
+ var {
137
+ notation,
138
+ precision,
139
+ wordSize
140
+ } = normalizeFormatOptions(options);
159
141
 
160
142
  // handle the various notations
161
143
  switch (notation) {
@@ -175,8 +157,8 @@ export function format(value, options) {
175
157
  {
176
158
  // determine lower and upper bound for exponential notation.
177
159
  // TODO: implement support for upper and lower to be BigNumbers themselves
178
- var lowerExp = options && options.lowerExp !== undefined ? options.lowerExp : -3;
179
- var upperExp = options && options.upperExp !== undefined ? options.upperExp : 5;
160
+ var lowerExp = _toNumberOrDefault(options === null || options === void 0 ? void 0 : options.lowerExp, -3);
161
+ var upperExp = _toNumberOrDefault(options === null || options === void 0 ? void 0 : options.upperExp, 5);
180
162
 
181
163
  // handle special case zero
182
164
  if (value.isZero()) return '0';
@@ -249,4 +231,13 @@ export function toExponential(value, precision) {
249
231
  */
250
232
  export function toFixed(value, precision) {
251
233
  return value.toFixed(precision);
234
+ }
235
+ function _toNumberOrDefault(value, defaultValue) {
236
+ if (isNumber(value)) {
237
+ return value;
238
+ } else if (isBigNumber(value)) {
239
+ return value.toNumber();
240
+ } else {
241
+ return defaultValue;
242
+ }
252
243
  }
@@ -1,4 +1,4 @@
1
- import { isNumber } from './is.js';
1
+ import { isBigNumber, isNumber, isObject } from './is.js';
2
2
 
3
3
  /**
4
4
  * @typedef {{sign: '+' | '-' | '', coefficients: number[], exponent: number}} SplitValue
@@ -21,7 +21,7 @@ export function isInteger(value) {
21
21
  * @param {number} x
22
22
  * @returns {number}
23
23
  */
24
- export var sign = /* #__PURE__ */Math.sign || function (x) {
24
+ export var sign = Math.sign || function (x) {
25
25
  if (x > 0) {
26
26
  return 1;
27
27
  } else if (x < 0) {
@@ -36,7 +36,7 @@ export var sign = /* #__PURE__ */Math.sign || function (x) {
36
36
  * @param {number} x
37
37
  * @returns {number}
38
38
  */
39
- export var log2 = /* #__PURE__ */Math.log2 || function log2(x) {
39
+ export var log2 = Math.log2 || function log2(x) {
40
40
  return Math.log(x) / Math.LN2;
41
41
  };
42
42
 
@@ -45,7 +45,7 @@ export var log2 = /* #__PURE__ */Math.log2 || function log2(x) {
45
45
  * @param {number} x
46
46
  * @returns {number}
47
47
  */
48
- export var log10 = /* #__PURE__ */Math.log10 || function log10(x) {
48
+ export var log10 = Math.log10 || function log10(x) {
49
49
  return Math.log(x) / Math.LN10;
50
50
  };
51
51
 
@@ -54,7 +54,7 @@ export var log10 = /* #__PURE__ */Math.log10 || function log10(x) {
54
54
  * @param {number} x
55
55
  * @returns {number}
56
56
  */
57
- export var log1p = /* #__PURE__ */Math.log1p || function (x) {
57
+ export var log1p = Math.log1p || function (x) {
58
58
  return Math.log(x + 1);
59
59
  };
60
60
 
@@ -67,7 +67,7 @@ export var log1p = /* #__PURE__ */Math.log1p || function (x) {
67
67
  * @param {number} x
68
68
  * @returns {number} Returns the cubic root of x
69
69
  */
70
- export var cbrt = /* #__PURE__ */Math.cbrt || function cbrt(x) {
70
+ export var cbrt = Math.cbrt || function cbrt(x) {
71
71
  if (x === 0) {
72
72
  return x;
73
73
  }
@@ -91,7 +91,7 @@ export var cbrt = /* #__PURE__ */Math.cbrt || function cbrt(x) {
91
91
  * @param {number} x
92
92
  * @return {number} res
93
93
  */
94
- export var expm1 = /* #__PURE__ */Math.expm1 || function expm1(x) {
94
+ export var expm1 = Math.expm1 || function expm1(x) {
95
95
  return x >= 2e-4 || x <= -2e-4 ? Math.exp(x) - 1 : x + x * x / 2 + x * x * x / 6;
96
96
  };
97
97
 
@@ -234,30 +234,11 @@ export function format(value, options) {
234
234
  } else if (isNaN(value)) {
235
235
  return 'NaN';
236
236
  }
237
-
238
- // default values for options
239
- var notation = 'auto';
240
- var precision;
241
- var wordSize;
242
- if (options) {
243
- // determine notation from options
244
- if (options.notation) {
245
- notation = options.notation;
246
- }
247
-
248
- // determine precision from options
249
- if (isNumber(options)) {
250
- precision = options;
251
- } else if (isNumber(options.precision)) {
252
- precision = options.precision;
253
- }
254
- if (options.wordSize) {
255
- wordSize = options.wordSize;
256
- if (typeof wordSize !== 'number') {
257
- throw new Error('Option "wordSize" must be a number');
258
- }
259
- }
260
- }
237
+ var {
238
+ notation,
239
+ precision,
240
+ wordSize
241
+ } = normalizeFormatOptions(options);
261
242
 
262
243
  // handle the various notations
263
244
  switch (notation) {
@@ -275,7 +256,7 @@ export function format(value, options) {
275
256
  return formatNumberToBase(value, 16, wordSize);
276
257
  case 'auto':
277
258
  // remove trailing zeros after the decimal point
278
- return toPrecision(value, precision, options && options).replace(/((\.\d*?)(0+))($|e)/, function () {
259
+ return toPrecision(value, precision, options).replace(/((\.\d*?)(0+))($|e)/, function () {
279
260
  var digits = arguments[2];
280
261
  var e = arguments[4];
281
262
  return digits !== '.' ? digits + e : e;
@@ -285,6 +266,49 @@ export function format(value, options) {
285
266
  }
286
267
  }
287
268
 
269
+ /**
270
+ * Normalize format options into an object:
271
+ * {
272
+ * notation: string,
273
+ * precision: number | undefined,
274
+ * wordSize: number | undefined
275
+ * }
276
+ */
277
+ export function normalizeFormatOptions(options) {
278
+ // default values for options
279
+ var notation = 'auto';
280
+ var precision;
281
+ var wordSize;
282
+ if (options !== undefined) {
283
+ if (isNumber(options)) {
284
+ precision = options;
285
+ } else if (isBigNumber(options)) {
286
+ precision = options.toNumber();
287
+ } else if (isObject(options)) {
288
+ if (options.precision !== undefined) {
289
+ precision = _toNumberOrThrow(options.precision, () => {
290
+ throw new Error('Option "precision" must be a number or BigNumber');
291
+ });
292
+ }
293
+ if (options.wordSize !== undefined) {
294
+ wordSize = _toNumberOrThrow(options.wordSize, () => {
295
+ throw new Error('Option "wordSize" must be a number or BigNumber');
296
+ });
297
+ }
298
+ if (options.notation) {
299
+ notation = options.notation;
300
+ }
301
+ } else {
302
+ throw new Error('Unsupported type of options, number, BigNumber, or object expected');
303
+ }
304
+ }
305
+ return {
306
+ notation,
307
+ precision,
308
+ wordSize
309
+ };
310
+ }
311
+
288
312
  /**
289
313
  * Split a number into sign, coefficients, and exponent
290
314
  * @param {number | string} value
@@ -448,8 +472,8 @@ export function toPrecision(value, precision, options) {
448
472
  }
449
473
 
450
474
  // determine lower and upper bound for exponential notation.
451
- var lowerExp = options && options.lowerExp !== undefined ? options.lowerExp : -3;
452
- var upperExp = options && options.upperExp !== undefined ? options.upperExp : 5;
475
+ var lowerExp = _toNumberOrDefault(options === null || options === void 0 ? void 0 : options.lowerExp, -3);
476
+ var upperExp = _toNumberOrDefault(options === null || options === void 0 ? void 0 : options.upperExp, 5);
453
477
  var split = splitNumber(value);
454
478
  var rounded = precision ? roundDigits(split, precision) : split;
455
479
  if (rounded.exponent < lowerExp || rounded.exponent >= upperExp) {
@@ -654,4 +678,22 @@ export function copysign(x, y) {
654
678
  var signx = x > 0 ? true : x < 0 ? false : 1 / x === Infinity;
655
679
  var signy = y > 0 ? true : y < 0 ? false : 1 / y === Infinity;
656
680
  return signx ^ signy ? -x : x;
681
+ }
682
+ function _toNumberOrThrow(value, onError) {
683
+ if (isNumber(value)) {
684
+ return value;
685
+ } else if (isBigNumber(value)) {
686
+ return value.toNumber();
687
+ } else {
688
+ onError();
689
+ }
690
+ }
691
+ function _toNumberOrDefault(value, defaultValue) {
692
+ if (isNumber(value)) {
693
+ return value;
694
+ } else if (isBigNumber(value)) {
695
+ return value.toNumber();
696
+ } else {
697
+ return defaultValue;
698
+ }
657
699
  }
@@ -1,3 +1,3 @@
1
- export var version = '12.2.1';
1
+ export var version = '12.3.1';
2
2
  // Note: This file is automatically generated when building math.js.
3
3
  // Changes made in this file will be overwritten.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mathjs",
3
- "version": "12.2.1",
3
+ "version": "12.3.1",
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.23.6",
28
+ "@babel/runtime": "^7.23.9",
29
29
  "complex.js": "^2.1.1",
30
30
  "decimal.js": "^10.4.3",
31
31
  "escape-latex": "^1.2.0",
@@ -36,21 +36,21 @@
36
36
  "typed-function": "^4.1.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@babel/core": "7.23.6",
39
+ "@babel/core": "7.23.9",
40
40
  "@babel/plugin-transform-object-assign": "7.23.3",
41
- "@babel/plugin-transform-runtime": "7.23.6",
42
- "@babel/preset-env": "7.23.6",
43
- "@babel/register": "7.22.15",
41
+ "@babel/plugin-transform-runtime": "7.23.9",
42
+ "@babel/preset-env": "7.23.9",
43
+ "@babel/register": "7.23.7",
44
44
  "@types/assert": "1.5.10",
45
45
  "@types/mocha": "10.0.6",
46
- "@typescript-eslint/eslint-plugin": "6.15.0",
47
- "@typescript-eslint/parser": "6.15.0",
46
+ "@typescript-eslint/eslint-plugin": "6.20.0",
47
+ "@typescript-eslint/parser": "6.20.0",
48
48
  "assert": "2.1.0",
49
49
  "babel-loader": "9.1.3",
50
50
  "benchmark": "2.1.4",
51
- "c8": "8.0.1",
51
+ "c8": "9.1.0",
52
52
  "codecov": "3.8.3",
53
- "core-js": "3.34.0",
53
+ "core-js": "3.35.1",
54
54
  "del": "6.1.1",
55
55
  "dtslint": "4.2.1",
56
56
  "eslint": "8.56.0",
@@ -58,8 +58,8 @@
58
58
  "eslint-config-standard": "17.1.0",
59
59
  "eslint-plugin-import": "2.29.1",
60
60
  "eslint-plugin-mocha": "10.2.0",
61
- "eslint-plugin-n": "16.5.0",
62
- "eslint-plugin-prettier": "5.1.0",
61
+ "eslint-plugin-n": "16.6.2",
62
+ "eslint-plugin-prettier": "5.1.3",
63
63
  "eslint-plugin-promise": "6.1.1",
64
64
  "expect-type": "0.17.3",
65
65
  "expr-eval": "2.0.2",
@@ -85,12 +85,12 @@
85
85
  "ndarray-pack": "1.2.1",
86
86
  "numericjs": "1.2.6",
87
87
  "pad-right": "0.2.2",
88
- "prettier": "3.1.1",
88
+ "prettier": "3.2.4",
89
89
  "process": "0.11.10",
90
90
  "sylvester": "0.0.21",
91
91
  "ts-node": "10.9.2",
92
92
  "typescript": "5.3.3",
93
- "webpack": "5.89.0",
93
+ "webpack": "5.90.0",
94
94
  "zeros": "1.0.0"
95
95
  },
96
96
  "type": "module",
package/types/index.d.ts CHANGED
@@ -183,11 +183,11 @@ export interface ArrayNode<TItems extends MathNode[] = MathNode[]>
183
183
  extends MathNode {
184
184
  type: 'ArrayNode'
185
185
  isArrayNode: true
186
- items: TItems
186
+ items: [...TItems]
187
187
  }
188
188
  export interface ArrayNodeCtor {
189
189
  new <TItems extends MathNode[] = MathNode[]>(
190
- items: MathNode[]
190
+ items: [...TItems]
191
191
  ): ArrayNode<TItems>
192
192
  }
193
193
 
@@ -283,12 +283,12 @@ export interface FunctionNode<
283
283
  type: 'FunctionNode'
284
284
  isFunctionNode: true
285
285
  fn: TFn
286
- args: TArgs
286
+ args: [...TArgs]
287
287
  }
288
288
  export interface FunctionNodeCtor {
289
289
  new <TFn = SymbolNode, TArgs extends MathNode[] = MathNode[]>(
290
290
  fn: TFn,
291
- args: TArgs
291
+ args: [...TArgs]
292
292
  ): FunctionNode<TFn, TArgs>
293
293
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
294
294
  onUndefinedFunction: (name: string) => any
@@ -298,13 +298,13 @@ export interface IndexNode<TDims extends MathNode[] = MathNode[]>
298
298
  extends MathNode {
299
299
  type: 'IndexNode'
300
300
  isIndexNode: true
301
- dimensions: TDims
301
+ dimensions: [...TDims]
302
302
  dotNotation: boolean
303
303
  }
304
304
  export interface IndexNodeCtor {
305
- new <TDims extends MathNode[] = MathNode[]>(dimensions: TDims): IndexNode
305
+ new <TDims extends MathNode[] = MathNode[]>(dimensions: [...TDims]): IndexNode
306
306
  new <TDims extends MathNode[] = MathNode[]>(
307
- dimensions: TDims,
307
+ dimensions: [...TDims],
308
308
  dotNotation: boolean
309
309
  ): IndexNode<TDims>
310
310
  }
@@ -367,7 +367,7 @@ export interface OperatorNode<
367
367
  isOperatorNode: true
368
368
  op: TOp
369
369
  fn: TFn
370
- args: TArgs
370
+ args: [...TArgs]
371
371
  implicit: boolean
372
372
  isUnary(): boolean
373
373
  isBinary(): boolean
@@ -381,7 +381,7 @@ export interface OperatorNodeCtor extends MathNode {
381
381
  >(
382
382
  op: TOp,
383
383
  fn: TFn,
384
- args: TArgs,
384
+ args: [...TArgs],
385
385
  implicit?: boolean
386
386
  ): OperatorNode<TOp, TFn, TArgs>
387
387
  }
@@ -423,12 +423,12 @@ export interface RelationalNode<TParams extends MathNode[] = MathNode[]>
423
423
  type: 'RelationalNode'
424
424
  isRelationalNode: true
425
425
  conditionals: string[]
426
- params: TParams
426
+ params: [...TParams]
427
427
  }
428
428
  export interface RelationalNodeCtor {
429
429
  new <TParams extends MathNode[] = MathNode[]>(
430
430
  conditionals: string[],
431
- params: TParams
431
+ params: [...TParams]
432
432
  ): RelationalNode<TParams>
433
433
  }
434
434
 
@@ -1200,7 +1200,8 @@ export interface MathJsInstance extends MathJsFactory {
1200
1200
  * whole matrix.
1201
1201
  * @returns Returns the hypothenuse of the input values.
1202
1202
  */
1203
- hypot<T extends (number | BigNumber)[]>(...args: T[]): T
1203
+ hypot<T extends number | BigNumber>(...args: T[]): T
1204
+ hypot<T extends number | BigNumber>(args: T[]): T
1204
1205
 
1205
1206
  /**
1206
1207
  * Calculate the least common multiple for two or more values or arrays.
@@ -3012,7 +3013,7 @@ export interface MathJsInstance extends MathJsFactory {
3012
3013
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3013
3014
  value: any,
3014
3015
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3015
- options?: FormatOptions | number | ((item: any) => string),
3016
+ options?: FormatOptions | number | BigNumber | ((item: any) => string),
3016
3017
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3017
3018
  callback?: (value: any) => string
3018
3019
  ): string
@@ -3860,8 +3861,10 @@ export interface Matrix {
3860
3861
  ): void
3861
3862
  toArray(): MathArray
3862
3863
  valueOf(): MathArray
3863
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
3864
- format(options?: FormatOptions | number | ((value: any) => string)): string
3864
+ format(
3865
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
3866
+ options?: FormatOptions | number | BigNumber | ((value: any) => string)
3867
+ ): string
3865
3868
  toString(): string
3866
3869
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3867
3870
  toJSON(): any
@@ -4252,19 +4255,19 @@ export interface FormatOptions {
4252
4255
  * case of notation 'fixed', precision defines the number of significant
4253
4256
  * digits after the decimal point, and is 0 by default.
4254
4257
  */
4255
- precision?: number
4258
+ precision?: number | BigNumber
4256
4259
 
4257
4260
  /**
4258
4261
  * Exponent determining the lower boundary for formatting a value with
4259
4262
  * an exponent when notation='auto. Default value is -3.
4260
4263
  */
4261
- lowerExp?: number
4264
+ lowerExp?: number | BigNumber
4262
4265
 
4263
4266
  /**
4264
4267
  * Exponent determining the upper boundary for formatting a value with
4265
4268
  * an exponent when notation='auto. Default value is 5.
4266
4269
  */
4267
- upperExp?: number
4270
+ upperExp?: number | BigNumber
4268
4271
 
4269
4272
  /**
4270
4273
  * Available values: 'ratio' (default) or 'decimal'. For example
@@ -4272,6 +4275,15 @@ export interface FormatOptions {
4272
4275
  * and will output 0.(3) when 'decimal' is configured.
4273
4276
  */
4274
4277
  fraction?: string
4278
+
4279
+ /**
4280
+ * The word size in bits to use for formatting in binary, octal, or
4281
+ * hexadecimal notation. To be used only with `'bin'`, `'oct'`, or `'hex'`
4282
+ * values for `notation` option. When this option is defined the value
4283
+ * is formatted as a signed twos complement integer of the given word
4284
+ * size and the size suffix is appended to the output.
4285
+ */
4286
+ wordSize?: number | BigNumber
4275
4287
  }
4276
4288
 
4277
4289
  export interface Help {