type JSONCodecTransformer = (value: unknown) => unknown; /** * The shape shared by every {@link JSONCodecKind}, whatever its type * arguments are. Method syntax lets kinds with different value types live in * the same list. */ export interface AnyJSONCodecKind { readonly kind: string; test(value: object): boolean; serialize(value: object, options: unknown, serializer: JSONCodecTransformer): unknown; parse(value: unknown, options: unknown, parser: JSONCodecTransformer): unknown; } export declare class JSONCodecKind { readonly kind: TKind; readonly test: (value: object) => value is TParsed; readonly serialize: (value: TParsed, options: TSerializeOptions, serializer: JSONCodecTransformer) => TSerialized | Promise; readonly parse: (value: TSerialized & { '~kind': TKind; }, options: TParseOptions, parser: JSONCodecTransformer) => TParsed | Promise; constructor(kind: TKind, test: (value: object) => value is TParsed, serialize: (value: TParsed, options: TSerializeOptions, serializer: JSONCodecTransformer) => TSerialized | Promise, parse: (value: TSerialized & { '~kind': TKind; }, options: TParseOptions, parser: JSONCodecTransformer) => TParsed | Promise); } type KindSerializeOptions = TKind extends { serialize: (value: never, options: infer T, serializer: never) => unknown; } ? T : {}; type KindParseOptions = TKind extends { parse: (value: never, options: infer T, parser: never) => unknown; } ? T : {}; export type JSONCodeKindSerializeOptions = TKinds extends readonly [ infer TFirst, ...infer TRest extends readonly AnyJSONCodecKind[] ] ? KindSerializeOptions & JSONCodeKindSerializeOptions : {}; export type JSONCodeKindParseOptions = TKinds extends readonly [ infer TFirst, ...infer TRest extends readonly AnyJSONCodecKind[] ] ? KindParseOptions & JSONCodeKindParseOptions : {}; export declare class JSONCodec { protected readonly kinds: Map; constructor(...kinds: TKinds); private _isKind; private _getKind; private transform; private _parse; parse(text: string, options: JSONCodeKindParseOptions): Promise; private _stringify; stringify(value: unknown, options: JSONCodeKindSerializeOptions): Promise; } export {};