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

Commit 57cd668

Browse files
authored
fix(lambda-at-edge): serve HTML pages with no props (i.e static pages) properly on preview mode enabled (#701)
1 parent 06d4edb commit 57cd668

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

packages/libs/lambda-at-edge/src/default-handler.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ const handleOriginRequest = async ({
297297
}
298298
}
299299

300-
const isStaticPage = pages.html.nonDynamic[uri];
300+
const isStaticPage = pages.html.nonDynamic[uri]; // plain page without any props
301301
const isPrerenderedPage = prerenderManifest.routes[uri]; // prerendered pages are also static pages like "pages.html" above, but are defined in the prerender-manifest
302302
const origin = request.origin as CloudFrontOrigin;
303303
const s3Origin = origin.s3 as CloudFrontS3Origin;
@@ -328,7 +328,9 @@ const handleOriginRequest = async ({
328328
s3Origin.domainName = normalisedS3DomainName;
329329

330330
S3Check: if (
331+
// Note: public files and static pages (HTML pages with no props) don't have JS files needed for preview mode, always serve from S3.
331332
isPublicFile ||
333+
isStaticPage ||
332334
(isHTMLPage && !isPreviewRequest) ||
333335
(hasFallback && !isPreviewRequest) ||
334336
(isDataReq && !isPreviewRequest)

packages/libs/lambda-at-edge/tests/default-handler/default-handler.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,39 @@ describe("Lambda@Edge", () => {
224224
expect(decodedBody).toBe("pages/preview.js");
225225
expect(response.status).toBe(200);
226226
});
227+
228+
it("HTML page without any props served from S3 on preview mode", async () => {
229+
const event = createCloudFrontEvent({
230+
uri: `/terms${trailingSlash ? "/" : ""}`,
231+
host: "mydistribution.cloudfront.net",
232+
requestHeaders: {
233+
cookie: [
234+
{
235+
key: "Cookie",
236+
value: "__next_preview_data=abc; __prerender_bypass=def"
237+
}
238+
]
239+
}
240+
});
241+
242+
const result = await handler(event);
243+
244+
const request = result as CloudFrontRequest;
245+
246+
expect(request.origin).toEqual({
247+
s3: {
248+
authMethod: "origin-access-identity",
249+
domainName: "my-bucket.s3.amazonaws.com",
250+
path: "/static-pages",
251+
region: "us-east-1"
252+
}
253+
});
254+
expect(request.uri).toEqual("/terms.html");
255+
expect(request.headers.host[0].key).toEqual("host");
256+
expect(request.headers.host[0].value).toEqual(
257+
"my-bucket.s3.amazonaws.com"
258+
);
259+
});
227260
});
228261

229262
describe("Public files routing", () => {

0 commit comments

Comments
 (0)