From 772580d96e1ffdc23e1cac98f58fb0a5c7967a45 Mon Sep 17 00:00:00 2001 From: Dawid Kisielewski Date: Tue, 2 Jan 2024 11:23:28 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Remove=20undefined=20props?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At the moment when we pass payload like this: ```ts {someProp: undefined} ``` It stores it mongoDb Db, but it auto convert it to null value, however it might be error prone as we may enqueue job that has `callbackUrl: undefined`, then the mongo queue saves in db, which converts it to `callbackUrl: null`, then when getting the message from queue worker validate the job payload and has type `t.partial({callbackUrl: t.string}})`. The validation will fail. --- mongodb-queue.ts | 2 +- package.json | 2 +- test/default.js | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/mongodb-queue.ts b/mongodb-queue.ts index d61e8dd..82a1e44 100644 --- a/mongodb-queue.ts +++ b/mongodb-queue.ts @@ -118,7 +118,7 @@ export default class Queue { }); } - const results = await this.col.insertMany(msgs); + const results = await this.col.insertMany(msgs, {ignoreUndefined: true}); if (payload instanceof Array) return '' + results.insertedIds; return '' + results.insertedIds[0]; } diff --git a/package.json b/package.json index 15a8ba3..5d1549d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@reedsy/mongodb-queue", - "version": "5.1.0", + "version": "6.0.0", "description": "Message queues which uses MongoDB.", "main": "mongodb-queue.js", "scripts": { diff --git a/test/default.js b/test/default.js index 9af5281..03e0370 100644 --- a/test/default.js +++ b/test/default.js @@ -56,6 +56,17 @@ setup().then(({client, db}) => { t.end(); }); + test('remove undefined properties', async function(t) { + const queue = new MongoDbQueue(db, 'default'); + const id = await queue.add({text: 'Hello, World!', undefinedProp: undefined}); + t.ok(id, 'Received an id for this message'); + + const msg = await queue.get(); + t.ok(msg.id, 'Got a msg.id'); + t.equal('undefinedProp' in msg.payload, false, 'Payload has undefinedProp and it should be removed'); + t.end(); + }); + test('client.close()', function(t) { t.pass('client.close()'); client.close();