feat: add HTTP server pool example: express request handler pool
[poolifier.git] / examples / typescript / http-client-pool / src / worker.ts
1 import { ThreadWorker } from 'poolifier'
2 import nodeFetch from 'node-fetch'
3 import {
4 type RequestInfo as NodeFetchRequestInfo,
5 type ResponseInit as NodeFetchRequestInit
6 } from 'node-fetch'
7 import axios from 'axios'
8 import { type WorkerData, type WorkerResponse } from './types.js'
9
10 class HttpClientWorker extends ThreadWorker<WorkerData, WorkerResponse> {
11 public constructor () {
12 super({
13 node_fetch: async (workerData?: WorkerData) => {
14 const response = await nodeFetch(
15 (workerData as WorkerData).input as URL | NodeFetchRequestInfo,
16 workerData?.init as NodeFetchRequestInit
17 )
18 // The response is not structured-cloneable, so we return the response text body instead.
19 return {
20 text: await response.text()
21 }
22 },
23 fetch: async (workerData?: WorkerData) => {
24 const response = await fetch(
25 (workerData as WorkerData).input as URL | RequestInfo,
26 workerData?.init as RequestInit
27 )
28 // The response is not structured-cloneable, so we return the response text body instead.
29 return {
30 text: await response.text()
31 }
32 },
33 axios: async (workerData?: WorkerData) => {
34 const response = await axios({
35 method: 'get',
36 url: (workerData as WorkerData).input as string,
37 ...workerData?.axiosRequestConfig
38 })
39 return {
40 text: response.data
41 }
42 }
43 })
44 }
45 }
46
47 export const httpClientWorker = new HttpClientWorker()