import type { SearchSchemaInput } from './route' export interface StandardSchemaValidatorProps { readonly types?: StandardSchemaValidatorTypes | undefined readonly validate: AnyStandardSchemaValidate } export interface StandardSchemaValidator { readonly '~standard': StandardSchemaValidatorProps } export type AnyStandardSchemaValidator = StandardSchemaValidator export interface StandardSchemaValidatorTypes { readonly input: TInput readonly output: TOutput } export interface AnyStandardSchemaValidateSuccess { readonly value: any readonly issues?: undefined } export interface AnyStandardSchemaValidateFailure { readonly issues: ReadonlyArray } export interface AnyStandardSchemaValidateIssue { readonly message: string } export interface AnyStandardSchemaValidateInput { readonly value: any } export type AnyStandardSchemaValidate = ( value: unknown, ) => | (AnyStandardSchemaValidateSuccess | AnyStandardSchemaValidateFailure) | Promise export interface ValidatorObj { parse: ValidatorFn } export type AnyValidatorObj = ValidatorObj export interface ValidatorAdapter { types: { input: TInput output: TOutput } parse: (input: unknown) => TOutput } export type AnyValidatorAdapter = ValidatorAdapter export type AnyValidatorFn = ValidatorFn export type ValidatorFn = (input: TInput) => TOutput export type Validator = | ValidatorObj | ValidatorFn | ValidatorAdapter | StandardSchemaValidator | undefined export type AnyValidator = Validator export type AnySchema = {} export type DefaultValidator = Validator, AnySchema> export type ResolveSearchValidatorInputFn = TValidator extends ( input: infer TSchemaInput, ) => any ? TSchemaInput extends SearchSchemaInput ? Omit : ResolveValidatorOutputFn : AnySchema export type ResolveSearchValidatorInput = TValidator extends AnyStandardSchemaValidator ? NonNullable['input'] : TValidator extends AnyValidatorAdapter ? TValidator['types']['input'] : TValidator extends AnyValidatorObj ? ResolveSearchValidatorInputFn : ResolveSearchValidatorInputFn export type ResolveValidatorInputFn = TValidator extends ( input: infer TInput, ) => any ? TInput : undefined export type ResolveValidatorInput = TValidator extends AnyStandardSchemaValidator ? NonNullable['input'] : TValidator extends AnyValidatorAdapter ? TValidator['types']['input'] : TValidator extends AnyValidatorObj ? ResolveValidatorInputFn : ResolveValidatorInputFn export type ResolveValidatorOutputFn = TValidator extends ( ...args: any ) => infer TSchema ? TSchema : AnySchema export type ResolveValidatorOutput = unknown extends TValidator ? TValidator : TValidator extends AnyStandardSchemaValidator ? NonNullable['output'] : TValidator extends AnyValidatorAdapter ? TValidator['types']['output'] : TValidator extends AnyValidatorObj ? ResolveValidatorOutputFn : ResolveValidatorOutputFn