feat: add 'full' event on dynamic pool emitter
[poolifier.git] / src / pools / abstract-pool.ts
index c1e6ddc09a9a41ce18d34ced63a162225f66818f..0da7f86bfd7870ae1f1efd020dee765ec9c142f9 100644 (file)
@@ -76,6 +76,7 @@ export abstract class AbstractPool<
 
     this.chooseWorker.bind(this)
     this.internalExecute.bind(this)
+    this.checkAndEmitFull.bind(this)
     this.checkAndEmitBusy.bind(this)
     this.sendToWorker.bind(this)
 
@@ -209,6 +210,7 @@ export abstract class AbstractPool<
     const [workerKey, worker] = this.chooseWorker()
     const messageId = crypto.randomUUID()
     const res = this.internalExecute(workerKey, worker, messageId)
+    this.checkAndEmitFull()
     this.checkAndEmitBusy()
     this.sendToWorker(worker, {
       // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
@@ -413,6 +415,16 @@ export abstract class AbstractPool<
     }
   }
 
+  private checkAndEmitFull (): void {
+    if (
+      this.type === PoolType.DYNAMIC &&
+      this.opts.enableEvents === true &&
+      this.full
+    ) {
+      this.emitter?.emit('full')
+    }
+  }
+
   /**
    * Gets worker tasks usage.
    *