/** A serializer that can convert between a message format and an input type. */
export interface Serializer<Msg = JsonSerializable, Input = any> {
    deserialize(message: Msg): Input;
    serialize(input: Input): Msg;
}
/** A serializer implementation that receives a fallback (default) serializer for chaining. */
export interface SerializerImplementation<Msg = JsonSerializable, Input = any> {
    deserialize(message: Msg, defaultDeserialize: (msg: Msg) => Input): Input;
    serialize(input: Input, defaultSerialize: (inp: Input) => Msg): Msg;
}
/**
 * Extend a base serializer with an additional serializer implementation, creating a chain.
 * @param extend - The base serializer to extend.
 * @param implementation - The new serializer implementation that wraps the base.
 * @returns A new serializer combining both behaviors.
 */
export declare function extendSerializer<MessageType, InputType = any>(extend: Serializer<MessageType, InputType>, implementation: SerializerImplementation<MessageType, InputType>): Serializer<MessageType, InputType>;
type JsonSerializablePrimitive = string | number | boolean | null;
type JsonSerializableObject = {
    [key: string]: JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[] | undefined;
};
/** A JSON-compatible value that can be serialized for worker message passing. */
export type JsonSerializable = JsonSerializablePrimitive | JsonSerializablePrimitive[] | JsonSerializableObject | JsonSerializableObject[];
/** Default serializer that handles Error instances and passes other values through. */
export declare const DefaultSerializer: Serializer<JsonSerializable>;
export {};
//# sourceMappingURL=serializers.d.ts.map