redos-detector
Version:
A CLI and library which tests helps score how vulnerable a regex pattern is to ReDoS attacks. Supported in the browser, Node and Deno.
46 lines (45 loc) • 1.76 kB
TypeScript
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;