UNPKG

@qrvey/formula-lang

Version:

QFormula support for qrvey projects

146 lines (145 loc) 4.31 kB
import { ENGINES, AST_TYPES, RESPONSE_LEVEL, AST_PRIMITIVES, CUSTOM_PRIMITIVE, Primitive } from '.'; import { BaseError } from '../errors'; interface FunctionElementDefinition { identifier: string; } export interface FunctionDefinition extends FunctionElementDefinition { recursiveStartIn?: number; transpiler: EnginesFunction; parameters?: Array<FunctionParameter>; primitiveResult: Primitive | ((args: CommonAST[]) => Primitive); } export type EnginesFunction = { [key in ENGINES]: Function; }; export interface FunctionParameter extends FunctionElementDefinition { optional: boolean; generic?: boolean; expectedPrimitive?: AST_PRIMITIVES; validator: Array<ValidatorFunctionParameter>; } export interface ProcessNodeResult { value: any; type: AST_TYPES; dataType: Primitive; node: CommonAST; } export interface ValidatorParameterContext { fnNode: FunctionCallAST; argument: ProcessNodeResult; } export interface ValidatorFunctionParameter { (value: any, dataType: Primitive | undefined, context: ValidatorParameterContext): ValidatorResponse; } export interface ValidatorResponse { valid: boolean; code?: string; source?: RESPONSE_LEVEL; message?: string; info?: any; mismatchData?: ValidatorExpectedInfo; } export interface ValidatorParameterResponse extends ValidatorResponse { parameter: FunctionParameter; argumentIndex: number; } export interface ValidatorExpectedInfo { primitive: Primitive; customPrimitive?: CUSTOM_PRIMITIVE; customReceived?: CUSTOM_PRIMITIVE; type?: AST_TYPES; } export interface TranspilationResponse { valid: boolean; expression?: string; errors?: BaseError[]; details?: TranspilationDetails; } interface TranspilationDetails { script: string | undefined; customFunctions: string | undefined; } export interface FunctionList { [identifier: string]: FunctionDefinition; } export interface ProgramPosition { from: number; to: number; } export interface CommonAST extends ProgramPosition { type: AST_TYPES; primitive: Primitive; } export interface ProgramAST extends CommonAST { exp: string; lang: string; version: string; body?: CommonAST; errors?: BaseError[]; variables?: VariableContextDefinition[]; formulaFunctions?: CommonAST[]; flatBody?: CommonAST[]; } export interface UnaryExpressionAST extends CommonAST { operator: string; operatorNode?: ProgramPosition; validOperators: string[]; right: CommonAST; } export interface BinaryExpressionAST extends UnaryExpressionAST { left: CommonAST; } export interface FunctionCallAST extends CommonAST { name: string; arguments: Array<CommonAST>; parenthesisStart: boolean; parenthesisEnd: boolean; functionText: string; functionIdentifier: ProgramPosition; } export type ValueASTType = string | boolean | number | CommonAST[] | null | Date; export interface CommonValueAST extends CommonAST { value: ValueASTType; } export interface UnknownAST extends CommonAST { text: string; } export interface VariableAST extends CommonValueAST { context?: VariableContextDefinition; } export interface ExternalFormulaAST extends VariableAST { isExternalFormula: boolean; } export interface LiteralAST extends CommonValueAST { dataType: AST_PRIMITIVES; } export interface VariableContextDefinition { label: string; id: string; replacement?: string; type: AST_PRIMITIVES; extras?: Record<string, any>; isExternalFormula?: boolean; } export interface FormulaContext { model?: VariableContextDefinition[]; currentFormulaId?: string; timezone?: TimezoneDefinition; useSampleData?: boolean; sampleData?: any; } export interface FormulaInference { errorList: BaseError[]; formulaVariables: VariableContextDefinition[]; formulaFunctions: CommonAST[]; flatBody: CommonAST[]; } interface TimezoneDefinition { offset: string; } export type VariableASTType = AST_TYPES.variable | AST_TYPES.column | AST_TYPES.token | AST_TYPES.externalFormula; export type DateUnit = 'Y' | 'M' | 'D'; export type DateDifUnitParam = DateUnit; export type DateTimeUnit = DateUnit | 'H' | 'MI' | 'S'; export type DayOfWeekFormat = 'Day' | 'D'; export {};