import { $CONSTRUCTOR, MetaContext, MetaObject } from '../../MetaContext'; import { $CREATE, $Create } from './$restore'; export const $DESERIALIZE = '$deserialize'; export type Deserialize = (state: any) => T; export type $Deserialize = { [$DESERIALIZE]: Deserialize }; export const withDeserialize = MetaContext & $Create>(MetaContextBase: TMetaContextBase) => class extends MetaContextBase { getState(state: any): [MetaObject, any] { const $state = this.resolveValue(state); if ($state[$CONSTRUCTOR] === Object) { const keys = Object.keys(state); if (keys.length === 1) { const name = keys[0]; const namedMetaObject = this.getName(name); if (namedMetaObject !== undefined) return [namedMetaObject, state[name]]; } } return [$state, state]; } [$DESERIALIZE](state: any) { return this[$CREATE](state) as T; } };