UNPKG

mobx-keystone-mindreframer

Version:

A MobX powered state management solution based on data trees with first class support for Typescript, snapshots, patches and much more

38 lines (33 loc) 1.07 kB
import { Frozen, frozenKey } from "../frozen/Frozen" import type { ParentPath } from "../parent/path" import { setParent } from "../parent/setParent" import { setInternalSnapshot } from "../snapshot/internal" import { tweakedObjects } from "./core" import { registerTweaker } from "./tweak" import { TweakerPriority } from "./TweakerPriority" /** * @ignore */ export function tweakFrozen<T extends Frozen<any>>( frozenObj: T, parentPath: ParentPath<any> | undefined ): T { tweakedObjects.set(frozenObj, undefined) setParent({ value: frozenObj, parentPath, indexChangeAllowed: false, isDataObject: false, // a frozen is not a value-type cloneIfApplicable: false, }) // we DON'T want data proxified, but the snapshot is the data itself setInternalSnapshot(frozenObj, { [frozenKey]: true, data: frozenObj.data }) return frozenObj as any } registerTweaker(TweakerPriority.Frozen, (value, parentPath) => { if ((value as any) instanceof Frozen) { return tweakFrozen(value as Frozen<any>, parentPath) } return undefined })