kuvio
Version:
Create string patterns and derive things from them, such as regexes
85 lines (83 loc) • 1.43 kB
TypeScript
/**
* @since 1.0.0
* @category Model
*/
type Pattern = Disjunction | TermSequence | Term;
/**
* @since 1.0.0
* @category Model
*/
type Disjunction = {
tag: 'disjunction';
left: Pattern;
right: TermSequence | Term;
};
/**
* @since 1.0.0
* @category Model
*/
type TermSequence = {
tag: 'termSequence';
terms: ReadonlyArray<Term>;
};
/**
* @since 1.0.0
* @category Model
*/
type Term = Atom | QuantifiedAtom;
/**
* @since 1.0.0
* @category Model
*/
type QuantifiedAtom = {
tag: 'quantifiedAtom';
atom: Atom;
} & ({
kind: 'star';
greedy: boolean;
} | {
kind: 'plus';
greedy: boolean;
} | {
kind: 'question';
} | {
kind: 'exactly';
count: number;
} | {
kind: 'minimum';
min: number;
} | {
kind: 'between';
min: number;
max: number;
});
/**
* @since 1.0.0
* @category Model
*/
type CharacterClass = {
tag: 'atom';
kind: 'characterClass';
exclude: boolean;
ranges: ReadonlyArray<{
lower: number;
upper: number;
}>;
};
/**
* @since 1.0.0
* @category Model
*/
type Atom = CharacterClass | ({
tag: 'atom';
} & ({
kind: 'character';
char: string;
} | {
kind: 'anything';
} | {
kind: 'subgroup';
subpattern: Pattern;
}));
type Char = string;
export { Atom as A, Char as C, Disjunction as D, Pattern as P, QuantifiedAtom as Q, TermSequence as T, CharacterClass as a, Term as b };