mathjs 14.7.0 → 14.8.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.
- package/HISTORY.md +10 -0
- 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/function/config.js +1 -1
- package/lib/cjs/entry/dependenciesAny/dependenciesNullish.generated.js +25 -0
- package/lib/cjs/entry/dependenciesAny/dependenciesNullishTransform.generated.js +25 -0
- package/lib/cjs/entry/dependenciesAny.generated.js +14 -0
- package/lib/cjs/entry/impureFunctionsAny.generated.js +8 -0
- package/lib/cjs/entry/pureFunctionsAny.generated.js +10 -3
- package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/cjs/expression/embeddedDocs/function/logical/nullish.js +14 -0
- package/lib/cjs/expression/operators.js +7 -0
- package/lib/cjs/expression/parse.js +17 -1
- package/lib/cjs/expression/transform/nullish.transform.js +43 -0
- package/lib/cjs/factoriesAny.js +14 -0
- package/lib/cjs/function/logical/nullish.js +87 -0
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/version.js +1 -1
- package/lib/esm/core/function/config.js +1 -1
- package/lib/esm/entry/dependenciesAny/dependenciesNullish.generated.js +18 -0
- package/lib/esm/entry/dependenciesAny/dependenciesNullishTransform.generated.js +18 -0
- package/lib/esm/entry/dependenciesAny.generated.js +2 -0
- package/lib/esm/entry/impureFunctionsAny.generated.js +10 -2
- package/lib/esm/entry/pureFunctionsAny.generated.js +8 -1
- package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
- package/lib/esm/expression/embeddedDocs/function/logical/nullish.js +8 -0
- package/lib/esm/expression/operators.js +7 -0
- package/lib/esm/expression/parse.js +17 -1
- package/lib/esm/expression/transform/nullish.transform.js +37 -0
- package/lib/esm/factoriesAny.js +2 -0
- package/lib/esm/function/logical/nullish.js +81 -0
- package/lib/esm/version.js +1 -1
- package/package.json +5 -5
@@ -129,6 +129,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
129
129
|
'=': true,
|
130
130
|
':': true,
|
131
131
|
'?': true,
|
132
|
+
'??': true,
|
132
133
|
'==': true,
|
133
134
|
'!=': true,
|
134
135
|
'<': true,
|
@@ -1108,7 +1109,7 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
1108
1109
|
*/
|
1109
1110
|
function parsePow(state) {
|
1110
1111
|
var node, name, fn, params;
|
1111
|
-
node =
|
1112
|
+
node = parseNullishCoalescing(state);
|
1112
1113
|
if (state.token === '^' || state.token === '.^') {
|
1113
1114
|
name = state.token;
|
1114
1115
|
fn = name === '^' ? 'pow' : 'dotPow';
|
@@ -1119,6 +1120,21 @@ export var createParse = /* #__PURE__ */factory(name, dependencies, _ref => {
|
|
1119
1120
|
return node;
|
1120
1121
|
}
|
1121
1122
|
|
1123
|
+
/**
|
1124
|
+
* nullish coalescing operator
|
1125
|
+
* @return {Node} node
|
1126
|
+
* @private
|
1127
|
+
*/
|
1128
|
+
function parseNullishCoalescing(state) {
|
1129
|
+
var node = parseLeftHandOperators(state);
|
1130
|
+
while (state.token === '??') {
|
1131
|
+
// eslint-disable-line no-unmodified-loop-condition
|
1132
|
+
getTokenSkipNewline(state);
|
1133
|
+
node = new OperatorNode('??', 'nullish', [node, parseLeftHandOperators(state)]);
|
1134
|
+
}
|
1135
|
+
return node;
|
1136
|
+
}
|
1137
|
+
|
1122
1138
|
/**
|
1123
1139
|
* Left hand operators: factorial x!, ctranspose x'
|
1124
1140
|
* @return {Node} node
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { createNullish } from '../../function/logical/nullish.js';
|
2
|
+
import { factory } from '../../utils/factory.js';
|
3
|
+
import { isCollection } from '../../utils/is.js';
|
4
|
+
var name = 'nullish';
|
5
|
+
var dependencies = ['typed', 'matrix', 'size', 'flatten', 'deepEqual'];
|
6
|
+
export var createNullishTransform = /* #__PURE__ */factory(name, dependencies, _ref => {
|
7
|
+
var {
|
8
|
+
typed,
|
9
|
+
matrix,
|
10
|
+
size,
|
11
|
+
flatten,
|
12
|
+
deepEqual
|
13
|
+
} = _ref;
|
14
|
+
var nullish = createNullish({
|
15
|
+
typed,
|
16
|
+
matrix,
|
17
|
+
size,
|
18
|
+
flatten,
|
19
|
+
deepEqual
|
20
|
+
});
|
21
|
+
function nullishTransform(args, math, scope) {
|
22
|
+
var left = args[0].compile().evaluate(scope);
|
23
|
+
|
24
|
+
// If left is not a collection and not nullish, short-circuit and return it
|
25
|
+
if (!isCollection(left) && left != null && left !== undefined) {
|
26
|
+
return left;
|
27
|
+
}
|
28
|
+
|
29
|
+
// Otherwise evaluate right and apply full nullish semantics (incl. element-wise)
|
30
|
+
var right = args[1].compile().evaluate(scope);
|
31
|
+
return nullish(left, right);
|
32
|
+
}
|
33
|
+
nullishTransform.rawArgs = true;
|
34
|
+
return nullishTransform;
|
35
|
+
}, {
|
36
|
+
isTransformFunction: true
|
37
|
+
});
|
package/lib/esm/factoriesAny.js
CHANGED
@@ -66,6 +66,7 @@ export { createConj } from './function/complex/conj.js';
|
|
66
66
|
export { createIm } from './function/complex/im.js';
|
67
67
|
export { createRe } from './function/complex/re.js';
|
68
68
|
export { createNot } from './function/logical/not.js';
|
69
|
+
export { createNullish } from './function/logical/nullish.js';
|
69
70
|
export { createOr } from './function/logical/or.js';
|
70
71
|
export { createXor } from './function/logical/xor.js';
|
71
72
|
export { createConcat } from './function/matrix/concat.js';
|
@@ -294,5 +295,6 @@ export { createVarianceTransform } from './expression/transform/variance.transfo
|
|
294
295
|
export { createPrintTransform } from './expression/transform/print.transform.js';
|
295
296
|
export { createAndTransform } from './expression/transform/and.transform.js';
|
296
297
|
export { createOrTransform } from './expression/transform/or.transform.js';
|
298
|
+
export { createNullishTransform } from './expression/transform/nullish.transform.js';
|
297
299
|
export { createBitAndTransform } from './expression/transform/bitAnd.transform.js';
|
298
300
|
export { createBitOrTransform } from './expression/transform/bitOr.transform.js';
|
@@ -0,0 +1,81 @@
|
|
1
|
+
import { factory } from '../../utils/factory.js';
|
2
|
+
import { createMatAlgo03xDSf } from '../../type/matrix/utils/matAlgo03xDSf.js';
|
3
|
+
import { createMatAlgo14xDs } from '../../type/matrix/utils/matAlgo14xDs.js';
|
4
|
+
import { createMatAlgo13xDD } from '../../type/matrix/utils/matAlgo13xDD.js';
|
5
|
+
import { DimensionError } from '../../error/DimensionError.js';
|
6
|
+
var name = 'nullish';
|
7
|
+
var dependencies = ['typed', 'matrix', 'size', 'flatten', 'deepEqual'];
|
8
|
+
export var createNullish = /* #__PURE__ */factory(name, dependencies, _ref => {
|
9
|
+
var {
|
10
|
+
typed,
|
11
|
+
matrix,
|
12
|
+
size,
|
13
|
+
flatten,
|
14
|
+
deepEqual
|
15
|
+
} = _ref;
|
16
|
+
var matAlgo03xDSf = createMatAlgo03xDSf({
|
17
|
+
typed
|
18
|
+
});
|
19
|
+
var matAlgo14xDs = createMatAlgo14xDs({
|
20
|
+
typed
|
21
|
+
});
|
22
|
+
var matAlgo13xDD = createMatAlgo13xDD({
|
23
|
+
typed
|
24
|
+
});
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Nullish coalescing operator (??). Returns the right-hand side operand
|
28
|
+
* when the left-hand side operand is null or undefined, and otherwise
|
29
|
+
* returns the left-hand side operand.
|
30
|
+
*
|
31
|
+
* For matrices, the function is evaluated element wise.
|
32
|
+
*
|
33
|
+
* Syntax:
|
34
|
+
*
|
35
|
+
* math.nullish(x, y)
|
36
|
+
*
|
37
|
+
* Examples:
|
38
|
+
*
|
39
|
+
* math.nullish(null, 42) // returns 42
|
40
|
+
* math.nullish(undefined, 42) // returns 42
|
41
|
+
* math.nullish(0, 42) // returns 0
|
42
|
+
* math.nullish(false, 42) // returns false
|
43
|
+
* math.nullish('', 42) // returns ''
|
44
|
+
*
|
45
|
+
* // Object property access with fallback
|
46
|
+
* const obj = {foo: 7, bar: 3}
|
47
|
+
* math.nullish(obj.baz, 0) // returns 0
|
48
|
+
*
|
49
|
+
* See also:
|
50
|
+
*
|
51
|
+
* and, or, not
|
52
|
+
*
|
53
|
+
* @param {*} x First value to check
|
54
|
+
* @param {*} y Fallback value
|
55
|
+
* @return {*} Returns y when x is null or undefined, otherwise returns x
|
56
|
+
*/
|
57
|
+
|
58
|
+
return typed(name, {
|
59
|
+
// Scalar and SparseMatrix-first short-circuit handlers
|
60
|
+
'number|bigint|Complex|BigNumber|Fraction|Unit|string|boolean|SparseMatrix, any': (x, _y) => x,
|
61
|
+
'null, any': (_x, y) => y,
|
62
|
+
'undefined, any': (_x, y) => y,
|
63
|
+
// SparseMatrix-first with collection RHS: enforce exact shape match
|
64
|
+
'SparseMatrix, Array | Matrix': (x, y) => {
|
65
|
+
var sx = flatten(size(x).valueOf()); // work around #3529/#3530
|
66
|
+
var sy = flatten(size(y).valueOf());
|
67
|
+
if (deepEqual(sx, sy)) return x;
|
68
|
+
throw new DimensionError(sx, sy);
|
69
|
+
},
|
70
|
+
// DenseMatrix-first handlers (no broadcasting between collections)
|
71
|
+
'DenseMatrix, DenseMatrix': typed.referToSelf(self => (x, y) => matAlgo13xDD(x, y, self)),
|
72
|
+
'DenseMatrix, SparseMatrix': typed.referToSelf(self => (x, y) => matAlgo03xDSf(x, y, self, false)),
|
73
|
+
'DenseMatrix, Array': typed.referToSelf(self => (x, y) => matAlgo13xDD(x, matrix(y), self)),
|
74
|
+
'DenseMatrix, any': typed.referToSelf(self => (x, y) => matAlgo14xDs(x, y, self, false)),
|
75
|
+
// Array-first handlers (bridge via matrix() where needed)
|
76
|
+
'Array, Array': typed.referToSelf(self => (x, y) => matAlgo13xDD(matrix(x), matrix(y), self).valueOf()),
|
77
|
+
'Array, DenseMatrix': typed.referToSelf(self => (x, y) => matAlgo13xDD(matrix(x), y, self)),
|
78
|
+
'Array, SparseMatrix': typed.referToSelf(self => (x, y) => matAlgo03xDSf(matrix(x), y, self, false)),
|
79
|
+
'Array, any': typed.referToSelf(self => (x, y) => matAlgo14xDs(matrix(x), y, self, false).valueOf())
|
80
|
+
});
|
81
|
+
});
|
package/lib/esm/version.js
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "mathjs",
|
3
|
-
"version": "14.
|
3
|
+
"version": "14.8.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",
|
@@ -36,7 +36,7 @@
|
|
36
36
|
"typed-function": "^4.2.1"
|
37
37
|
},
|
38
38
|
"devDependencies": {
|
39
|
-
"@babel/core": "7.28.
|
39
|
+
"@babel/core": "7.28.4",
|
40
40
|
"@babel/plugin-transform-object-assign": "7.27.1",
|
41
41
|
"@babel/plugin-transform-optional-catch-binding": "7.27.1",
|
42
42
|
"@babel/plugin-transform-runtime": "7.28.3",
|
@@ -44,13 +44,13 @@
|
|
44
44
|
"@babel/register": "7.28.3",
|
45
45
|
"@types/assert": "1.5.11",
|
46
46
|
"@types/mocha": "10.0.10",
|
47
|
-
"@typescript-eslint/eslint-plugin": "8.
|
48
|
-
"@typescript-eslint/parser": "8.
|
47
|
+
"@typescript-eslint/eslint-plugin": "8.44.1",
|
48
|
+
"@typescript-eslint/parser": "8.44.1",
|
49
49
|
"assert": "2.1.0",
|
50
50
|
"babel-loader": "10.0.0",
|
51
51
|
"c8": "10.1.3",
|
52
52
|
"codecov": "3.8.3",
|
53
|
-
"del": "8.0.
|
53
|
+
"del": "8.0.1",
|
54
54
|
"eigen": "0.2.2",
|
55
55
|
"es-check": "9.3.1",
|
56
56
|
"eslint": "8.57.1",
|