@rudderstack/json-template-engine
Version:
A library for evaluating JSON template expressions.
258 lines • 6.98 kB
TypeScript
export declare enum Keyword {
FUNCTION = "function",
NEW = "new",
TYPEOF = "typeof",
LET = "let",
CONST = "const",
LAMBDA = "lambda",
AWAIT = "await",
ASYNC = "async",
IN = "in",
NOT_IN = "nin",
NOT = "not",
CONTAINS = "contains",
SUBSETOF = "subsetof",
ANYOF = "anyof",
NONEOF = "noneof",
EMPTY = "empty",
SIZE = "size",
RETURN = "return",
THROW = "throw",
CONTINUE = "continue",
BREAK = "break",
FOR = "for"
}
export declare enum TokenType {
UNKNOWN = "unknown",
ID = "id",
INT = "int",
FLOAT = "float",
TEMPLATE = "template",
STR = "str",
BOOL = "bool",
NULL = "null",
UNDEFINED = "undefined",
LAMBDA_ARG = "lambda_arg",
PUNCT = "punct",
THROW = "throw",
KEYWORD = "keyword",
EOT = "eot",
REGEXP = "regexp"
}
export declare enum OperatorType {
BASE = "base",
CONDITIONAL = "conditional",
ASSIGNMENT = "assignment",
COALESCING = "coalescing",
OR = "or",
AND = "and",
EQUALITY = "equality",
RELATIONAL = "relational",
SHIFT = "shift",
ADDITION = "addition",
MULTIPLICATION = "multiplication",
POWER = "power",
UNARY = "unary",
PREFIX_INCREMENT = "prefix_increment",
POSTFIX_INCREMENT = "postfix_increment"
}
export declare enum SyntaxType {
EMPTY = "empty",
PATH = "path",
PATH_OPTIONS = "path_options",
SELECTOR = "selector",
LAMBDA_ARG = "lambda_arg",
INCREMENT = "increment",
LITERAL = "literal",
LOGICAL_COALESCE_EXPR = "logical_coalesce_expr",
LOGICAL_OR_EXPR = "logical_or_expr",
LOGICAL_AND_EXPR = "logical_and_expr",
COMPARISON_EXPR = "comparison_expr",
IN_EXPR = "in_expr",
MATH_EXPR = "math_expr",
UNARY_EXPR = "unary_expr",
SPREAD_EXPR = "spread_expr",
CONDITIONAL_EXPR = "conditional_expr",
ARRAY_INDEX_FILTER_EXPR = "array_index_filter_expr",
ALL_FILTER_EXPR = "all_filter_expr",
OBJECT_INDEX_FILTER_EXPR = "object_index_filter_expr",
RANGE_FILTER_EXPR = "range_filter_expr",
OBJECT_FILTER_EXPR = "object_filter_expr",
ARRAY_FILTER_EXPR = "array_filter_expr",
DEFINITION_EXPR = "definition_expr",
ASSIGNMENT_EXPR = "assignment_expr",
OBJECT_PROP_EXPR = "object_prop_expr",
OBJECT_EXPR = "object_expr",
ARRAY_EXPR = "array_expr",
BLOCK_EXPR = "block_expr",
FUNCTION_EXPR = "function_expr",
FUNCTION_CALL_EXPR = "function_call_expr",
RETURN_EXPR = "return_expr",
THROW_EXPR = "throw_expr",
STATEMENTS_EXPR = "statements_expr",
LOOP_CONTROL_EXPR = "loop_control_expr",
LOOP_EXPR = "loop_expr",
TEMPLATE_EXPR = "TEMPLATE_EXPR"
}
export declare enum PathType {
SIMPLE = "simple",
RICH = "rich",
JSON = "json",
UNKNOWN = "unknown"
}
export interface EngineOptions {
compileTimeBindings?: Record<string, any>;
defaultPathType?: PathType;
mappings?: boolean;
}
export type Token = {
type: TokenType;
value: any;
range: [number, number];
};
export interface PathOptions {
item?: string;
index?: string;
toArray?: boolean;
}
export interface Expression {
type: SyntaxType;
options?: PathOptions;
[key: string]: any;
}
export interface PathOptionsExpression extends Expression {
options: PathOptions;
}
export interface LambdaArgExpression extends Expression {
index: number;
}
export interface FunctionExpression extends Expression {
params?: string[];
body: StatementsExpression;
block?: boolean;
async?: boolean;
lambda?: boolean;
}
export interface BlockExpression extends Expression {
statements: Expression[];
}
export interface ObjectPropExpression extends Expression {
key?: Expression | string;
value: Expression;
contextVar?: string;
}
export interface ObjectExpression extends Expression {
props: ObjectPropExpression[];
}
export interface ArrayExpression extends Expression {
elements: Expression[];
}
export interface StatementsExpression extends Expression {
statements: Expression[];
}
export interface UnaryExpression extends Expression {
arg: Expression;
op: string;
}
export interface BinaryExpression extends Expression {
args: [Expression, Expression];
op: string;
}
export interface TemplateExpression extends Expression {
parts: Expression[];
}
export interface AssignmentExpression extends Expression {
path: PathExpression;
value: Expression;
op: string;
}
export interface DefinitionExpression extends Expression {
vars: string[];
fromObject?: boolean;
value: Expression;
definition: string;
}
export interface RangeFilterExpression extends Expression {
fromIdx?: Expression;
toIdx?: Expression;
}
export interface IndexFilterExpression extends Expression {
indexes: ArrayExpression;
exclude?: boolean;
}
export interface AllFilterExpression extends Expression {
}
export interface ObjectFilterExpression extends Expression {
filter: Expression;
}
export interface ArrayFilterExpression extends Expression {
filter: RangeFilterExpression | IndexFilterExpression;
}
export type Literal = string | number | boolean | null | undefined;
export interface LiteralExpression extends Expression {
value: Literal;
tokenType: TokenType;
}
export interface PathExpression extends Expression {
parts: Expression[];
root?: Expression | string;
returnAsArray?: boolean;
pathType: PathType;
inferredPathType: PathType;
}
export interface IncrementExpression extends Expression {
id: string;
op: string;
postfix?: boolean;
}
export interface SelectorExpression extends Expression {
selector: string;
prop?: Omit<Token, 'range'>;
}
export interface SpreadExpression extends Expression {
value: Expression;
}
export interface FunctionCallExpression extends Expression {
args: Expression[];
object?: Expression;
id?: string;
parent?: string;
}
export interface ConditionalExpression extends Expression {
if: Expression;
then: Expression;
else?: Expression;
}
export type BlockExpressionOptions = {
blockEnd?: string;
parentType?: SyntaxType;
};
export interface ReturnExpression extends Expression {
value?: Expression;
}
export interface LoopControlExpression extends Expression {
control: string;
}
export interface LoopExpression extends Expression {
init?: Expression;
test?: Expression;
update?: Expression;
body: StatementsExpression;
}
export interface ThrowExpression extends Expression {
value: Expression;
}
export type FlatMappingPaths = {
description?: string;
from?: string;
to?: string;
input?: string;
output?: string;
[key: string]: any;
};
export type FlatMappingAST = FlatMappingPaths & {
inputExpr: Expression;
outputExpr: PathExpression;
};
export type TemplateInput = string | Expression | FlatMappingPaths[] | undefined;
//# sourceMappingURL=types.d.ts.map