Skip to content

Commit

Permalink
fix(core): getter function for http base class in api handler (#2344)
Browse files Browse the repository at this point in the history
  • Loading branch information
KensukeTakahara committed Feb 18, 2022
1 parent 47642bf commit e819e1d
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 6 deletions.
10 changes: 10 additions & 0 deletions packages/libs/core/src/handle/api.ts
Expand Up @@ -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;
}
Expand Down
37 changes: 31 additions & 6 deletions packages/libs/core/tests/handle/api.test.ts
Expand Up @@ -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"}
Expand Down

0 comments on commit e819e1d

Please sign in to comment.