From 3c9836d96f118ff5748916241bc3871a54247ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Wed, 30 Oct 2024 18:08:19 +0900 Subject: [PATCH] feat!: proxy bypass with WebSocket (#18070) --- .../vite/src/node/server/middlewares/proxy.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/vite/src/node/server/middlewares/proxy.ts b/packages/vite/src/node/server/middlewares/proxy.ts index 810f435cfa84a1..5f7c5b04c975fa 100644 --- a/packages/vite/src/node/server/middlewares/proxy.ts +++ b/packages/vite/src/node/server/middlewares/proxy.ts @@ -24,7 +24,8 @@ export interface ProxyOptions extends HttpProxy.ServerOptions { */ bypass?: ( req: http.IncomingMessage, - res: http.ServerResponse, + /** undefined for WebSocket upgrade requests */ + res: http.ServerResponse | undefined, options: ProxyOptions, ) => void | null | undefined | false | string /** @@ -167,6 +168,19 @@ export function proxyMiddleware( opts.target?.toString().startsWith('ws:') || opts.target?.toString().startsWith('wss:') ) { + if (opts.bypass) { + const bypassResult = opts.bypass(req, undefined, opts) + if (typeof bypassResult === 'string') { + req.url = bypassResult + debug?.(`bypass: ${req.url} -> ${bypassResult}`) + return + } else if (bypassResult === false) { + debug?.(`bypass: ${req.url} -> 404`) + socket.end('HTTP/1.1 404 Not Found\r\n\r\n', '') + return + } + } + if (opts.rewrite) { req.url = opts.rewrite(url) }