import XVType from './XVType.js'; type XVOptional> = T & { meta: { optional: true; }; }; type XVNullable> = T & { meta: { nullable: true; }; }; type XVDefault, V extends XVDefaultValue> = T & { meta: { default: XVDefaultValue; }; }; type InferValue> = T extends { _type: infer R; } ? (T["meta"] extends { nullable: true; } ? R | null : R) : never; type IsOptional> = T["meta"] extends { optional: true; } ? true : T["meta"] extends { default: any; } ? true : false; type InferObject>> = { [K in keyof T as IsOptional extends true ? never : K]: InferValue; } & { [K in keyof T as IsOptional extends true ? K : never]?: InferValue; }; type Simplify = T extends object ? { [K in keyof T]: T[K]; } : T; type Infer = T extends Record> ? Simplify> : T extends XVType ? InferValue : never; type XVCheckCallback = (value: unknown) => T | void; type XVDefaultValue = T | (() => T); type XVTransformCallback = (v: T) => T; type XVMeta = { optional?: boolean; nullable?: boolean; default?: XVDefaultValue; [key: string]: any; }; export type { Infer, InferObject, InferValue, IsOptional, XVCheckCallback, XVDefault, XVDefaultValue, XVMeta, XVNullable, XVOptional, XVTransformCallback };