@player-ui/player
Version:
52 lines • 2.54 kB
TypeScript
import { SyncWaterfallHook, SyncBailHook } from "tapable-ts";
import type { ExpressionNode, BinaryOperator, UnaryOperator, ExpressionType, ExpressionContext, ExpressionHandler } from "./types";
export interface HookOptions extends ExpressionContext {
/** Given an expression node */
resolveNode: (node: ExpressionNode) => any;
/** Enabling this flag skips calling the onError hook, and just throws errors back to the caller.
* The caller is responsible for handling the error.
*/
throwErrors?: boolean;
/** Whether expressions should be parsed strictly or not */
strict?: boolean;
/** Whether the expression should be evaluated asynchronously */
async?: boolean;
}
export type ExpressionEvaluatorOptions = Omit<HookOptions, "resolveNode" | "evaluate">;
export type ExpressionEvaluatorFunction = (exp: ExpressionType, options?: ExpressionEvaluatorOptions) => any;
/**
* The expression evaluator is responsible for parsing and executing anything in the custom expression language
* */
export declare class ExpressionEvaluator {
private readonly vars;
readonly hooks: {
resolve: SyncWaterfallHook<[any, ExpressionNode, HookOptions]>;
resolveOptions: SyncWaterfallHook<[HookOptions]>;
beforeEvaluate: SyncWaterfallHook<[ExpressionType, HookOptions]>;
onError: SyncBailHook<[Error], true>;
};
private readonly expressionsCache;
private readonly defaultHookOptions;
readonly operators: {
binary: Map<string, BinaryOperator>;
unary: Map<string, UnaryOperator>;
expressions: Map<string, ExpressionHandler<any, any>>;
};
reset(): void;
constructor(defaultOptions: ExpressionEvaluatorOptions);
evaluate(expr: ExpressionType, options?: ExpressionEvaluatorOptions): any;
/**
* Evaluate functions in an async context
* @experimental These Player APIs are in active development and may change. Use with caution
*/
evaluateAsync(expr: ExpressionType, options?: ExpressionEvaluatorOptions): Promise<any>;
addExpressionFunction<T extends readonly unknown[], R>(name: string, handler: ExpressionHandler<T, R>): void;
addBinaryOperator(operator: string, handler: BinaryOperator): void;
addUnaryOperator(operator: string, handler: UnaryOperator): void;
setExpressionVariable(name: string, value: unknown): void;
getExpressionVariable(name: string): unknown;
private _execAST;
private _execString;
private _resolveNode;
}
//# sourceMappingURL=evaluator.d.ts.map