type Data = Record; type LookupExpressionName = 'at' | 'get' | 'has' | 'length' | 'in' | 'index-of' | 'slice'; type TypeExpressionName = 'array' | 'boolean' | 'literal' | 'number' | 'object' | 'string' | 'to-boolean' | 'to-number' | 'to-string' | 'typeof'; type StringExpressionName = 'concat' | 'downcase' | 'upcase'; type MathExpressionName = '+' | '-' | '*' | '/' | '%' | '^' | 'abs' | 'acos' | 'asin' | 'atan' | 'ceil' | 'cos' | 'e' | 'floor' | 'ln' | 'ln2' | 'log10' | 'log2' | 'max' | 'min' | 'pi' | 'round' | 'sin' | 'sqrt' | 'tan'; type DecisionExpressionName = '!' | '!=' | '<' | '<=' | '==' | '>=' | '>' | 'all' | 'any' | 'case' | 'match' | 'coalesce'; type InterpolationExpressionName = 'step' | 'interpolate'; type ExpressionName = MathExpressionName | TypeExpressionName | StringExpressionName | LookupExpressionName | DecisionExpressionName | InterpolationExpressionName; type SimpleType = string | number | boolean | null | Record; type ExpressionArg = SimpleType | Expression; type Expression = [ExpressionName, ...ExpressionArg[]]; type Callback = () => T; type MapToCallback = { [K in keyof T]: Callback; }; type ExpressionCbFunc ? T[0] : any> = (args: MapToCallback, data: Data) => R; type ExpressionFunc ? T[0] : any> = (args: T, data: Data) => R; declare function isExpression(value: any): value is Expression; declare function evaluate(expression: Expression, data?: Data): R; export { evaluate, isExpression }; export type { Data, DecisionExpressionName, Expression, ExpressionCbFunc, ExpressionFunc, ExpressionName, InterpolationExpressionName, LookupExpressionName, MapToCallback, MathExpressionName, SimpleType, StringExpressionName, TypeExpressionName };