From f95fd09112e81eab42591a5aaff3568ab06e9441 Mon Sep 17 00:00:00 2001 From: Rainer Killinger Date: Mon, 15 Jul 2019 10:06:56 +0200 Subject: [PATCH] feat: add function to remove undefined properties --- src/connector-client.ts | 32 ++++++++++++++++++++++++++++++++ test/connector-client.spec.ts | 21 +++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/src/connector-client.ts b/src/connector-client.ts index cc838359..ec6e3d9f 100644 --- a/src/connector-client.ts +++ b/src/connector-client.ts @@ -155,6 +155,38 @@ export class ConnectorClient extends Client { return thingWithoutReferences as SCAssociatedThingWithoutReferences; } + /** + * Recursively deletes all undefined properties from an object instance + * + * @param obj Object to delete undefined properties from + */ + static removeUndefinedProperties(obj: object): void { + // return atomic data types and arrays (recursion anchor) + if (typeof obj !== 'object' || Array.isArray(obj)) { + return; + } + + // check each key + for (const key in obj) { + /* istanbul ignore if */ + if (!obj.hasOwnProperty(key)) { + continue; + } + + const indexedObj = obj as { [k: string]: unknown; }; + + if (typeof indexedObj[key] === 'undefined') { + // delete undefined keyss + delete indexedObj[key]; + } else { + // check recursive + ConnectorClient.removeUndefinedProperties(indexedObj[key] as object); + } + } + + return; + } + /** * Request a bulk transfer to the backend * diff --git a/test/connector-client.spec.ts b/test/connector-client.spec.ts index 4565e5bc..015f2771 100644 --- a/test/connector-client.spec.ts +++ b/test/connector-client.spec.ts @@ -361,6 +361,27 @@ export class ConnectorClientSpec { } } + @test + async removeUndefinedProperties() { + const objectWithUndefinedProperties = {value: 'foo', + novalue: undefined, + nested: { + value: 'foo', + novalue: undefined}, + }; + const objectWithoutUndefinedProperties = {value: 'foo', + nested: { + value: 'foo'}, + }; + ConnectorClient.removeUndefinedProperties(objectWithUndefinedProperties); + + expect(objectWithUndefinedProperties).to.deep.equal(objectWithoutUndefinedProperties, JSON.stringify( + [objectWithUndefinedProperties, objectWithoutUndefinedProperties], + null, + 2, + )); + } + @test async update() { const message: SCMessage = {