{"version":3,"file":"worker-queue.mjs","sources":["../../src/services/worker-queue.ts"],"sourcesContent":["/**\n * Simple worker queue in memory\n */\nimport createDebugger from 'debug';\nimport type { Logger } from '@strapi/logger';\nimport type { Utils } from '@strapi/types';\n\nconst debug = createDebugger('strapi:worker-queue');\n\ninterface ConstructorParameters {\n  logger: Logger;\n  concurrency?: number;\n}\n\ntype Worker<TPayload, TReturn> = (payload: TPayload) => Promise<TReturn> | TReturn;\n\nconst noop: Utils.Function.Any = () => {};\n\nexport default class WorkerQueue<TPayload, TReturn> {\n  logger: Logger;\n\n  worker: Worker<TPayload, TReturn>;\n\n  concurrency: number;\n\n  running: number;\n\n  queue: TPayload[];\n\n  constructor({ logger, concurrency = 5 }: ConstructorParameters) {\n    debug('Initialize worker queue');\n\n    this.logger = logger;\n    this.worker = noop;\n\n    this.concurrency = concurrency;\n    this.running = 0;\n    this.queue = [];\n  }\n\n  subscribe(worker: Worker<TPayload, TReturn>) {\n    debug('Subscribe to worker queue');\n    this.worker = worker;\n  }\n\n  enqueue(payload: TPayload) {\n    debug('Enqueue event in worker queue');\n    if (this.running < this.concurrency) {\n      this.running += 1;\n      this.execute(payload);\n    } else {\n      this.queue.unshift(payload);\n    }\n  }\n\n  pop() {\n    debug('Pop worker queue and execute');\n    const payload = this.queue.pop();\n\n    if (payload) {\n      this.execute(payload);\n    } else {\n      this.running -= 1;\n    }\n  }\n\n  async execute(payload: TPayload) {\n    debug('Execute worker');\n    try {\n      await this.worker(payload);\n    } catch (error) {\n      this.logger.error(error);\n    } finally {\n      this.pop();\n    }\n  }\n}\n"],"names":["debug","createDebugger","noop","WorkerQueue","subscribe","worker","enqueue","payload","running","concurrency","execute","queue","unshift","pop","error","logger"],"mappings":";;AAOA,MAAMA,QAAQC,WAAAA,CAAe,qBAAA,CAAA;AAS7B,MAAMC,OAA2B,IAAA,CAAO,CAAA;AAEzB,MAAMC,WAAAA,CAAAA;AAsBnBC,IAAAA,SAAAA,CAAUC,MAAiC,EAAE;QAC3CL,KAAAA,CAAM,2BAAA,CAAA;QACN,IAAI,CAACK,MAAM,GAAGA,MAAAA;AAChB,IAAA;AAEAC,IAAAA,OAAAA,CAAQC,OAAiB,EAAE;QACzBP,KAAAA,CAAM,+BAAA,CAAA;AACN,QAAA,IAAI,IAAI,CAACQ,OAAO,GAAG,IAAI,CAACC,WAAW,EAAE;YACnC,IAAI,CAACD,OAAO,IAAI,CAAA;YAChB,IAAI,CAACE,OAAO,CAACH,OAAAA,CAAAA;QACf,CAAA,MAAO;AACL,YAAA,IAAI,CAACI,KAAK,CAACC,OAAO,CAACL,OAAAA,CAAAA;AACrB,QAAA;AACF,IAAA;IAEAM,GAAAA,GAAM;QACJb,KAAAA,CAAM,8BAAA,CAAA;AACN,QAAA,MAAMO,OAAAA,GAAU,IAAI,CAACI,KAAK,CAACE,GAAG,EAAA;AAE9B,QAAA,IAAIN,OAAAA,EAAS;YACX,IAAI,CAACG,OAAO,CAACH,OAAAA,CAAAA;QACf,CAAA,MAAO;YACL,IAAI,CAACC,OAAO,IAAI,CAAA;AAClB,QAAA;AACF,IAAA;IAEA,MAAME,OAAAA,CAAQH,OAAiB,EAAE;QAC/BP,KAAAA,CAAM,gBAAA,CAAA;QACN,IAAI;YACF,MAAM,IAAI,CAACK,MAAM,CAACE,OAAAA,CAAAA;AACpB,QAAA,CAAA,CAAE,OAAOO,KAAAA,EAAO;AACd,YAAA,IAAI,CAACC,MAAM,CAACD,KAAK,CAACA,KAAAA,CAAAA;QACpB,CAAA,QAAU;AACR,YAAA,IAAI,CAACD,GAAG,EAAA;AACV,QAAA;AACF,IAAA;AA9CA,IAAA,WAAA,CAAY,EAAEE,MAAM,EAAEN,WAAAA,GAAc,CAAC,EAAyB,CAAE;QAC9DT,KAAAA,CAAM,yBAAA,CAAA;QAEN,IAAI,CAACe,MAAM,GAAGA,MAAAA;QACd,IAAI,CAACV,MAAM,GAAGH,IAAAA;QAEd,IAAI,CAACO,WAAW,GAAGA,WAAAA;QACnB,IAAI,CAACD,OAAO,GAAG,CAAA;QACf,IAAI,CAACG,KAAK,GAAG,EAAE;AACjB,IAAA;AAsCF;;;;"}