# utils-deep-clone
Deep clones any json
datatype
## Installation
yarn add utils-deep-clone
npm install utils-deep-clone
## Motivation
utils-deep-clone
is designed specifically for winstonJS but it can be used wheresoever required. WinstonJS have an open bug that if you pass Error
data type nested inside Object
or nested inside any other data type then because Error
being enumerable it won’t get printed in logs. So to handle this here’s a workaround. Just call toJSON
function before calling winston.log
and pass the response object in it. An example for this is given at the bottom.
# Normal DeepCloning - THE NEED
const someError = 'Something wrong happened' const someError2 = 'Something wrong happened again' const someError3 = 'Something wrong happened again again' someError3someData = 'Some data' someError3isActive = true var obj = someError nestedValue: someError2 arrayValue: 'value1' 'value2' someError3 console
Response:
{ someError: {},
nestedValue: { someError2: {} },
arrayValue: [ 'value1', 'value2', { someData: 'Some data', isActive: true } ] }
Error is not getting printed because of it’s enumerable property.
# Usage - THE SOLUTION
Now doing the same thing with utils-deep-clone
const toJSON = const someError = 'Something wrong happened' const someError2 = 'Something wrong happened again' const someError3 = 'Something wrong happened again again' someError3someData = 'Some data' someError3isActive = true var obj = someError nestedValue: someError2 arrayValue: 'value1' 'value2' someError3 console
Response:
{ someError:
{ message: 'Something wrong happened',
stack: 'Error: Something wrong happened\n at Object.<anonymous> (/Users/atishay/Documents/utils-error-deep-log/Untitled-1.js:3:19)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Function.Module.runMain (module.js:693:10)\n at startup (bootstrap_node.js:188:16)\n at bootstrap_node.js:609:3' },
arrayValue:
[ 'value1',
'value2',
{ message: 'Something wrong happened again again',
stack: 'Error: Something wrong happened again again\n at Object.<anonymous> (/Users/atishay/Documents/utils-error-deep-log/Untitled-1.js:5:20)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Function.Module.runMain (module.js:693:10)\n at startup (bootstrap_node.js:188:16)\n at bootstrap_node.js:609:3',
someData: 'Some data',
isActive: true } ],
nestedValue:
{ someError2:
{ message: 'Something wrong happened again',
stack: 'Error: Something wrong happened again\n at Object.<anonymous> (/Users/atishay/Documents/utils-error-deep-log/Untitled-1.js:4:20)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Function.Module.runMain (module.js:693:10)\n at startup (bootstrap_node.js:188:16)\n at bootstrap_node.js:609:3' } } }
## Debugging
const toJSON debug = // Simply Call this for getting debug logs const someError = 'Something wrong happened' console
# Winston Bug
Here’s the example from winston 2.x
but the same bug exists in winston 3.x
also.
const winston = const winstonLogger = new winstonLogger transports: new winstontransportsConsole const log = { return winstonLogger} const testObj = error: 'Nothing will happen'
Response:
info: Testing few bugs
Now, we’ll be also using utils-deep-clone
const winston = const toJSON = const winstonLogger = new winstonLogger transports: new winstontransportsConsole const log = { try payload = return winstonLogger catcherror console } const testObj = error: 'It should work'
Response:
info: Testing few bugs message=It should work, stack=Error: It should work
at Object.<anonymous> (/Users/atishay/Desktop/utils-error-deep-log/logger.js:20:10)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)
at startup (bootstrap_node.js:188:16)
at bootstrap_node.js:609:3