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