crazy-parser
Version:
A light-weight parser combinator
28 lines (27 loc) • 1.32 kB
TypeScript
export type Validator<A, I = unknown, E extends TypeError = TypeError> = (input: I) => A | E;
export declare const str: Validator<string>;
export declare const num: Validator<number>;
export declare const bool: Validator<boolean>;
export declare const nil: Validator<null>;
export declare const array: <A>(inner: Validator<A>) => Validator<A[]>;
export declare const obj: <Vs extends Record<string, any>, _Vs = Vs>(inner: {
[k in keyof Vs]: Validator<Vs[k]>;
}, fallback?: {
[k in keyof _Vs]?: _Vs[k];
}) => Validator<{
[i in keyof Vs]: Vs[i];
}>;
export declare const sequence: <Ts extends any[]>(...inners: {
[k in keyof Ts]: Validator<Ts[k]>;
}) => Validator<Ts>;
export declare const asum: <Ts extends any[]>(...inners: {
[k in keyof Ts]: Validator<Ts[k]>;
}) => Validator<Ts[number]>;
type Ands<Ts extends any[]> = Ts extends [infer Head, ...infer Tail] ? Head & Ands<Tail> : unknown;
export declare const ands: <Ts extends any[]>(...inners: {
[k in keyof Ts]: Validator<Ts[k]>;
}) => Validator<Ands<Ts>>;
export declare const eq: <A>(value: A) => Validator<A>;
export declare const where: <A, NewA extends A = A>(validator: Validator<A>, predicate: (a: A) => boolean, error?: TypeError) => Validator<NewA>;
export declare function lazy<V extends Validator<any>>(vg: () => V): V;
export {};