feat: add axios to http-client TS code example
authorJérôme Benoit <jerome.benoit@sap.com>
Thu, 10 Aug 2023 18:36:21 +0000 (20:36 +0200)
committerJérôme Benoit <jerome.benoit@sap.com>
Thu, 10 Aug 2023 18:36:21 +0000 (20:36 +0200)
reference: #790

Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
examples/typescript/http-client/package.json
examples/typescript/http-client/src/main.ts
examples/typescript/http-client/src/types.ts
examples/typescript/http-client/src/worker.ts

index 04beb8bef18039b09bdb110b576b10d9ebc0a6d0..275308804edce6c67f44ba6c66d5e8842ce37cc0 100644 (file)
@@ -13,7 +13,7 @@
     "build": "pnpm build:clean && tsc",
     "build:clean": "tsc --build --clean",
     "start": "node dist/main.js",
-    "start:httpd-echo": "node dist/httpd-echo.js",
+    "start:httpd-echo": "node httpd-echo.js",
     "test": "echo \"Error: no test specified\" && exit 1"
   },
   "keywords": [],
index a19ed2806adea97750a8ec31e47253a8fb728411..067aa2d23668d8068efa55dbce1fdf570743193a 100644 (file)
@@ -5,11 +5,11 @@ import { type WorkerResponse } from './types.js'
 const parallelism = availableParallelism()
 const requestUrl = 'http://localhost:8080/'
 
-for (const workerFunction of ['node_fetch', 'fetch']) {
+for (const workerFunction of ['node_fetch', 'fetch', 'axios']) {
   const fetchPoolPromises = new Set<Promise<WorkerResponse>>()
   for (let i = 0; i < availableParallelism(); i++) {
     fetchPoolPromises.add(
-      fetchPool.execute({ url: requestUrl }, workerFunction)
+      fetchPool.execute({ input: requestUrl }, workerFunction)
     )
   }
   try {
index e68e7260acbe080b212c7a67e5e53c7a412ff24c..ff0d3262e2d05644669108e2a412489afabb853c 100644 (file)
@@ -3,10 +3,12 @@ import {
   type RequestInfo as NodeFetchRequestInfo,
   type RequestInit as NodeFetchRequestInit
 } from 'node-fetch'
+import { type AxiosRequestConfig } from 'axios'
 
 export interface WorkerData {
-  url: URL | RequestInfo | NodeFetchRequestInfo
+  input: URL | RequestInfo | NodeFetchRequestInfo
   init?: RequestInit | NodeFetchRequestInit
+  axiosRequestConfig?: AxiosRequestConfig
 }
 
 export interface WorkerResponse {
index b12466d276f3cd8d790467b4ccef8963a2a560c3..3e4c6dd5cc62d5a9a4d3d898f078faa35fe19147 100644 (file)
@@ -4,6 +4,7 @@ import {
   type RequestInfo as NodeFetchRequestInfo,
   type ResponseInit as NodeFetchRequestInit
 } from 'node-fetch'
+import axios from 'axios'
 import { type WorkerData, type WorkerResponse } from './types.js'
 
 class HttpClientWorker extends ThreadWorker<WorkerData, WorkerResponse> {
@@ -11,7 +12,7 @@ class HttpClientWorker extends ThreadWorker<WorkerData, WorkerResponse> {
     super({
       node_fetch: async (workerData?: WorkerData) => {
         const response = await nodeFetch(
-          (workerData as WorkerData).url as URL | NodeFetchRequestInfo,
+          (workerData as WorkerData).input as URL | NodeFetchRequestInfo,
           workerData?.init as NodeFetchRequestInit
         )
         // The response is not structured-cloneable, so we return the response text body instead.
@@ -21,13 +22,23 @@ class HttpClientWorker extends ThreadWorker<WorkerData, WorkerResponse> {
       },
       fetch: async (workerData?: WorkerData) => {
         const response = await fetch(
-          (workerData as WorkerData).url as URL | RequestInfo,
+          (workerData as WorkerData).input as URL | RequestInfo,
           workerData?.init as RequestInit
         )
         // The response is not structured-cloneable, so we return the response text body instead.
         return {
           text: await response.text()
         }
+      },
+      axios: async (workerData?: WorkerData) => {
+        const response = await axios({
+          method: 'get',
+          url: (workerData as WorkerData).input as string,
+          ...workerData?.axiosRequestConfig
+        })
+        return {
+          text: response.data
+        }
       }
     })
   }