typescript-checker
Version:
Powerful data validation library enabling type safety
43 lines (42 loc) • 3.33 kB
TypeScript
declare type TypeNames = "string" | "number" | "boolean" | "undefined" | "function" | "object";
declare type Types = string | number | boolean | undefined | Function | object | null;
declare type TypeNameType<T extends TypeNames> = T extends "string" ? string : T extends "number" ? number : T extends "boolean" ? boolean : T extends "undefined" ? undefined : T extends "function" ? Function : object | null;
export declare type CheckValid<U> = [null, U];
export declare type CheckError = [string[]];
export declare type ErrorLog = CheckError[0][];
export declare type Check<U> = CheckError | CheckValid<U>;
export declare type Checker<A, B> = {
(value: A): Check<B>;
};
export declare type CheckerInput<M> = M extends Checker<infer A, infer B> ? A : never;
export declare type CheckerSuccess<M> = M extends Checker<infer A, infer B> ? B : never;
export declare const isCheckValid: <U>(args: Check<U>) => args is CheckValid<U>;
export declare const isCheckError: <U>(args: Check<U>) => args is CheckError;
export declare const Type: <T extends TypeNames>(name: T) => Checker<unknown, TypeNameType<T>>;
export declare const CheckerRef: <A, B>(checkerRef: () => Checker<A, B>) => (value: A) => Check<B>;
export declare const Accept: <A>() => Checker<A, A>;
export declare const OneOf: <T extends Types[]>(...items: T) => Checker<unknown, T[number]>;
export declare type ItemsSchema<T, U = unknown> = Checker<U, T>;
export declare const ItemsPartial: <U, T>(items: ItemsSchema<T, U>) => Checker<U[], T[]>;
declare type KeysSchema1<T> = {
readonly [key in keyof T]: Checker<unknown, T[key]>;
};
export declare type KeysSchema<T> = KeysSchema1<Required<T>>;
export declare type KeysUnknown<T> = Partial<Record<keyof T, unknown>>;
export declare const KeysObject: (<T>(schema: KeysSchema1<Required<T>>) => Checker<Partial<Record<keyof T, unknown>>, T>) & (<T_1, O extends keyof T_1>(schema: KeysSchema1<Required<T_1>>, optional: Iterable<O> | readonly O[]) => Checker<Partial<Record<keyof T_1, unknown>>, Omit<T_1, O> & Partial<Pick<T_1, O>>>);
export declare const KeysObject1: <T>(schema: KeysSchema1<Required<T>>) => Checker<Partial<Record<keyof T, unknown>>, T>;
export declare const KeysObject2: <T_1, O extends keyof T_1>(schema: KeysSchema1<Required<T_1>>, optional: Iterable<O> | readonly O[]) => Checker<Partial<Record<keyof T_1, unknown>>, Omit<T_1, O> & Partial<Pick<T_1, O>>>;
export declare const AndNot: <U, A, B>(a: Checker<U, A>, b: Checker<U, B>, error?: string) => Checker<U, Exclude<A, B>>;
declare type IAndChain<U, A> = Checker<U, A> & {
then: <B>(b: Checker<A, B>) => IAndChain<U, B>;
};
export declare const And: {
<U, A, B>(a: Checker<U, A>, b: Checker<A, B>): Checker<U, B>;
then: <U_1, A_1>(a: Checker<U_1, A_1>) => IAndChain<U_1, A_1>;
};
export declare const Merge: <U, A, B>(a: Checker<U, A>, b: Checker<U, B>) => Checker<U, A & B>;
export declare const Or: <T extends unknown[]>(...types: { [key in keyof T]: Checker<unknown, T[key]>; }) => Checker<unknown, T[number]>;
export declare const Catch: <A, B>(check: Checker<A, B>, fallback: () => B) => (value: A) => CheckValid<B>;
export declare const Fallback: <A, B>(check: Checker<A | undefined, B>, fallback: () => B) => Checker<A | undefined, B>;
export declare const withDefault: <T>(check: Check<T>, defaultValue: T) => T;
export {};