import { computed } from './computed'; import { getNode } from './globals'; import { lockObservable } from './helpers'; import { observable } from './observable'; import { ObservableProxy, Observable as ObservableWriteable } from './observableInterfaces'; export function proxy(get: (key: string) => ObservableWriteable): ObservableProxy { // Create an observable for this computed variable const obs = observable(); lockObservable(obs, true); const mapTargets = new Map>(); const node = getNode(obs); node.isComputed = true; node.proxyFn = (key: string) => { let target = mapTargets.get(key); if (!target) { target = computed(() => get(key)); mapTargets.set(key, target); } return target; }; return obs as unknown as ObservableProxy; }