From 9597b52941a07934f5144c6c57f12eee5a965c0e Mon Sep 17 00:00:00 2001 From: Timothy Farrell Date: Tue, 11 Sep 2018 12:57:14 -0500 Subject: [PATCH] Fix a bug with FRPtools when a container property is set to a falsey value --- packages/frptools/package.json | 2 +- packages/frptools/spec/container.spec.js | 11 +++++++++++ packages/frptools/src/container.js | 4 +++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/frptools/package.json b/packages/frptools/package.json index 6e7dac0..1ee960c 100644 --- a/packages/frptools/package.json +++ b/packages/frptools/package.json @@ -1,6 +1,6 @@ { "name": "frptools", - "version": "3.2.1", + "version": "3.2.2", "description": "Observable Property and Computed data streams", "main": "src/index.js", "files": [ diff --git a/packages/frptools/spec/container.spec.js b/packages/frptools/spec/container.spec.js index 9672351..c22181f 100644 --- a/packages/frptools/spec/container.spec.js +++ b/packages/frptools/spec/container.spec.js @@ -2,6 +2,17 @@ import { container, computed } from '../src/index.js'; import { dirtyMock, hashSet } from '../src/testUtil.js'; describe('A container', () => { + it('tracks properties', () => { + let i = 0; + const a = container({}, () => i++); + + a.a = 1; + expect(a.a).toBe(a._.a); + + a.b = false; + expect(a.b).toBe(a._.b); + }); + it('notifies dependents of updates', () => { let runCount = 0; let currentValue = new Set(); diff --git a/packages/frptools/src/container.js b/packages/frptools/src/container.js index eac0aa4..fdeda92 100644 --- a/packages/frptools/src/container.js +++ b/packages/frptools/src/container.js @@ -48,7 +48,9 @@ export function container(store, hash) { target[name] = newVal; checkUpdate(target); - return newVal; + // Returning a falsey value causes TypeError + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set#Invariants + return newVal || true; } });