overmind
Version:
Frictionless state management
34 lines (33 loc) • 1.26 kB
TypeScript
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 {};