import type { TSchema, Static as Static$1 } from 'typebox'; import type { StandardSchemaV1 } from '@standard-schema/spec'; import type { type } from 'arktype'; import type { AnySchema } from 'joi'; import type { Infer as ClassValidatorInfer, InferIn as ClassValidatorInferIn, Schema as ClassValidatorSchema } from '@typeschema/class-validator'; import type { GenericSchema, GenericSchemaAsync, InferInput as Input, InferOutput as Output } from 'valibot'; import type { Schema as Schema$2, InferType } from 'yup'; import type { ZodTypeAny, input, output } from 'zod/v3'; import type { $ZodType as $Zod4Type, input as zod4Input, output as zod4Output } from 'zod/v4/core'; import type { SchemaTypes, Infer as VineInfer } from '@vinejs/vine/types'; import type { FromSchema, JSONSchema } from 'json-schema-to-ts'; import type { Struct, Infer as Infer$2 } from 'superstruct'; import type { Schema as Schema$1 } from 'effect'; type Replace = NonNullable extends From ? To | Exclude : NonNullable extends object ? { [K in keyof T]: Replace; } : T; 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; }; interface ArkTypeResolver extends Resolver { base: type.Any; input: this['schema'] extends type.Any ? this['schema']['inferIn'] : never; output: this['schema'] extends type.Any ? this['schema']['infer'] : never; } interface ClassValidatorResolver extends Resolver { base: ClassValidatorSchema; input: this['schema'] extends ClassValidatorSchema ? ClassValidatorInferIn : never; output: this['schema'] extends ClassValidatorSchema ? ClassValidatorInfer : never; } type CustomSchema = (data: unknown) => Promise | T; interface CustomResolver extends Resolver { base: CustomSchema; input: this['schema'] extends CustomSchema ? this['schema'] extends { _def: unknown; } ? never : keyof this['schema'] extends never ? Awaited> : never : never; output: this['schema'] extends CustomSchema ? this['schema'] extends { _def: unknown; } ? never : keyof this['schema'] extends never ? Awaited> : never : never; } interface JoiResolver extends Resolver { base: AnySchema; } interface TypeBoxResolver extends Resolver { base: TSchema & { '~kind': string; }; input: this['schema'] extends TSchema & { '~kind': string; } ? Static$1 : never; output: this['schema'] extends TSchema & { '~kind': string; } ? Static$1 : never; } interface ValibotResolver extends Resolver { base: GenericSchema | GenericSchemaAsync; input: this['schema'] extends GenericSchema | GenericSchemaAsync ? Input : never; output: this['schema'] extends GenericSchema | GenericSchemaAsync ? 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: ZodTypeAny; input: this['schema'] extends ZodTypeAny ? input : never; output: this['schema'] extends ZodTypeAny ? output : never; } interface Zod4Resolver extends Resolver { base: $Zod4Type; input: this['schema'] extends $Zod4Type ? zod4Input : never; output: this['schema'] extends $Zod4Type ? zod4Output : never; } interface VineResolver extends Resolver { base: SchemaTypes; input: this['schema'] extends SchemaTypes ? Replace, Date, string> : never; output: this['schema'] extends SchemaTypes ? VineInfer : never; } interface StandardResolver extends Resolver { base: StandardSchemaV1; input: this['schema'] extends StandardSchemaV1 ? StandardSchemaV1.InferInput : never; output: this['schema'] extends StandardSchemaV1 ? StandardSchemaV1.InferOutput : never; } interface SchemasafeResolver> extends Resolver { base: JSONSchema; input: this['schema'] extends Schema ? Data : never; output: this['schema'] extends Schema ? Data : never; } interface SuperstructResolver extends Resolver { base: Struct; input: this['schema'] extends Struct ? Infer$2 : never; output: this['schema'] extends Struct ? Infer$2 : never; } interface EffectResolver extends Resolver { base: Schema$1.Schema; input: this['schema'] extends Schema$1.Schema ? Schema$1.Schema.Encoded : never; output: this['schema'] extends Schema$1.Schema ? Schema$1.Schema.Type : never; } export type Registry = { arktype: ArkTypeResolver; classvalidator: ClassValidatorResolver; custom: CustomResolver; joi: JoiResolver; typebox: TypeBoxResolver; valibot: ValibotResolver; yup: YupResolver; zod: ZodResolver; zod4: Zod4Resolver; vine: VineResolver; schemasafe: SchemasafeResolver; standard: StandardResolver; superstruct: SuperstructResolver; effect: EffectResolver; }; type Infer = UnknownIfNever> : { [K in Keys]: IfDefined>; }[Keys]>; type InferIn = UnknownIfNever> : { [K in Keys]: IfDefined>; }[Keys]>; export type { Infer, InferIn, Schema, ValidationIssue, ValidationResult };