Skip to content

Commit 2e73a7e

Browse files
committed
feat: parse json body correctlly
Signed-off-by: seven <[email protected]>
1 parent 243f8e5 commit 2e73a7e

File tree

4 files changed

+17
-25
lines changed

4 files changed

+17
-25
lines changed

package-lock.json

Lines changed: 6 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,15 @@
5353
"devDependencies": {
5454
"@eslint/js": "^9.12.0",
5555
"@types/express": "^5.0.0",
56-
"express": "^4.21.0",
5756
"@types/jest": "^29.5.13",
5857
"@types/node": "^22.7.4",
5958
"@typescript-eslint/eslint-plugin": "^8.8.0",
6059
"@typescript-eslint/parser": "^8.8.0",
6160
"eslint": "^8.57.1",
6261
"eslint-config-prettier": "^9.1.0",
6362
"eslint-plugin-prettier": "^5.2.1",
63+
"express": "^4.21.0",
64+
"body-parser": "^1.20.3",
6465
"globals": "^15.10.0",
6566
"husky": "^9.1.6",
6667
"jest": "^29.7.0",

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const constructFrameworkContext = (event: Event, context: Context) => {
1111
const request = new ServerlessRequest({
1212
method: event.httpMethod,
1313
headers: event.headers,
14-
body: event.body,
14+
body: Buffer.from(event.body, event.isBase64Encoded ? 'base64' : 'utf8'),
1515
remoteAddress: '',
1616
url: event.path,
1717
isBase64Encoded: event.isBase64Encoded,

src/serverlessRequest.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const HTTPS_PORT = 443;
88
interface ServerlessRequestOptions {
99
method: string;
1010
url: string;
11-
headers: { [key: string]: string };
11+
headers: { [key: string]: string | number };
1212
body: Buffer | string;
1313
remoteAddress: string;
1414
isBase64Encoded: boolean;
@@ -47,18 +47,12 @@ export default class ServerlessRequest extends IncomingMessage {
4747
destroy: NO_OP,
4848
} as unknown as Socket);
4949

50-
// IncomingMessage has a lot of logic for when to lowercase or alias well-known header names,
51-
// so we delegate to that logic here
52-
const headerEntries = Object.entries(headers);
53-
const rawHeaders = new Array(headerEntries.length * 2);
54-
for (let i = 0; i < headerEntries.length; i++) {
55-
rawHeaders[i * 2] = headerEntries[i][0];
56-
rawHeaders[i * 2 + 1] = headerEntries[i][1];
57-
}
58-
59-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
60-
// @ts-expect-error
61-
this._addHeaderLines(rawHeaders, rawHeaders.length);
50+
const combinedHeaders = Object.fromEntries(
51+
Object.entries({
52+
...headers,
53+
'content-length': Buffer.byteLength(body).toString(),
54+
}).map(([key, value]) => [key.toLowerCase(), value]),
55+
);
6256

6357
Object.assign(this, {
6458
ip: remoteAddress,
@@ -69,6 +63,7 @@ export default class ServerlessRequest extends IncomingMessage {
6963
method,
7064
body,
7165
url,
66+
headers: combinedHeaders,
7267
isBase64Encoded,
7368
});
7469

0 commit comments

Comments
 (0)