diff --git a/packages/libs/core/src/handle/api.ts b/packages/libs/core/src/handle/api.ts index d22b5f3e1d..7e902031d7 100644 --- a/packages/libs/core/src/handle/api.ts +++ b/packages/libs/core/src/handle/api.ts @@ -41,6 +41,16 @@ export const handleApi = async ( if (route.isApi) { const { page } = route as ApiRoute; setCustomHeaders(event, routesManifest); + if (!event.req.hasOwnProperty("originalRequest")) { + Object.defineProperty(event.req, "originalRequest", { + get: () => event.req + }); + } + if (!event.res.hasOwnProperty("originalResponse")) { + Object.defineProperty(event.res, "originalResponse", { + get: () => event.res + }); + } getPage(page).default(event.req, event.res); return; } diff --git a/packages/libs/core/tests/handle/api.test.ts b/packages/libs/core/tests/handle/api.test.ts index 251f9d4718..26c5bc3292 100644 --- a/packages/libs/core/tests/handle/api.test.ts +++ b/packages/libs/core/tests/handle/api.test.ts @@ -118,17 +118,42 @@ describe("Api handler", () => { ${"/rewrite/2"} | ${"pages/api/dynamic/[id].js"} ${"/rewrite-query/3"} | ${"pages/api/static.js"} `("Routes api request $uri to page $page", async ({ uri, page }) => { - const route = await handleApi( - mockEvent(uri), - manifest, - routesManifest, - getPage - ); + const event = mockEvent(uri); + const route = await handleApi(event, manifest, routesManifest, getPage); expect(route).toBeFalsy(); expect(getPage).toHaveBeenCalledWith(page); + expect((event.req as any).originalRequest).toBe(event.req); + expect((event.res as any).originalResponse).toBe(event.res); }); + it.each` + uri | page + ${"/api"} | ${"pages/api/index.js"} + ${"/api/static"} | ${"pages/api/static.js"} + ${"/api/dynamic/1"} | ${"pages/api/dynamic/[id].js"} + ${"/rewrite"} | ${"pages/api/static.js"} + ${"/rewrite/2"} | ${"pages/api/dynamic/[id].js"} + ${"/rewrite-query/3"} | ${"pages/api/static.js"} + `( + "Routes api request $uri to page $page with NodeNextRequest & NodeNextResponse", + async ({ uri, page }) => { + const event: any = mockEvent(uri); + event.req.originalRequest = {}; + event.res.originalResponse = {}; + const route = await handleApi(event, manifest, routesManifest, getPage); + + expect(route).toBeFalsy(); + expect(getPage).toHaveBeenCalledWith(page); + expect((event.req as any).originalRequest).toBe( + (event.req as any).originalRequest + ); + expect((event.res as any).originalResponse).toBe( + (event.res as any).originalResponse + ); + } + ); + it.each` uri ${"/api/notfound"}