hydratable
Version:
Serialize/Deserialize your JSON objects
50 lines (49 loc) • 1.33 kB
TypeScript
export type HydratableType = 'number' | 'date' | 'bool' | 'string' | 'object' | 'array' | {
new (...args: any): any;
} | {
factory: (model: any) => any;
};
interface ModelMapValue {
type: HydratableType;
options: HydrateOptions;
}
export type Differences = {
[key: string]: [unknown, unknown] | Differences;
};
declare global {
var HydratableModelMap: Map<symbol, Map<string, ModelMapValue>>;
}
export interface HydrateOptions {
allowNull?: boolean;
incomingFieldName?: string;
arrayElementType?: HydratableType;
dictionaryValueType?: HydratableType;
}
export declare function hy(type: HydratableType, options?: HydrateOptions): (target: any, propertyKey: string) => void;
export declare class Hydratable<T> {
constructor(data: T);
toJSON(): T;
diff(other: Hydratable<T>, skip?: {
[field: string]: true;
}): Differences;
private areDatesEqual;
private diffArrays;
private diffObject;
private hydrate;
private setField;
private setNumber;
private setDate;
private setBool;
private setString;
private setArray;
private setObject;
private copyBuffer;
private copyArray;
private copyObject;
private forEachHyProp;
private isObject;
private isArray;
private isDate;
private setOnThis;
}
export {};