const globalMap = new Map>>(); export function createKeyedAsyncMutex(globalNamespaceKey: string) { let map; if (globalMap.has(globalNamespaceKey)) { map = globalMap.get(globalNamespaceKey)!; } else { map = new Map(); globalMap.set(globalNamespaceKey, map); } return { async acquire(key: string, fn: () => Promise) { if (map.has(key)) { return map.get(key); } const promise = fn(); map.set(key, promise); return promise; } }; }