Fix handling null differently than undefined.

`u` and friends will now coerce null to an object if there are updates for it.

Fixes #20
This commit is contained in:
Aaron Jensen 2015-08-12 22:04:31 -07:00
parent e99d575972
commit 5b58b8cfc8
3 changed files with 21 additions and 5 deletions

View File

@ -2,6 +2,7 @@
## [unreleased]
* Add `u._` placeholder for curried functions.
* Fix handling null differently than undefined. `u` and friends will now coerce null to an object if there are updates for it. (https://github.com/substantial/updeep/issues/20)
## [0.6.0]
* Remove support for `_.placeholder` in curried methods. This may come back, but it was necessary for the next item.

View File

@ -10,7 +10,7 @@ function reduce(object, callback, initialValue) {
}, initialValue);
}
function resolveUpdates(updates, object = {}) {
function resolveUpdates(updates, object) {
return reduce(updates, (acc, value, key) => {
let updatedValue = value;
@ -62,17 +62,21 @@ function update(updates, object, ...args) {
return updates;
}
const resolvedUpdates = resolveUpdates(updates, object);
const defaultedObject = (typeof object === 'undefined' || object === null) ?
{} :
object;
const resolvedUpdates = resolveUpdates(updates, defaultedObject);
if (isEmpty(resolvedUpdates)) {
return object;
}
if (Array.isArray(object)) {
return updateArray(resolvedUpdates, object);
if (Array.isArray(defaultedObject)) {
return updateArray(resolvedUpdates, defaultedObject);
}
return { ...object, ...resolvedUpdates };
return { ...defaultedObject, ...resolvedUpdates };
}
export default wrap(update, 2);

View File

@ -118,4 +118,15 @@ describe('updeep', () => {
expect(result).to.eql({ name: 'Joe Merrill', age: 22 });
});
it('defaults to an empty object when null or undefined', () => {
let result = u({ a: { b: 0 } }, { a: null });
expect(result).to.eql({ a: { b: 0 } });
result = u({ a: { b: 0 } }, { a: undefined });
expect(result).to.eql({ a: { b: 0 } });
result = u({ a: { b: 0 } }, { });
expect(result).to.eql({ a: { b: 0 } });
});
});