{
  "version": 3,
  "sources": ["../../../../src/packages/server/lock.ts"],
  "sourcesContent": ["type CachedPromises<T> = {\n  [name: string]: Promise<T>;\n};\n\nexport type LockedFunc<T> = (key: string, fn: () => Promise<T>) => Promise<T>;\n\n/**\n * Save promises for later\n */\nexport function locking<T>(): LockedFunc<T> {\n  const locks: CachedPromises<T> = {};\n\n  return async (key: string, fn: () => Promise<T>): Promise<T> => {\n    if (locks[key] != null) {\n      return locks[key];\n    }\n\n    locks[key] = fn();\n\n    fn().then(\n      () => delete locks[key],\n      () => delete locks[key]\n    );\n\n    return locks[key];\n  };\n}\n"],
  "mappings": "AASO,SAAS,UAA4B;AAC1C,QAAM,QAA2B,CAAC;AAElC,SAAO,OAAO,KAAa,OAAqC;AAC9D,QAAI,MAAM,GAAG,KAAK,MAAM;AACtB,aAAO,MAAM,GAAG;AAAA,IAClB;AAEA,UAAM,GAAG,IAAI,GAAG;AAEhB,OAAG,EAAE;AAAA,MACH,MAAM,OAAO,MAAM,GAAG;AAAA,MACtB,MAAM,OAAO,MAAM,GAAG;AAAA,IACxB;AAEA,WAAO,MAAM,GAAG;AAAA,EAClB;AACF;",
  "names": []
}
