import { SchemaObject } from 'ajv'; import { Type } from 'arktype'; import { Type as Type$1 } from '@deepkit/type'; import { Schema as Schema$1 } from '@effect/schema/Schema'; import { Any, OutputOf, TypeOf } from 'io-ts'; import { AnySchema } from 'joi'; import { Predicate, Infer as Infer$1 } from 'ow'; import { Runtype, Static } from 'runtypes'; import { Struct, Infer as Infer$2 } from 'superstruct'; import { TSchema, Static as Static$1 } from '@sinclair/typebox'; import { BaseSchema, BaseSchemaAsync, Input, Output } from 'valibot'; import { Schema as Schema$2, InferType } from 'yup'; import { ZodSchema, input, output } from 'zod'; type IfDefined = any extends T ? never : T; type UnknownIfNever = [T] extends [never] ? unknown : T; type Schema = { [K in keyof Registry]: IfDefined>; }[keyof Registry]; interface Resolver { schema: TSchema; input: unknown; output: unknown; base: unknown; } type InferInput = (TResolver & { schema: TSchema; })['input']; type InferOutput = (TResolver & { schema: TSchema; })['output']; type InferSchema = TResolver['base']; type ValidationIssue = { message: string; path?: Array; }; type ValidationResult = { success: true; data: TOutput; } | { success: false; issues: Array; }; declare function validate(schema: TSchema, data: unknown): Promise>>; declare function assert(schema: TSchema, data: unknown): Promise>; interface AjvResolver extends Resolver { base: SchemaObject; } interface ArkTypeResolver extends Resolver { base: Type; input: this['schema'] extends Type ? this['schema']['inferIn'] : never; output: this['schema'] extends Type ? this['schema']['infer'] : never; } type CustomSchema = (data: unknown) => Promise | T; interface CustomResolver extends Resolver { base: CustomSchema; input: this['schema'] extends CustomSchema ? keyof this['schema'] extends never ? Awaited> : never : never; output: this['schema'] extends CustomSchema ? keyof this['schema'] extends never ? Awaited> : never : never; } interface DeepkitResolver extends Resolver { base: Type$1; } interface EffectResolver extends Resolver { base: Schema$1; input: this['schema'] extends Schema$1 ? Schema$1.From : never; output: this['schema'] extends Schema$1 ? Schema$1.To : never; } interface IoTsResolver extends Resolver { base: Any; input: this['schema'] extends Any ? OutputOf : never; output: this['schema'] extends Any ? TypeOf : never; } interface JoiResolver extends Resolver { base: AnySchema; } interface OwResolver extends Resolver { base: Predicate; input: this['schema'] extends Predicate ? Infer$1 : never; output: this['schema'] extends Predicate ? Infer$1 : never; } interface RuntypesResolver extends Resolver { base: Runtype; input: this['schema'] extends Runtype ? Static : never; output: this['schema'] extends Runtype ? Static : never; } interface SuperstructResolver extends Resolver { base: Struct; output: this['schema'] extends Struct ? Infer$2 : never; } interface TypeBoxResolver extends Resolver { base: TSchema; input: this['schema'] extends TSchema ? Static$1 : never; output: this['schema'] extends TSchema ? Static$1 : never; } interface ValibotResolver extends Resolver { base: BaseSchema | BaseSchemaAsync; input: this['schema'] extends BaseSchema | BaseSchemaAsync ? Input : never; output: this['schema'] extends BaseSchema | BaseSchemaAsync ? Output : never; } interface YupResolver extends Resolver { base: Schema$2; input: this['schema'] extends Schema$2 ? InferType : never; output: this['schema'] extends Schema$2 ? InferType : never; } interface ZodResolver extends Resolver { base: ZodSchema; input: this['schema'] extends ZodSchema ? input : never; output: this['schema'] extends ZodSchema ? output : never; } type Registry = { ajv: AjvResolver; arktype: ArkTypeResolver; custom: CustomResolver; deepkit: DeepkitResolver; effect: EffectResolver; 'io-ts': IoTsResolver; joi: JoiResolver; ow: OwResolver; runtypes: RuntypesResolver; superstruct: SuperstructResolver; typebox: TypeBoxResolver; valibot: ValibotResolver; yup: YupResolver; zod: ZodResolver; }; type Infer = UnknownIfNever<{ [K in keyof Registry]: IfDefined>; }[keyof Registry]>; type InferIn = UnknownIfNever<{ [K in keyof Registry]: IfDefined>; }[keyof Registry]>; type TypeSchema = { _input: TInput; _output: TOutput; assert(data: unknown): Promise; parse(data: unknown): Promise; validate(data: unknown): Promise<{ data: TOutput; } | { issues: Array; }>; }; declare function wrap(schema: TSchema): TypeSchema, InferIn>; export { type Infer, type InferIn, type Schema, type TypeSchema, type ValidationIssue, assert, validate, wrap };