From 43519cf5868c6781f203c07c0b4794a9b6bd4c7e Mon Sep 17 00:00:00 2001 From: JJ Kasper Date: Thu, 13 Apr 2023 23:01:04 -0700 Subject: [PATCH] Move normalizing of query for edge (#48373) Follow-up to https://github.com/vercel/next.js/pull/48370 this just moves the normalizing to the adapter instead of the web-server so it's in a more specific place. --- packages/next/src/server/web-server.ts | 13 ------------- packages/next/src/server/web/adapter.ts | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/packages/next/src/server/web-server.ts b/packages/next/src/server/web-server.ts index a340a49de1f2..68e1de0b046a 100644 --- a/packages/next/src/server/web-server.ts +++ b/packages/next/src/server/web-server.ts @@ -23,7 +23,6 @@ import { isDynamicRoute } from '../shared/lib/router/utils' import { interpolateDynamicPath, normalizeVercelUrl } from './server-utils' import { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex' import { IncrementalCache } from './lib/incremental-cache' -import { NEXT_QUERY_PARAM_PREFIX } from '../lib/constants' interface WebServerOptions extends Options { webServerConfig: { page: string @@ -105,18 +104,6 @@ export default class NextWebServer extends BaseServer { res: BaseNextResponse, parsedUrl: UrlWithParsedQuery ): Promise { - for (const key of Object.keys(parsedUrl.query)) { - const value = parsedUrl.query[key] - - if ( - key !== NEXT_QUERY_PARAM_PREFIX && - key.startsWith(NEXT_QUERY_PARAM_PREFIX) - ) { - const normalizedKey = key.substring(NEXT_QUERY_PARAM_PREFIX.length) - parsedUrl.query[normalizedKey] = value - delete parsedUrl.query[key] - } - } super.run(req, res, parsedUrl) } protected async hasPage(page: string) { diff --git a/packages/next/src/server/web/adapter.ts b/packages/next/src/server/web/adapter.ts index e9e29646dde4..ebf5887fa47c 100644 --- a/packages/next/src/server/web/adapter.ts +++ b/packages/next/src/server/web/adapter.ts @@ -16,6 +16,7 @@ import { NEXT_ROUTER_STATE_TREE, RSC, } from '../../client/components/app-router-headers' +import { NEXT_QUERY_PARAM_PREFIX } from '../../lib/constants' declare const _ENTRIES: any @@ -70,6 +71,23 @@ export async function adapter( nextConfig: params.request.nextConfig, }) + for (const key of requestUrl.searchParams.keys()) { + const value = requestUrl.searchParams.getAll(key) + + if ( + key !== NEXT_QUERY_PARAM_PREFIX && + key.startsWith(NEXT_QUERY_PARAM_PREFIX) + ) { + const normalizedKey = key.substring(NEXT_QUERY_PARAM_PREFIX.length) + requestUrl.searchParams.delete(normalizedKey) + + for (const val of value) { + requestUrl.searchParams.append(normalizedKey, val) + } + requestUrl.searchParams.delete(key) + } + } + // Ensure users only see page requests, never data requests. const buildId = requestUrl.buildId requestUrl.buildId = ''