80 lines
1.9 KiB
TypeScript
80 lines
1.9 KiB
TypeScript
export type Value = number
|
|
| string
|
|
| ((...args: Value[]) => Value)
|
|
| { [propertyName: string]: Value };
|
|
|
|
export interface Values {
|
|
[propertyName: string]: Value;
|
|
}
|
|
|
|
export interface ParserOptions {
|
|
allowMemberAccess?: boolean;
|
|
operators?: {
|
|
add?: boolean,
|
|
comparison?: boolean,
|
|
concatenate?: boolean,
|
|
conditional?: boolean,
|
|
divide?: boolean,
|
|
factorial?: boolean,
|
|
logical?: boolean,
|
|
multiply?: boolean,
|
|
power?: boolean,
|
|
remainder?: boolean,
|
|
subtract?: boolean,
|
|
sin?: boolean,
|
|
cos?: boolean,
|
|
tan?: boolean,
|
|
asin?: boolean,
|
|
acos?: boolean,
|
|
atan?: boolean,
|
|
sinh?: boolean,
|
|
cosh?: boolean,
|
|
tanh?: boolean,
|
|
asinh?: boolean,
|
|
acosh?: boolean,
|
|
atanh?: boolean,
|
|
sqrt?: boolean,
|
|
log?: boolean,
|
|
ln?: boolean,
|
|
lg?: boolean,
|
|
log10?: boolean,
|
|
abs?: boolean,
|
|
ceil?: boolean,
|
|
floor?: boolean,
|
|
round?: boolean,
|
|
trunc?: boolean,
|
|
exp?: boolean,
|
|
length?: boolean,
|
|
in?: boolean,
|
|
random?: boolean,
|
|
min?: boolean,
|
|
max?: boolean,
|
|
assignment?: boolean,
|
|
fndef?: boolean,
|
|
cbrt?: boolean,
|
|
expm1?: boolean,
|
|
log1p?: boolean,
|
|
sign?: boolean,
|
|
log2?: boolean
|
|
};
|
|
}
|
|
|
|
export class Parser {
|
|
constructor(options?: ParserOptions);
|
|
unaryOps: any;
|
|
functions: any;
|
|
consts: any;
|
|
parse(expression: string): Expression;
|
|
evaluate(expression: string, values?: Value): number;
|
|
static parse(expression: string): Expression;
|
|
static evaluate(expression: string, values?: Value): number;
|
|
}
|
|
|
|
export interface Expression {
|
|
simplify(values?: Value): Expression;
|
|
evaluate(values?: Value): any;
|
|
substitute(variable: string, value: Expression | string | number): Expression;
|
|
symbols(options?: { withMembers?: boolean }): string[];
|
|
variables(options?: { withMembers?: boolean }): string[];
|
|
toJSFunction(params: string, values?: Value): (...args: any[]) => number;
|
|
}
|