svelte-i18n/src/runtime/includes/memoize.ts
Christian Kaisermann dadeaa2e7f feat: 🎸 add runtime typings
 Closes: Closes #43
2020-01-23 10:11:04 -03:00

15 lines
380 B
TypeScript

type MemoizedFunction = <F extends any>(fn: F) => F
const monadicMemoize: MemoizedFunction = fn => {
const cache = Object.create(null)
const memoizedFn: any = (arg: unknown) => {
const cacheKey = JSON.stringify(arg)
if (cacheKey in cache) {
return cache[cacheKey]
}
return (cache[cacheKey] = fn(arg))
}
return memoizedFn
}
export { monadicMemoize }