//#region index.d.ts
interface Ctx {
path: string;
key: string | number | null;
parent: any;
root: any;
__abortPipe?: boolean;
__collectErrors?: boolean;
__errors?: ValidationError[];
[key: string]: any;
}
type Validator = (value: Input, ctx: Ctx) => Output;
interface ValidationError extends Error {
expected?: string;
actual?: any;
path?: string;
key?: string | number | null;
parent?: any;
root?: any;
}
type ValidatorFactory = (...args: Args) => Validator;
declare function makeCtx(parentCtx: Ctx | null, key: string | number | null, value: any, root?: any): Ctx;
declare function formatValue(value: any): string;
declare function createValidator(name: string, handler: (value: I, ctx: Ctx, args: Args) => O): (...args: Args) => Validator;
interface ControlValidator {
__control?: true;
}
type IsControl = V extends ControlValidator ? true : false;
type InputOf = V extends ((value: infer I, ctx: Ctx) => any) ? I : never;
type OutputOf = V extends ((value: any, ctx: Ctx) => infer O) ? O : never;
type Simplify = { [K in keyof T]: T[K] } & {};
type DeepSimplify = T extends string | number | boolean | bigint | symbol | null | undefined ? T : T extends Function ? T : T extends (infer U)[] ? Array> : T extends object ? Simplify<{ [K in keyof T]: DeepSimplify }> : T;
type InferOutput = V extends ((value: any, ctx: Ctx) => infer O) ? DeepSimplify : never;
type Last = T extends [...any[], infer L] ? L : never;
type ValidateChain = Vs extends [infer V1, infer V2, ...infer Rest] ? IsControl extends true ? [V1, ...ValidateChain<[V2, ...Rest]>] : OutputOf extends InputOf ? [V1, ...ValidateChain<[V2, ...Rest]>] : never : Vs;
declare function pipe, ...(Validator)[]]>(...validators: ValidateChain): Validator, OutputOf>>;
declare function transform(fn: (value: I, ctx: Ctx) => O): Validator;
declare function check(fn: (value: I, ctx: Ctx) => boolean, msg?: string): Validator;
type ValidateResult = {
valid: true;
result: O;
error?: undefined;
} | {
valid: false;
error: ValidationError;
result: any;
};
declare function validate(schema: Validator, value: I, rootPath?: string): ValidateResult;
type ValidateAllResult = {
valid: true;
result: O;
errors: [];
} | {
valid: false;
result: any;
errors: ValidationError[];
};
declare function validateAll(schema: Validator, value: I, rootPath?: string): ValidateAllResult;
declare const required: (args_0?: string | undefined) => Validator;
declare const optional: () => (Validator & ControlValidator);
declare const any: (...args: any[]) => Validator;
declare const string: (args_0?: string | undefined) => Validator;
declare const number: (args_0?: string | undefined) => Validator;
declare const bigint: (args_0?: string | undefined) => Validator;
declare const boolean: (args_0?: string | undefined) => Validator;
declare const symbol: (args_0?: string | undefined) => Validator;
type InferShape = { [K in keyof S]: S[K] extends Validator ? O : never };
declare function object>>(shape?: S, msg?: string): Validator>;
declare function array(validator?: Validator, msg?: string): Validator;
//#endregion
export { ControlValidator, Ctx, InferOutput, InferShape, InputOf, OutputOf, ValidateAllResult, ValidateResult, ValidationError, Validator, ValidatorFactory, any, array, bigint, boolean, check, createValidator, formatValue, makeCtx, number, object, optional, pipe, required, string, symbol, transform, validate, validateAll };