/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra*/"use strict";constmergeCache=newWeakMap();/** * Merges two given objects and caches the result to avoid computation if same objects passed as arguments again. * @example * // performs Object.assign(first, second), stores the result in WeakMap and returns result * cachedMerge({a: 1}, {a: 2}) * {a: 2} * // when same arguments passed, gets the result from WeakMap and returns it. * cachedMerge({a: 1}, {a: 2}) * {a: 2} * @param {object} first first object * @param {object} second second object * @returns {object} merged object of first and second object */constcachedMerge=(first,second)=>{letinnerCache=mergeCache.get(first);if(innerCache===undefined){innerCache=newWeakMap();mergeCache.set(first,innerCache);}constprevMerge=innerCache.get(second);if(prevMerge!==undefined)returnprevMerge;constnewMerge=Object.assign({},first,second);innerCache.set(second,newMerge);returnnewMerge;};module.exports=cachedMerge;