mirror of
https://github.com/josdejong/mathjs.git
synced 2025-12-08 19:46:04 +00:00
307 lines
5.5 KiB
JavaScript
307 lines
5.5 KiB
JavaScript
// generates a whitelist of safe methods and functions
|
|
import { hasOwnProperty } from './utils.js'
|
|
import { create, all } from '../lib/esm/index.js'
|
|
|
|
// math.js functions (can be used when chaining
|
|
const math = create(all)
|
|
const chain = {
|
|
done: true,
|
|
valueOf: true,
|
|
toString: true
|
|
}
|
|
for (const name in math) {
|
|
if (hasOwnProperty(math, name) && typeof math[name] === 'function') {
|
|
chain[name] = true
|
|
}
|
|
}
|
|
|
|
const groups = [
|
|
chain,
|
|
|
|
// Unit
|
|
{
|
|
valueOf: true,
|
|
clone: true,
|
|
hasBase: true,
|
|
equalBase: true,
|
|
equals: true,
|
|
multiply: true,
|
|
divide: true,
|
|
pow: true,
|
|
abs: true,
|
|
to: true,
|
|
toNumber: true,
|
|
toNumeric: true,
|
|
format: true,
|
|
formatUnits: true,
|
|
toString: true
|
|
},
|
|
|
|
// Complex
|
|
{
|
|
sign: true,
|
|
add: true,
|
|
sub: true,
|
|
mul: true,
|
|
div: true,
|
|
pow: true,
|
|
sqrt: true,
|
|
exp: true,
|
|
log: true,
|
|
abs: true,
|
|
arg: true,
|
|
inverse: true,
|
|
conjugate: true,
|
|
neg: true,
|
|
floor: true,
|
|
ceil: true,
|
|
round: true,
|
|
equals: true,
|
|
isNaN: true,
|
|
clone: true,
|
|
toVector: true,
|
|
toString: true,
|
|
sin: true,
|
|
cos: true,
|
|
tan: true,
|
|
cot: true,
|
|
sec: true,
|
|
csc: true,
|
|
asin: true,
|
|
acos: true,
|
|
atan: true,
|
|
acot: true,
|
|
asec: true,
|
|
acsc: true,
|
|
sinh: true,
|
|
cosh: true,
|
|
tanh: true,
|
|
coth: true,
|
|
sech: true,
|
|
csch: true,
|
|
asinh: true,
|
|
acosh: true,
|
|
atanh: true,
|
|
acoth: true,
|
|
asech: true,
|
|
acsch: true
|
|
},
|
|
|
|
// BigNumber
|
|
{
|
|
// 'abs': true,
|
|
// 'acos': true,
|
|
// 'acosh': true,
|
|
// 'add': true,
|
|
// 'asin': true,
|
|
// 'asinh': true,
|
|
// 'atan': true,
|
|
// 'atanh': true,
|
|
atan2: true,
|
|
// 'cbrt': true,
|
|
// 'ceil': true,
|
|
clone: true,
|
|
// 'cos': true,
|
|
// 'cosh': true,
|
|
// 'div': true,
|
|
// 'exp': true,
|
|
// 'floor': true,
|
|
hypot: true,
|
|
// 'ln': true,
|
|
// 'log': true,
|
|
log2: true,
|
|
log10: true,
|
|
max: true,
|
|
min: true,
|
|
// 'mod': true,
|
|
// 'mul': true,
|
|
noConflict: true,
|
|
// 'pow': true,
|
|
random: true,
|
|
// 'round': true,
|
|
set: true,
|
|
sign: true,
|
|
// 'sin': true,
|
|
// 'sinh': true,
|
|
// 'sqrt': true,
|
|
// 'sub': true,
|
|
// 'tan': true,
|
|
// 'tanh': true,
|
|
// 'trunc': true,
|
|
|
|
absoluteValue: true,
|
|
abs: true,
|
|
ceil: true,
|
|
comparedTo: true,
|
|
cmp: true,
|
|
cosine: true,
|
|
cos: true,
|
|
cubeRoot: true,
|
|
cbrt: true,
|
|
decimalPlaces: true,
|
|
dp: true,
|
|
dividedBy: true,
|
|
div: true,
|
|
dividedToIntegerBy: true,
|
|
divToInt: true,
|
|
equals: true,
|
|
eq: true,
|
|
floor: true,
|
|
greaterThan: true,
|
|
gt: true,
|
|
greaterThanOrEqualTo: true,
|
|
gte: true,
|
|
hyperbolicCosine: true,
|
|
cosh: true,
|
|
hyperbolicSine: true,
|
|
sinh: true,
|
|
hyperbolicTangent: true,
|
|
tanh: true,
|
|
inverseCosine: true,
|
|
acos: true,
|
|
inverseHyperbolicCosine: true,
|
|
acosh: true,
|
|
inverseHyperbolicSine: true,
|
|
asinh: true,
|
|
inverseHyperbolicTangent: true,
|
|
atanh: true,
|
|
inverseSine: true,
|
|
asin: true,
|
|
inverseTangent: true,
|
|
atan: true,
|
|
isFinite: true,
|
|
isInteger: true,
|
|
isInt: true,
|
|
isNaN: true,
|
|
isNegative: true,
|
|
isNeg: true,
|
|
isPositive: true,
|
|
isPos: true,
|
|
isZero: true,
|
|
lessThan: true,
|
|
lt: true,
|
|
lessThanOrEqualTo: true,
|
|
lte: true,
|
|
logarithm: true,
|
|
log: true,
|
|
minus: true,
|
|
sub: true,
|
|
modulo: true,
|
|
mod: true,
|
|
naturalExponential: true,
|
|
exp: true,
|
|
naturalLogarithm: true,
|
|
ln: true,
|
|
negated: true,
|
|
neg: true,
|
|
plus: true,
|
|
add: true,
|
|
precision: true,
|
|
sd: true,
|
|
round: true,
|
|
sine: true,
|
|
sin: true,
|
|
squareRoot: true,
|
|
sqrt: true,
|
|
tangent: true,
|
|
tan: true,
|
|
times: true,
|
|
mul: true,
|
|
toBinary: true,
|
|
toDecimalPlaces: true,
|
|
toDP: true,
|
|
toExponential: true,
|
|
toFixed: true,
|
|
toFraction: true,
|
|
toHexadecimal: true,
|
|
toHex: true,
|
|
toJSON: true,
|
|
toNearest: true,
|
|
toNumber: true,
|
|
toOctal: true,
|
|
toPower: true,
|
|
pow: true,
|
|
toPrecision: true,
|
|
toSignificantDigits: true,
|
|
toSD: true,
|
|
toString: true,
|
|
truncated: true,
|
|
trunc: true,
|
|
valueOf: true
|
|
},
|
|
|
|
// Fraction
|
|
{
|
|
abs: true,
|
|
neg: true,
|
|
add: true,
|
|
sub: true,
|
|
mul: true,
|
|
div: true,
|
|
pow: true,
|
|
mod: true,
|
|
gcd: true,
|
|
lcm: true,
|
|
ceil: true,
|
|
floor: true,
|
|
round: true,
|
|
inverse: true,
|
|
equals: true,
|
|
compare: true,
|
|
valueOf: true,
|
|
toString: true,
|
|
toLatex: true,
|
|
toFraction: true,
|
|
toContinued: true,
|
|
clone: true
|
|
},
|
|
|
|
// Array, DenseMatrix, SparseMatrix
|
|
{
|
|
clone: true,
|
|
subset: true,
|
|
resize: true,
|
|
size: true,
|
|
map: true,
|
|
forEach: true,
|
|
toArray: true,
|
|
toJSON: true,
|
|
diagonal: true,
|
|
swapRows: true,
|
|
toString: true,
|
|
valueOf: true,
|
|
format: true
|
|
},
|
|
|
|
// Node
|
|
{
|
|
clone: true,
|
|
cloneDeep: true,
|
|
compile: true,
|
|
evaluate: true,
|
|
equals: true,
|
|
filter: true,
|
|
forEach: true,
|
|
map: true,
|
|
toString: true,
|
|
toTex: true,
|
|
transform: true,
|
|
traverse: true
|
|
}
|
|
]
|
|
|
|
// merge all groups into a single whitelist
|
|
const whitelist = groups.reduce(function (whitelist, group) {
|
|
return Object.assign(whitelist, group)
|
|
}, {})
|
|
|
|
const keys = Object.keys(whitelist).sort()
|
|
const orderedWhitelist = keys.reduce(function (whitelist, key) {
|
|
whitelist[key] = true
|
|
return whitelist
|
|
}, {})
|
|
|
|
console.log(orderedWhitelist)
|
|
console.log('number of methods/functions:', keys.length)
|
|
console.log('copy this object with safe methods into the file customs.js.')
|