liqe
Version:
Lightweight and performant Lucene-like parser, serializer and search engine.
108 lines (107 loc) • 2.79 kB
TypeScript
export type BooleanOperatorToken = {
location: TokenLocation;
operator: 'AND' | 'OR';
type: 'BooleanOperator';
};
export type ComparisonOperator = ':' | ':<' | ':<=' | ':=' | ':>' | ':>=';
export type ComparisonOperatorToken = {
location: TokenLocation;
operator: ComparisonOperator;
type: 'ComparisonOperator';
};
export type EmptyExpression = {
location: TokenLocation;
type: 'EmptyExpression';
};
export type ExpressionToken = EmptyExpression | LiteralExpressionToken | RangeExpressionToken | RegexExpressionToken;
export type FieldToken = {
location: TokenLocation;
name: string;
path?: readonly string[];
type: 'Field';
} & ({
quoted: false;
} | {
quoted: true;
quotes: 'double' | 'single';
});
export type Highlight = {
path: string;
query?: RegExp;
};
export type ImplicitBooleanOperatorToken = {
operator: 'AND';
type: 'ImplicitBooleanOperator';
};
export type ImplicitFieldToken = {
type: 'ImplicitField';
};
export type InternalHighlight = {
keyword?: string;
path: string;
};
export type InternalTest = (value: unknown) => boolean | string;
export type LiqeQuery = ParserAst & {
getValue?: (subject: unknown) => unknown;
left?: LiqeQuery;
operand?: LiqeQuery;
right?: LiqeQuery;
};
export type LiteralExpressionToken = {
location: TokenLocation;
type: 'LiteralExpression';
} & ({
quoted: false;
value: boolean | null | string;
} | {
quoted: true;
quotes: 'double' | 'single';
value: string;
});
export type LogicalExpressionToken = {
left: ParserAst;
location: TokenLocation;
operator: BooleanOperatorToken | ImplicitBooleanOperatorToken;
right: ParserAst;
type: 'LogicalExpression';
};
export type ParenthesizedExpressionToken = {
expression: ParserAst;
location: TokenLocation;
type: 'ParenthesizedExpression';
};
export type ParserAst = EmptyExpression | LogicalExpressionToken | ParenthesizedExpressionToken | TagToken | UnaryOperatorToken;
export type Range = {
max: number;
maxInclusive: boolean;
min: number;
minInclusive: boolean;
};
export type RangeExpressionToken = {
location: TokenLocation;
range: Range;
type: 'RangeExpression';
};
export type RegexExpressionToken = {
location: TokenLocation;
type: 'RegexExpression';
value: string;
};
export type TagToken = {
expression: ExpressionToken;
field: FieldToken | ImplicitFieldToken;
location: TokenLocation;
operator: ComparisonOperatorToken;
test?: InternalTest;
type: 'Tag';
};
export type TokenLocation = {
end: number;
start: number;
};
export type UnaryOperatorToken = {
location: TokenLocation;
operand: ParserAst;
operator: '-' | 'NOT';
type: 'UnaryOperator';
};