{"version":3,"file":"utils/mutex.mjs","sources":["webpack://@agent-infra/browser/./src/utils/mutex.ts"],"sourcesContent":["/**\n * The following code is modified based on\n * https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/src/util/Mutex.ts\n *\n * Copyright 2024 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n * https://github.com/puppeteer/puppeteer/blob/main/LICENSE\n */\n\nexport class Mutex {\n  static Guard = class Guard {\n    #mutex: Mutex;\n    #onRelease?: () => void;\n    constructor(mutex: Mutex, onRelease?: () => void) {\n      this.#mutex = mutex;\n      this.#onRelease = onRelease;\n    }\n    [Symbol.dispose](): void {\n      this.#onRelease?.();\n      return this.#mutex.release();\n    }\n  };\n\n  #locked = false;\n  #acquirers: Array<() => void> = [];\n\n  // This is FIFO.\n  async acquire(\n    onRelease?: () => void,\n  ): Promise<InstanceType<typeof Mutex.Guard>> {\n    if (!this.#locked) {\n      this.#locked = true;\n      return new Mutex.Guard(this);\n    }\n\n    const { promise, resolve } = Promise.withResolvers<void>();\n    this.#acquirers.push(resolve);\n    await promise;\n\n    return new Mutex.Guard(this, onRelease);\n  }\n\n  release(): void {\n    const resolve = this.#acquirers.shift();\n    if (!resolve) {\n      this.#locked = false;\n      return;\n    }\n    resolve();\n  }\n}\n"],"names":["_mutex","_onRelease","Symbol","_locked","_acquirers","Mutex","onRelease","promise","resolve","Promise","_this1","mutex"],"mappings":";;;;AAOC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAIGA,QACAC;;gBAKCC,OAAO,OAAO;IAMjBC,UAAAA,WAAAA,GAAAA,IAAAA,WACAC,aAAAA,WAAAA,GAAAA,IAAAA;AAfK,MAAMC;IAkBX,MAAM,QACJC,SAAsB,EACqB;QAC3C,IAAI,CAAC,6BAAI,EAACH,UAAS;2CACZA,SAAU;YACf,OAAO,IAAIE,MAAM,KAAK,CAAC,IAAI;QAC7B;QAEA,MAAM,EAAEE,OAAO,EAAEC,OAAO,EAAE,GAAGC,QAAQ,aAAa;QAClD,6BAAI,EAACL,YAAW,IAAI,CAACI;QACrB,MAAMD;QAEN,OAAO,IAAIF,MAAM,KAAK,CAAC,IAAI,EAAEC;IAC/B;IAEA,UAAgB;QACd,MAAME,UAAU,6BAAI,EAACJ,YAAW,KAAK;QACrC,IAAI,CAACI,SAAS,2CACPL,SAAU;QAGjBK;IACF;;QA1BAL,0BAAAA,IAAAA,EAAAA,SAAAA;;mBAAU;;QACVC,0BAAAA,IAAAA,EAAAA,YAAAA;;mBAAgC,EAAE;;;AA0BpC;AAxCE,iBADWC,OACJ,SACLL,CAAAA,SAAAA,WAAAA,GAAAA,IAAAA,WACAC,aAAAA,WAAAA,GAAAA,IAAAA,WAAAA,eAAAA,eAFa;IAOb,CAAC,aAAD,GAAyB;YACvBS,OAAAA;gBAAAA,CAAAA,QAAAA,yBAAAA,SAAAA,IAAI,EAACT,WAAAA,KAALS,MAAAA,IAAAA,CAAAA;QACA,OAAO,6BAAI,EAACV,QAAO,OAAO;IAC5B;IAPA,YAAYW,KAAY,EAAEL,SAAsB,CAAE;QAFlDN,0BAAAA,IAAAA,EAAAA,QAAAA;;mBAAAA,KAAAA;;QACAC,0BAAAA,IAAAA,EAAAA,YAAAA;;mBAAAA,KAAAA;;uCAEOD,QAASW;uCACTV,YAAaK;IACpB;AAKF"}