/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const mergeCache = new WeakMap(); const cachedMerge = (first, ...args) => { if(args.length === 0) return first; if(args.length > 1) { return cachedMerge(first, cachedMerge(...args)); } const second = args[0]; let innerCache = mergeCache.get(first); if(innerCache === undefined) { innerCache = new WeakMap(); mergeCache.set(first, innerCache); } const cachedMerge = innerCache.get(second); if(cachedMerge !== undefined) return cachedMerge; const newMerge = Object.assign({}, first, second); innerCache.set(second, newMerge); return newMerge; }; module.exports = cachedMerge;