@lzptec/concurrency
Version:
A Lightweight concurrency manager
1 lines • 1.58 kB
Source Map (JSON)
{"version":3,"sources":["../src/lock.ts"],"names":["_queue","_locked","Lock","__privateAdd","Queue","__privateGet","resolve","__privateSet","next"],"mappings":"mEAAA,IAAAA,EAAAC,CAEaC,CAAAA,CAAAA,CAAN,KAAW,CAAX,cACHC,mBAAA,CAAA,IAAA,CAAAH,CAA0B,CAAA,IAAII,qBAC9BD,mBAAA,CAAA,IAAA,CAAAF,CAAU,CAAA,KAAA,EAAA,CAEV,MAAM,OAAyB,EAAA,CAC3B,GAAII,mBAAAA,CAAA,KAAKJ,CACL,CAAA,CAAA,OAAO,IAAI,OAAA,CAAeK,GAAYD,mBAAA,CAAA,IAAA,CAAKL,CAAO,CAAA,CAAA,OAAA,CAAQM,CAAO,CAAC,CAAA,CAElEC,oBAAA,IAAKN,CAAAA,CAAAA,CAAU,MAEvB,CAEA,MAAM,OAAU,EAAA,CACZ,GAAII,mBAAA,CAAA,IAAA,CAAKL,CAAO,CAAA,CAAA,MAAA,GAAW,GAAKK,mBAAA,CAAA,IAAA,CAAKJ,CAAS,CAAA,CAAA,CAC1CM,oBAAA,IAAKN,CAAAA,CAAAA,CAAU,OACf,MACJ,CAEA,IAAMO,CAAOH,CAAAA,mBAAAA,CAAA,IAAKL,CAAAA,CAAAA,CAAAA,CAAO,SACzB,CAAA,OAAO,IAAI,OAAA,CAAeM,GAAY,CAClCE,CAAAA,EACAF,CAAAA,CAAAA,GACJ,CAAC,CACL,CACJ,EAvBIN,CAAAA,CAAA,YACAC,CAAA,CAAA,IAAA,OAAA","file":"chunk-T2GJZRIQ.cjs","sourcesContent":["import { Queue } from \"./base/queue.js\";\n\nexport class Lock {\n #queue: Queue<Function> = new Queue();\n #locked = false;\n\n async acquire(): Promise<void> {\n if (this.#locked) {\n return new Promise<void>((resolve) => this.#queue.enqueue(resolve));\n } else {\n this.#locked = true;\n }\n }\n\n async release() {\n if (this.#queue.length === 0 && this.#locked) {\n this.#locked = false;\n return;\n }\n\n const next = this.#queue.dequeue()!;\n return new Promise<void>((resolve) => {\n next();\n resolve();\n });\n }\n}"]}