UNPKG

overmind

Version:
34 lines (33 loc) 1.26 kB
import { IMutation } from 'proxy-state-tree'; export declare function rehydrateState(target: any, source: any, classes?: any): void; export declare const SERIALIZE: unique symbol; export interface Serialize { [SERIALIZE]: boolean; } export type Serializable = Serialize | { toJSON: () => { [SERIALIZE]: boolean; }; }; type SerializableValue = Serializable | Array<Serializable> | { [key: string]: Serializable; } | null; type FilteredKeys<T, U> = { [P in keyof T]: T[P] extends U ? P : never; }[keyof T]; type ExcludeNever<T extends {}> = { [P in keyof T]: T[P] extends never ? never : P; }[keyof T]; type ExtracType<T extends {}, K> = { [P in FilteredKeys<T, K | {}>]: T[P] extends SerializableValue ? (data: any) => Serializable : T[P] extends {} ? ExtracType<T[P], K> extends { [key: string]: never; } ? never : ExtractDeepType<T[P], K> : never; }; type ExtractDeepType<T extends {}, K, U extends {} = ExtracType<T, K>> = { [P in ExcludeNever<U>]: U[P]; }; type StateNode = { [key: string]: any; }; export declare const rehydrate: <T extends StateNode>(state: T, source: IMutation[] | StateNode, classes?: ExtractDeepType<T, SerializableValue, ExtracType<T, SerializableValue>>) => void; export {};