From c8aae33840b41d988d76d7f3509a297f1462a22a Mon Sep 17 00:00:00 2001 From: "Harish.K" Date: Thu, 8 Jun 2017 16:34:20 +0530 Subject: [PATCH] Added deep merge instead of Object.assign --- index.js | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index b08d46c..539e6df 100644 --- a/index.js +++ b/index.js @@ -40,6 +40,25 @@ function loadConfig( name ){ return out; } +function assignDeep( src, dest1, dest2 ){ + var key, val; + for( key in dest1 ){ + val = dest1[ key ]; + if( val.constructor.name === 'Object' ){ + if( ( !src.hasOwnProperty(key) ) || ( src[ key ].constructor.name !== 'Object' ) ){ + src[ key ] = {}; + } + assignDeep( src[ key ], val ); + } else { + src[ key ] = val; + } + } + if( dest2 ){ + assignDeep( src, dest2 ); + } + return src; +} + /* Implementation of lodash.set function */ function setProp( object, keys, val ){ keys = Array.isArray( keys )? keys : keys.split('.'); @@ -50,12 +69,12 @@ function setProp( object, keys, val ){ object[keys[0]] = val; } -Object.assign( finalConfig, loadConfig('default'), loadConfig( env ) ); +assignDeep( finalConfig, loadConfig('default'), loadConfig( env ) ); -var envList = Object.keys( process.env ).filter( function(v){ +Object.keys( process.env ).filter( function(v){ var match = v.match( envRegex ); if( match ){ - setProp( finalConfig, match[1].toLowerCase(), process.env[v] ); + setProp( finalConfig, match[1], process.env[v] ); } });