mirror of
https://github.com/pnpm/pnpm.git
synced 2026-03-29 04:21:39 -04:00
22 lines
556 B
TypeScript
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]
|
|
}
|
|
}
|