import { Field, FieldOptions, FieldValues, Lazy } from "./fields"; import { AbstractStorage, PK } from "./storage"; import { ExtractKeys } from "./utils"; export interface FieldsOptions extends Record<"both" | "response" | "request", Record> { } export interface GettersOptions extends Record["internal"]) => unknown> { } export declare type FieldsValues = { rawInternal: { [N in keyof (Fields["both"] & Fields["response"])]: FieldValues<(Fields["both"] & Fields["response"])[N]>["rawInternal"]; }; internal: { [N in keyof (Fields["both"] & Fields["response"])]: FieldValues<(Fields["both"] & Fields["response"])[N]>["internal"]; }; rawExternal: { [N in keyof (Fields["both"] & Fields["request"])]: FieldValues<(Fields["both"] & Fields["request"])[N]>["rawExternal"]; }; external: { [N in keyof (Fields["both"] & Fields["request"])]: FieldValues<(Fields["both"] & Fields["request"])[N]>["external"]; }; }; export declare type Data> = FieldsValues["internal"] & { [K in keyof Getters]: ReturnType; }; export declare function build, PKField extends ExtractKeys["internal"], PropertyKey>, Getters extends GettersOptions, F extends Field>(options: { fields: Fields; pkField: PKField; getters: Getters; }): { new (options: Opts): { toInternalValue(value: { [N in keyof (Fields["both"] & Fields["response"])]: FieldValues<(Fields["both"] & Fields["response"])[N]>["rawInternal"]; } | Extract[keyof Fields["both"] | keyof Fields["response"] | keyof Getters], string | number | symbol>): () => Data; toExternalValue(value: { [N_1 in keyof (Fields["both"] & Fields["request"])]: FieldValues<(Fields["both"] & Fields["request"])[N_1]>["rawExternal"]; }): { [N_2 in keyof (Fields["both"] & Fields["request"])]: FieldValues<(Fields["both"] & Fields["request"])[N_2]>["external"]; }; handleValidationError unknown>(fn: T, data: unknown, key: string): (...args: Parameters) => ReturnType; validators: import("./validators").Validator[]; readonly nullable: boolean | undefined; readonly optional: boolean | undefined; readonly options: Opts; toInternal(value: { [N in keyof (Fields["both"] & Fields["response"])]: FieldValues<(Fields["both"] & Fields["response"])[N]>["rawInternal"]; } | null): () => Opts["nullable"] extends true ? Data | null : Data; toExternal(value: { [N_1 in keyof (Fields["both"] & Fields["request"])]: FieldValues<(Fields["both"] & Fields["request"])[N_1]>["rawExternal"]; } | undefined): Opts["optional"] extends true ? { [N_2 in keyof (Fields["both"] & Fields["request"])]: FieldValues<(Fields["both"] & Fields["request"])[N_2]>["external"]; } | undefined : { [N_2 in keyof (Fields["both"] & Fields["request"])]: FieldValues<(Fields["both"] & Fields["request"])[N_2]>["external"]; }; validate(value: T_1): value is Exclude; validateNull(value: unknown): value is null | undefined; runValidators(value: unknown): void; }; readonly storage: AbstractStorage, Extract[keyof Fields["both"] | keyof Fields["response"] | keyof Getters], string | number | symbol>>; readonly pkField: PKField; readonly fields: Fields; readonly getters: Getters; getPK(value: { [N_3 in keyof (Fields["both"] & Fields["response"])]: FieldValues<(Fields["both"] & Fields["response"])[N_3]>["internal"]; } | Data | Extract[keyof Fields["both"] | keyof Fields["response"] | keyof Getters], string | number | symbol>): Extract[keyof Fields["both"] | keyof Fields["response"] | keyof Getters], string | number | symbol>; matchFields(data: Record, fields: Record, callback: (k: K, v: V, field: Field) => R): Record; /** * Define descriptors because Vue 2.x will also define descriptors on the object * to observe changes, which will cover the raw data and make the `Proxy` get a wrong * value * @param data */ commit(data: Lazy<{ [N_3 in keyof (Fields["both"] & Fields["response"])]: FieldValues<(Fields["both"] & Fields["response"])[N_3]>["internal"]; }>): Data; /** * Define descriptors because Vue 2.x will also define descriptors on the object * to observe changes, which will cover the raw data and make the `Proxy` get a wrong * value * @param data */ commit(data: Lazy<{ [N_3 in keyof (Fields["both"] & Fields["response"])]: FieldValues<(Fields["both"] & Fields["response"])[N_3]>["internal"]; }>[]): Data[]; }; //# sourceMappingURL=serializers.d.ts.map