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.
Files changed (34) hide show
  1. package/HISTORY.md +10 -0
  2. package/lib/browser/math.js +1 -1
  3. package/lib/browser/math.js.LICENSE.txt +2 -2
  4. package/lib/browser/math.js.map +1 -1
  5. package/lib/cjs/core/function/config.js +1 -1
  6. package/lib/cjs/entry/dependenciesAny/dependenciesNullish.generated.js +25 -0
  7. package/lib/cjs/entry/dependenciesAny/dependenciesNullishTransform.generated.js +25 -0
  8. package/lib/cjs/entry/dependenciesAny.generated.js +14 -0
  9. package/lib/cjs/entry/impureFunctionsAny.generated.js +8 -0
  10. package/lib/cjs/entry/pureFunctionsAny.generated.js +10 -3
  11. package/lib/cjs/expression/embeddedDocs/embeddedDocs.js +2 -0
  12. package/lib/cjs/expression/embeddedDocs/function/logical/nullish.js +14 -0
  13. package/lib/cjs/expression/operators.js +7 -0
  14. package/lib/cjs/expression/parse.js +17 -1
  15. package/lib/cjs/expression/transform/nullish.transform.js +43 -0
  16. package/lib/cjs/factoriesAny.js +14 -0
  17. package/lib/cjs/function/logical/nullish.js +87 -0
  18. package/lib/cjs/header.js +2 -2
  19. package/lib/cjs/version.js +1 -1
  20. package/lib/esm/core/function/config.js +1 -1
  21. package/lib/esm/entry/dependenciesAny/dependenciesNullish.generated.js +18 -0
  22. package/lib/esm/entry/dependenciesAny/dependenciesNullishTransform.generated.js +18 -0
  23. package/lib/esm/entry/dependenciesAny.generated.js +2 -0
  24. package/lib/esm/entry/impureFunctionsAny.generated.js +10 -2
  25. package/lib/esm/entry/pureFunctionsAny.generated.js +8 -1
  26. package/lib/esm/expression/embeddedDocs/embeddedDocs.js +2 -0
  27. package/lib/esm/expression/embeddedDocs/function/logical/nullish.js +8 -0
  28. package/lib/esm/expression/operators.js +7 -0
  29. package/lib/esm/expression/parse.js +17 -1
  30. package/lib/esm/expression/transform/nullish.transform.js +37 -0
  31. package/lib/esm/factoriesAny.js +2 -0
  32. package/lib/esm/function/logical/nullish.js +81 -0
  33. package/lib/esm/version.js +1 -1
  34. 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 = parseLeftHandOperators(state);
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
+ });
@@ -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
+ });
@@ -1,3 +1,3 @@
1
- export var version = '14.7.0';
1
+ export var version = '14.8.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": "14.7.0",
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.3",
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.42.0",
48
- "@typescript-eslint/parser": "8.42.0",
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.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",