create-query-language
Version:
A flexible TypeScript library for parsing and building query languages with support for lexical analysis, AST generation, and token stream processing
52 lines (51 loc) • 1.58 kB
TypeScript
import type { LogicalOperatorValues, ComparatorValues } from '../logic/constants';
import type { Position } from '../logic/types';
import { AstTypes } from './logic/constants';
export interface ASTNode {
type: string;
position: Position;
}
export interface QueryExpression extends ASTNode {
type: typeof AstTypes.Query;
expression: Expression;
}
export interface BooleanExpression extends ASTNode {
type: typeof AstTypes.Boolean;
operator: LogicalOperatorNode;
left: Expression;
right: Expression;
}
export interface KeyNode extends ASTNode {
type: typeof AstTypes.Key;
value: string;
}
export interface ComparatorNode extends ASTNode {
type: typeof AstTypes.Comparator;
value: ComparatorValues;
}
export interface LogicalOperatorNode extends ASTNode {
type: typeof AstTypes.LogicalOperator;
value: LogicalOperatorValues;
}
export interface ValueNode extends ASTNode {
type: typeof AstTypes.Value;
value: string;
}
export interface ConditionExpression extends ASTNode {
type: typeof AstTypes.Condition;
key: KeyNode;
comparator: ComparatorNode;
value: ValueNode;
spacesAfterKey: number;
spacesAfterComparator: number;
spacesAfterValue: number;
}
export interface GroupExpression extends ASTNode {
type: typeof AstTypes.Group;
expression: Expression;
}
export interface NotExpression extends ASTNode {
type: typeof AstTypes.Not;
expression: Expression;
}
export type Expression = QueryExpression | BooleanExpression | ConditionExpression | GroupExpression | NotExpression;