feat: add native node.js fetch implementation to http-client example
[poolifier.git] / examples / typescript / http-client / src / worker.ts
CommitLineData
49ac634f
JB
1import { ThreadWorker } from 'poolifier'
2import nodeFetch from 'node-fetch'
3import {
4 type RequestInfo as NodeFetchRequestInfo,
5 type ResponseInit as NodeFetchRequestInit
6} from 'node-fetch'
7import { type WorkerData, type WorkerResponse } from './types.js'
8
9class 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
36const fetchWorker = new FetchWorker()
37
38export { fetchWorker }