import type { O } from "ts-toolbelt" import type { ArrayType, CodecType, ObjectOptionalKeys, ObjectType, ObjectTypeFunction, RecordType, TypeToData, } from "../schemas" type ArrayStoredData = number extends S["length"] ? Array extends infer R ? R : never> : { [k in keyof S]: TypeToStoredData extends infer R ? R : never } type ObjectStoredData = O.Optional< { [k in keyof S]: TypeToStoredData extends infer R ? R : never }, ObjectOptionalKeys > export type TypeToStoredData = S extends ObjectTypeFunction ? ObjectStoredData> extends infer R ? R : never : S extends CodecType ? D : S extends ArrayType ? ArrayStoredData : S extends ObjectType ? ObjectStoredData : S extends RecordType ? { [k: string]: TypeToStoredData extends infer D ? D : never } : TypeToData