Files
med-notes/.pnpm-store/v10/files/5e/16d84c49e7fdbe6616924049d03cdf491a044e6ec6710b40e6e337fe631147f69c09656a8fe1539f565063d9cba3425db41ce57eb5b6e4ba57ec81eb1baa65
2025-05-09 05:30:08 +02:00

23 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>;