diff --git a/package-lock.json b/package-lock.json index 4f602a8409..78a304854e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "connect-history-api-fallback": "^2.0.0", "express": "^5.2.1", "graceful-fs": "^4.2.11", - "http-proxy-middleware": "^4.0.0", + "http-proxy-middleware": "^4.1.1", "ipaddr.js": "^2.3.0", "launch-editor": "^2.13.2", "open": "^11.0.0", @@ -11147,13 +11147,13 @@ } }, "node_modules/http-proxy-middleware": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-4.0.0.tgz", - "integrity": "sha512-wuHwaUtmC0XzJNHqRp41zXtt5ojpHbusXGhq6781VvnjWUYPu7opmOF3eomGNujT07kEOnHWZyV9UZzKimVCKA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-4.1.1.tgz", + "integrity": "sha512-KX5ZofGXLFXqFAkQoOWZ+rTtaLTut7m0gyL+QzJrdejtIZ+F4bPPDoe7reISg2+v0CAz5OfVwEJEhty7X+e57g==", "license": "MIT", "dependencies": { "debug": "^4.4.3", - "httpxy": "^0.5.1", + "httpxy": "^0.5.3", "is-glob": "^4.0.3", "is-plain-obj": "^4.1.0", "micromatch": "^4.0.8" diff --git a/package.json b/package.json index 67aa272f68..474206acbc 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "connect-history-api-fallback": "^2.0.0", "express": "^5.2.1", "graceful-fs": "^4.2.11", - "http-proxy-middleware": "^4.0.0", + "http-proxy-middleware": "^4.1.1", "ipaddr.js": "^2.3.0", "launch-editor": "^2.13.2", "open": "^11.0.0", diff --git a/test/server/proxy-option.test.js b/test/server/proxy-option.test.js index e75bfed4c0..73ace3de3c 100644 --- a/test/server/proxy-option.test.js +++ b/test/server/proxy-option.test.js @@ -33,6 +33,29 @@ const proxyOptionPathsAsProperties = [ pathRewrite: () => "/index.html", router: () => `http://localhost:${port3}`, }, + { + context: "/send-data", + target: `http://localhost:${port1}`, + pathRewrite: (path, req, res) => { + res.end("data sent from pathRewrite"); + + return path; + }, + }, + { + context: "/async-send-data", + target: `http://localhost:${port1}`, + pathRewrite: async (path, req, res) => { + await new Promise((resolve) => { + setTimeout(() => { + res.end("async data sent from pathRewrite"); + resolve(); + }, 10); + }); + + return path; + }, + }, ]; const proxyOption = [ @@ -252,6 +275,20 @@ describe("proxy option", () => { expect(response.status).toBe(200); expect(response.text).toContain("Hello"); }); + + it("should allow sending a response directly from pathRewrite", async () => { + const response = await req.get("/send-data"); + + expect(response.status).toBe(200); + expect(response.text).toBe("data sent from pathRewrite"); + }); + + it("should wait for an async pathRewrite that sends a response", async () => { + const response = await req.get("/async-send-data"); + + expect(response.status).toBe(200); + expect(response.text).toBe("async data sent from pathRewrite"); + }); }); });