From 0c613ae5cd6fee8ba971644d90cb4edfb2f53239 Mon Sep 17 00:00:00 2001 From: Ihor Chulinda Date: Mon, 4 May 2020 13:41:00 +0200 Subject: [PATCH] fix(observable): preserve proxy invariants on get --- packages/observable/src/observe.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/observable/src/observe.ts b/packages/observable/src/observe.ts index a240aa24..af5c8713 100644 --- a/packages/observable/src/observe.ts +++ b/packages/observable/src/observe.ts @@ -27,6 +27,11 @@ export function observeObj(obj: T, onSet?: (tx: ITransaction) => v return new Proxy(obj, { // TODO: fix `symbol` type get(target, p: string | number, receiver) { + // preserving Proxy invariant + const desc = Reflect.getOwnPropertyDescriptor(target, p); + if (desc && !desc.configurable && !desc.writable) { + return Reflect.get(target, p, receiver); + } const atom = createAtomIfNotExists(p); return calculate(atom, () => Reflect.get(target, p, receiver), observe);