Skip to content

Commit 70dae88

Browse files
committed
Simplified the shouldCompress check and added base64encoded checks
1 parent b74783e commit 70dae88

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

packages/event-handler/src/rest/middleware/compress.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,14 @@ const shouldCompress = (
104104
(acceptedEncoding.includes(preferredEncoding) ||
105105
acceptedEncoding.includes(COMPRESSION_ENCODING_TYPES.ANY));
106106

107-
if (
108-
!shouldEncode ||
109-
isEncodedOrChunked ||
110-
request.method === 'HEAD' ||
111-
(contentLength && Number(contentLength) < threshold) ||
112-
(cacheControl && CACHE_CONTROL_NO_TRANSFORM_REGEX.test(cacheControl)) ||
113-
!response.body
114-
) {
115-
return false;
116-
}
117-
return true;
107+
return (
108+
shouldEncode &&
109+
!isEncodedOrChunked &&
110+
request.method !== 'HEAD' &&
111+
(!contentLength || Number(contentLength) > threshold) &&
112+
(!cacheControl || !CACHE_CONTROL_NO_TRANSFORM_REGEX.test(cacheControl)) &&
113+
response.body !== null
114+
);
118115
};
119116

120117
export { compress };

packages/event-handler/tests/unit/rest/middleware/compress.test.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ describe('Compress Middleware', () => {
3232
// Assess
3333
expect(result.headers?.['content-encoding']).toBe('gzip');
3434
expect(result.headers?.['content-length']).toBeUndefined();
35+
expect(result.isBase64Encoded).toBe(true);
3536
expect(result.body).toEqual(
3637
gzipSync(JSON.stringify(body)).toString('base64')
3738
);
@@ -58,6 +59,7 @@ describe('Compress Middleware', () => {
5859

5960
// Assess
6061
expect(result.headers?.['content-encoding']).toBeUndefined();
62+
expect(result.isBase64Encoded).toBe(false);
6163
});
6264

6365
it('skips compression for HEAD requests', async () => {
@@ -72,6 +74,7 @@ describe('Compress Middleware', () => {
7274

7375
// Assess
7476
expect(result.headers?.['content-encoding']).toBeUndefined();
77+
expect(result.isBase64Encoded).toBe(false);
7578
});
7679

7780
it('skips compression when already encoded', async () => {
@@ -100,6 +103,7 @@ describe('Compress Middleware', () => {
100103

101104
// Assess
102105
expect(result.headers?.['content-encoding']).toEqual('gzip');
106+
expect(result.isBase64Encoded).toBe(true);
103107
});
104108

105109
it('skips compression when cache-control no-transform is set', async () => {
@@ -124,6 +128,7 @@ describe('Compress Middleware', () => {
124128

125129
// Assess
126130
expect(result.headers?.['content-encoding']).toBeUndefined();
131+
expect(result.isBase64Encoded).toBe(false);
127132
});
128133

129134
it('uses specified encoding when provided', async () => {
@@ -149,21 +154,23 @@ describe('Compress Middleware', () => {
149154

150155
// Assess
151156
expect(result.headers?.['content-encoding']).toBe('deflate');
157+
expect(result.isBase64Encoded).toBe(true);
152158
});
153159

154160
it('does not compress if Accept-Encoding is set to identity', async () => {
155161
// Prepare
156-
const deflateCompressionEvent = createTestEvent('/test', 'GET', {
162+
const noCompressionEvent = createTestEvent('/test', 'GET', {
157163
'Accept-Encoding': 'identity',
158164
});
159165
app.get('/test', async () => {
160166
return body;
161167
});
162168

163169
// Act
164-
const result = await app.resolve(deflateCompressionEvent, context);
170+
const result = await app.resolve(noCompressionEvent, context);
165171

166172
// Assess
167-
expect(result.headers?.['content-encoding']).not.toBeDefined;
173+
expect(result.headers?.['content-encoding']).toBeUndefined();
174+
expect(result.isBase64Encoded).toBe(false);
168175
});
169176
});

0 commit comments

Comments
 (0)