Sha256: 97db10d8fa61943eda7ec4b9ac1649f45127b67eee8f9328e5155bb02cc5ec67
Contents?: true
Size: 1.07 KB
Versions: 27
Compression:
Stored size: 1.07 KB
Contents
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const mergeCache = new WeakMap(); /** * 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 */ const cachedMerge = (first, second) => { let innerCache = mergeCache.get(first); if (innerCache === undefined) { innerCache = new WeakMap(); mergeCache.set(first, innerCache); } const prevMerge = innerCache.get(second); if (prevMerge !== undefined) return prevMerge; const newMerge = Object.assign({}, first, second); innerCache.set(second, newMerge); return newMerge; }; module.exports = cachedMerge;
Version data entries
27 entries across 26 versions & 9 rubygems