mathjs 13.0.3 → 13.1.1
Sign up to get free protection for your applications and to get access to all the features.
- package/HISTORY.md +30 -1
- package/bin/cli.js +24 -10
- package/lib/browser/math.js +1 -1
- package/lib/browser/math.js.LICENSE.txt +2 -2
- package/lib/browser/math.js.map +1 -1
- package/lib/cjs/core/create.js +12 -9
- package/lib/cjs/core/function/typed.js +3 -4
- package/lib/cjs/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
- package/lib/cjs/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
- package/lib/cjs/entry/impureFunctionsAny.generated.js +2 -2
- package/lib/cjs/entry/pureFunctionsAny.generated.js +6 -8
- package/lib/cjs/entry/typeChecks.js +18 -0
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -2
- package/lib/cjs/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/diff.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/fft.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/ifft.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/kron.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/matrix/map.js +3 -3
- package/lib/cjs/expression/embeddedDocs/function/special/zeta.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
- package/lib/cjs/expression/embeddedDocs/function/utils/clone.js +1 -1
- package/lib/cjs/expression/function/evaluate.js +5 -0
- package/lib/cjs/expression/node/FunctionNode.js +10 -2
- package/lib/cjs/expression/transform/filter.transform.js +2 -2
- package/lib/cjs/expression/transform/map.transform.js +104 -37
- package/lib/cjs/expression/transform/utils/dimToZeroBase.js +23 -0
- package/lib/cjs/expression/transform/utils/lastDimToZeroBase.js +3 -4
- package/lib/cjs/function/arithmetic/hypot.js +3 -3
- package/lib/cjs/function/matrix/apply.js +1 -1
- package/lib/cjs/function/matrix/fft.js +3 -3
- package/lib/cjs/function/matrix/filter.js +2 -2
- package/lib/cjs/function/matrix/flatten.js +5 -6
- package/lib/cjs/function/matrix/ifft.js +2 -2
- package/lib/cjs/function/matrix/kron.js +4 -4
- package/lib/cjs/function/matrix/map.js +109 -18
- package/lib/cjs/function/matrix/size.js +7 -7
- package/lib/cjs/function/matrix/squeeze.js +3 -4
- package/lib/cjs/function/probability/random.js +1 -1
- package/lib/cjs/function/probability/randomInt.js +1 -1
- package/lib/cjs/function/statistics/cumsum.js +2 -2
- package/lib/cjs/function/trigonometry/acoth.js +2 -2
- package/lib/cjs/function/trigonometry/acsch.js +2 -2
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/type/matrix/DenseMatrix.js +3 -28
- package/lib/cjs/type/matrix/SparseMatrix.js +5 -8
- package/lib/cjs/utils/array.js +27 -0
- package/lib/cjs/utils/collection.js +1 -1
- package/lib/cjs/utils/customs.js +5 -12
- package/lib/cjs/utils/function.js +0 -14
- package/lib/cjs/utils/is.js +27 -0
- package/lib/cjs/utils/map.js +7 -23
- package/lib/cjs/version.js +1 -1
- package/lib/esm/core/create.js +9 -6
- package/lib/esm/core/function/typed.js +2 -3
- package/lib/esm/entry/dependenciesAny/dependenciesFlatten.generated.js +0 -2
- package/lib/esm/entry/dependenciesAny/dependenciesSqueeze.generated.js +0 -2
- package/lib/esm/entry/impureFunctionsAny.generated.js +3 -3
- package/lib/esm/entry/pureFunctionsAny.generated.js +7 -9
- package/lib/esm/entry/typeChecks.js +1 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -2
- package/lib/esm/expression/embeddedDocs/function/arithmetic/hypot.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/diff.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/fft.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/ifft.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/kron.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/matrix/map.js +3 -3
- package/lib/esm/expression/embeddedDocs/function/special/zeta.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/statistics/quantileSeq.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/trigonometry/acoth.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/trigonometry/acsch.js +1 -1
- package/lib/esm/expression/embeddedDocs/function/utils/clone.js +1 -1
- package/lib/esm/expression/function/compile.js +1 -1
- package/lib/esm/expression/function/evaluate.js +8 -3
- package/lib/esm/expression/node/FunctionNode.js +10 -2
- package/lib/esm/expression/parse.js +2 -2
- package/lib/esm/expression/transform/filter.transform.js +4 -4
- package/lib/esm/expression/transform/forEach.transform.js +4 -4
- package/lib/esm/expression/transform/map.transform.js +104 -37
- package/lib/esm/expression/transform/print.transform.js +2 -2
- package/lib/esm/expression/transform/utils/dimToZeroBase.js +16 -0
- package/lib/esm/expression/transform/utils/lastDimToZeroBase.js +4 -6
- package/lib/esm/function/algebra/decomposition/slu.js +1 -1
- package/lib/esm/function/algebra/derivative.js +15 -15
- package/lib/esm/function/algebra/lyap.js +4 -4
- package/lib/esm/function/algebra/simplify/util.js +3 -3
- package/lib/esm/function/algebra/simplifyConstant.js +9 -9
- package/lib/esm/function/algebra/solver/lsolve.js +3 -3
- package/lib/esm/function/algebra/solver/lsolveAll.js +3 -3
- package/lib/esm/function/algebra/solver/lusolve.js +5 -5
- package/lib/esm/function/algebra/solver/usolve.js +3 -3
- package/lib/esm/function/algebra/solver/usolveAll.js +3 -3
- package/lib/esm/function/algebra/sylvester.js +7 -7
- package/lib/esm/function/arithmetic/addScalar.js +4 -4
- package/lib/esm/function/arithmetic/ceil.js +6 -6
- package/lib/esm/function/arithmetic/divide.js +5 -5
- package/lib/esm/function/arithmetic/divideScalar.js +5 -5
- package/lib/esm/function/arithmetic/fix.js +5 -5
- package/lib/esm/function/arithmetic/floor.js +6 -6
- package/lib/esm/function/arithmetic/hypot.js +3 -3
- package/lib/esm/function/arithmetic/mod.js +3 -3
- package/lib/esm/function/arithmetic/multiply.js +7 -7
- package/lib/esm/function/arithmetic/multiplyScalar.js +4 -4
- package/lib/esm/function/arithmetic/norm.js +2 -2
- package/lib/esm/function/arithmetic/pow.js +6 -6
- package/lib/esm/function/arithmetic/round.js +7 -7
- package/lib/esm/function/arithmetic/subtractScalar.js +4 -4
- package/lib/esm/function/arithmetic/xgcd.js +1 -1
- package/lib/esm/function/combinatorics/bellNumbers.js +1 -1
- package/lib/esm/function/combinatorics/catalan.js +1 -1
- package/lib/esm/function/combinatorics/composition.js +1 -1
- package/lib/esm/function/combinatorics/stirlingS2.js +1 -1
- package/lib/esm/function/geometry/distance.js +4 -4
- package/lib/esm/function/geometry/intersect.js +2 -2
- package/lib/esm/function/logical/and.js +2 -2
- package/lib/esm/function/logical/or.js +2 -2
- package/lib/esm/function/logical/xor.js +2 -2
- package/lib/esm/function/matrix/apply.js +2 -2
- package/lib/esm/function/matrix/column.js +1 -1
- package/lib/esm/function/matrix/concat.js +1 -1
- package/lib/esm/function/matrix/count.js +1 -1
- package/lib/esm/function/matrix/cross.js +3 -3
- package/lib/esm/function/matrix/diag.js +10 -10
- package/lib/esm/function/matrix/diff.js +2 -2
- package/lib/esm/function/matrix/eigs.js +3 -3
- package/lib/esm/function/matrix/fft.js +3 -3
- package/lib/esm/function/matrix/filter.js +4 -4
- package/lib/esm/function/matrix/flatten.js +5 -6
- package/lib/esm/function/matrix/forEach.js +4 -4
- package/lib/esm/function/matrix/identity.js +6 -6
- package/lib/esm/function/matrix/ifft.js +3 -3
- package/lib/esm/function/matrix/inv.js +1 -1
- package/lib/esm/function/matrix/kron.js +7 -7
- package/lib/esm/function/matrix/map.js +110 -19
- package/lib/esm/function/matrix/matrixFromFunction.js +6 -6
- package/lib/esm/function/matrix/ones.js +2 -2
- package/lib/esm/function/matrix/partitionSelect.js +2 -2
- package/lib/esm/function/matrix/pinv.js +1 -1
- package/lib/esm/function/matrix/range.js +10 -10
- package/lib/esm/function/matrix/reshape.js +2 -2
- package/lib/esm/function/matrix/rotate.js +4 -4
- package/lib/esm/function/matrix/rotationMatrix.js +6 -6
- package/lib/esm/function/matrix/row.js +1 -1
- package/lib/esm/function/matrix/size.js +8 -8
- package/lib/esm/function/matrix/sort.js +4 -4
- package/lib/esm/function/matrix/sqrtm.js +1 -1
- package/lib/esm/function/matrix/squeeze.js +3 -4
- package/lib/esm/function/matrix/subset.js +2 -2
- package/lib/esm/function/matrix/zeros.js +2 -2
- package/lib/esm/function/probability/combinations.js +1 -1
- package/lib/esm/function/probability/combinationsWithRep.js +2 -2
- package/lib/esm/function/probability/kldivergence.js +4 -4
- package/lib/esm/function/probability/multinomial.js +1 -1
- package/lib/esm/function/probability/permutations.js +2 -2
- package/lib/esm/function/probability/pickRandom.js +6 -6
- package/lib/esm/function/probability/random.js +1 -1
- package/lib/esm/function/probability/randomInt.js +1 -1
- package/lib/esm/function/relational/compare.js +6 -6
- package/lib/esm/function/relational/deepEqual.js +1 -1
- package/lib/esm/function/relational/equal.js +1 -1
- package/lib/esm/function/relational/equalScalar.js +7 -7
- package/lib/esm/function/relational/equalText.js +1 -1
- package/lib/esm/function/relational/larger.js +3 -3
- package/lib/esm/function/relational/largerEq.js +4 -4
- package/lib/esm/function/relational/smaller.js +3 -3
- package/lib/esm/function/relational/smallerEq.js +3 -3
- package/lib/esm/function/relational/unequal.js +1 -1
- package/lib/esm/function/set/setCartesian.js +1 -1
- package/lib/esm/function/set/setDifference.js +1 -1
- package/lib/esm/function/set/setDistinct.js +1 -1
- package/lib/esm/function/set/setIntersect.js +1 -1
- package/lib/esm/function/set/setIsSubset.js +1 -1
- package/lib/esm/function/set/setMultiplicity.js +1 -1
- package/lib/esm/function/set/setPowerset.js +1 -1
- package/lib/esm/function/set/setSize.js +2 -2
- package/lib/esm/function/set/setSymDifference.js +1 -1
- package/lib/esm/function/set/setUnion.js +1 -1
- package/lib/esm/function/signal/freqz.js +6 -6
- package/lib/esm/function/statistics/corr.js +2 -2
- package/lib/esm/function/statistics/cumsum.js +3 -3
- package/lib/esm/function/statistics/max.js +1 -1
- package/lib/esm/function/statistics/median.js +3 -3
- package/lib/esm/function/statistics/min.js +1 -1
- package/lib/esm/function/statistics/prod.js +1 -1
- package/lib/esm/function/statistics/variance.js +2 -2
- package/lib/esm/function/string/bin.js +2 -2
- package/lib/esm/function/string/hex.js +2 -2
- package/lib/esm/function/string/oct.js +2 -2
- package/lib/esm/function/trigonometry/acoth.js +2 -2
- package/lib/esm/function/trigonometry/acsch.js +2 -2
- package/lib/esm/type/bigint.js +1 -1
- package/lib/esm/type/complex/function/complex.js +2 -2
- package/lib/esm/type/fraction/function/fraction.js +1 -1
- package/lib/esm/type/matrix/DenseMatrix.js +13 -38
- package/lib/esm/type/matrix/SparseMatrix.js +5 -8
- package/lib/esm/type/matrix/function/index.js +1 -1
- package/lib/esm/type/matrix/function/matrix.js +1 -1
- package/lib/esm/type/matrix/function/sparse.js +2 -2
- package/lib/esm/type/number.js +1 -1
- package/lib/esm/type/unit/function/createUnit.js +3 -3
- package/lib/esm/type/unit/function/splitUnit.js +1 -1
- package/lib/esm/type/unit/function/unit.js +2 -2
- package/lib/esm/utils/array.js +26 -0
- package/lib/esm/utils/collection.js +1 -1
- package/lib/esm/utils/customs.js +5 -12
- package/lib/esm/utils/function.js +0 -13
- package/lib/esm/utils/is.js +24 -0
- package/lib/esm/utils/map.js +7 -22
- package/lib/esm/version.js +1 -1
- package/package.json +13 -13
- package/types/index.d.ts +57 -18
package/HISTORY.md
CHANGED
@@ -1,5 +1,34 @@
|
|
1
1
|
# History
|
2
2
|
|
3
|
+
# 2024-08-27, 13.1.1
|
4
|
+
|
5
|
+
- Fix security vulnerability in the CLI and web API allowing to call functions
|
6
|
+
`import`, `createUnit` and `reviver`, allowing to get access to the internal
|
7
|
+
math namespace and allowing arbitrary code execution. Thanks @StarlightPWN.
|
8
|
+
- Fix security vulnerability: when overwriting a `rawArgs` function with a
|
9
|
+
non-`rawArgs` function, it was still called with raw arguments. This was both
|
10
|
+
a functional issue and a security issue. Thanks @StarlightPWN.
|
11
|
+
- Fix security vulnerability: ensure that `ObjectWrappingMap` cannot delete
|
12
|
+
unsafe properties. Thanks @StarlightPWN.
|
13
|
+
- Fix: not being able to use methods and properties on arrays inside the
|
14
|
+
expression parser.
|
15
|
+
|
16
|
+
# 2024-08-26, 13.1.0
|
17
|
+
|
18
|
+
- Feat: support multiple inputs in function `map` (#3228, #3196).
|
19
|
+
Thanks @dvd101x.
|
20
|
+
- Feat: add matrix datatypes in more cases (#3235). Thanks @dvd101x.
|
21
|
+
- Feat: export util functions `isMap`, `isPartitionedMap`, and
|
22
|
+
`isObjectWrappingMap`.
|
23
|
+
- Fix: #3241 function `map` not always working with matrices (#3242).
|
24
|
+
Thanks @dvd101x.
|
25
|
+
- Fix: #3244 fix broken link to `ResultSet` in the docs about classes.
|
26
|
+
- Docs: add a link to the documentation page about the syntax expression
|
27
|
+
from the function `evaluate` (see #3238).
|
28
|
+
- Docs: improve the documentation of `scope` and fix the example
|
29
|
+
`custom_scope_objects.js` (#3150)
|
30
|
+
- Docs: spelling fixes in the embedded docs (#3252). Thanks @dvd101x.
|
31
|
+
|
3
32
|
# 2024-07-19, 13.0.3
|
4
33
|
|
5
34
|
- Fix: #3232 fix type definitions of function `format` to support notations
|
@@ -503,7 +532,7 @@ Non-breaking changes:
|
|
503
532
|
|
504
533
|
# 2022-05-24, version 10.6.0
|
505
534
|
|
506
|
-
- Implementation of
|
535
|
+
- Implementation of Fourier transform functions `fft` and `ifft` (#2540).
|
507
536
|
Thanks @HanchaiN.
|
508
537
|
- Fix TypeScript types not being listed in the exported fields (#2569).
|
509
538
|
Thanks @mattvague.
|
package/bin/cli.js
CHANGED
@@ -56,10 +56,23 @@ const PRECISION = 14 // decimals
|
|
56
56
|
* "Lazy" load math.js: only require when we actually start using it.
|
57
57
|
* This ensures the cli application looks like it loads instantly.
|
58
58
|
* When requesting help or version number, math.js isn't even loaded.
|
59
|
-
* @return {
|
59
|
+
* @return {{ evalute: function, parse: function, math: Object }}
|
60
60
|
*/
|
61
61
|
function getMath () {
|
62
|
-
|
62
|
+
const { create, all } = require('../lib/browser/math.js')
|
63
|
+
|
64
|
+
const math = create(all)
|
65
|
+
const parse = math.parse
|
66
|
+
const evaluate = math.evaluate
|
67
|
+
|
68
|
+
// See https://mathjs.org/docs/expressions/security.html#less-vulnerable-expression-parser
|
69
|
+
math.import({
|
70
|
+
'import': function () { throw new Error('Function import is disabled') },
|
71
|
+
'createUnit': function () { throw new Error('Function createUnit is disabled') },
|
72
|
+
'reviver': function () { throw new Error('Function reviver is disabled') }
|
73
|
+
}, { override: true })
|
74
|
+
|
75
|
+
return { math, parse, evaluate }
|
63
76
|
}
|
64
77
|
|
65
78
|
/**
|
@@ -68,7 +81,7 @@ function getMath () {
|
|
68
81
|
* @param {*} value
|
69
82
|
*/
|
70
83
|
function format (value) {
|
71
|
-
const math = getMath()
|
84
|
+
const { math } = getMath()
|
72
85
|
|
73
86
|
return math.format(value, {
|
74
87
|
fn: function (value) {
|
@@ -88,7 +101,7 @@ function format (value) {
|
|
88
101
|
* @return {[Array, String]} completions
|
89
102
|
*/
|
90
103
|
function completer (text) {
|
91
|
-
const math = getMath()
|
104
|
+
const { math } = getMath()
|
92
105
|
let matches = []
|
93
106
|
let keyword
|
94
107
|
const m = /[a-zA-Z_0-9]+$/.exec(text)
|
@@ -183,7 +196,7 @@ function runStream (input, output, mode, parenthesis) {
|
|
183
196
|
}
|
184
197
|
|
185
198
|
// load math.js now, right *after* loading the prompt.
|
186
|
-
const math = getMath()
|
199
|
+
const { math, parse } = getMath()
|
187
200
|
|
188
201
|
// TODO: automatic insertion of 'ans' before operators like +, -, *, /
|
189
202
|
|
@@ -214,7 +227,7 @@ function runStream (input, output, mode, parenthesis) {
|
|
214
227
|
case 'evaluate':
|
215
228
|
// evaluate expression
|
216
229
|
try {
|
217
|
-
let node =
|
230
|
+
let node = parse(expr)
|
218
231
|
let res = node.evaluate(scope)
|
219
232
|
|
220
233
|
if (math.isResultSet(res)) {
|
@@ -288,7 +301,7 @@ function runStream (input, output, mode, parenthesis) {
|
|
288
301
|
* @return {string | null} Returns the name when found, else returns null.
|
289
302
|
*/
|
290
303
|
function findSymbolName (node) {
|
291
|
-
const math = getMath()
|
304
|
+
const { math } = getMath()
|
292
305
|
let n = node
|
293
306
|
|
294
307
|
while (n) {
|
@@ -412,9 +425,10 @@ if (version) {
|
|
412
425
|
// run a stream, can be user input or pipe input
|
413
426
|
runStream(process.stdin, process.stdout, mode, parenthesis)
|
414
427
|
} else {
|
415
|
-
fs.stat(scripts[0], function (
|
416
|
-
if (
|
417
|
-
|
428
|
+
fs.stat(scripts[0], function (err) {
|
429
|
+
if (err) {
|
430
|
+
const { evaluate } = getMath()
|
431
|
+
console.log(evaluate(scripts.join(' ')).toString())
|
418
432
|
} else {
|
419
433
|
// work through the queue of scripts
|
420
434
|
scripts.forEach(function (arg) {
|