Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
18 lines
484 B
Plaintext
18 lines
484 B
Plaintext
let weakMemoize = function <Arg extends object, Return>(
|
|
func: (arg: Arg) => Return
|
|
): (arg: Arg) => Return {
|
|
let cache = new WeakMap<Arg, Return>()
|
|
return (arg: Arg) => {
|
|
if (cache.has(arg)) {
|
|
// Use non-null assertion because we just checked that the cache `has` it
|
|
// This allows us to remove `undefined` from the return value
|
|
return cache.get(arg)!
|
|
}
|
|
let ret = func(arg)
|
|
cache.set(arg, ret)
|
|
return ret
|
|
}
|
|
}
|
|
|
|
export default weakMemoize
|