Files
pnpm/src/memoize.ts
zkochan bba252bbc8 perf: don't limit the linking concurrency
The EMFILE issue is fixed by graceful-fs
2017-02-27 01:27:56 +02:00

22 lines
556 B
TypeScript

import pLimit = require('p-limit')
type CachedPromises<T> = {
[name: string]: Promise<T>
}
export type MemoizedFunc<T> = (key: string, fn: () => Promise<T>) => Promise<T>
/**
* Save promises for later
*/
export default function memoize <T>(concurrency?: number): MemoizedFunc<T> {
const locks: CachedPromises<T> = {}
const limit = concurrency && pLimit(concurrency)
return function (key: string, fn: () => Promise<T>): Promise<T> {
if (locks[key]) return locks[key]
locks[key] = limit && limit(fn) || fn()
return locks[key]
}
}