export type FromTupleLiteral = T extends [...infer U] | readonly [...infer U] ? U extends Primitive ? never : T[number] extends string ? T[number] : never : never export type OptionalToPrimitive = T extends 'string?' ? string : T extends 'number?' ? number : T extends 'boolean?' ? boolean : never export type OptionalPrimitive = 'string?' | 'number?' | 'boolean?' | 'any?' | 'unknown?' export type Primitive = 'string' | 'number' | 'boolean' | 'any' | 'unknown' | '?' export type Reference = | OptionalPrimitive | Primitive | readonly [Primitive] | [Primitive] | readonly [Validator] | readonly [Validator, '?'] | [Validator] | [Validator, '?'] | Validator | [...string[]] | readonly [...string[]] export type Validator = | { [key: string]: Reference } | ({ [key: string]: Reference } & OptionalMarker) export type OptionalMarker = { readonly '?': '?' } | { '?': '?' } export type FromOptional = T extends 'string?' ? string | undefined : T extends 'boolean?' ? boolean | undefined : T extends 'number?' ? number | undefined : T extends 'any?' ? any | undefined : T extends 'unknown?' ? unknown | undefined : never export type FromPrimitve = T extends 'string' ? string : T extends 'boolean' ? boolean : T extends 'number' ? number : T extends 'any' ? any : T extends 'unknown' ? unknown : never export type FromTuple = T extends | [infer U] | readonly [infer U] | [infer U, '?'] | readonly [infer U, '?'] ? U extends Primitive ? T extends [U, '?'] | readonly [U, '?'] ? Array> | undefined : Array> : never : never export type FromOptionalTuple = T extends [infer U] | readonly [infer U] ? U extends OptionalPrimitive ? Array> | undefined : never : never export type FromTupleBody = T extends [infer U, infer O] ? U extends Validator ? O extends '?' ? Array> | undefined : Array> : never : T extends readonly [infer U] ? U extends Validator ? Array> : never : never export type UnwrapBody = T extends OptionalMarker ? UnwrapBody> | undefined : { -readonly [key in keyof T]: key extends '?' ? never : T[key] extends Primitive ? FromPrimitve : T[key] extends OptionalPrimitive ? FromOptional : T[key] extends [Primitive, '?'] | readonly [Primitive, '?'] ? FromTuple : T[key] extends [Primitive] | readonly [Primitive] ? FromTuple : T[key] extends [OptionalPrimitive] | readonly [OptionalPrimitive] ? FromOptionalTuple : T[key] extends [Validator] | readonly [Validator] ? FromTupleBody : T[key] extends Validator & { '?': any } ? UnwrapBody | undefined : T[key] extends Validator ? UnwrapBody : FromTupleLiteral }