mathjs 13.1.0 → 13.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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",
|