@bargain/core
Version:
A simple TypeScript decorator-based library for serializing and deserializing data.
25 lines (24 loc) • 1 kB
TypeScript
interface PropertyMetadata<Serialized = any, Deserialized = Serialized> {
key: string;
serializedKey: string;
serializer?: (deserialized: Deserialized) => Serialized;
deserializer?: (serialized: Serialized) => Deserialized;
}
declare type PropertyOptions = string | Omit<Partial<PropertyMetadata>, "key">;
export declare function Property(_opts?: PropertyOptions): (target: any, propertyKey: string) => void;
export declare class Bargain<T extends Function[]> {
definitions: T;
constructor(definitions: T);
/**
* Turns an instance of a class into a prototype-less object (no longer an instance of the class).
* @param instance
* @returns
*/
serialize<F extends T[number]["prototype"]>(instance: F): Record<string, unknown>;
/**
* Turns the serialized data into an instance of a class.
* @param serialized
*/
deserialize<F extends T[number]>(serialized: unknown, classDef: F): F["prototype"];
}
export {};