import { ValidationPrimitiveSchema } from './primitive-schema'; import { ValidationObjectSchema, ValidationStringSchema, ValidationNumberSchema, ValidationArraySchema, } from './basic-schemas'; import { IAnySchema, IAnySchemaRules } from './any-schema'; type Union = ValidationPrimitiveSchema | ValidationObjectSchema | ValidationArraySchema; interface All { object: ValidationObjectSchema; string: ValidationStringSchema; number: ValidationNumberSchema; array: ValidationArraySchema; primitive: ValidationPrimitiveSchema; common: IAnySchema & { readonly type: ValidationSchemas.Type; }; } export type ValidationSchemas = All[T]; export namespace ValidationSchemas { export type Type = Exclude; export type Rules = { object: ValidationObjectSchema.Rules; string: ValidationStringSchema.Rules; number: ValidationNumberSchema.Rules; array: ValidationArraySchema.Rules; primitive: ValidationPrimitiveSchema.Rules; common: IAnySchemaRules; }[S]; export type Format = { [K in keyof All]: ValidationSchemas.Rules extends { format?: infer F } ? Exclude : never; }[S]; }