import { Plugin, PluginInfo, SerovalNode } from 'seroval'; import { RegisteredConfigType, RegisteredSsr, SSROption } from '../../router.js'; import { LooseReturnType } from '../../utils.js'; import { AnyRoute, ResolveAllSSR } from '../../route.js'; import { RawStream } from './RawStream.js'; declare const TSR_SERIALIZABLE: unique symbol; export type TSR_SERIALIZABLE = typeof TSR_SERIALIZABLE; export type TsrSerializable = { [TSR_SERIALIZABLE]: true; }; export interface DefaultSerializable { number: number; string: string; boolean: boolean; null: null; undefined: undefined; bigint: bigint; Date: Date; Uint8Array: Uint8Array; RawStream: RawStream; TsrSerializable: TsrSerializable; void: void; } export interface SerializableExtensions extends DefaultSerializable { } export type Serializable = SerializableExtensions[keyof SerializableExtensions]; export type UnionizeSerializationAdaptersInput> = TAdapters[number]['~types']['input']; /** * Create a strongly-typed serialization adapter for SSR hydration. * Use to register custom types with the router serializer. */ export declare function createSerializationAdapter | never = never>(opts: CreateSerializationAdapterOptions): SerializationAdapter; export interface CreateSerializationAdapterOptions | never> { key: string; extends?: TExtendsAdapters; test: (value: unknown) => value is TInput; toSerializable: (value: TInput) => ValidateSerializable>; fromSerializable: (value: TOutput) => TInput; } export type ValidateSerializable = T extends TSerializable ? T : T extends (...args: Array) => any ? SerializationError<'Function may not be serializable'> : T extends RegisteredReadableStream ? SerializationError<'JSX is not be serializable'> : T extends ReadonlyArray ? ValidateSerializableArray : T extends Promise ? ValidateSerializablePromise : T extends ReadableStream ? ValidateReadableStream : T extends Set ? ValidateSerializableSet : T extends Map ? ValidateSerializableMap : T extends AsyncGenerator ? ValidateSerializableAsyncGenerator : T extends object ? ValidateSerializableMapped : SerializationError<'Type may not be serializable'>; export type ValidateSerializableAsyncGenerator = T extends AsyncGenerator ? AsyncGenerator, ValidateSerializable, TNext> : never; export type ValidateSerializablePromise = T extends Promise ? Promise> : never; export type ValidateReadableStream = T extends ReadableStream ? ReadableStream> : never; export type ValidateSerializableSet = T extends Set ? Set> : never; export type ValidateSerializableMap = T extends Map ? Map, ValidateSerializable> : never; export type ValidateSerializableArray = T extends readonly [ any, ...Array ] ? ValidateSerializableMapped : T extends Array ? Array> : T extends ReadonlyArray ? ReadonlyArray> : never; export type ValidateSerializableMapped = { [K in keyof T]: ValidateSerializable; }; declare const SERIALIZATION_ERROR: unique symbol; export interface SerializationError { [SERIALIZATION_ERROR]: TMessage; } export interface SerializationAdapter> { '~types': SerializationAdapterTypes; key: string; extends?: TExtendsAdapters; test: (value: unknown) => value is TInput; toSerializable: (value: TInput) => TOutput; fromSerializable: (value: TOutput) => TInput; } export interface SerializationAdapterTypes> { input: TInput | UnionizeSerializationAdaptersInput; output: TOutput; extends: TExtendsAdapters; } export type AnySerializationAdapter = SerializationAdapter; export interface AdapterNode extends PluginInfo { v: SerovalNode; } /** Create a Seroval plugin for server-side serialization only. */ export declare function makeSsrSerovalPlugin(serializationAdapter: AnySerializationAdapter, options: { didRun: boolean; }): Plugin; /** Create a Seroval plugin for client/server symmetric (de)serialization. */ export declare function makeSerovalPlugin(serializationAdapter: AnySerializationAdapter): Plugin; export type ValidateSerializableInput = ValidateSerializable>; export type RegisteredSerializableInput = (unknown extends RegisteredSerializationAdapters ? never : RegisteredSerializationAdapters extends ReadonlyArray ? RegisteredSerializationAdapters[number]['~types']['input'] : never) | Serializable; export type RegisteredSerializationAdapters = RegisteredConfigType; export type RegisteredSSROption = unknown extends RegisteredConfigType ? SSROption : RegisteredConfigType; export type ValidateSerializableLifecycleResult = false extends RegisteredSsr ? any : ValidateSerializableLifecycleResultSSR extends infer TInput ? TInput : never; export type ValidateSerializableLifecycleResultSSR = ResolveAllSSR extends false ? any : RegisteredSSROption extends false ? any : ValidateSerializableInput>; export type RegisteredReadableStream = unknown extends SerializerExtensions['ReadableStream'] ? never : SerializerExtensions['ReadableStream']; export interface DefaultSerializerExtensions { ReadableStream: unknown; } export interface SerializerExtensions extends DefaultSerializerExtensions { } export {};