UNPKG

mobx-keystone

Version:

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

43 lines (32 loc) 1.28 kB
import type { ModelPropTransform } from "../modelShared/prop" import { asMap } from "../wrappers/asMap" const _objectToMapTransform: ModelPropTransform<Record<string, unknown>, Map<string, unknown>> = { transform({ originalValue: obj, cachedTransformedValue: cachedMap }) { return cachedMap ?? (asMap(obj) as unknown as Map<string, unknown>) }, untransform({ transformedValue: map }) { // do not cache map <-> obj relationship const obj: Record<string, unknown> = {} map.forEach((v, k) => { obj[k] = v }) return obj }, } export const objectToMapTransform = <T>() => _objectToMapTransform as ModelPropTransform<Record<string, T>, Map<string, T>> const _arrayToMapTransform: ModelPropTransform<Array<[unknown, unknown]>, Map<unknown, unknown>> = { transform: ({ originalValue: arr, cachedTransformedValue: cachedMap }) => { return cachedMap ?? (asMap(arr) as unknown as Map<string, unknown>) }, untransform({ transformedValue: map }) { // do not cache map <-> arr relationship const arr: Array<[unknown, unknown]> = [] map.forEach((v, k) => { arr.push([k, v]) }) return arr }, } export const arrayToMapTransform = <K, V>() => _arrayToMapTransform as ModelPropTransform<Array<[K, V]>, Map<K, V>>