docs: refactor TS example
[poolifier.git] / examples / typescript / pool.ts
1 import { dirname, extname, join } from 'node:path'
2 import { fileURLToPath } from 'node:url'
3
4 import {
5 availableParallelism,
6 DynamicThreadPool,
7 FixedThreadPool
8 } from 'poolifier'
9
10 import type { MyData, MyResponse } from './worker.js'
11
12 const workerFile = join(
13 dirname(fileURLToPath(import.meta.url)),
14 `worker${extname(fileURLToPath(import.meta.url))}`
15 )
16
17 const fixedPool = new FixedThreadPool<MyData, MyResponse>(
18 availableParallelism(),
19 workerFile,
20 {
21 errorHandler: (e: Error) => {
22 console.error(e)
23 },
24 onlineHandler: () => {
25 console.info('Worker is online')
26 }
27 }
28 )
29
30 await fixedPool.execute()
31
32 const dynamicPool = new DynamicThreadPool<MyData, MyResponse>(
33 Math.floor(availableParallelism() / 2),
34 availableParallelism(),
35 workerFile,
36 {
37 errorHandler: (e: Error) => {
38 console.error(e)
39 },
40 onlineHandler: () => {
41 console.info('Worker is online')
42 }
43 }
44 )
45
46 await dynamicPool.execute()
47
48 // eslint-disable-next-line @typescript-eslint/no-misused-promises
49 setTimeout(async () => {
50 await fixedPool.destroy()
51 await dynamicPool.destroy()
52 }, 3000)