Skip to content

Commit 0f6f081

Browse files
committed
fix multivalue query in searchParams for node
1 parent a1992c9 commit 0f6f081

File tree

3 files changed

+26
-14
lines changed

3 files changed

+26
-14
lines changed

packages/open-next/src/overrides/converters/edge.ts

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type {
77
MiddlewareResult,
88
} from "types/open-next";
99
import type { Converter } from "types/overrides";
10+
import { getQueryFromSearchParams } from "./utils.js";
1011

1112
declare global {
1213
// Makes convertTo returns the request instead of fetching it.
@@ -18,18 +19,7 @@ const converter: Converter<InternalEvent, InternalResult | MiddlewareResult> = {
1819
const url = new URL(event.url);
1920

2021
const searchParams = url.searchParams;
21-
const query: Record<string, string | string[]> = {};
22-
for (const [key, value] of searchParams.entries()) {
23-
if (key in query) {
24-
if (Array.isArray(query[key])) {
25-
query[key].push(value);
26-
} else {
27-
query[key] = [query[key], value];
28-
}
29-
} else {
30-
query[key] = value;
31-
}
32-
}
22+
const query = getQueryFromSearchParams(searchParams);
3323
// Transform body into Buffer
3424
const body = await event.arrayBuffer();
3525
const headers: Record<string, string> = {};

packages/open-next/src/overrides/converters/node.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { IncomingMessage } from "node:http";
33
import { parseCookies } from "http/util";
44
import type { InternalResult } from "types/open-next";
55
import type { Converter } from "types/overrides";
6-
import { extractHostFromHeaders } from "./utils";
6+
import { extractHostFromHeaders, getQueryFromSearchParams } from "./utils.js";
77

88
const converter: Converter = {
99
convertFrom: async (req: IncomingMessage) => {
@@ -26,7 +26,7 @@ const converter: Converter = {
2626
.filter(([key]) => key),
2727
);
2828
const url = new URL(req.url!, `http://${extractHostFromHeaders(headers)}`);
29-
const query = Object.fromEntries(url.searchParams.entries());
29+
const query = getQueryFromSearchParams(url.searchParams);
3030
return {
3131
type: "core",
3232
method: req.method ?? "GET",

packages/open-next/src/overrides/converters/utils.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,25 @@ export function extractHostFromHeaders(
2121
): string {
2222
return headers["x-forwarded-host"] ?? headers.host ?? "on";
2323
}
24+
25+
/**
26+
* Get the query object from an URLSearchParams
27+
*
28+
* @param searchParams
29+
* @returns
30+
*/
31+
export function getQueryFromSearchParams(searchParams: URLSearchParams) {
32+
const query: Record<string, string | string[]> = {};
33+
for (const [key, value] of searchParams.entries()) {
34+
if (key in query) {
35+
if (Array.isArray(query[key])) {
36+
query[key].push(value);
37+
} else {
38+
query[key] = [query[key], value];
39+
}
40+
} else {
41+
query[key] = value;
42+
}
43+
}
44+
return query;
45+
}

0 commit comments

Comments
 (0)