export type JsonObject = Record; export declare const isJsonObject: (value: unknown) => value is JsonObject; export interface ConversionChange { readonly conversion: string; readonly at: string; readonly detail?: string; } interface ConversionBase { readonly kind: Kind; readonly describe: string; } export interface RenameConversion extends ConversionBase<"rename"> { readonly from: From; readonly to: To; } export interface DropConversion extends ConversionBase<"drop"> { readonly key: Key; } export interface RetypeConversion extends ConversionBase<"retype"> { readonly key: Key; readonly guard: (value: unknown) => value is In; convert(value: In): Out; } export interface MapValueConversion> = Readonly>> extends ConversionBase<"mapValue"> { readonly key: Key; readonly mapping: Mapping; } export interface PinDefaultConversion extends ConversionBase<"pinDefault"> { readonly key: Key; readonly value: Value; } export interface TransformConversion extends ConversionBase<"transform"> { readonly applies: (value: JsonObject) => value is In; convert(value: In): Out; } export interface FoldConversion extends ConversionBase<"fold"> { readonly from: readonly From[]; readonly into: Into; readonly applies: (value: JsonObject) => boolean; convert(fields: Readonly>>, whole: JsonObject): Out; } export interface RetireEntriesConversion extends ConversionBase<"retireEntries"> { readonly isRetired: (entry: unknown) => entry is Retired; } export interface AtConversion extends ConversionBase<"at"> { readonly path: Path; readonly inner: Inner; } export type Conversion = RenameConversion | DropConversion | RetypeConversion | MapValueConversion | PinDefaultConversion | TransformConversion | FoldConversion | RetireEntriesConversion | AtConversion; export type Granularity = "object" | "entries" | "record"; export declare const rename: (from: From, to: To) => RenameConversion; export declare const drop: (key: Key) => DropConversion; export declare const retype: (key: Key, guard: (value: unknown) => value is In, convert: (value: In) => Out, describe?: string) => RetypeConversion; export declare const mapValue: >>(key: Key, mapping: Mapping) => MapValueConversion; export declare const pinDefault: (key: Key, value: Value) => PinDefaultConversion; export declare const transform: (describe: string, applies: (value: JsonObject) => value is In, convert: (value: In) => Out) => TransformConversion; export declare const fold: (describe: string, shape: { readonly from: readonly From[]; readonly into: Into; readonly applies: (value: JsonObject) => boolean; readonly convert: (fields: Readonly>>, whole: JsonObject) => Out; }) => FoldConversion; export declare const dropAll: (keys: Keys) => { readonly [I in keyof Keys]: DropConversion; }; type Nested = { readonly [I in keyof History]: History[I] extends RetireEntriesConversion ? AtConversion : AtConversion; }; export declare const nested: (path: Path, history: History, entries?: Entries) => Nested; export declare const retireEntries: (describe: string, isRetired: (entry: unknown) => entry is Retired) => RetireEntriesConversion; export declare const at: (path: Path, inner: Inner) => AtConversion; export declare class ConversionError extends Error { readonly conversion: string; constructor(conversion: string, cause: unknown); } export interface Converted { readonly value: unknown; readonly changes: readonly ConversionChange[]; } export declare const convertDocument: (conversions: readonly Conversion[], granularity: Granularity, raw: unknown, checkSettles?: boolean) => Converted; export declare const describeConversions: (conversions: readonly Conversion[]) => string[]; export {}; //# sourceMappingURL=conversions.d.ts.map