UNPKG

@tbela99/css-parser

Version:

CSS parser, minifier and validator for node and the browser

48 lines (46 loc) 1.22 kB
/** * * @param fn * @returns */ function memoize(fn) { const buckets = new Map(); return function (...args) { const n = args.length; let bucket = buckets.get(n); if (bucket == null) { bucket = new Map(); buckets.set(n, bucket); } if (n === 1) { const key = args[0]; const value = bucket.get(key); if (value != null) return bucket.get(key); const result = fn(key); bucket.set(key, result); return result; } let node = bucket; for (let i = 0; i < n; i++) { const key = args[i]; const next = node.get(key); if (next == null) { const newNode = new Map(); node.set(key, newNode); node = newNode; } else { node = next; } } const last = n === 0 ? undefined : args[n - 1]; const value = node.get(last); if (value != null) return value; const result = fn(...args); node.set(last, result); return result; }; } export { memoize };