feat: add native node.js fetch implementation to http-client example
[poolifier.git] / examples / typescript / http-client / 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 { type WorkerData, type WorkerResponse } from './types.js'
8
9 class FetchWorker extends ThreadWorker<WorkerData, WorkerResponse> {
10 public constructor () {
11 super({
12 node_fetch: async (workerData?: WorkerData) => {
13 const response = await nodeFetch(
14 (workerData as WorkerData).url as URL | NodeFetchRequestInfo,
15 workerData?.init as NodeFetchRequestInit
16 )
17 // The response is not structured-cloneable, so we return the response text body instead.
18 return {
19 text: await response.text()
20 }
21 },
22 fetch: async (workerData?: WorkerData) => {
23 const response = await fetch(
24 (workerData as WorkerData).url as URL | RequestInfo,
25 workerData?.init as RequestInit
26 )
27 // The response is not structured-cloneable, so we return the response text body instead.
28 return {
29 text: await response.text()
30 }
31 }
32 })
33 }
34 }
35
36 const fetchWorker = new FetchWorker()
37
38 export { fetchWorker }