import { Codec } from "./codec.js"; export type Metadata = Array<{ type: "atomic"; name: string; docs?: never; factory?: never; args?: never; } | { type: "factory"; name: string; docs?: never; factory: (...args: any) => Codec; args: any[]; }>; /** Metadata for an atomic codec */ export declare function metadata(name: string): Metadata; /** Metadata for a factory-made codec */ export declare function metadata(name: string, factory: (...args: A) => Codec, ...args: A): Metadata; /** Concatenate multiple metadata arrays */ export declare function metadata(...metadata: Metadata[]): Metadata; export declare class CodecVisitor { #private; add(codec: (...args: A) => Codec, fn: (codec: Codec, ...args: A) => R): this; add(codec: Codec, fn: (codec: Codec) => R): this; fallback(fn: (codec: Codec) => R): this; /** * ```ts * visitor.generic(() => * visitor.add($.array, (codec, $el) => { * ... * }) * ) * ``` */ generic(fn: (visitor: this) => void): this; visit(codec: Codec): R; }