{"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":[],"mappings":";AAOA,MAAM,QAAQ,eAAe,qBAAqB;AASlD,MAAM,OAA2B,MAAM;AAAC;AAExC,MAAqB,YAA+B;AAAA,EAClD;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA;AAAA,EAEA,YAAY,EAAE,QAAQ,cAAc,KAA4B;AAC9D,UAAM,yBAAyB;AAE/B,SAAK,SAAS;AACd,SAAK,SAAS;AAEd,SAAK,cAAc;AACnB,SAAK,UAAU;AACf,SAAK,QAAQ;EACf;AAAA,EAEA,UAAU,QAAmC;AAC3C,UAAM,2BAA2B;AACjC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,QAAQ,SAAmB;AACzB,UAAM,+BAA+B;AACjC,QAAA,KAAK,UAAU,KAAK,aAAa;AACnC,WAAK,WAAW;AAChB,WAAK,QAAQ,OAAO;AAAA,IAAA,OACf;AACA,WAAA,MAAM,QAAQ,OAAO;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,MAAM;AACJ,UAAM,8BAA8B;AAC9B,UAAA,UAAU,KAAK,MAAM,IAAI;AAE/B,QAAI,SAAS;AACX,WAAK,QAAQ,OAAO;AAAA,IAAA,OACf;AACL,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,SAAmB;AAC/B,UAAM,gBAAgB;AAClB,QAAA;AACI,YAAA,KAAK,OAAO,OAAO;AAAA,aAClB,OAAO;AACT,WAAA,OAAO,MAAM,KAAK;AAAA,IAAA,UACvB;AACA,WAAK,IAAI;AAAA,IACX;AAAA,EACF;AACF;"}