feat: add fastify in cluster pool example
[poolifier.git] / examples / typescript / http-server-pool / fastify-cluster / src / worker.ts
1 import type { AddressInfo } from 'node:net'
2 import { ClusterWorker } from 'poolifier'
3 import Fastify from 'fastify'
4 import type { WorkerData, WorkerResponse } from './types.js'
5
6 const factorial: (n: number) => number = n => {
7 if (n === 0) {
8 return 1
9 }
10 return factorial(n - 1) * n
11 }
12
13 const startFastify = async (
14 workerData?: WorkerData
15 ): Promise<WorkerResponse> => {
16 const fastify = Fastify({
17 logger: true
18 })
19
20 fastify.all('/api/echo', request => {
21 return request.body
22 })
23
24 fastify.get<{
25 Params: { number: number }
26 }>('/api/factorial/:number', request => {
27 const { number } = request.params
28 return { number: factorial(number) }
29 })
30
31 try {
32 await fastify.listen({ port: workerData?.port })
33 return {
34 status: true,
35 port: (fastify.server.address() as AddressInfo).port
36 }
37 } catch (err) {
38 fastify.log.error(err)
39 return {
40 status: false,
41 error: err as Error
42 }
43 }
44 }
45
46 class FastifyWorker extends ClusterWorker<WorkerData, WorkerResponse> {
47 public constructor () {
48 super(startFastify)
49 }
50 }
51
52 export const fastifyWorker = new FastifyWorker()