UNPKG

typescript-checker

Version:

Powerful data validation library enabling type safety

43 lines (42 loc) 3.33 kB
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 {};