// Generated by dts-bundle v0.7.3

declare module 'regexpp' {
    import * as AST from "regexpp/ast";
    import { RegExpParser } from "regexpp/parser";
    import { RegExpValidator } from "regexpp/validator";
    import { RegExpVisitor } from "regexpp/visitor";
    export { AST, RegExpParser, RegExpValidator };
    export function parseRegExpLiteral(source: string | RegExp, options?: RegExpParser.Options): AST.RegExpLiteral;
    export function validateRegExpLiteral(source: string, options?: RegExpValidator.Options): void;
    export function visitRegExpAST(node: AST.Node, handlers: RegExpVisitor.Handlers): void;
}

declare module 'regexpp/ast' {
    export type Node = BranchNode | LeafNode;
    export type BranchNode = RegExpLiteral | Pattern | Alternative | Group | CapturingGroup | Quantifier | CharacterClass | LookaroundAssertion | CharacterClassRange;
    export type LeafNode = BoundaryAssertion | CharacterSet | Character | Backreference | Flags;
    export type Element = Assertion | Quantifier | QuantifiableElement;
    export type QuantifiableElement = Group | CapturingGroup | CharacterClass | CharacterSet | Character | Backreference | LookaheadAssertion;
    export type CharacterClassElement = EscapeCharacterSet | UnicodePropertyCharacterSet | Character | CharacterClassRange;
    export interface NodeBase {
        type: Node["type"];
        parent: Node["parent"];
        start: number;
        end: number;
        raw: string;
    }
    export interface RegExpLiteral extends NodeBase {
        type: "RegExpLiteral";
        parent: null;
        pattern: Pattern;
        flags: Flags;
    }
    export interface Pattern extends NodeBase {
        type: "Pattern";
        parent: RegExpLiteral | null;
        alternatives: Alternative[];
    }
    export interface Alternative extends NodeBase {
        type: "Alternative";
        parent: Pattern | Group | CapturingGroup | LookaroundAssertion;
        elements: Element[];
    }
    export interface Group extends NodeBase {
        type: "Group";
        parent: Alternative | Quantifier;
        alternatives: Alternative[];
    }
    export interface CapturingGroup extends NodeBase {
        type: "CapturingGroup";
        parent: Alternative | Quantifier;
        name: string | null;
        alternatives: Alternative[];
        references: Backreference[];
    }
    export type LookaroundAssertion = LookaheadAssertion | LookbehindAssertion;
    export interface LookaheadAssertion extends NodeBase {
        type: "Assertion";
        parent: Alternative | Quantifier;
        kind: "lookahead";
        negate: boolean;
        alternatives: Alternative[];
    }
    export interface LookbehindAssertion extends NodeBase {
        type: "Assertion";
        parent: Alternative;
        kind: "lookbehind";
        negate: boolean;
        alternatives: Alternative[];
    }
    export interface Quantifier extends NodeBase {
        type: "Quantifier";
        parent: Alternative;
        min: number;
        max: number;
        greedy: boolean;
        element: QuantifiableElement;
    }
    export interface CharacterClass extends NodeBase {
        type: "CharacterClass";
        parent: Alternative | Quantifier;
        negate: boolean;
        elements: CharacterClassElement[];
    }
    export interface CharacterClassRange extends NodeBase {
        type: "CharacterClassRange";
        parent: CharacterClass;
        min: Character;
        max: Character;
    }
    export type Assertion = BoundaryAssertion | LookaroundAssertion;
    export type BoundaryAssertion = EdgeAssertion | WordBoundaryAssertion;
    export interface EdgeAssertion extends NodeBase {
        type: "Assertion";
        parent: Alternative | Quantifier;
        kind: "start" | "end";
    }
    export interface WordBoundaryAssertion extends NodeBase {
        type: "Assertion";
        parent: Alternative | Quantifier;
        kind: "word";
        negate: boolean;
    }
    export type CharacterSet = AnyCharacterSet | EscapeCharacterSet | UnicodePropertyCharacterSet;
    export interface AnyCharacterSet extends NodeBase {
        type: "CharacterSet";
        parent: Alternative | Quantifier;
        kind: "any";
    }
    export interface EscapeCharacterSet extends NodeBase {
        type: "CharacterSet";
        parent: Alternative | Quantifier | CharacterClass;
        kind: "digit" | "space" | "word";
        negate: boolean;
    }
    export interface UnicodePropertyCharacterSet extends NodeBase {
        type: "CharacterSet";
        parent: Alternative | Quantifier | CharacterClass;
        kind: "property";
        key: string;
        value: string | null;
        negate: boolean;
    }
    export interface Character extends NodeBase {
        type: "Character";
        parent: Alternative | Quantifier | CharacterClass | CharacterClassRange;
        value: number;
    }
    export interface Backreference extends NodeBase {
        type: "Backreference";
        parent: Alternative | Quantifier;
        ref: number | string;
        resolved: CapturingGroup;
    }
    export interface Flags extends NodeBase {
        type: "Flags";
        parent: RegExpLiteral | null;
        dotAll: boolean;
        global: boolean;
        ignoreCase: boolean;
        multiline: boolean;
        sticky: boolean;
        unicode: boolean;
    }
}

declare module 'regexpp/parser' {
    import { Flags, RegExpLiteral, Pattern } from "regexpp/ast";
    export namespace RegExpParser {
        interface Options {
            strict?: boolean;
            ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018;
        }
    }
    export class RegExpParser {
        constructor(options?: RegExpParser.Options);
        parseLiteral(source: string, start?: number, end?: number): RegExpLiteral;
        parseFlags(source: string, start?: number, end?: number): Flags;
        parsePattern(source: string, start?: number, end?: number, uFlag?: boolean): Pattern;
    }
}

declare module 'regexpp/validator' {
    export namespace RegExpValidator {
        interface Options {
            strict?: boolean;
            ecmaVersion?: 5 | 2015 | 2016 | 2017 | 2018;
            onLiteralEnter?(start: number): void;
            onLiteralLeave?(start: number, end: number): void;
            onFlags?(start: number, end: number, global: boolean, ignoreCase: boolean, multiline: boolean, unicode: boolean, sticky: boolean, dotAll: boolean): void;
            onPatternEnter?(start: number): void;
            onPatternLeave?(start: number, end: number): void;
            onDisjunctionEnter?(start: number): void;
            onDisjunctionLeave?(start: number, end: number): void;
            onAlternativeEnter?(start: number, index: number): void;
            onAlternativeLeave?(start: number, end: number, index: number): void;
            onGroupEnter?(start: number): void;
            onGroupLeave?(start: number, end: number): void;
            onCapturingGroupEnter?(start: number, name: string | null): void;
            onCapturingGroupLeave?(start: number, end: number, name: string | null): void;
            onQuantifier?(start: number, end: number, min: number, max: number, greedy: boolean): void;
            onLookaroundAssertionEnter?(start: number, kind: "lookahead" | "lookbehind", negate: boolean): void;
            onLookaroundAssertionLeave?(start: number, end: number, kind: "lookahead" | "lookbehind", negate: boolean): void;
            onEdgeAssertion?(start: number, end: number, kind: "start" | "end"): void;
            onWordBoundaryAssertion?(start: number, end: number, kind: "word", negate: boolean): void;
            onAnyCharacterSet?(start: number, end: number, kind: "any"): void;
            onEscapeCharacterSet?(start: number, end: number, kind: "digit" | "space" | "word", negate: boolean): void;
            onUnicodePropertyCharacterSet?(start: number, end: number, kind: "property", key: string, value: string | null, negate: boolean): void;
            onCharacter?(start: number, end: number, value: number): void;
            onBackreference?(start: number, end: number, ref: number | string): void;
            onCharacterClassEnter?(start: number, negate: boolean): void;
            onCharacterClassLeave?(start: number, end: number, negate: boolean): void;
            onCharacterClassRange?(start: number, end: number, min: number, max: number): void;
        }
    }
    export class RegExpValidator {
        constructor(options?: RegExpValidator.Options);
        validateLiteral(source: string, start?: number, end?: number): void;
        validateFlags(source: string, start?: number, end?: number): void;
        validatePattern(source: string, start?: number, end?: number, uFlag?: boolean): void;
    }
}

declare module 'regexpp/visitor' {
    import { Alternative, Assertion, Backreference, CapturingGroup, Character, CharacterClass, CharacterClassRange, CharacterSet, Flags, Group, Node, Pattern, Quantifier, RegExpLiteral } from "regexpp/ast";
    export class RegExpVisitor {
        constructor(handlers: RegExpVisitor.Handlers);
        visit(node: Node): void;
    }
    export namespace RegExpVisitor {
        interface Handlers {
            onAlternativeEnter?(node: Alternative): void;
            onAlternativeLeave?(node: Alternative): void;
            onAssertionEnter?(node: Assertion): void;
            onAssertionLeave?(node: Assertion): void;
            onBackreferenceEnter?(node: Backreference): void;
            onBackreferenceLeave?(node: Backreference): void;
            onCapturingGroupEnter?(node: CapturingGroup): void;
            onCapturingGroupLeave?(node: CapturingGroup): void;
            onCharacterEnter?(node: Character): void;
            onCharacterLeave?(node: Character): void;
            onCharacterClassEnter?(node: CharacterClass): void;
            onCharacterClassLeave?(node: CharacterClass): void;
            onCharacterClassRangeEnter?(node: CharacterClassRange): void;
            onCharacterClassRangeLeave?(node: CharacterClassRange): void;
            onCharacterSetEnter?(node: CharacterSet): void;
            onCharacterSetLeave?(node: CharacterSet): void;
            onFlagsEnter?(node: Flags): void;
            onFlagsLeave?(node: Flags): void;
            onGroupEnter?(node: Group): void;
            onGroupLeave?(node: Group): void;
            onPatternEnter?(node: Pattern): void;
            onPatternLeave?(node: Pattern): void;
            onQuantifierEnter?(node: Quantifier): void;
            onQuantifierLeave?(node: Quantifier): void;
            onRegExpLiteralEnter?(node: RegExpLiteral): void;
            onRegExpLiteralLeave?(node: RegExpLiteral): void;
        }
    }
}

