diff --git a/.changeset/dirty-rabbits-build.md b/.changeset/dirty-rabbits-build.md new file mode 100644 index 000000000..b0e71d316 --- /dev/null +++ b/.changeset/dirty-rabbits-build.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +perf(converters): Improve performance diff --git a/packages/open-next/src/core/routing/util.ts b/packages/open-next/src/core/routing/util.ts index c27ba0ec8..e1ce7d3a7 100644 --- a/packages/open-next/src/core/routing/util.ts +++ b/packages/open-next/src/core/routing/util.ts @@ -150,6 +150,7 @@ export function convertToQueryString(query: Record) { * @__PURE__ */ export function convertToQuery(querystring: string) { + if (!querystring) return {}; const query = new URLSearchParams(querystring); const queryObject: Record = {}; diff --git a/packages/open-next/src/overrides/converters/aws-apigw-v2.ts b/packages/open-next/src/overrides/converters/aws-apigw-v2.ts index 15cf8199d..af161e9ab 100644 --- a/packages/open-next/src/overrides/converters/aws-apigw-v2.ts +++ b/packages/open-next/src/overrides/converters/aws-apigw-v2.ts @@ -64,8 +64,10 @@ function normalizeAPIGatewayProxyEventV2Headers( headers.cookie = cookies.join("; "); } - for (const [key, value] of Object.entries(rawHeaders || {})) { - headers[key.toLowerCase()] = value!; + if (rawHeaders) { + for (const [key, value] of Object.entries(rawHeaders)) { + headers[key.toLowerCase()] = value!; + } } return headers; diff --git a/packages/open-next/src/overrides/converters/aws-cloudfront.ts b/packages/open-next/src/overrides/converters/aws-cloudfront.ts index 322f0071e..119c707fd 100644 --- a/packages/open-next/src/overrides/converters/aws-cloudfront.ts +++ b/packages/open-next/src/overrides/converters/aws-cloudfront.ts @@ -70,9 +70,10 @@ function normalizeCloudFrontRequestEventHeaders( const headers: Record = {}; for (const [key, values] of Object.entries(rawHeaders)) { + const lowerKey = key.toLowerCase(); for (const { value } of values) { if (value) { - headers[key.toLowerCase()] = value; + headers[lowerKey] = value; } } } diff --git a/packages/open-next/src/overrides/converters/edge.ts b/packages/open-next/src/overrides/converters/edge.ts index af4d6d11d..47b09c7fa 100644 --- a/packages/open-next/src/overrides/converters/edge.ts +++ b/packages/open-next/src/overrides/converters/edge.ts @@ -24,8 +24,6 @@ const converter: Converter = { const searchParams = url.searchParams; const query = getQueryFromSearchParams(searchParams); - // Transform body into Buffer - const body = await event.arrayBuffer(); const headers: Record = {}; event.headers.forEach((value, key) => { headers[key] = value; @@ -34,6 +32,11 @@ const converter: Converter = { const method = event.method; const shouldHaveBody = method !== "GET" && method !== "HEAD"; + // Only read body for methods that should have one + const body = shouldHaveBody + ? Buffer.from(await event.arrayBuffer()) + : undefined; + const cookieHeader = event.headers.get("cookie"); const cookies = cookieHeader ? (cookieParser.parse(cookieHeader) as Record) @@ -44,7 +47,7 @@ const converter: Converter = { method, rawPath, url: event.url, - body: shouldHaveBody ? Buffer.from(body) : undefined, + body, headers, remoteAddress: event.headers.get("x-forwarded-for") ?? "::1", query,