28658797b00c40c2b62b51d853c23eb67de6fe4a
[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 await fastify.listen({ port: workerData?.port })
32 return {
33 status: true,
34 port: (fastify.server.address() as AddressInfo).port
35 }
36 }
37
38 class FastifyWorker extends ClusterWorker<WorkerData, WorkerResponse> {
39 public constructor () {
40 super(startFastify)
41 }
42 }
43
44 export const fastifyWorker = new FastifyWorker()