From d8614860633989de8bc170a86b50ba9e15466dee Mon Sep 17 00:00:00 2001 From: Heiko Rothe Date: Sat, 27 Feb 2021 23:34:56 +0100 Subject: [PATCH] fix(entities): prevent dates from being proxied Applying proxies to date objects causes trouble and gives us no value atm anyway. --- src/entities/entities.service.spec.ts | 18 ++++++++++++++++++ src/entities/entity.proxy.ts | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/entities/entities.service.spec.ts b/src/entities/entities.service.spec.ts index 5e09b03c..d9b3b665 100644 --- a/src/entities/entities.service.spec.ts +++ b/src/entities/entities.service.spec.ts @@ -56,6 +56,24 @@ describe('EntitiesService', () => { expect(util.types.isProxy(returnedEntity)).toBeTruthy(); }); + it("should proxify object properties", () => { + const entity = new Sensor('example', 'Example Sensor'); + const returnedEntity = service.add(entity); + + returnedEntity.attributes.object = {}; + + expect(util.types.isProxy(returnedEntity.attributes.object)).toBeTruthy(); + }); + + it("should not proxify Date properties", () => { + const entity = new Sensor('example', 'Example Sensor'); + const returnedEntity = service.add(entity); + + returnedEntity.attributes.date = new Date(); + + expect(util.types.isProxy(returnedEntity.attributes.date)).toBeFalsy(); + }); + it('should return all registered entities', () => { const entities = []; entities.push(service.add(new Sensor('sensor', 'Test'))); diff --git a/src/entities/entity.proxy.ts b/src/entities/entity.proxy.ts index 0e1dc7d3..62be82c0 100644 --- a/src/entities/entity.proxy.ts +++ b/src/entities/entity.proxy.ts @@ -6,7 +6,7 @@ export class EntityProxyHandler implements ProxyHandler { } get(target: Entity, p: PropertyKey): any { - if (typeof target[p] === 'object' && target[p] !== null) { + if (typeof target[p] === 'object' && target[p] !== null && !(target[p] instanceof Date)) { return new Proxy(target[p], new EntityPropertyProxyHandler(`/${p.toString()}`, (diff) => this.emitEntityUpdate(target, diff))); } else { return target[p] @@ -40,7 +40,7 @@ class EntityPropertyProxyHandler implements ProxyHandler { } get(target: T, p: PropertyKey): any { - if (typeof target[p] === 'object' && target[p] !== null) { + if (typeof target[p] === 'object' && target[p] !== null && !(target[p] instanceof Date)) { return new Proxy(target[p], new EntityPropertyProxyHandler(`${this.path}/${p.toString()}`, this.emitterFunc)); } else { return target[p]