Commit | Line | Data |
---|---|---|
49ac634f JB |
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' | |
7e80208e | 7 | import axios from 'axios' |
49ac634f JB |
8 | import { type WorkerData, type WorkerResponse } from './types.js' |
9 | ||
95e50651 | 10 | class HttpClientWorker extends ThreadWorker<WorkerData, WorkerResponse> { |
49ac634f JB |
11 | public constructor () { |
12 | super({ | |
13 | node_fetch: async (workerData?: WorkerData) => { | |
14 | const response = await nodeFetch( | |
7e80208e | 15 | (workerData as WorkerData).input as URL | NodeFetchRequestInfo, |
49ac634f JB |
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( | |
7e80208e | 25 | (workerData as WorkerData).input as URL | RequestInfo, |
49ac634f JB |
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 | } | |
7e80208e JB |
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 | } | |
49ac634f JB |
42 | } |
43 | }) | |
44 | } | |
45 | } | |
46 | ||
fac9ce96 | 47 | export const httpClientWorker = new HttpClientWorker() |