mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-12 05:48:57 +00:00
34 lines
905 B
JavaScript
34 lines
905 B
JavaScript
var Immutable = require('immutable');
|
|
|
|
/**
|
|
* Reduce the difference between a map and its default version
|
|
* @param {Map} defaultVersion
|
|
* @param {Map} currentVersion
|
|
* @return {Map} The properties of currentVersion that differs from defaultVersion
|
|
*/
|
|
function reducedObject(defaultVersion, currentVersion) {
|
|
if(defaultVersion === undefined) {
|
|
return currentVersion;
|
|
}
|
|
|
|
return currentVersion.reduce(function(result, value, key) {
|
|
var defaultValue = defaultVersion.get(key);
|
|
|
|
if (Immutable.Map.isMap(value)) {
|
|
var diffs = reducedObject(defaultValue, value);
|
|
|
|
if (diffs.size > 0) {
|
|
return result.set(key, diffs);
|
|
}
|
|
}
|
|
|
|
if (Immutable.is(defaultValue, value)) {
|
|
return result;
|
|
}
|
|
|
|
return result.set(key, value);
|
|
}, Immutable.Map());
|
|
}
|
|
|
|
module.exports = reducedObject;
|