webpack/lib/util/cachedMerge.js

28 lines
709 B
JavaScript
Raw Normal View History

/*
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;