UNPKG

hyperformula

Version:

HyperFormula is a JavaScript engine for efficient processing of spreadsheet-like data and formulas

214 lines (213 loc) 9.83 kB
/** * @license * Copyright (c) 2025 Handsoncode. All rights reserved. */ import { IToken } from 'chevrotain'; import { CellError } from '../Cell'; import { CellAddress } from './CellAddress'; import { ColumnAddress } from './ColumnAddress'; import { ExtendedToken } from './FormulaParser'; import { RowAddress } from './RowAddress'; export declare type Ast = NumberAst | StringAst | CellReferenceAst | CellRangeAst | ColumnRangeAst | RowRangeAst | ConcatenateOpAst | MinusUnaryOpAst | PlusUnaryOpAst | PercentOpAst | EqualsOpAst | NotEqualOpAst | GreaterThanOpAst | LessThanOpAst | LessThanOrEqualOpAst | GreaterThanOrEqualOpAst | PlusOpAst | MinusOpAst | TimesOpAst | DivOpAst | PowerOpAst | ProcedureAst | NamedExpressionAst | ParenthesisAst | ErrorAst | ErrorWithRawInputAst | EmptyArgAst | ArrayAst; export interface ParsingError { type: ParsingErrorType; message: string; } export declare const parsingError: (type: ParsingErrorType, message: string) => { type: ParsingErrorType; message: string; }; /** * Represents types of parsing errors. */ export declare enum ParsingErrorType { LexingError = "LexingError", ParserError = "ParsingError", StaticOffsetError = "StaticOffsetError", StaticOffsetOutOfRangeError = "StaticOffsetOutOfRangeError", RangeOffsetNotAllowed = "RangeOffsetNotAllowed", InvalidRangeSize = "InvalidRangeSize" } export declare enum AstNodeType { EMPTY = "EMPTY", NUMBER = "NUMBER", STRING = "STRING", MINUS_UNARY_OP = "MINUS_UNARY_OP", PLUS_UNARY_OP = "PLUS_UNARY_OP", PERCENT_OP = "PERCENT_OP", CONCATENATE_OP = "CONCATENATE_OP", EQUALS_OP = "EQUALS_OP", NOT_EQUAL_OP = "NOT_EQUAL_OP", GREATER_THAN_OP = "GREATER_THAN_OP", LESS_THAN_OP = "LESS_THAN_OP", GREATER_THAN_OR_EQUAL_OP = "GREATER_THAN_OR_EQUAL_OP", LESS_THAN_OR_EQUAL_OP = "LESS_THAN_OR_EQUAL_OP", PLUS_OP = "PLUS_OP", MINUS_OP = "MINUS_OP", TIMES_OP = "TIMES_OP", DIV_OP = "DIV_OP", POWER_OP = "POWER_OP", FUNCTION_CALL = "FUNCTION_CALL", NAMED_EXPRESSION = "NAMED_EXPRESSION", PARENTHESIS = "PARENTHESES", CELL_REFERENCE = "CELL_REFERENCE", CELL_RANGE = "CELL_RANGE", COLUMN_RANGE = "COLUMN_RANGE", ROW_RANGE = "ROW_RANGE", ERROR = "ERROR", ERROR_WITH_RAW_INPUT = "ERROR_WITH_RAW_INPUT", ARRAY = "ARRAY" } export declare enum RangeSheetReferenceType { RELATIVE = 0, START_ABSOLUTE = 1, BOTH_ABSOLUTE = 2 } export interface AstWithWhitespace { leadingWhitespace?: string; } export interface AstWithInternalWhitespace extends AstWithWhitespace { internalWhitespace?: string; } export interface EmptyArgAst extends AstWithWhitespace { type: AstNodeType.EMPTY; } export declare const buildEmptyArgAst: (leadingWhitespace?: IToken | undefined) => EmptyArgAst; export interface NumberAst extends AstWithWhitespace { type: AstNodeType.NUMBER; value: number; } export declare const buildNumberAst: (value: number, leadingWhitespace?: IToken | undefined) => NumberAst; export interface StringAst extends AstWithWhitespace { type: AstNodeType.STRING; value: string; } export declare const buildStringAst: (token: ExtendedToken) => StringAst; export interface CellReferenceAst extends AstWithWhitespace { type: AstNodeType.CELL_REFERENCE; reference: CellAddress; } export declare const buildCellReferenceAst: (reference: CellAddress, leadingWhitespace?: IToken | undefined) => CellReferenceAst; export interface CellRangeAst extends AstWithWhitespace { type: AstNodeType.CELL_RANGE; start: CellAddress; end: CellAddress; sheetReferenceType: RangeSheetReferenceType; } export declare const buildCellRangeAst: (start: CellAddress, end: CellAddress, sheetReferenceType: RangeSheetReferenceType, leadingWhitespace?: string | undefined) => CellRangeAst; export interface ColumnRangeAst extends AstWithWhitespace { type: AstNodeType.COLUMN_RANGE; start: ColumnAddress; end: ColumnAddress; sheetReferenceType: RangeSheetReferenceType; } export declare const buildColumnRangeAst: (start: ColumnAddress, end: ColumnAddress, sheetReferenceType: RangeSheetReferenceType, leadingWhitespace?: IToken | undefined) => ColumnRangeAst; export interface RowRangeAst extends AstWithWhitespace { type: AstNodeType.ROW_RANGE; start: RowAddress; end: RowAddress; sheetReferenceType: RangeSheetReferenceType; } export declare const buildRowRangeAst: (start: RowAddress, end: RowAddress, sheetReferenceType: RangeSheetReferenceType, leadingWhitespace?: IToken | undefined) => RowRangeAst; export interface BinaryOpAst extends AstWithWhitespace { left: Ast; right: Ast; } export interface ConcatenateOpAst extends BinaryOpAst { type: AstNodeType.CONCATENATE_OP; } export declare const buildConcatenateOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => ConcatenateOpAst; export interface EqualsOpAst extends BinaryOpAst { type: AstNodeType.EQUALS_OP; } export declare const buildEqualsOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => EqualsOpAst; export interface NotEqualOpAst extends BinaryOpAst { type: AstNodeType.NOT_EQUAL_OP; } export declare const buildNotEqualOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => NotEqualOpAst; export interface GreaterThanOpAst extends BinaryOpAst { type: AstNodeType.GREATER_THAN_OP; } export declare const buildGreaterThanOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => GreaterThanOpAst; export interface LessThanOpAst extends BinaryOpAst { type: AstNodeType.LESS_THAN_OP; } export declare const buildLessThanOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => LessThanOpAst; export interface GreaterThanOrEqualOpAst extends BinaryOpAst { type: AstNodeType.GREATER_THAN_OR_EQUAL_OP; } export declare const buildGreaterThanOrEqualOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => GreaterThanOrEqualOpAst; export interface LessThanOrEqualOpAst extends BinaryOpAst { type: AstNodeType.LESS_THAN_OR_EQUAL_OP; } export declare const buildLessThanOrEqualOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => LessThanOrEqualOpAst; export interface PlusOpAst extends BinaryOpAst { type: AstNodeType.PLUS_OP; } export declare const buildPlusOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => PlusOpAst; export interface MinusOpAst extends BinaryOpAst { type: AstNodeType.MINUS_OP; } export declare const buildMinusOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => MinusOpAst; export interface TimesOpAst extends BinaryOpAst { type: AstNodeType.TIMES_OP; } export declare const buildTimesOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => TimesOpAst; export interface DivOpAst extends BinaryOpAst { type: AstNodeType.DIV_OP; } export declare const buildDivOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => DivOpAst; export interface PowerOpAst extends BinaryOpAst { type: AstNodeType.POWER_OP; } export declare const buildPowerOpAst: (left: Ast, right: Ast, leadingWhitespace?: IToken | undefined) => PowerOpAst; export interface MinusUnaryOpAst extends AstWithWhitespace { type: AstNodeType.MINUS_UNARY_OP; value: Ast; } export declare const buildMinusUnaryOpAst: (value: Ast, leadingWhitespace?: IToken | undefined) => MinusUnaryOpAst; export interface PlusUnaryOpAst extends AstWithWhitespace { type: AstNodeType.PLUS_UNARY_OP; value: Ast; } export declare const buildPlusUnaryOpAst: (value: Ast, leadingWhitespace?: IToken | undefined) => PlusUnaryOpAst; export interface PercentOpAst extends AstWithWhitespace { type: AstNodeType.PERCENT_OP; value: Ast; } export declare const buildPercentOpAst: (value: Ast, leadingWhitespace?: IToken | undefined) => PercentOpAst; export interface ProcedureAst extends AstWithInternalWhitespace { type: AstNodeType.FUNCTION_CALL; procedureName: string; args: Ast[]; hyperlink?: string; } export declare const buildProcedureAst: (procedureName: string, args: Ast[], leadingWhitespace?: IToken | undefined, internalWhitespace?: IToken | undefined, hyperlink?: string | undefined) => ProcedureAst; export interface ArrayAst extends AstWithInternalWhitespace { type: AstNodeType.ARRAY; args: Ast[][]; } export declare const buildArrayAst: (args: Ast[][], leadingWhitespace?: IToken | undefined, internalWhitespace?: IToken | undefined) => ArrayAst; export interface NamedExpressionAst extends AstWithInternalWhitespace { type: AstNodeType.NAMED_EXPRESSION; expressionName: string; } export declare const buildNamedExpressionAst: (expressionName: string, leadingWhitespace?: IToken | undefined) => NamedExpressionAst; export interface ParenthesisAst extends AstWithInternalWhitespace { type: AstNodeType.PARENTHESIS; expression: Ast; } export declare const buildParenthesisAst: (expression: Ast, leadingWhitespace?: IToken | undefined, internalWhitespace?: IToken | undefined) => ParenthesisAst; export interface ErrorAst extends AstWithWhitespace { type: AstNodeType.ERROR; error: CellError; } export declare const buildCellErrorAst: (error: CellError, leadingWhitespace?: IToken | undefined) => ErrorAst; export interface ErrorWithRawInputAst extends AstWithWhitespace { type: AstNodeType.ERROR_WITH_RAW_INPUT; rawInput: string; error: CellError; } export declare const buildErrorWithRawInputAst: (rawInput: string, error: CellError, leadingWhitespace?: IToken | undefined) => ErrorWithRawInputAst; export declare const buildParsingErrorAst: () => ErrorAst; export declare function imageWithWhitespace(image: string, leadingWhitespace?: string): string;