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

Commit ba1d338

Browse files
feat(lambda-at-edge-compat,lambda-at-edge,nextjs-component): disable
manual lambda at edge compression
1 parent 8c9a728 commit ba1d338

File tree

7 files changed

+41
-16
lines changed

7 files changed

+41
-16
lines changed

packages/compat-layers/lambda-at-edge-compat/next-aws-cloudfront.d.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
import { CloudFrontResultResponse, CloudFrontRequest } from "aws-lambda";
22
import { IncomingMessage, ServerResponse } from "http";
33

4-
declare function lambdaAtEdgeCompat(event: {
5-
request: CloudFrontRequest;
6-
}): {
4+
type CompatOptions = {
5+
enableHTTPCompression: boolean;
6+
};
7+
8+
declare function lambdaAtEdgeCompat(
9+
event: {
10+
request: CloudFrontRequest;
11+
},
12+
options: CompatOptions
13+
): {
714
responsePromise: Promise<CloudFrontResultResponse>;
815
req: IncomingMessage;
916
res: ServerResponse;

packages/compat-layers/lambda-at-edge-compat/next-aws-cloudfront.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ const isGzipSupported = (headers) => {
144144
return gz;
145145
};
146146

147-
const handler = (event) => {
147+
const handler = (event, { enableHTTPCompression }) => {
148148
const { request: cfRequest, response: cfResponse = { headers: {} } } = event;
149149

150150
const response = {
@@ -227,7 +227,7 @@ const handler = (event) => {
227227
]);
228228
};
229229

230-
let gz = isGzipSupported(headers);
230+
let shouldGzip = enableHTTPCompression && isGzipSupported(headers);
231231

232232
const responsePromise = new Promise((resolve) => {
233233
res.end = (text) => {
@@ -245,14 +245,14 @@ const handler = (event) => {
245245

246246
if (response.body) {
247247
response.bodyEncoding = "base64";
248-
response.body = gz
248+
response.body = shouldGzip
249249
? zlib.gzipSync(response.body).toString("base64")
250250
: Buffer.from(response.body).toString("base64");
251251
}
252252

253253
response.headers = toCloudFrontHeaders(res.headers, cfResponse.headers);
254254

255-
if (gz) {
255+
if (shouldGzip) {
256256
response.headers["content-encoding"] = [
257257
{ key: "Content-Encoding", value: "gzip" }
258258
];

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
OriginRequestEvent,
99
RoutesManifest
1010
} from "../types";
11-
import { CloudFrontResultResponse, CloudFrontRequest } from "aws-lambda";
11+
import { CloudFrontResultResponse } from "aws-lambda";
1212
import {
1313
createRedirectResponse,
1414
getDomainRedirectPath,
@@ -92,7 +92,9 @@ export const handler = async (
9292

9393
// eslint-disable-next-line
9494
const page = require(`./${pagePath}`);
95-
const { req, res, responsePromise } = cloudFrontCompat(event.Records[0].cf);
95+
const { req, res, responsePromise } = cloudFrontCompat(event.Records[0].cf, {
96+
enableHTTPCompression: buildManifest.enableHTTPCompression
97+
});
9698

9799
page.default(req, res);
98100

packages/libs/lambda-at-edge/src/build.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type BuildOptions = {
3030
logLambdaExecutionTimes?: boolean;
3131
domainRedirects?: { [key: string]: string };
3232
minifyHandlers?: boolean;
33+
enableHTTPCompression?: boolean;
3334
};
3435

3536
const defaultBuildOptions = {
@@ -40,7 +41,8 @@ const defaultBuildOptions = {
4041
useServerlessTraceTarget: false,
4142
logLambdaExecutionTimes: false,
4243
domainRedirects: {},
43-
minifyHandlers: false
44+
minifyHandlers: false,
45+
enableHTTPCompression: true
4446
};
4547

4648
class Builder {
@@ -357,7 +359,8 @@ class Builder {
357359
);
358360
const {
359361
logLambdaExecutionTimes = false,
360-
domainRedirects = {}
362+
domainRedirects = {},
363+
enableHTTPCompression = false
361364
} = this.buildOptions;
362365

363366
this.normalizeDomainRedirects(domainRedirects);
@@ -377,15 +380,17 @@ class Builder {
377380
},
378381
publicFiles: {},
379382
trailingSlash: false,
380-
domainRedirects: domainRedirects
383+
domainRedirects: domainRedirects,
384+
enableHTTPCompression
381385
};
382386

383387
const apiBuildManifest: OriginRequestApiHandlerManifest = {
384388
apis: {
385389
dynamic: {},
386390
nonDynamic: {}
387391
},
388-
domainRedirects: domainRedirects
392+
domainRedirects: domainRedirects,
393+
enableHTTPCompression
389394
};
390395

391396
const ssrPages = defaultBuildManifest.pages.ssr;

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,12 @@ const handleOriginRequest = async ({
375375
log("require JS execution time", tBeforePageRequire, tAfterPageRequire);
376376

377377
const tBeforeSSR = now();
378-
const { req, res, responsePromise } = lambdaAtEdgeCompat(event.Records[0].cf);
378+
const { req, res, responsePromise } = lambdaAtEdgeCompat(
379+
event.Records[0].cf,
380+
{
381+
enableHTTPCompression: manifest.enableHTTPCompression
382+
}
383+
);
379384
try {
380385
// If page is _error.js, set status to 404 so _error.js will render a 404 page
381386
if (pagePath === "pages/_error.js") {
@@ -454,7 +459,10 @@ const handleOriginResponse = async ({
454459
// eslint-disable-next-line
455460
const page = require(`./${pagePath}`);
456461
const { req, res, responsePromise } = lambdaAtEdgeCompat(
457-
event.Records[0].cf
462+
event.Records[0].cf,
463+
{
464+
enableHTTPCompression: manifest.enableHTTPCompression
465+
}
458466
);
459467
const isSSG = !!page.getStaticProps;
460468
const { renderOpts, html } = await page.renderReqToHTML(

packages/libs/lambda-at-edge/types.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export type OriginRequestApiHandlerManifest = {
2121
domainRedirects: {
2222
[key: string]: string;
2323
};
24+
enableHTTPCompression: boolean;
2425
};
2526

2627
export type OriginRequestDefaultHandlerManifest = {
@@ -44,6 +45,7 @@ export type OriginRequestDefaultHandlerManifest = {
4445
[key: string]: string;
4546
};
4647
trailingSlash: boolean;
48+
enableHTTPCompression: boolean;
4749
domainRedirects: {
4850
[key: string]: string;
4951
};

packages/serverless-components/nextjs-component/src/component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,8 @@ class NextjsComponent extends Component {
187187
useServerlessTraceTarget: inputs.useServerlessTraceTarget || false,
188188
logLambdaExecutionTimes: inputs.logLambdaExecutionTimes || false,
189189
domainRedirects: inputs.domainRedirects || {},
190-
minifyHandlers: inputs.minifyHandlers || false
190+
minifyHandlers: inputs.minifyHandlers || false,
191+
enableHTTPCompression: false
191192
}
192193
);
193194

0 commit comments

Comments
 (0)