UNPKG

merge-recursive

Version:

A merge utility support recursive merges

73 lines (62 loc) 1.52 kB
// Flat merge module.exports = exports = function(host) { var donors = slice(arguments, 1); donors.forEach(function(donor) { Object.keys(donor).forEach(function(key) { host[key] = donor[key]; }); }); return host; }; // Flat, selective merge exports.selective = function(keys, host) { var donors = slice(arguments, 1); donors.forEach(function(donor) { keys.forEach(function(key) { host[key] = donor[key]; }); }); return host; }; // Recursive merge exports.recursive = function(host) { var donors = slice(arguments, 1); donors.forEach(function(donor) { Object.keys(donor).forEach(recurser(host, donor)); }); return host; }; // Recursive, selective merge exports.selective.recursive = function(keys, host) { var donors = slice(arguments, 1); donors.forEach(function(donor) { keys.forEach(recurser(host, donor)); }); return host; }; // Helpers function slice(arr, i) { return Array.prototype.slice.call(arr, i); } function isObj(value) { return !! (typeof value === 'object' && value); } function getType(value) { return Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); } function recurser(host, donor) { return function(key) { if (isObj(donor[key])) { if (isObj(host[key])) { exports.recursive(host[key], donor[key]); } else { var base = Array.isArray(donor[key]) ? [ ] : { }; host[key] = exports.recursive(base, donor[key]); } } else { host[key] = donor[key]; } }; } /* End of file index.js */ /* Location: ./lib/index.js */