| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 | type _If<Test, Then, Else> = Test extends true ? Then : Else;export type Features = {  lookbehind?: boolean;  namedGroups?: boolean;  unicodePropertyEscape?: boolean;  unicodeSet?: boolean;};export type AstNodeType =  | "alternative"  | "anchor"  | "characterClass"  | "characterClassEscape"  | "characterClassRange"  | "disjunction"  | "dot"  | "group"  | "quantifier"  | "reference"  | "unicodePropertyEscape"  | "value";export type Base<T extends AstNodeType> = {  range: [number, number];  raw: string;  type: T;};export type AstNode<F extends Features = {}> =  | Alternative<F>  | Anchor  | CharacterClass<F>  | CharacterClassEscape  | CharacterClassRange  | Disjunction<F>  | Dot  | Group<F>  | Quantifier<F>  | Reference<F>  | _If<F["unicodePropertyEscape"], UnicodePropertyEscape, never>  | Value;export type RootNode<F extends Features = {}> = Exclude<  AstNode<F>,  CharacterClassRange>;export type Anchor = Base<"anchor"> & {  kind: "boundary" | "end" | "not-boundary" | "start";};export type CharacterClassEscape = Base<"characterClassEscape"> & {  value: string;};export type Value = Base<"value"> & {  codePoint: number;  kind:    | "controlLetter"    | "hexadecimalEscape"    | "identifier"    | "null"    | "octal"    | "singleEscape"    | "symbol"    | "unicodeCodePointEscape"    | "unicodeEscape";};export type Identifier = Base<"value"> & {  value: string;};export type Alternative<F extends Features = {}> = Base<"alternative"> & {  body: RootNode<F>[];};export type CharacterClassRange = Base<"characterClassRange"> & {  max: Value;  min: Value;};export type UnicodePropertyEscape = Base<"unicodePropertyEscape"> & {  negative: boolean;  value: string;};export type CharacterClassBody =  | CharacterClassEscape  | CharacterClassRange  | UnicodePropertyEscape  | Value;export type CharacterClass<F extends Features = {}> = Base<"characterClass"> & {  body: CharacterClassBody[];  negative: boolean;  kind: "union" | _If<F["unicodeSet"], "intersection" | "subtraction", never>;};export type NonCapturingGroup<F extends Features = {}> = Base<"group"> & {  behavior:    | "ignore"    | "lookahead"    | "lookbehind"    | "negativeLookahead"    | "negativeLookbehind";  body: RootNode<F>[];};export type CapturingGroup<F extends Features = {}> = Base<"group"> & {  behavior: "normal";  body: RootNode<F>[];} & _If<    F["namedGroups"],    {      name?: Identifier;    },    {      name: undefined;    }  >;export type Group<F extends Features = {}> =  | CapturingGroup<F>  | NonCapturingGroup<F>;export type Quantifier<F extends Features = {}> = Base<"quantifier"> & {  body: [RootNode<F>];  greedy: boolean;  max?: number;  min: number;  symbol?: '?' | '*' | '+';};export type Disjunction<F extends Features = {}> = Base<"disjunction"> & {  body: [RootNode<F>, RootNode<F>, ...RootNode<F>[]];};export type Dot = Base<"dot">;export type NamedReference = Base<"reference"> & {  matchIndex: undefined;  name: Identifier;};export type IndexReference = Base<"reference"> & {  matchIndex: number;  name: undefined;};export type Reference<F extends Features = {}> = _If<  F["namedGroups"],  NamedReference,  IndexReference>;export function parse<F extends Features = {}>(  str: string,  flags: string,  features?: F): RootNode<F>;
 |