import { AnySchema } from '../schemas/AnySchema'; import { ArraySchema } from '../schemas/ArraySchema'; import { BooleanSchema } from '../schemas/BooleanSchema'; import { DateSchema } from '../schemas/DateSchema'; import { NumberSchema } from '../schemas/NumberSchema'; import { ObjectSchema } from '../schemas/ObjectSchema'; import { StringSchema } from '../schemas/StringSchema'; import { IsEnum } from '../types/IsEnum'; import { NullableType } from '../types/types'; export type EnumPropertiesSchema = [T] extends [number] ? NumberSchema : [T] extends [string] ? StringSchema : AnySchema; export type ObjectPropertiesSchema = IsEnum extends true ? EnumPropertiesSchema : T extends NullableType ? (string extends T ? StringSchema : [T] extends [string] ? StringSchema : StringSchema, Final>) : T extends NullableType ? (number extends T ? NumberSchema : [T] extends [number] ? NumberSchema : NumberSchema, Final>) : T extends NullableType ? (boolean extends T ? BooleanSchema : [T] extends [boolean] ? BooleanSchema : BooleanSchema, Final>) : T extends NullableType ? (Date extends T ? DateSchema : [T] extends [Date] ? DateSchema : DateSchema, Final>) : T extends NullableType ? ArraySchema : T extends NullableType ? ObjectSchema : AnySchema; type PartialSchemaMap = { [key in keyof TSchema]?: ObjectPropertiesSchema; }; type StrictSchemaMap = { [key in keyof TSchema]-?: ObjectPropertiesSchema; }; export type SchemaMap = isStrict extends true ? StrictSchemaMap : PartialSchemaMap; export {};