import type { ModelPropTransform } from "../modelShared/prop" import { asMap } from "../wrappers/asMap" const _objectToMapTransform: ModelPropTransform, Map> = { transform({ originalValue: obj, cachedTransformedValue: cachedMap }) { return cachedMap ?? (asMap(obj) as unknown as Map) }, untransform({ transformedValue: map }) { // do not cache map <-> obj relationship const obj: Record = {} map.forEach((v, k) => { obj[k] = v }) return obj }, } /** * @deprecated Prefer the codec equivalent: `tProp(types.mapFromObject(valueType))`. * Use `tProp(types.skipCheck(types.mapFromObject(valueType)))` if you don't need runtime validation. */ export const objectToMapTransform = () => _objectToMapTransform as ModelPropTransform, Map> const _arrayToMapTransform: ModelPropTransform, Map> = { transform: ({ originalValue: arr, cachedTransformedValue: cachedMap }) => { return cachedMap ?? (asMap(arr) as unknown as Map) }, untransform({ transformedValue: map }) { // do not cache map <-> arr relationship const arr: Array<[unknown, unknown]> = [] map.forEach((v, k) => { arr.push([k, v]) }) return arr }, } /** * @deprecated Prefer the codec equivalent: `tProp(types.mapFromArray(keyType, valueType))`. * Use `tProp(types.skipCheck(types.mapFromArray(keyType, valueType)))` if you don't need runtime validation. */ export const arrayToMapTransform = () => _arrayToMapTransform as ModelPropTransform, Map>