Skip to content
This repository was archived by the owner on Sep 25, 2020. It is now read-only.

Commit c0dd5b6

Browse files
committed
support deep set
1 parent 2265c69 commit c0dd5b6

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

index.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var join = require('path').join;
88
var fs = require('fs');
99
var EventEmitter = require('events').EventEmitter;
1010
var TypedError = require('error/typed');
11+
var deepExtend = require('deep-extend');
1112

1213
var InvalidDirname = TypedError({
1314
type: 'missing.dirname.argument',
@@ -191,6 +192,14 @@ function fetchConfigSync(dirname, opts) {
191192
});
192193
}
193194

194-
return putPath(configState, keyPath, value);
195+
var v = getKey(keyPath);
196+
197+
if (typeof v === 'object' && v !== null) {
198+
v = deepExtend(v, value);
199+
} else {
200+
v = value;
201+
}
202+
203+
return putPath(configState, keyPath, v);
195204
}
196205
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
},
1414
"dependencies": {
1515
"config-chain": "^1.1.8",
16+
"deep-extend": "^0.2.11",
1617
"dotty": "0.0.2",
1718
"error": "^4.1.1",
1819
"flatten-prototypes": "^2.0.1",

test/index.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,36 @@ test('config.set()', function (assert) {
256256
assert.end();
257257
});
258258

259+
test('config.set() deep', function (assert) {
260+
var config = fetchConfig(__dirname);
261+
262+
config.set('key', {
263+
foo: 'bar',
264+
deep: {
265+
'thingy': 'thongy'
266+
}
267+
});
268+
269+
config.set('key', {
270+
newKey: 'woh',
271+
deep: {
272+
'other': 'yeah'
273+
}
274+
});
275+
276+
var k = config.get('key');
277+
assert.deepEqual(k, {
278+
foo: 'bar',
279+
newKey: 'woh',
280+
deep: {
281+
'thingy': 'thongy',
282+
'other': 'yeah'
283+
}
284+
});
285+
286+
assert.end();
287+
});
288+
259289
test('config.set(undefined) throws', function (assert) {
260290
var config = fetchConfig(__dirname);
261291

0 commit comments

Comments
 (0)