import { StackGroupEntry } from '../nodes/group';
import { StackQuantifierEntry } from '../nodes/quantifier';
import { CharacterClass, CharacterClassEscape, Dot, Reference, UnicodePropertyEscape, Value } from 'regjsparser';
import { CharacterGroups } from '../character-groups';
import { MyRootNode } from '../parse';
import { Reader } from '../reader';
export declare const characterReaderTypeCharacterEntry: unique symbol;
export declare const characterReaderTypeSplit: unique symbol;
export type CharacterReaderValueSplitSubType = 'lookahead' | 'lookbehind' | 'negativeLookahead' | 'negativeLookbehind' | null;
export type CharacterReaderValueSplit = Readonly<{
    reader: () => CharacterReader;
    subType: CharacterReaderValueSplitSubType;
    type: typeof characterReaderTypeSplit;
}>;
export type StackEntry = StackGroupEntry | StackQuantifierEntry;
export type Stack = readonly StackEntry[];
export type CharacterReaderValueGroups = Readonly<{
    stack: Stack;
    type: typeof characterReaderTypeCharacterEntry;
} & ({
    characterGroups: CharacterGroups;
    node: CharacterClass | CharacterClassEscape | Dot | UnicodePropertyEscape | Value;
    subType: 'groups';
} | {
    node: Reference;
    referenceIndex: number;
    subType: 'reference';
} | {
    bounded: boolean;
    offset: number;
    subType: 'end';
} | {
    offset: number;
    subType: 'null';
} | {
    offset: number;
    subType: 'start';
})>;
export type CharacterReaderValue = CharacterReaderValueGroups | CharacterReaderValueSplit;
export type CharacterReader = Reader<CharacterReaderValue>;
export declare function buildCharacterReader({ caseInsensitive, dotAll, node, }: {
    caseInsensitive: boolean;
    dotAll: boolean;
    node: MyRootNode;
}): CharacterReader;
