{"version":3,"file":"semaphore.mjs","names":[],"sources":["../../../../src/tus/stores/s3/semaphore.ts"],"sourcesContent":["/**\n * A semaphore implementation for controlling concurrent operations.\n * Used to limit the number of simultaneous part uploads to S3.\n */\nexport class Semaphore {\n  private permits: number\n  private queue: (() => void)[] = []\n\n  constructor(permits: number) {\n    this.permits = permits\n  }\n\n  private release(): void {\n    this.permits++\n    const next = this.queue.shift()\n    if (next) {\n      next()\n    }\n  }\n\n  async acquire(): Promise<() => void> {\n    return new Promise((resolve) => {\n      if (this.permits > 0) {\n        this.permits--\n        resolve(() => this.release())\n      } else {\n        this.queue.push(() => {\n          this.permits--\n          resolve(() => this.release())\n        })\n      }\n    })\n  }\n}\n"],"mappings":";;;;;AAIA,IAAa,YAAb,MAAuB;CAIrB,YAAY,SAAiB;eAFG,EAAE;AAGhC,OAAK,UAAU;;CAGjB,AAAQ,UAAgB;AACtB,OAAK;EACL,MAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,MAAI,KACF,OAAM;;CAIV,MAAM,UAA+B;AACnC,SAAO,IAAI,SAAS,YAAY;AAC9B,OAAI,KAAK,UAAU,GAAG;AACpB,SAAK;AACL,kBAAc,KAAK,SAAS,CAAC;SAE7B,MAAK,MAAM,WAAW;AACpB,SAAK;AACL,kBAAc,KAAK,SAAS,CAAC;KAC7B;IAEJ"}