From 68f7ab2fc3723ef2e3fa2c01bae65637bbdd0566 Mon Sep 17 00:00:00 2001 From: Miguel Moreno Date: Fri, 28 Aug 2020 13:32:07 +0200 Subject: [PATCH 1/2] Add lodash cloneDeep to add support for arrays in input-output-logger and unit test with the case. --- .../input-output-logger/__tests__/index.js | 18 ++++++++++++++++++ packages/input-output-logger/index.js | 4 +++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/input-output-logger/__tests__/index.js b/packages/input-output-logger/__tests__/index.js index 1ad330669..9031a7b27 100644 --- a/packages/input-output-logger/__tests__/index.js +++ b/packages/input-output-logger/__tests__/index.js @@ -49,5 +49,23 @@ describe('📦 Middleware Input Output Logger', () => { expect(logger).toHaveBeenCalledWith({ event: { foo: 'bar', fuu: 'baz' } }) expect(logger).toHaveBeenCalledWith({ response: 'yo' }) }) + + test('Skipped parts should be present in the response', async () => { + const logger = jest.fn() + + const handler = middy((event, context, cb) => { + cb(null, { foo: [{ foo: 'bar', fuu: 'baz' }] }) + }) + + handler + .use(inputOutputLogger({ logger, omitPaths: ['event.zooloo', 'event.foo.hoo', 'response.foo[0].foo'] })) + + const response = await invoke(handler, { foo: 'bar', fuu: 'baz' }) + + expect(logger).toHaveBeenCalledWith({ event: { foo: 'bar', fuu: 'baz' } }) + expect(logger).toHaveBeenCalledWith({ response: { foo: [{ fuu: 'baz' }] } }) + + expect(response).toMatchObject({ foo: [{ foo: 'bar', fuu: 'baz' }] }) + }) }) }) diff --git a/packages/input-output-logger/index.js b/packages/input-output-logger/index.js index 68c26c1b5..a71c5175a 100644 --- a/packages/input-output-logger/index.js +++ b/packages/input-output-logger/index.js @@ -1,4 +1,5 @@ const omit = require('lodash/omit') +const cloneDeep = require('lodash/cloneDeep') module.exports = (opts) => { const defaults = { @@ -9,7 +10,8 @@ module.exports = (opts) => { const { logger, omitPaths } = Object.assign({}, defaults, opts) const omitAndLog = message => { - const redactedMessage = omit(message, omitPaths) + const messageClone = cloneDeep(message) + const redactedMessage = omit(messageClone, omitPaths) logger(redactedMessage) } From f1efcade61427b67f79646cb30ba3414871253bc Mon Sep 17 00:00:00 2001 From: Miguel Moreno Date: Sun, 30 Aug 2020 09:37:55 +0200 Subject: [PATCH 2/2] Avoid using lodash cloneDeep --- packages/input-output-logger/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/input-output-logger/index.js b/packages/input-output-logger/index.js index a71c5175a..0c2c0cf6d 100644 --- a/packages/input-output-logger/index.js +++ b/packages/input-output-logger/index.js @@ -1,5 +1,4 @@ const omit = require('lodash/omit') -const cloneDeep = require('lodash/cloneDeep') module.exports = (opts) => { const defaults = { @@ -9,8 +8,10 @@ module.exports = (opts) => { const { logger, omitPaths } = Object.assign({}, defaults, opts) + const cloneMessage = message => JSON.parse(JSON.stringify(message)) + const omitAndLog = message => { - const messageClone = cloneDeep(message) + const messageClone = cloneMessage(message) const redactedMessage = omit(messageClone, omitPaths) logger(redactedMessage) }