export declare enum TokenKind { LParen = 0, RParen = 1, LCurly = 2, RCurly = 3, Colon = 4, Lt = 5, Lte = 6, Gt = 7, Gte = 8, String = 9, Ident = 10, And = 11, Or = 12, Not = 13, Whitespace = 14, EOF = 15 } export interface Token { kind: TokenKind; value: string; start: number; end: number; } export declare type RangeOperator = 'lt' | 'lte' | 'gt' | 'gte'; export interface LiteralNode { type: 'literal'; value: string; isQuoted: boolean; isWildcard: boolean; start: number; end: number; } export interface ValueListNode { type: 'valueList'; values: KQLNode[]; start: number; end: number; } export interface IsNode { type: 'is'; /** null when matching the default field (bare value expression) */ field: LiteralNode | null; /** null when the input is incomplete (e.g. "field:") */ value: LiteralNode | ValueListNode | null; start: number; end: number; } export interface RangeNode { type: 'range'; field: LiteralNode; operator: RangeOperator; value: LiteralNode | null; start: number; end: number; } export interface NotNode { type: 'not'; child: KQLNode | null; start: number; end: number; } export interface AndNode { type: 'and'; children: KQLNode[]; start: number; end: number; } export interface OrNode { type: 'or'; children: KQLNode[]; start: number; end: number; } export interface NestedNode { type: 'nested'; field: LiteralNode; query: KQLNode | null; start: number; end: number; } export declare type KQLNode = OrNode | AndNode | NotNode | NestedNode | IsNode | RangeNode | ValueListNode | LiteralNode; export interface KQLQuery { root: KQLNode | null; errors: ParseError[]; } export interface ParseError { message: string; start: number; end: number; } export declare type SituationKind = 'NONE' | 'IN_FIELD' | 'AFTER_FIELD' | 'IN_VALUE' | 'IN_VALUE_LIST' | 'AFTER_EXPRESSION' | 'IN_NESTED'; export interface Situation { kind: SituationKind; prefix: string; replaceRange: { start: number; end: number; }; /** Field name for value completion (IN_VALUE / IN_VALUE_LIST), dotted inside nested queries */ fieldName?: string; /** Dotted nested path when inside path:{ } (IN_NESTED), e.g. "user.tags" */ nestedPath?: string; /** True when the cursor is inside an existing quoted string */ insideString?: boolean; }