Skip to content
This repository was archived by the owner on Jan 28, 2025. It is now read-only.

Commit 31eff47

Browse files
fix(core): add getter to event req & res object in default handler. (#2381)
1 parent 07b0685 commit 31eff47

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

packages/libs/core/src/handle/default.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,16 @@ export const handleDefault = async (
118118
if (route.isApi) {
119119
const { page } = route as ApiRoute;
120120
setCustomHeaders(event, routesManifest);
121+
if (!event.req.hasOwnProperty("originalRequest")) {
122+
Object.defineProperty(event.req, "originalRequest", {
123+
get: () => event.req
124+
});
125+
}
126+
if (!event.res.hasOwnProperty("originalResponse")) {
127+
Object.defineProperty(event.res, "originalResponse", {
128+
get: () => event.res
129+
});
130+
}
121131
getPage(page).default(event.req, event.res);
122132
return;
123133
}

packages/libs/core/tests/handle/default.test.ts

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const previewModeCookies = {
1717
describe("Default handler", () => {
1818
let pagesManifest: { [key: string]: string };
1919
let manifest: PageManifest;
20+
let v2HandlerManifest: PageManifest;
2021
let prerenderManifest: PrerenderManifest;
2122
let routesManifest: RoutesManifest;
2223
let getPage: any;
@@ -131,11 +132,25 @@ describe("Default handler", () => {
131132
publicFiles
132133
);
133134
manifest = manifests.pageManifest;
135+
const v2HandlerManifests = await prepareBuildManifests(
136+
{
137+
buildId,
138+
domainRedirects: { "www.example.com": "https://example.com" },
139+
useV2Handler: true
140+
},
141+
{},
142+
routesManifest,
143+
pagesManifest,
144+
prerenderManifest,
145+
publicFiles
146+
);
147+
v2HandlerManifest = v2HandlerManifests.pageManifest;
134148
});
135149

136150
beforeEach(() => {
137151
consoleError = jest.spyOn(console, "error").mockReturnValueOnce();
138152
getPage = jest.fn();
153+
getPage.mockReturnValueOnce({ default: jest.fn() });
139154
});
140155

141156
describe("Public file", () => {
@@ -427,4 +442,51 @@ describe("Default handler", () => {
427442
}
428443
});
429444
});
445+
446+
describe("API", () => {
447+
it.each`
448+
uri | path
449+
${"/api/preview"} | ${"pages/api/preview.js"}
450+
`(
451+
"Routes api request $uri to page $page with NodeNextRequest & NodeNextResponse",
452+
async ({ path, uri }) => {
453+
const event = mockEvent(uri);
454+
const route = await handleDefault(
455+
event,
456+
v2HandlerManifest,
457+
prerenderManifest,
458+
routesManifest,
459+
getPage
460+
);
461+
expect(route).toBeFalsy();
462+
expect(getPage).toHaveBeenCalledWith(path);
463+
expect((event.req as any).originalRequest).toBe(event.req);
464+
expect((event.res as any).originalResponse).toBe(event.res);
465+
}
466+
);
467+
468+
it.each`
469+
uri | path
470+
${"/api/preview"} | ${"pages/api/preview.js"}
471+
`("Routes api request $uri to page $page", async ({ path, uri }) => {
472+
const event: any = mockEvent(uri);
473+
event.req.originalRequest = {};
474+
event.res.originalResponse = {};
475+
const route = await handleDefault(
476+
event,
477+
v2HandlerManifest,
478+
prerenderManifest,
479+
routesManifest,
480+
getPage
481+
);
482+
expect(route).toBeFalsy();
483+
expect(getPage).toHaveBeenCalledWith(path);
484+
expect((event.req as any).originalRequest).toBe(
485+
event.req.originalRequest
486+
);
487+
expect((event.res as any).originalResponse).toBe(
488+
event.res.originalResponse
489+
);
490+
});
491+
});
430492
});

0 commit comments

Comments
 (0)