Type alias FormulaNode

FormulaNode: {
    kind: "literal";
    value: number | string | boolean | null;
} | {
    kind: "field";
    name: string;
} | {
    kind: "unary";
    op: "-" | "+" | "%";
    operand: FormulaNode;
} | {
    kind: "binary";
    left: FormulaNode;
    op: FormulaBinaryOperator;
    right: FormulaNode;
} | {
    args: readonly FormulaNode[];
    kind: "call";
    name: string;
} | FormulaRefNode | {
    from: FormulaRefNode;
    kind: "range";
    to: FormulaRefNode;
} | {
    code: string;
    kind: "error";
    message?: string;
    text?: string;
}

A node of a compiled formula (abstract syntax tree). Read-only; the evaluator walks it – no code is generated (no eval, no new Function).

Cell formulas (since 1.1.99, spreadsheet mode) add cell references (ref), ranges (range), error literals (error, e.g. #REF! after deleting rows) and the percent operator (unary with "%"); the formulas of calculated columns never contain them.

Type declaration

  • Readonly kind: "literal"
  • Readonly value: number | string | boolean | null

Type declaration

  • Readonly kind: "field"
  • Readonly name: string

Type declaration

  • Readonly kind: "unary"
  • Readonly op: "-" | "+" | "%"
  • Readonly operand: FormulaNode

Type declaration

Type declaration

  • Readonly args: readonly FormulaNode[]
  • Readonly kind: "call"
  • Readonly name: string

Type declaration

Type declaration

  • Readonly code: string
  • Readonly kind: "error"
  • Optional Readonly message?: string
  • Optional Readonly text?: string

Example

const ast = compileFormula("[price] * 2").ast;
// { kind: "binary", op: "*", left: { kind: "field", name: "price" }, right: { kind: "literal", value: 2 } }

Since

1.1.95