File size: 2,341 Bytes
d9494a5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
declare module 'expr-eval-fork' {
  export type Value =
    | number
    | string
    | boolean
    | null
    | undefined
    | Value[]
    | ((...args: Value[]) => Value)
    | { [propertyName: string]: Value };

  export type EvaluationContext = Record<string, unknown>;

  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?: EvaluationContext): number;
    static parse(expression: string): Expression;
    static evaluate(expression: string, values?: EvaluationContext): number;
  }

  export interface Expression {
    simplify(values?: EvaluationContext): Expression;
    evaluate(values?: EvaluationContext): any;
    substitute(
      variable: string,
      value: Expression | string | number,
    ): Expression;
    symbols(options?: { withMembers?: boolean }): string[];
    variables(options?: { withMembers?: boolean }): string[];
    toJSFunction(
      params: string,
      values?: EvaluationContext,
    ): (...args: any[]) => number;
  }
}