overmind
Version:
Frictionless state management
28 lines (27 loc) • 1.17 kB
TypeScript
import { IMutation } from "proxy-state-tree";
//#region src/rehydrate.d.ts
declare const SERIALIZE: unique symbol;
interface Serialize {
[SERIALIZE]: boolean;
}
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;
};
declare const rehydrate: <T extends StateNode>(state: T, source: IMutation[] | StateNode, classes?: ExtractDeepType<T, SerializableValue>) => void;
//#endregion
export { SERIALIZE, rehydrate };
//# sourceMappingURL=rehydrate.d.ts.map