docs: refactor TS example
[poolifier.git] / examples / typescript / pool.ts
index 8b29e3becaf7d73b3f15c35afc8b4b8c2834deb4..fb48f7b07db76324a75afc001e131dd448a6809f 100644 (file)
@@ -1,22 +1,52 @@
-import { join } from 'path'
-import { DynamicThreadPool, FixedThreadPool } from 'poolifier'
-import type { MyData, MyResponse } from './worker'
+import { dirname, extname, join } from 'node:path'
+import { fileURLToPath } from 'node:url'
 
-export const fixedPool = new FixedThreadPool<MyData, Promise<MyResponse>>(
-  8,
-  join(__dirname, 'worker.js'),
+import {
+  availableParallelism,
+  DynamicThreadPool,
+  FixedThreadPool
+} from 'poolifier'
+
+import type { MyData, MyResponse } from './worker.js'
+
+const workerFile = join(
+  dirname(fileURLToPath(import.meta.url)),
+  `worker${extname(fileURLToPath(import.meta.url))}`
+)
+
+const fixedPool = new FixedThreadPool<MyData, MyResponse>(
+  availableParallelism(),
+  workerFile,
   {
-    errorHandler: e => console.error(e),
-    onlineHandler: () => console.log('Worker is online')
+    errorHandler: (e: Error) => {
+      console.error(e)
+    },
+    onlineHandler: () => {
+      console.info('Worker is online')
+    }
   }
 )
 
-export const dynamicPool = new DynamicThreadPool<MyData, Promise<MyResponse>>(
-  2,
-  8,
-  join(__dirname, 'worker.js'),
+await fixedPool.execute()
+
+const dynamicPool = new DynamicThreadPool<MyData, MyResponse>(
+  Math.floor(availableParallelism() / 2),
+  availableParallelism(),
+  workerFile,
   {
-    errorHandler: e => console.error(e),
-    onlineHandler: () => console.log('Worker is online')
+    errorHandler: (e: Error) => {
+      console.error(e)
+    },
+    onlineHandler: () => {
+      console.info('Worker is online')
+    }
   }
 )
+
+await dynamicPool.execute()
+
+// eslint-disable-next-line @typescript-eslint/no-misused-promises
+setTimeout(async () => {
+  await fixedPool.destroy()
+  await dynamicPool.destroy()
+}, 3000)