UNPKG

@valraiso-esf/expression-parser

Version:

An expression evaluator written in typescript with the goal to support SQL like WHERE clauses.

63 lines (62 loc) 2.37 kB
import { TokenType } from './token'; export declare type Expression = BinaryExpression | UnaryExpression | ValueExpression | FunctionCallExpression | IdentifierExpression | CaseExpression | InExpression | GroupExpression | NotExpression; export interface Node { readonly type: 'BinaryExpression' | 'UnaryExpression' | 'ValueExpression' | 'FunctionCallExpression' | 'IdentifierExpression' | 'CaseExpression' | 'InExpression' | 'GroupExpression' | 'NotExpression'; } export declare class BinaryExpression implements Node { operator: TokenType; left: Expression; right: Expression; constructor(operator: TokenType, left: Expression, right: Expression); readonly type = "BinaryExpression"; } export declare class UnaryExpression implements Node { operator: TokenType; operand: Expression; constructor(operator: TokenType, operand: Expression); readonly type = "UnaryExpression"; } export declare class ValueExpression implements Node { value: any; constructor(value: any); readonly type = "ValueExpression"; } export declare class FunctionCallExpression implements Node { name: string; args: Expression[]; constructor(name: string, args: Expression[]); readonly type = "FunctionCallExpression"; } export declare class IdentifierExpression implements Node { name: string; constructor(name: string); readonly type = "IdentifierExpression"; } export declare class CaseExpression implements Node { conditions: { when: Expression; then: Expression; }[]; last?: Expression | undefined; constructor(conditions: { when: Expression; then: Expression; }[], last?: Expression | undefined); readonly type = "CaseExpression"; } export declare class InExpression implements Node { left: IdentifierExpression | GroupExpression; right: IdentifierExpression | GroupExpression; constructor(left: IdentifierExpression | GroupExpression, right: IdentifierExpression | GroupExpression); readonly type = "InExpression"; } export declare class NotExpression implements Node { expression: Expression; constructor(expression: Expression); readonly type = "NotExpression"; } export declare class GroupExpression implements Node { values: Expression[]; constructor(values: Expression[]); readonly type = "GroupExpression"; }