UNPKG

react-box-tools

Version:

Box tools react components, utils and hooks

449 lines (370 loc) 15.2 kB
import { Effect as Effect_2 } from './schema'; export declare function addError(ctx: ValidationContext, errData: ErrorData): void; declare type AllKeys<T> = T extends any ? keyof T : never; export declare const array: <T extends SchemaTypeAny>(schema: T) => Array_2<T>; declare class Array_2<T extends SchemaTypeAny, Cardinality extends ArrayCardinality = "many"> extends SchemaOf<arrayOutputType<T, Cardinality>, ArrayDef<T>, Cardinality extends "atleastone" ? [T["_input"], ...T["_input"][]] : T["_input"][]> { _validation(input: ValidateInput): ValidationResult<this["_output"]>; min(minLength: number, message?: errorUtil.ErrorMessage): this; max(maxLength: number, message?: errorUtil.ErrorMessage): this; length(len: number, message?: errorUtil.ErrorMessage): this; nonempty(message?: errorUtil.ErrorMessage): Array_2<T, "atleastone">; static create: <T_1 extends SchemaTypeAny>(schema: T_1) => Array_2<T_1>; } declare type ArrayCardinality = "many" | "atleastone"; declare interface ArrayDef<T extends SchemaTypeAny = SchemaTypeAny> extends SchemaTypeDef { type: T; typeName: SchemaKind.Array; minLength: { value: number; message?: string; } | null; maxLength: { value: number; message?: string; } | null; } declare type arrayOutputType<T extends SchemaTypeAny, Cardinality extends ArrayCardinality = "many"> = Cardinality extends "atleastone" ? [T["_output"], ...T["_output"][]] : T["_output"][]; declare type BaseObjectInputType<Shape extends SchemaRawShape> = objectUtil.Flatten<objectUtil.AddQuestionMarks<{ [k in keyof Shape]: Shape[k]["_input"]; }>>; declare type BaseObjectOutputType<Shape extends SchemaRawShape> = objectUtil.Flatten<objectUtil.AddQuestionMarks<{ [k in keyof Shape]: Shape[k]["_output"]; }>>; declare type ConvertEffect<T> = { type: "convert"; convert: (arg: T, ctx: RefinementCtx) => any; }; declare type CustomErrorParams = Partial<util.Omit<CustomValidation, "code">>; export declare interface CustomValidation extends ValidationBase { code: typeof ErrorCode.custom; params?: { [k: string]: any; }; } export declare type DIRTY<T> = { status: "dirty"; value: T; }; export declare const DIRTY: <T>(value: T) => DIRTY<T>; export declare class Effect<T extends SchemaTypeAny, Output = T["_output"], Input = T["_input"]> extends SchemaOf<Output, EffectDef<T>, Input> { innerType(): T; _validation(input: ValidateInput): ValidationResult<this["_output"]>; static create: <I extends SchemaTypeAny>(schema: I, effect: EffectType<I["_output"]>) => Effect<I, I["_output"]>; } declare interface EffectDef<T extends SchemaTypeAny = SchemaTypeAny> extends SchemaTypeDef { schema: T; type: SchemaKind.Effect; effect: EffectType<any>; } declare type EffectType<T> = RefinementEffect<T> | ConvertEffect<T>; export declare const ErrorCode: { invalid_type: "invalid_type"; custom: "custom"; invalid_string: "invalid_string"; too_small: "too_small"; too_big: "too_big"; required: "required"; }; export declare type ErrorData = StripPath<ErrorType> & { path?: (string | number)[]; fatal?: boolean; }; export declare type ErrorMap = (error: ErrorType, _ctx: ErrorMapCtx) => { message: string; }; declare type ErrorMapCtx = { defaultError: string; data: any; }; declare type ErrorType = InvalidTypeError | InvalidString | TooSmall | TooBig | RequiredError | CustomValidation; declare namespace errorUtil { type ErrorMessage = string | { message?: string; }; const errToObj: (message?: ErrorMessage) => { message?: string; }; const toString: (message?: ErrorMessage) => string | undefined; } export declare type FieldError<T> = { [P in AllKeys<T>]?: string; }; export declare type FieldErrors<T, U = string> = { [P in AllKeys<T>]?: U[]; }; export declare type INVALID = { status: "aborted"; }; export declare const INVALID: INVALID; declare interface InvalidString extends ValidationBase { code: typeof ErrorCode.invalid_string; validation: StringValidation; } declare interface InvalidTypeError extends ValidationBase { code: typeof ErrorCode.invalid_type; expected: ValidatedType; received: ValidatedType; } export declare const isAborted: (x: ValidationResult<any>) => x is INVALID; export declare const isAsync: <T>(x: ValidationResult<T>) => x is ValidationAsync<T>; export declare const isDirty: <T>(x: ValidationResult<T>) => x is OK<T> | DIRTY<T>; export declare const isValid: <T>(x: ValidationResult<T>) => x is OK<T> | DIRTY<T>; export declare const makeIssue: (params: { data: any; path: (string | number)[]; errorMaps: ErrorMap[]; errorData: ErrorData; }) => ValidationError; export declare const object: <T extends SchemaRawShape>(shape: T) => Object_2<T>; declare class Object_2<T extends SchemaRawShape, Catchall extends SchemaTypeAny = SchemaTypeAny, Output = ObjectOutputType<T, Catchall>, Input = ObjectInputType<T, Catchall>> extends SchemaOf<Output, ObjectDef<T>, Input> { private _cached; _getCached(): { shape: T; keys: string[]; }; _validation(input: ValidateInput): ValidationResult<this["_output"]>; static create: <T_1 extends SchemaRawShape>(shape: T_1) => Object_2<T_1>; } declare interface ObjectDef<T extends SchemaRawShape = SchemaRawShape> extends SchemaTypeDef { typeName: SchemaKind.Object; shape: () => T; } declare type ObjectInputType<Shape extends SchemaRawShape, Catchall extends SchemaTypeAny> = SchemaTypeAny extends Catchall ? BaseObjectInputType<Shape> : objectUtil.Flatten<BaseObjectInputType<Shape> & { [k: string]: Catchall["_input"]; }>; declare type ObjectOutputType<Shape extends SchemaRawShape, Catchall extends SchemaTypeAny> = SchemaTypeAny extends Catchall ? BaseObjectOutputType<Shape> : objectUtil.Flatten<BaseObjectOutputType<Shape> & { [k: string]: Catchall["_output"]; }>; declare namespace objectUtil { type OptionalKeys<T extends object> = { [k in keyof T]: undefined extends T[k] ? k : never; }[keyof T]; type RequiredKeys<T extends object> = { [k in keyof T]: undefined extends T[k] ? never : k; }[keyof T]; type AddQuestionMarks<T extends object> = Partial<Pick<T, OptionalKeys<T>>> & Pick<T, RequiredKeys<T>>; type Identity<T> = T; type Flatten<T extends object> = Identity<{ [k in keyof T]: T[k]; }>; const mergeShapes: <U extends SchemaRawShape, T extends SchemaRawShape>(first: U, second: T) => T & U; {}; } export declare type OK<T> = { status: "valid"; value: T; }; export declare const OK: <T>(value: T) => OK<T>; export declare type RefinementCtx = { addIssue: (arg: ErrorData) => void; path: (string | number)[]; }; declare type RefinementEffect<T> = { type: "refinement"; refinement: (arg: T, ctx: RefinementCtx) => any; }; declare interface RequiredError extends ValidationBase { code: typeof ErrorCode.required; params?: { [k: string]: any; }; } export declare type SchemaError<T> = { ok: false; validation: Validation<T>; }; export declare enum SchemaKind { String = "String", Array = "Array", Object = "Object", Effect = "Effect" } export declare abstract class SchemaOf<Output = any, Def extends SchemaTypeDef = SchemaTypeDef, Input = Output> { readonly _output: Output; readonly _input: Input; readonly _def: Def; abstract _validation(input: ValidateInput): ValidationResult<Output>; _getOrReturnCtx(input: ValidateInput, ctx?: ValidationContext | undefined): ValidationContext; _processInputParams(input: ValidateInput): { status: ValidationStatus; ctx: ValidationContext; }; _validationSync(input: ValidateInput): ValidationSync<Output>; _validationAsync(input: ValidateInput): ValidationAsync<Output>; validate<T>(data: T, params?: Partial<ValidationParams>): Promise<SchemaValidation<T>>; add<RefinedOutput extends Output>(check: (arg: Output) => arg is RefinedOutput, message?: string | CustomErrorParams | ((arg: Output) => CustomErrorParams)): Effect<this, RefinedOutput, Input>; add(check: (arg: Output) => unknown | Promise<unknown>, message?: string | CustomErrorParams | ((arg: Output) => CustomErrorParams)): Effect<this, Output, Input>; refinement<RefinedOutput extends Output>(check: (arg: Output) => arg is RefinedOutput, refinementData: ErrorData | ((arg: Output, ctx: RefinementCtx) => ErrorData)): Effect<this, RefinedOutput, Input>; refinement(check: (arg: Output) => boolean, refinementData: ErrorData | ((arg: Output, ctx: RefinementCtx) => ErrorData)): Effect<this, Output, Input>; _refinement(refinement: RefinementEffect<Output>["refinement"]): Effect<this, Output, Input>; constructor(def: Def); array(): Array_2<this>; convert<NewOut>(convert: (arg: Output, ctx: RefinementCtx) => NewOut | Promise<NewOut>): Effect<this, NewOut>; } export declare type SchemaOk<T> = { ok: true; data: T; }; export declare type SchemaRawShape = { [k: string]: SchemaTypeAny; }; export declare type SchemaTypeAny = SchemaOf<any, any, any>; export declare interface SchemaTypeDef { errorMap?: ErrorMap; } export declare type SchemaValidation<T> = SchemaOk<T> | SchemaError<T>; export declare const string: () => String_2; declare class String_2 extends SchemaOf<string, StringDef> { _validation(input: ValidateInput): ValidationResult<string>; protected _regex: (regex: RegExp, validation: StringValidation, message?: errorUtil.ErrorMessage) => Effect_2<this, string, string>; _addCheck(check: StringCheck): String_2; required(message?: errorUtil.ErrorMessage): String_2; email(message?: errorUtil.ErrorMessage): String_2; url(message?: errorUtil.ErrorMessage): String_2; regex(regex: RegExp, message?: errorUtil.ErrorMessage): String_2; startWith(value: string, message?: errorUtil.ErrorMessage): String_2; endWith(value: string, message?: errorUtil.ErrorMessage): String_2; min(minLength: number, message?: errorUtil.ErrorMessage): String_2; max(maxLength: number, message?: errorUtil.ErrorMessage): String_2; length(len: number, message?: errorUtil.ErrorMessage): String_2; trim: () => String_2; static create: () => String_2; } declare type StringCheck = { kind: "required"; message?: string; } | { kind: "min"; value: number; message?: string; } | { kind: "max"; value: number; message?: string; } | { kind: "email"; message?: string; } | { kind: "url"; message?: string; } | { kind: "startWith"; value: string; message?: string; } | { kind: "endWith"; value: string; message?: string; } | { kind: "regex"; regex: RegExp; message?: string; } | { kind: "trim"; message?: string; }; declare interface StringDef extends SchemaTypeDef { checks: StringCheck[]; type: SchemaKind.String; } export declare type StringValidation = "email" | "url" | "regex" | { startWith: string; } | { endWith: string; }; declare type StripPath<T extends object> = T extends any ? util.OmitKeys<T, "path"> : never; declare interface TooBig extends ValidationBase { code: typeof ErrorCode.too_big; maximum: number; inclusive: boolean; type: "array" | "string"; } declare interface TooSmall extends ValidationBase { code: typeof ErrorCode.too_small; minimum: number; inclusive: boolean; type: "array" | "string"; } declare namespace util { function assertNever(_x: never): never; type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>; type OmitKeys<T, K extends string> = Pick<T, Exclude<keyof T, K>>; const arrayToEnum: <T extends string, U extends [T, ...T[]]>(items: U) => { [k in U[number]]: k; }; const objectValues: (obj: any) => any[]; const objectKeys: ObjectConstructor["keys"]; } declare const ValidatedType: { string: "string"; object: "object"; unknown: "unknown"; array: "array"; }; declare type ValidatedType = keyof typeof ValidatedType; export declare type ValidateInput = { data: any; path: (string | number)[]; parent: ValidationContext; }; export declare class ValidateInputPath implements ValidateInput { parent: ValidationContext; data: any; _path: ValidationPath; _key: string | number | (string | number)[]; constructor(parent: ValidationContext, value: any, path: ValidationPath, key: string | number | (string | number)[]); get path(): (string | number)[]; } export declare class Validation<T = any> extends Error { errors: ValidationError[]; constructor(errors: ValidationError[]); static create: (errors: ValidationError[]) => Validation<any>; addError: (sub: ValidationError) => void; addErrors: (subs?: ValidationError[]) => void; getFieldErrors(): FieldErrors<T>; getFieldErrors<U>(mapper?: (error: ValidationError) => U): FieldErrors<T, U>; getFieldError<K extends keyof T>(fields?: K[]): FieldError<T>; } export declare type ValidationAsync<T> = Promise<ValidationSync<T>>; declare type ValidationBase = { path: (string | number)[]; message?: string; }; export declare interface ValidationContext { readonly common: { readonly issues: ValidationError[]; readonly errorMap?: ErrorMap; readonly async: boolean; }; readonly path: ValidationPath; readonly schemaErrorMap?: ErrorMap; readonly parent: ValidationContext | null; readonly data: any; readonly type: ValidatedType; } export declare type ValidationError = ErrorType & { message: string; }; export declare type ValidationParams = { path: (string | number)[]; errorMap: ErrorMap; async: boolean; }; export declare type ValidationPath = ValidationPathComponent[]; declare type ValidationPathComponent = string | number; export declare type ValidationResult<T> = ValidationSync<T> | ValidationAsync<T>; export declare class ValidationStatus { value: "aborted" | "dirty" | "valid"; dirty(): void; abort(): void; static mergeArray(status: ValidationStatus, results: ValidationSync<any>[]): ValidationSync; static mergeObjectAsync(status: ValidationStatus, pairs: { key: ValidationResult<any>; value: ValidationResult<any>; }[]): Promise<ValidationSync<any>>; static mergeObjectSync(status: ValidationStatus, pairs: { key: ValidationSync<any>; value: ValidationSync<any>; alwaysSet?: boolean; }[]): ValidationSync; } export declare type ValidationSync<T = any> = OK<T> | DIRTY<T> | INVALID; export { }