Files
med-notes/.pnpm-store/v10/files/33/f89a7ae9c837a5703b8bb10a52a2c701be0da0da63953bd5a6255c1cedb693a28ceec642cd437a4b74304247ab88ddfe8667a26ecfb2ab9f0fad6214d63e11
2025-05-09 05:30:08 +02:00

33 lines
1.1 KiB
Plaintext

export interface StartSerializer {
stringify: (obj: unknown) => string
parse: (str: string) => unknown
encode: <T>(value: T) => T
decode: <T>(value: T) => T
}
export type SerializerStringifyBy<T, TSerializable> = T extends TSerializable
? T
: T extends (...args: Array<any>) => any
? 'Function is not serializable'
: { [K in keyof T]: SerializerStringifyBy<T[K], TSerializable> }
export type SerializerParseBy<T, TSerializable> = T extends TSerializable
? T
: unknown extends SerializerExtensions['ReadableStream']
? { [K in keyof T]: SerializerParseBy<T[K], TSerializable> }
: T extends SerializerExtensions['ReadableStream']
? ReadableStream
: { [K in keyof T]: SerializerParseBy<T[K], TSerializable> }
export interface DefaultSerializerExtensions {
ReadableStream: unknown
}
export interface SerializerExtensions extends DefaultSerializerExtensions {}
export type Serializable = Date | undefined | Error | FormData | bigint
export type SerializerStringify<T> = SerializerStringifyBy<T, Serializable>
export type SerializerParse<T> = SerializerParseBy<T, Serializable>