From caed076f2a17e9dd3a54d7e26be8b9a8ea938499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Fri, 12 Apr 2019 21:07:12 +0200 Subject: [PATCH] [FIX] store: properly handle null values --- src/store.ts | 4 ++++ tests/store.test.ts | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/store.ts b/src/store.ts index 38fedb61..acb7da55 100644 --- a/src/store.ts +++ b/src/store.ts @@ -202,6 +202,10 @@ export function makeObserver(): Observer { } function observe(value: any) { + if (value === null) { + // fun fact: typeof null === 'object' + return; + } if (typeof value !== "object") { return; } diff --git a/tests/store.test.ts b/tests/store.test.ts index cbd9ac7c..00d0943b 100644 --- a/tests/store.test.ts +++ b/tests/store.test.ts @@ -162,6 +162,25 @@ describe("observer", () => { expect(ob2.__rev__).toBe(2); }); + test("properly handle null or undefined", () => { + const observer = makeObserver(); + const obj: any = { a: null, b: undefined }; + + observer.observe(obj); + expect(obj.__rev__).toBe(0); + expect(observer.__rev__).toBe(0); + + obj.a = 3; + expect(obj.__rev__).toBe(1); + + obj.b = 5; + expect(obj.__rev__).toBe(2); + + obj.a = null; + obj.b = undefined; + expect(obj.__rev__).toBe(4); + }); + test("can change values in array", () => { const observer = makeObserver(); const obj: any = { arr: [1, 2] };