mathjs 13.1.0 → 13.1.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 +13 -0
- 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/expression/node/FunctionNode.js +9 -1
- package/lib/cjs/header.js +2 -2
- package/lib/cjs/utils/customs.js +5 -12
- package/lib/cjs/utils/map.js +5 -3
- package/lib/cjs/version.js +1 -1
- package/lib/esm/expression/node/FunctionNode.js +9 -1
- package/lib/esm/utils/customs.js +5 -12
- package/lib/esm/utils/map.js +6 -4
- package/lib/esm/version.js +1 -1
- package/package.json +1 -1
@@ -176,7 +176,15 @@ const createFunctionNode = exports.createFunctionNode = /* #__PURE__ */(0, _fact
|
|
176
176
|
const rawArgs = this.args;
|
177
177
|
return function evalFunctionNode(scope, args, context) {
|
178
178
|
const fn = resolveFn(scope);
|
179
|
-
|
179
|
+
|
180
|
+
// the original function can be overwritten in the scope with a non-rawArgs function
|
181
|
+
if (fn.rawArgs === true) {
|
182
|
+
return fn(rawArgs, math, (0, _scope.createSubScope)(scope, args));
|
183
|
+
} else {
|
184
|
+
// "regular" evaluation
|
185
|
+
const values = evalArgs.map(evalArg => evalArg(scope, args, context));
|
186
|
+
return fn(...values);
|
187
|
+
}
|
180
188
|
};
|
181
189
|
} else {
|
182
190
|
// "regular" evaluation
|
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 13.1.
|
10
|
-
* @date 2024-08-
|
9
|
+
* @version 13.1.1
|
10
|
+
* @date 2024-08-27
|
11
11
|
*
|
12
12
|
* @license
|
13
13
|
* Copyright (C) 2013-2024 Jos de Jong <wjosdejong@gmail.com>
|
package/lib/cjs/utils/customs.js
CHANGED
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.getSafeMethod = getSafeMethod;
|
7
|
-
exports.getSafeProperties = getSafeProperties;
|
8
7
|
exports.getSafeProperty = getSafeProperty;
|
9
|
-
exports.hasSafeProperty = hasSafeProperty;
|
10
8
|
exports.isPlainObject = isPlainObject;
|
11
9
|
exports.isSafeMethod = isSafeMethod;
|
12
10
|
exports.isSafeProperty = isSafeProperty;
|
@@ -22,7 +20,7 @@ var _object = require("./object.js");
|
|
22
20
|
*/
|
23
21
|
function getSafeProperty(object, prop) {
|
24
22
|
// only allow getting safe properties of a plain object
|
25
|
-
if (
|
23
|
+
if (isSafeProperty(object, prop)) {
|
26
24
|
return object[prop];
|
27
25
|
}
|
28
26
|
if (typeof object[prop] === 'function' && isSafeMethod(object, prop)) {
|
@@ -43,27 +41,22 @@ function getSafeProperty(object, prop) {
|
|
43
41
|
// TODO: merge this function into access.js?
|
44
42
|
function setSafeProperty(object, prop, value) {
|
45
43
|
// only allow setting safe properties of a plain object
|
46
|
-
if (
|
44
|
+
if (isSafeProperty(object, prop)) {
|
47
45
|
object[prop] = value;
|
48
46
|
return value;
|
49
47
|
}
|
50
48
|
throw new Error('No access to property "' + prop + '"');
|
51
49
|
}
|
52
|
-
function getSafeProperties(object) {
|
53
|
-
return Object.keys(object).filter(prop => (0, _object.hasOwnProperty)(object, prop));
|
54
|
-
}
|
55
|
-
function hasSafeProperty(object, prop) {
|
56
|
-
return prop in object;
|
57
|
-
}
|
58
50
|
|
59
51
|
/**
|
60
|
-
* Test whether a property is safe to use
|
52
|
+
* Test whether a property is safe to use on an object or Array.
|
61
53
|
* For example .toString and .constructor are not safe
|
54
|
+
* @param {Object | Array} object
|
62
55
|
* @param {string} prop
|
63
56
|
* @return {boolean} Returns true when safe
|
64
57
|
*/
|
65
58
|
function isSafeProperty(object, prop) {
|
66
|
-
if (!object
|
59
|
+
if (!isPlainObject(object) && !Array.isArray(object)) {
|
67
60
|
return false;
|
68
61
|
}
|
69
62
|
// SAFE: whitelisted
|
package/lib/cjs/utils/map.js
CHANGED
@@ -24,7 +24,7 @@ class ObjectWrappingMap {
|
|
24
24
|
this[Symbol.iterator] = this.entries;
|
25
25
|
}
|
26
26
|
keys() {
|
27
|
-
return Object.keys(this.wrappedObject).values();
|
27
|
+
return Object.keys(this.wrappedObject).filter(key => this.has(key)).values();
|
28
28
|
}
|
29
29
|
get(key) {
|
30
30
|
return (0, _customs.getSafeProperty)(this.wrappedObject, key);
|
@@ -34,7 +34,7 @@ class ObjectWrappingMap {
|
|
34
34
|
return this;
|
35
35
|
}
|
36
36
|
has(key) {
|
37
|
-
return (0, _customs.
|
37
|
+
return (0, _customs.isSafeProperty)(this.wrappedObject, key) && key in this.wrappedObject;
|
38
38
|
}
|
39
39
|
entries() {
|
40
40
|
return mapIterator(this.keys(), key => [key, this.get(key)]);
|
@@ -45,7 +45,9 @@ class ObjectWrappingMap {
|
|
45
45
|
}
|
46
46
|
}
|
47
47
|
delete(key) {
|
48
|
-
|
48
|
+
if ((0, _customs.isSafeProperty)(this.wrappedObject, key)) {
|
49
|
+
delete this.wrappedObject[key];
|
50
|
+
}
|
49
51
|
}
|
50
52
|
clear() {
|
51
53
|
for (const key of this.keys()) {
|
package/lib/cjs/version.js
CHANGED
@@ -4,6 +4,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
5
5
|
});
|
6
6
|
exports.version = void 0;
|
7
|
-
const version = exports.version = '13.1.
|
7
|
+
const version = exports.version = '13.1.1';
|
8
8
|
// Note: This file is automatically generated when building math.js.
|
9
9
|
// Changes made in this file will be overwritten.
|
@@ -169,7 +169,15 @@ export var createFunctionNode = /* #__PURE__ */factory(name, dependencies, _ref
|
|
169
169
|
var rawArgs = this.args;
|
170
170
|
return function evalFunctionNode(scope, args, context) {
|
171
171
|
var fn = resolveFn(scope);
|
172
|
-
|
172
|
+
|
173
|
+
// the original function can be overwritten in the scope with a non-rawArgs function
|
174
|
+
if (fn.rawArgs === true) {
|
175
|
+
return fn(rawArgs, math, createSubScope(scope, args));
|
176
|
+
} else {
|
177
|
+
// "regular" evaluation
|
178
|
+
var values = evalArgs.map(evalArg => evalArg(scope, args, context));
|
179
|
+
return fn(...values);
|
180
|
+
}
|
173
181
|
};
|
174
182
|
} else {
|
175
183
|
// "regular" evaluation
|
package/lib/esm/utils/customs.js
CHANGED
@@ -10,7 +10,7 @@ import { hasOwnProperty } from './object.js';
|
|
10
10
|
*/
|
11
11
|
function getSafeProperty(object, prop) {
|
12
12
|
// only allow getting safe properties of a plain object
|
13
|
-
if (
|
13
|
+
if (isSafeProperty(object, prop)) {
|
14
14
|
return object[prop];
|
15
15
|
}
|
16
16
|
if (typeof object[prop] === 'function' && isSafeMethod(object, prop)) {
|
@@ -31,27 +31,22 @@ function getSafeProperty(object, prop) {
|
|
31
31
|
// TODO: merge this function into access.js?
|
32
32
|
function setSafeProperty(object, prop, value) {
|
33
33
|
// only allow setting safe properties of a plain object
|
34
|
-
if (
|
34
|
+
if (isSafeProperty(object, prop)) {
|
35
35
|
object[prop] = value;
|
36
36
|
return value;
|
37
37
|
}
|
38
38
|
throw new Error('No access to property "' + prop + '"');
|
39
39
|
}
|
40
|
-
function getSafeProperties(object) {
|
41
|
-
return Object.keys(object).filter(prop => hasOwnProperty(object, prop));
|
42
|
-
}
|
43
|
-
function hasSafeProperty(object, prop) {
|
44
|
-
return prop in object;
|
45
|
-
}
|
46
40
|
|
47
41
|
/**
|
48
|
-
* Test whether a property is safe to use
|
42
|
+
* Test whether a property is safe to use on an object or Array.
|
49
43
|
* For example .toString and .constructor are not safe
|
44
|
+
* @param {Object | Array} object
|
50
45
|
* @param {string} prop
|
51
46
|
* @return {boolean} Returns true when safe
|
52
47
|
*/
|
53
48
|
function isSafeProperty(object, prop) {
|
54
|
-
if (!object
|
49
|
+
if (!isPlainObject(object) && !Array.isArray(object)) {
|
55
50
|
return false;
|
56
51
|
}
|
57
52
|
// SAFE: whitelisted
|
@@ -147,8 +142,6 @@ var safeNativeMethods = {
|
|
147
142
|
export { getSafeProperty };
|
148
143
|
export { setSafeProperty };
|
149
144
|
export { isSafeProperty };
|
150
|
-
export { hasSafeProperty };
|
151
|
-
export { getSafeProperties };
|
152
145
|
export { getSafeMethod };
|
153
146
|
export { isSafeMethod };
|
154
147
|
export { isPlainObject };
|
package/lib/esm/utils/map.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { getSafeProperty,
|
1
|
+
import { getSafeProperty, isSafeProperty, setSafeProperty } from './customs.js';
|
2
2
|
import { isMap, isObject } from './is.js';
|
3
3
|
|
4
4
|
/**
|
@@ -15,7 +15,7 @@ export class ObjectWrappingMap {
|
|
15
15
|
this[Symbol.iterator] = this.entries;
|
16
16
|
}
|
17
17
|
keys() {
|
18
|
-
return Object.keys(this.wrappedObject).values();
|
18
|
+
return Object.keys(this.wrappedObject).filter(key => this.has(key)).values();
|
19
19
|
}
|
20
20
|
get(key) {
|
21
21
|
return getSafeProperty(this.wrappedObject, key);
|
@@ -25,7 +25,7 @@ export class ObjectWrappingMap {
|
|
25
25
|
return this;
|
26
26
|
}
|
27
27
|
has(key) {
|
28
|
-
return
|
28
|
+
return isSafeProperty(this.wrappedObject, key) && key in this.wrappedObject;
|
29
29
|
}
|
30
30
|
entries() {
|
31
31
|
return mapIterator(this.keys(), key => [key, this.get(key)]);
|
@@ -36,7 +36,9 @@ export class ObjectWrappingMap {
|
|
36
36
|
}
|
37
37
|
}
|
38
38
|
delete(key) {
|
39
|
-
|
39
|
+
if (isSafeProperty(this.wrappedObject, key)) {
|
40
|
+
delete this.wrappedObject[key];
|
41
|
+
}
|
40
42
|
}
|
41
43
|
clear() {
|
42
44
|
for (var key of this.keys()) {
|
package/lib/esm/version.js
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "mathjs",
|
3
|
-
"version": "13.1.
|
3
|
+
"version": "13.1.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",
|