simplex-lang
Version:
SimplEx - simple expression language
39 lines (38 loc) • 2.16 kB
TypeScript
import { BinaryExpression, ExpressionStatement, Location, LogicalExpression, UnaryExpression } from './simplex-tree.js';
interface ContextHelpers<Data, Globals> {
castToBoolean(this: void, val: unknown): boolean;
ensureFunction(this: void, val: unknown): Function;
getIdentifierValue(this: void, identifierName: string, globals: Globals, data: Data): unknown;
getProperty(this: void, obj: unknown, key: unknown): unknown;
callFunction(this: void, fn: unknown, args: unknown[] | null): unknown;
pipe(this: void, head: unknown, tail: {
opt: boolean;
next: (topic: unknown) => unknown;
}[]): unknown;
}
type ExpressionUnaryOperators = Record<UnaryExpression['operator'], (val: unknown) => unknown>;
export declare const defaultUnaryOperators: ExpressionUnaryOperators;
type ExpressionBinaryOperators = Record<BinaryExpression['operator'], (left: unknown, right: unknown) => unknown>;
export declare const defaultBinaryOperators: ExpressionBinaryOperators;
type LogicalOperatorFunction = (left: () => unknown, right: () => unknown) => unknown;
type ExpressionLogicalOperators = Record<LogicalExpression['operator'], LogicalOperatorFunction>;
export declare const defaultLogicalOperators: ExpressionLogicalOperators;
interface ExpressionOperators {
unaryOperators: Record<UnaryExpression['operator'], (val: unknown) => unknown>;
binaryOperators: Record<BinaryExpression['operator'], (left: unknown, right: unknown) => unknown>;
logicalOperators: Record<LogicalExpression['operator'], (left: () => unknown, right: () => unknown) => unknown>;
}
export interface SourceLocation {
len: number;
location: Location;
}
export interface VisitResult {
code: string;
offsets: SourceLocation[];
}
export declare function traverse(tree: ExpressionStatement): VisitResult;
export type CompileOptions<Data, Globals> = Partial<ContextHelpers<Data, Globals> & ExpressionOperators & {
globals: Globals;
}>;
export declare function compile<Data = Record<string, unknown>, Globals = Record<string, unknown>>(expression: string, options?: CompileOptions<Data, Globals>): (data?: Data) => unknown;
export {};