-import type { TransferListItem } from 'worker_threads'
-import { DynamicThreadPool, availableParallelism } from 'poolifier'
-import { type FastifyPluginCallback } from 'fastify'
+import type { TransferListItem } from 'node:worker_threads'
+
+import type { FastifyPluginCallback } from 'fastify'
import fp from 'fastify-plugin'
-import {
- type FastifyPoolifierOptions,
- type WorkerData,
- type WorkerResponse
+import { availableParallelism, DynamicThreadPool } from 'poolifier'
+
+import type {
+ FastifyPoolifierOptions,
+ WorkerData,
+ WorkerResponse,
} from './types.js'
const fastifyPoolifierPlugin: FastifyPluginCallback<FastifyPoolifierOptions> = (
options = {
...{
minWorkers: 1,
- maxWorkers: availableParallelism()
+ maxWorkers: availableParallelism(),
},
- ...options
+ ...options,
}
+ const { workerFile, minWorkers, maxWorkers, ...poolOptions } = options
const pool = new DynamicThreadPool<WorkerData, WorkerResponse>(
- options.minWorkers as number,
- options.maxWorkers as number,
- options.workerFile,
- options
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ minWorkers!,
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ maxWorkers!,
+ workerFile,
+ poolOptions
)
if (!fastify.hasDecorator('pool')) {
fastify.decorate('pool', pool)
async (
data?: WorkerData,
name?: string,
- transferList?: TransferListItem[]
+ transferList?: readonly TransferListItem[]
): Promise<WorkerResponse> => await pool.execute(data, name, transferList)
)
}
export const fastifyPoolifier = fp(fastifyPoolifierPlugin, {
fastify: '4.x',
- name: 'fastify-poolifier'
+ name: 'fastify-poolifier',
})