next.js icon indicating copy to clipboard operation
next.js copied to clipboard

`next/compat/navigation` hooks

Open wyattjoh opened this issue 3 years ago • 2 comments

useRouter

These hooks are designed to be used in components that are imported into both pages/ and app/. During the intermediate phase in the application development lifecycle when developers are transitioning to app/ from pages/, these hooks are designed to be used while incrementally migrating. Users who start new applications from app/ should not used these hooks, and should prefer the non-compat hooks. Users who are not migrating to app/ and instead are using only pages/ can continue to use the old hooks.

Just like the useRouter hook from next/router, this returns the router object. Unlike that hook though, this one will return null if it’s imported in a page from the app/ directory.

import { useRouter } from "next/compat/router";

function ActiveLink({ children, href }) {
  const router = useRouter();

  const handleClick = (e) => {
    e.preventDefault();
    router?.push(href);
  };

  return (
    <a href={href} onClick={handleClick}>
      {children}
    </a>
  );
}

export default ActiveLink;

It’s probably more likely though that developers will want to use the new navigation router, available at next/compat/navigation as it’s been made to be backwards compatible with the pages/ directory. If users need to access search parameters or pathname details, the new navigation hooks such as useSearchParams and usePathname can be used from next/compat/navigation which offer the same type guarantees that the equivalent router.query and router.pathname offered while in pages/.

useSearchParams

Just like the useSearchParams hook from next/navigation, this hook offers a way to access the query parameters from a client component. Unlike the hook from next/navigation, this hook will return null during prerendering if the page doesn't use Server-side Rendering in the pages/ directory. It will always be non-null when the hook is called from the app/ directory.

import { useSearchParams } from "next/compat/navigation";

function Component() {
  const searchParams = useSearchParams();

  return <div>Searching for: {searchParams?.get("query")}</div>;
}

export default Component;

Once components and pages are exclusively using the app/ directory, you can convert these over to the stable hooks with minimal changes.

import { useSearchParams } from "next/navigation";

function Component() {
  const searchParams = useSearchParams();

  return <div>Searching for: {searchParams.get("query") ?? "..."}</div>;
}

export default Component;

usePathname

Just like the usePathname from next/navigation, this hook offers a way to access the pathname from a client component. Unlike the hook from next/navigation, this hook will return null during prerendering if the page is a fallback page or has been automatically statically optimized when accessed from pages/.

import { usePathame } from "next/compat/navigation";

function NavComponent({ href, children }) {
  const pathname = usePathame();

  return (
    <li>
      <a
        href={href}
        style={{
          fontWeight: pathname === href ? "bold" : undefined,
        }}
      >
        {children}
      </a>
    </li>
  );
}

export default NavComponent;

In this example, the usePathname hook is used to control the fontWeight property of the link.

wyattjoh avatar Nov 07 '22 23:11 wyattjoh

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary wyattjoh/next.js wyattjoh/compat-navigation-hooks Change
buildDuration 35.1s 34.5s -680ms
buildDurationCached 14.9s 9.8s -5.1s
nodeModulesSize 95.2 MB 95.2 MB ⚠️ +18.3 kB
nextStartRea..uration (ms) 283ms 280ms -3ms
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary wyattjoh/next.js wyattjoh/compat-navigation-hooks Change
246.HASH.js gzip 181 B 181 B
437-HASH.js gzip 64.5 kB 64.6 kB ⚠️ +77 B
main-app-HASH.js gzip 206 B 206 B
main-HASH.js gzip 79.2 kB 79.2 kB -2 B
webpack-HASH.js gzip 1.7 kB 1.7 kB ⚠️ +1 B
Overall change 146 kB 146 kB ⚠️ +76 B
Legacy Client Bundles (polyfills)
vercel/next.js canary wyattjoh/next.js wyattjoh/compat-navigation-hooks Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages Overall decrease ✓
vercel/next.js canary wyattjoh/next.js wyattjoh/compat-navigation-hooks Change
_app-HASH.js gzip 192 B 192 B
_error-HASH.js gzip 179 B 178 B -1 B
amp-HASH.js gzip 482 B 483 B ⚠️ +1 B
css-HASH.js gzip 803 B 804 B ⚠️ +1 B
dynamic-HASH.js gzip 2.27 kB 2.27 kB -1 B
edge-ssr-HASH.js gzip 259 B 258 B -1 B
head-HASH.js gzip 830 B 828 B -2 B
hooks-HASH.js gzip 850 B 848 B -2 B
image-HASH.js gzip 4.3 kB 4.3 kB
index-HASH.js gzip 253 B 253 B
link-HASH.js gzip 2.68 kB 2.68 kB -3 B
routerDirect..HASH.js gzip 781 B 781 B
script-HASH.js gzip 859 B 856 B -3 B
withRouter-HASH.js gzip 781 B 781 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 15.6 kB 15.6 kB -11 B
Client Build Manifests Overall decrease ✓
vercel/next.js canary wyattjoh/next.js wyattjoh/compat-navigation-hooks Change
_buildManifest.js gzip 485 B 483 B -2 B
Overall change 485 B 483 B -2 B
Rendered Page Sizes Overall increase ⚠️
vercel/next.js canary wyattjoh/next.js wyattjoh/compat-navigation-hooks Change
index.html gzip 489 B 491 B ⚠️ +2 B
link.html gzip 504 B 504 B
withRouter.html gzip 484 B 486 B ⚠️ +2 B
Overall change 1.48 kB 1.48 kB ⚠️ +4 B
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary wyattjoh/next.js wyattjoh/compat-navigation-hooks Change
edge-ssr.js gzip 110 kB 110 kB -7 B
page.js gzip 98.4 kB 98.4 kB ⚠️ +31 B
Overall change 209 kB 209 kB ⚠️ +24 B
Middleware size Overall decrease ✓
vercel/next.js canary wyattjoh/next.js wyattjoh/compat-navigation-hooks Change
middleware-b..fest.js gzip 587 B 586 B -1 B
middleware-r..fest.js gzip 145 B 144 B -1 B
middleware.js gzip 27.1 kB 27.1 kB
edge-runtime..pack.js gzip 1.83 kB 1.83 kB
Overall change 29.7 kB 29.7 kB -2 B

Diffs

Diff for page.js

Diff too large to display

Diff for middleware-b..-manifest.js
@@ -7,81 +7,81 @@ self.__BUILD_MANIFEST = {
     "static/BUILD_ID/_ssgManifest.js"
   ],
   rootMainFiles: [
-    "static/chunks/webpack-778ee737b42dbd09.js",
-    "static/chunks/437-e60e3e0e800f0f8f.js",
-    "static/chunks/main-app-12a4424998444d69.js"
+    "static/chunks/webpack-078d588fd47873c4.js",
+    "static/chunks/745-add49b9191f2c039.js",
+    "static/chunks/main-app-813e7aa300296517.js"
   ],
   pages: {
     "/": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/index-72f4ed6964652f6a.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/index-a1c4d9d8497dbefb.js"
     ],
     "/_app": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/_app-02fdba2e11c62c3b.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/_app-b68f71a961b48916.js"
     ],
     "/_error": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/_error-c6d6c7c386122218.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/_error-a22ef5f48ba8184b.js"
     ],
     "/amp": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/amp-b62e7c28809c13e0.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/amp-eaaa44ffdc03cc2c.js"
     ],
     "/css": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
       "static/css/94fdbc56eafa2039.css",
-      "static/chunks/pages/css-860762b9808f5e42.js"
+      "static/chunks/pages/css-ce50591629177489.js"
     ],
     "/dynamic": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/dynamic-1800dc9579c69237.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/dynamic-30671cb91fe2de93.js"
     ],
     "/edge-ssr": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/edge-ssr-a57e88de1ff426bd.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/edge-ssr-18640e2c6cb99ab4.js"
     ],
     "/head": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/head-b5894c626904a778.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/head-f756eefe15b9eed2.js"
     ],
     "/hooks": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/hooks-874b5779f127e436.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/hooks-74323ca92508884f.js"
     ],
     "/image": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/image-c8ce7f4627af8111.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/image-01819042682fbdad.js"
     ],
     "/link": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/link-64f5c14f89f65607.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/link-2dd5f16503707acd.js"
     ],
     "/routerDirect": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/routerDirect-0be908911bf83c00.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/routerDirect-cdbb1d3e934b20a6.js"
     ],
     "/script": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/script-fa22c9b29b4b53ec.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/script-58920c0195960d69.js"
     ],
     "/withRouter": [
-      "static/chunks/webpack-778ee737b42dbd09.js",
-      "static/chunks/main-80a9e340c7a74a26.js",
-      "static/chunks/pages/withRouter-9bdea6c06adf2771.js"
+      "static/chunks/webpack-078d588fd47873c4.js",
+      "static/chunks/main-6d3f8866704e67bd.js",
+      "static/chunks/pages/withRouter-7121e5a8488cd783.js"
     ]
   },
   ampFirstPages: []
Diff for middleware-r..-manifest.js
@@ -1,6 +1,6 @@
 self.__REACT_LOADABLE_MANIFEST = {
   "dynamic.js -> ../components/hello": {
-    id: 1246,
-    files: ["static/chunks/246.a0afad3905ddc3ff.js"]
+    id: 7363,
+    files: ["static/chunks/363.ab0825baf290f32b.js"]
   }
 };
Diff for middleware.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [826],
   {
-    /***/ 1675: /***/ (
+    /***/ 5653: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -14,7 +14,7 @@
       __webpack_require__.d(__webpack_exports__, {
         default: () =>
           /* binding */ next_middleware_loaderabsolutePagePath_private_next_root_dir_2Fmiddleware_js_page_2Fmiddleware_rootDir_2Ftmp_2Fnext_stats_2Fstats_app_matchers_
-      }); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/error.js
+      }); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/error.js
 
       class PageSignatureError extends Error {
         constructor({ page }) {
@@ -41,7 +41,7 @@
   Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent
   `);
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/utils.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/utils.js
 
       //# sourceMappingURL=error.js.map
       function fromNodeHeaders(object) {
@@ -157,7 +157,7 @@
             }
           );
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/fetch-event.js
 
       //# sourceMappingURL=utils.js.map
       const responseSymbol = Symbol("response");
@@ -203,7 +203,7 @@
             page: this.sourcePage
           });
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js
 
       //# sourceMappingURL=fetch-event.js.map
       function detectDomainLocale(domainItems, hostname, detectedLocale) {
@@ -232,7 +232,7 @@
           }
         }
         return domainItem;
-      } //# sourceMappingURL=detect-domain-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js
+      } //# sourceMappingURL=detect-domain-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js
 
       /**
        * Removes the trailing slash for a given route or page path. Preserves the
@@ -242,7 +242,7 @@
        *   - `/` -> `/`
        */ function removeTrailingSlash(route) {
         return route.replace(/\/$/, "") || "/";
-      } //# sourceMappingURL=remove-trailing-slash.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js
+      } //# sourceMappingURL=remove-trailing-slash.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js
 
       /**
        * Given a path this function will find the pathname, query and hash and return
@@ -270,7 +270,7 @@
           query: "",
           hash: ""
         };
-      } //# sourceMappingURL=parse-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js
+      } //# sourceMappingURL=parse-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js
 
       /**
        * Adds the provided prefix to the given path. It first ensures that the path
@@ -281,7 +281,7 @@
         }
         const { pathname, query, hash } = parsePath(path);
         return `${prefix}${pathname}${query}${hash}`;
-      } //# sourceMappingURL=add-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js
+      } //# sourceMappingURL=add-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js
 
       /**
        * Similarly to `addPathPrefix`, this function adds a suffix at the end on the
@@ -293,7 +293,7 @@
         }
         const { pathname, query, hash } = parsePath(path);
         return `${pathname}${suffix}${query}${hash}`;
-      } //# sourceMappingURL=add-path-suffix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js
+      } //# sourceMappingURL=add-path-suffix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js
 
       /**
        * Checks if a given path starts with a given prefix. It ensures it matches
@@ -307,7 +307,7 @@
         }
         const { pathname } = parsePath(path);
         return pathname === prefix || pathname.startsWith(prefix + "/");
-      } //# sourceMappingURL=path-has-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js
+      } //# sourceMappingURL=path-has-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js
 
       /**
        * For a given path and a locale, if the locale is given, it will prefix the
@@ -324,7 +324,7 @@
           return addPathPrefix(path, `/${locale}`);
         }
         return path;
-      } //# sourceMappingURL=add-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js
+      } //# sourceMappingURL=add-locale.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js
 
       function formatNextPathnameInfo(info) {
         let pathname = addLocale(
@@ -348,7 +348,7 @@
             ? addPathSuffix(pathname, "/")
             : pathname
           : removeTrailingSlash(pathname);
-      } //# sourceMappingURL=format-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/get-hostname.js
+      } //# sourceMappingURL=format-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/get-hostname.js
 
       /**
        * Takes an object with a hostname property (like a parsed URL) and some
@@ -363,7 +363,7 @@
           parsed.hostname) == null
           ? void 0
           : ref.split(":")[0].toLowerCase();
-      } //# sourceMappingURL=get-hostname.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js
+      } //# sourceMappingURL=get-hostname.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js
 
       /**
        * For a pathname that may include a locale from a list of locales, it
@@ -393,7 +393,7 @@
           pathname,
           detectedLocale
         };
-      } //# sourceMappingURL=normalize-locale-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js
+      } //# sourceMappingURL=normalize-locale-path.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js
 
       /**
        * Given a path and a prefix it will remove the prefix when it exists in the
@@ -409,7 +409,7 @@
             : `/${withoutPrefix}`;
         }
         return path;
-      } //# sourceMappingURL=remove-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js
+      } //# sourceMappingURL=remove-path-prefix.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js
 
       function getNextPathnameInfo(pathname, options) {
         var _nextConfig;
@@ -446,7 +446,7 @@
             info.pathname;
         }
         return info;
-      } //# sourceMappingURL=get-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/next-url.js
+      } //# sourceMappingURL=get-next-pathname-info.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/next-url.js
 
       const REGEX_LOCALHOST_HOSTNAME = /(?!^https?:\/\/)(127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|::1|localhost)/;
       function parseURL(url, base) {
@@ -655,7 +655,7 @@
         clone() {
           return new NextURL(String(this), this[Internal].options);
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/serialize.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/serialize.js
 
       //# sourceMappingURL=next-url.js.map
       const SAME_SITE = ["strict", "lax", "none"];
@@ -739,7 +739,7 @@
           })
         };
         return compact(cookie);
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/request-cookies.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/request-cookies.js
 
       //# sourceMappingURL=serialize.js.map
       /**
@@ -832,7 +832,7 @@
             Object.fromEntries(this._parsed)
           )}`;
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/response-cookies.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/response-cookies.js
 
       //# sourceMappingURL=request-cookies.js.map
       function replace(bag, headers) {
@@ -927,7 +927,7 @@
             Object.fromEntries(this._parsed)
           )}`;
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/index.js // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/request.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/cookies/index.js // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/request.js
 
       //# sourceMappingURL=response-cookies.js.map
       //# sourceMappingURL=index.js.map
@@ -1002,7 +1002,7 @@
         get url() {
           return this[INTERNALS].url.toString();
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/response.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/spec-extension/response.js
 
       //# sourceMappingURL=request.js.map
       const response_INTERNALS = Symbol("internal response");
@@ -1102,7 +1102,7 @@
             headers
           });
         }
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/relativize-url.js
 
       //# sourceMappingURL=response.js.map
       /**
@@ -1116,7 +1116,7 @@
         return `${relative.protocol}//${relative.host}` === origin
           ? relative.toString().replace(origin, "")
           : relative.toString();
-      } //# sourceMappingURL=relativize-url.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/internal-utils.js
+      } //# sourceMappingURL=relativize-url.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/internal-utils.js
 
       const INTERNAL_QUERY_NAMES = [
         "__nextFallback",
@@ -1140,7 +1140,7 @@
           }
         }
         return searchParams;
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js
 
       //# sourceMappingURL=internal-utils.js.map
       // remove (name) from pathname as it's not considered for routing
@@ -1164,7 +1164,7 @@
       }
       function normalizeRscPath(pathname, enabled) {
         return enabled ? pathname.replace(/\.rsc($|\?)/, "") : pathname;
-      } //# sourceMappingURL=app-paths.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/client/components/app-router-headers.js
+      } //# sourceMappingURL=app-paths.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/client/components/app-router-headers.js
 
       const RSC = "RSC";
       const NEXT_ROUTER_STATE_TREE = "Next-Router-State-Tree";
@@ -1175,7 +1175,7 @@
         [RSC],
         [NEXT_ROUTER_STATE_TREE],
         [NEXT_ROUTER_PREFETCH]
-      ]; //# sourceMappingURL=app-router-headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/adapter.js
+      ]; //# sourceMappingURL=app-router-headers.js.map // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/esm/server/web/adapter.js
 
       class NextRequestHint extends NextRequest {
         constructor(params) {
@@ -1376,12 +1376,12 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           enumerable: false,
           configurable: false
         });
-      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fmiddleware.js&page=%2Fmiddleware&rootDir=%2Ftmp%2Fnext-stats%2Fstats-app&matchers=!
+      } // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_biqbaboplfbrettd7655fr4n2y/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fmiddleware.js&page=%2Fmiddleware&rootDir=%2Ftmp%2Fnext-stats%2Fstats-app&matchers=!
 
       //# sourceMappingURL=adapter.js.map
       enhanceGlobals();
 
-      var mod = __webpack_require__(1085);
+      var mod = __webpack_require__(8775);
       var handler = mod.middleware || mod.default;
 
       if (typeof handler !== "function") {
@@ -1403,7 +1403,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 1085: /***/ (
+    /***/ 8775: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -1415,7 +1415,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         /* harmony export */
       });
       /* harmony import */ var next_server__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
-        8352
+        9541
       );
       /* harmony import */ var next_server__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(
         next_server__WEBPACK_IMPORTED_MODULE_0__
@@ -1428,7 +1428,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 4989: /***/ (__unused_webpack_module, exports) => {
+    /***/ 8239: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1448,7 +1448,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 1962: /***/ (__unused_webpack_module, exports) => {
+    /***/ 7034: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1486,7 +1486,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 6450: /***/ (__unused_webpack_module, exports) => {
+    /***/ 4375: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1518,15 +1518,19 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 12: /***/ (__unused_webpack_module, exports, __webpack_require__) => {
+    /***/ 9312: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true
       });
       exports.addLocale = addLocale;
-      var _addPathPrefix = __webpack_require__(3120);
-      var _pathHasPrefix = __webpack_require__(3245);
+      var _addPathPrefix = __webpack_require__(623);
+      var _pathHasPrefix = __webpack_require__(3002);
       function addLocale(path, locale, defaultLocale, ignorePrefix) {
         if (
           locale &&
@@ -1546,7 +1550,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 3120: /***/ (
+    /***/ 623: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1557,7 +1561,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.addPathPrefix = addPathPrefix;
-      var _parsePath = __webpack_require__(7718);
+      var _parsePath = __webpack_require__(5655);
       function addPathPrefix(path, prefix) {
         if (!path.startsWith("/") || !prefix) {
           return path;
@@ -1569,7 +1573,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 5839: /***/ (
+    /***/ 7928: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1580,7 +1584,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.addPathSuffix = addPathSuffix;
-      var _parsePath = __webpack_require__(7718);
+      var _parsePath = __webpack_require__(5655);
       function addPathSuffix(path, suffix) {
         if (!path.startsWith("/") || !suffix) {
           return path;
@@ -1592,7 +1596,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 9364: /***/ (
+    /***/ 3580: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1603,10 +1607,10 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.formatNextPathnameInfo = formatNextPathnameInfo;
-      var _removeTrailingSlash = __webpack_require__(9944);
-      var _addPathPrefix = __webpack_require__(3120);
-      var _addPathSuffix = __webpack_require__(5839);
-      var _addLocale = __webpack_require__(12);
+      var _removeTrailingSlash = __webpack_require__(7088);
+      var _addPathPrefix = __webpack_require__(623);
+      var _addPathSuffix = __webpack_require__(7928);
+      var _addLocale = __webpack_require__(9312);
       function formatNextPathnameInfo(info) {
         let pathname = (0, _addLocale).addLocale(
           info.pathname,
@@ -1637,7 +1641,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 9551: /***/ (
+    /***/ 1547: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1648,9 +1652,9 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.getNextPathnameInfo = getNextPathnameInfo;
-      var _normalizeLocalePath = __webpack_require__(6450);
-      var _removePathPrefix = __webpack_require__(4933);
-      var _pathHasPrefix = __webpack_require__(3245);
+      var _normalizeLocalePath = __webpack_require__(4375);
+      var _removePathPrefix = __webpack_require__(5620);
+      var _pathHasPrefix = __webpack_require__(3002);
       function getNextPathnameInfo(pathname, options) {
         var _nextConfig;
         const { basePath, i18n, trailingSlash } =
@@ -1700,7 +1704,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 7718: /***/ (__unused_webpack_module, exports) => {
+    /***/ 5655: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1734,7 +1738,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 3245: /***/ (
+    /***/ 3002: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1745,7 +1749,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.pathHasPrefix = pathHasPrefix;
-      var _parsePath = __webpack_require__(7718);
+      var _parsePath = __webpack_require__(5655);
       function pathHasPrefix(path, prefix) {
         if (typeof path !== "string") {
           return false;
@@ -1757,7 +1761,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 4933: /***/ (
+    /***/ 5620: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -1768,7 +1772,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       });
       exports.removePathPrefix = removePathPrefix;
-      var _pathHasPrefix = __webpack_require__(3245);
+      var _pathHasPrefix = __webpack_require__(3002);
       function removePathPrefix(path, prefix) {
         if ((0, _pathHasPrefix).pathHasPrefix(path, prefix)) {
           const withoutPrefix = path.slice(prefix.length);
@@ -1782,7 +1786,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 9944: /***/ (__unused_webpack_module, exports) => {
+    /***/ 7088: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -1796,7 +1800,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 6166: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6204: /***/ (module, exports, __webpack_require__) => {
       var __dirname = "/";
       var __WEBPACK_AMD_DEFINE_RESULT__;
       (() => {
@@ -2638,7 +2642,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 4524: /***/ (__unused_webpack_module, exports) => {
+    /***/ 8666: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -2679,7 +2683,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 3062: /***/ (
+    /***/ 4901: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -2689,10 +2693,10 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       Object.defineProperty(exports, "__esModule", {
         value: true
       });
-      var _detectDomainLocale = __webpack_require__(1962);
-      var _formatNextPathnameInfo = __webpack_require__(9364);
-      var _getHostname = __webpack_require__(4989);
-      var _getNextPathnameInfo = __webpack_require__(9551);
+      var _detectDomainLocale = __webpack_require__(7034);
+      var _formatNextPathnameInfo = __webpack_require__(3580);
+      var _getHostname = __webpack_require__(8239);
+      var _getNextPathnameInfo = __webpack_require__(1547);
       const REGEX_LOCALHOST_HOSTNAME = /(?!^https?:\/\/)(127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|::1|localhost)/;
       function parseURL(url, base) {
         return new URL(
@@ -2912,7 +2916,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 6915: /***/ (
+    /***/ 4580: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -2934,15 +2938,15 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
           return _responseCookies.ResponseCookies;
         }
       });
-      var _requestCookies = __webpack_require__(6079);
-      var _responseCookies = __webpack_require__(9442);
+      var _requestCookies = __webpack_require__(7205);
+      var _responseCookies = __webpack_require__(9618);
 
       //# sourceMappingURL=index.js.map
 
       /***/
     },
 
-    /***/ 6079: /***/ (
+    /***/ 7205: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -2952,7 +2956,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       Object.defineProperty(exports, "__esModule", {
         value: true
       });
-      var _serialize = __webpack_require__(8213);
+      var _serialize = __webpack_require__(8477);
       class RequestCookies {
         _parsed = new Map();
         constructor(requestHeaders) {
@@ -3049,7 +3053,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 9442: /***/ (
+    /***/ 9618: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -3059,7 +3063,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       Object.defineProperty(exports, "__esModule", {
         value: true
       });
-      var _serialize = __webpack_require__(8213);
+      var _serialize = __webpack_require__(8477);
       function replace(bag, headers) {
         headers.delete("set-cookie");
         for (const [, value] of bag) {
@@ -3156,7 +3160,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 8213: /***/ (__unused_webpack_module, exports) => {
+    /***/ 8477: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -3249,7 +3253,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 5829: /***/ (
+    /***/ 5985: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -3261,10 +3265,10 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
         value: true
       };
       __webpack_unused_export__ = void 0;
-      var _nextUrl = __webpack_require__(3062);
-      var _utils = __webpack_require__(88);
-      var _error = __webpack_require__(4524);
-      var _cookies = __webpack_require__(6915);
+      var _nextUrl = __webpack_require__(4901);
+      var _utils = __webpack_require__(30);
+      var _error = __webpack_require__(8666);
+      var _cookies = __webpack_require__(4580);
       const INTERNALS = Symbol("internal request");
       __webpack_unused_export__ = INTERNALS;
       class NextRequest extends Request {
@@ -3345,7 +3349,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 5277: /***/ (
+    /***/ 5165: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -3356,9 +3360,9 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       __webpack_unused_export__ = {
         value: true
       };
-      var _nextUrl = __webpack_require__(3062);
-      var _utils = __webpack_require__(88);
-      var _cookies = __webpack_require__(6915);
+      var _nextUrl = __webpack_require__(4901);
+      var _utils = __webpack_require__(30);
+      var _cookies = __webpack_require__(4580);
       const INTERNALS = Symbol("internal response");
       const REDIRECTS = new Set([301, 302, 303, 307, 308]);
       function handleMiddlewareField(init, headers) {
@@ -3467,7 +3471,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 7873: /***/ (
+    /***/ 9132: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -3481,7 +3485,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       __webpack_unused_export__ = isBot;
       exports.Nf = userAgentFromString;
       exports.WE = userAgent;
-      var _uaParserJs = _interopRequireDefault(__webpack_require__(6166));
+      var _uaParserJs = _interopRequireDefault(__webpack_require__(6204));
       function _interopRequireDefault(obj) {
         return obj && obj.__esModule
           ? obj
@@ -3509,7 +3513,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 88: /***/ (__unused_webpack_module, exports) => {
+    /***/ 30: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -3626,14 +3630,14 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
       /***/
     },
 
-    /***/ 8352: /***/ (module, exports, __webpack_require__) => {
+    /***/ 9541: /***/ (module, exports, __webpack_require__) => {
       const serverExports = {
-        NextRequest: __webpack_require__(5829) /* .NextRequest */.Im,
-        NextResponse: __webpack_require__(5277) /* .NextResponse */.x,
+        NextRequest: __webpack_require__(5985) /* .NextRequest */.Im,
+        NextResponse: __webpack_require__(5165) /* .NextResponse */.x,
         userAgentFromString: __webpack_require__(
-          7873
+          9132
         ) /* .userAgentFromString */.Nf,
-        userAgent: __webpack_require__(7873) /* .userAgent */.WE
+        userAgent: __webpack_require__(9132) /* .userAgent */.WE
       };
 
       if (typeof URLPattern !== "undefined") {
@@ -3659,7 +3663,7 @@ Learn More: https://nextjs.org/docs/messages/node-module-in-edge-runtime`;
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = moduleId =>
       __webpack_require__((__webpack_require__.s = moduleId));
-    /******/ var __webpack_exports__ = __webpack_exec__(1675);
+    /******/ var __webpack_exports__ = __webpack_exec__(5653);
     /******/ (_ENTRIES =
       typeof _ENTRIES === "undefined"
         ? {}
Diff for edge-ssr.js

Diff too large to display

Diff for _buildManifest.js
@@ -1,28 +1,28 @@
 self.__BUILD_MANIFEST = {
   __rewrites: { beforeFiles: [], afterFiles: [], fallback: [] },
-  "/": ["static\u002Fchunks\u002Fpages\u002Findex-72f4ed6964652f6a.js"],
-  "/_error": ["static\u002Fchunks\u002Fpages\u002F_error-c6d6c7c386122218.js"],
-  "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-b62e7c28809c13e0.js"],
+  "/": ["static\u002Fchunks\u002Fpages\u002Findex-a1c4d9d8497dbefb.js"],
+  "/_error": ["static\u002Fchunks\u002Fpages\u002F_error-a22ef5f48ba8184b.js"],
+  "/amp": ["static\u002Fchunks\u002Fpages\u002Famp-eaaa44ffdc03cc2c.js"],
   "/css": [
     "static\u002Fcss\u002F94fdbc56eafa2039.css",
-    "static\u002Fchunks\u002Fpages\u002Fcss-860762b9808f5e42.js"
+    "static\u002Fchunks\u002Fpages\u002Fcss-ce50591629177489.js"
   ],
   "/dynamic": [
-    "static\u002Fchunks\u002Fpages\u002Fdynamic-1800dc9579c69237.js"
+    "static\u002Fchunks\u002Fpages\u002Fdynamic-30671cb91fe2de93.js"
   ],
   "/edge-ssr": [
-    "static\u002Fchunks\u002Fpages\u002Fedge-ssr-a57e88de1ff426bd.js"
+    "static\u002Fchunks\u002Fpages\u002Fedge-ssr-18640e2c6cb99ab4.js"
   ],
-  "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-b5894c626904a778.js"],
-  "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-874b5779f127e436.js"],
-  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-c8ce7f4627af8111.js"],
-  "/link": ["static\u002Fchunks\u002Fpages\u002Flink-64f5c14f89f65607.js"],
+  "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-f756eefe15b9eed2.js"],
+  "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-74323ca92508884f.js"],
+  "/image": ["static\u002Fchunks\u002Fpages\u002Fimage-01819042682fbdad.js"],
+  "/link": ["static\u002Fchunks\u002Fpages\u002Flink-2dd5f16503707acd.js"],
   "/routerDirect": [
-    "static\u002Fchunks\u002Fpages\u002FrouterDirect-0be908911bf83c00.js"
+    "static\u002Fchunks\u002Fpages\u002FrouterDirect-cdbb1d3e934b20a6.js"
   ],
-  "/script": ["static\u002Fchunks\u002Fpages\u002Fscript-fa22c9b29b4b53ec.js"],
+  "/script": ["static\u002Fchunks\u002Fpages\u002Fscript-58920c0195960d69.js"],
   "/withRouter": [
-    "static\u002Fchunks\u002Fpages\u002FwithRouter-9bdea6c06adf2771.js"
+    "static\u002Fchunks\u002Fpages\u002FwithRouter-7121e5a8488cd783.js"
   ],
   sortedPages: [
     "\u002F",
Diff for _app-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [888],
   {
-    /***/ 3115: /***/ function(
+    /***/ 1113: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/_app",
         function() {
-          return __webpack_require__(5791);
+          return __webpack_require__(9203);
         }
       ]);
       if (false) {
@@ -24,7 +24,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [179], function() {
-      return __webpack_exec__(3115), __webpack_exec__(8995);
+      return __webpack_exec__(1113), __webpack_exec__(2830);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for _error-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [820],
   {
-    /***/ 5374: /***/ function(
+    /***/ 3363: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/_error",
         function() {
-          return __webpack_require__(9437);
+          return __webpack_require__(169);
         }
       ]);
       if (false) {
@@ -24,7 +24,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function() {
-      return __webpack_exec__(5374);
+      return __webpack_exec__(3363);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for amp-HASH.js
@@ -1,17 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [216],
   {
-    /***/ 8510: /***/ function(
+    /***/ 8753: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(6146);
+      module.exports = __webpack_require__(893);
 
       /***/
     },
 
-    /***/ 7010: /***/ function(
+    /***/ 5348: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -19,7 +19,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/amp",
         function() {
-          return __webpack_require__(2725);
+          return __webpack_require__(1542);
         }
       ]);
       if (false) {
@@ -28,7 +28,7 @@
       /***/
     },
 
-    /***/ 6146: /***/ function(module, exports, __webpack_require__) {
+    /***/ 893: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -37,9 +37,9 @@
       exports.useAmp = useAmp;
       var _interop_require_default = __webpack_require__(1322) /* ["default"] */
         .Z;
-      var _react = _interop_require_default(__webpack_require__(2947));
-      var _ampContext = __webpack_require__(7298);
-      var _ampMode = __webpack_require__(3798);
+      var _react = _interop_require_default(__webpack_require__(465));
+      var _ampContext = __webpack_require__(2218);
+      var _ampMode = __webpack_require__(3734);
       function useAmp() {
         // Don't assign the context value to a variable to save bytes
         return (0, _ampMode).isInAmpMode(
@@ -61,7 +61,7 @@
       /***/
     },
 
-    /***/ 2725: /***/ function(
+    /***/ 1542: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -78,7 +78,7 @@
         /* harmony export */
       });
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
-        8510
+        8753
       );
       /* harmony import */ var next_amp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(
         next_amp__WEBPACK_IMPORTED_MODULE_0__
@@ -102,7 +102,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function() {
-      return __webpack_exec__(7010);
+      return __webpack_exec__(5348);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for css-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [706],
   {
-    /***/ 860: /***/ function(
+    /***/ 6437: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/css",
         function() {
-          return __webpack_require__(2998);
+          return __webpack_require__(5892);
         }
       ]);
       if (false) {
@@ -18,14 +18,14 @@
       /***/
     },
 
-    /***/ 5189: /***/ function(module) {
+    /***/ 2501: /***/ function(module) {
       // extracted by mini-css-extract-plugin
       module.exports = { helloWorld: "css_helloWorld__qqNwY" };
 
       /***/
     },
 
-    /***/ 2998: /***/ function(
+    /***/ 5892: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -33,10 +33,10 @@
       "use strict";
       __webpack_require__.r(__webpack_exports__);
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
-        3268
+        9701
       );
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
-        5189
+        2501
       );
       /* harmony import */ var _css_module_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/ __webpack_require__.n(
         _css_module_css__WEBPACK_IMPORTED_MODULE_1__
@@ -56,7 +56,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function(
+    /***/ 1963: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -71,7 +71,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -106,7 +106,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function(
+    /***/ 9701: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -114,7 +114,7 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
@@ -127,7 +127,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function() {
-      return __webpack_exec__(860);
+      return __webpack_exec__(6437);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for dynamic-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [739],
   {
-    /***/ 3995: /***/ function(
+    /***/ 7753: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/dynamic",
         function() {
-          return __webpack_require__(9780);
+          return __webpack_require__(685);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 3685: /***/ function(
+    /***/ 3831: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -32,8 +32,8 @@
       exports.suspense = suspense;
       var _interop_require_default = __webpack_require__(1322) /* ["default"] */
         .Z;
-      var _react = _interop_require_default(__webpack_require__(2947));
-      var _noSsrError = __webpack_require__(8763);
+      var _react = _interop_require_default(__webpack_require__(465));
+      var _noSsrError = __webpack_require__(3298);
       function NoSSR(param) {
         let { children } = param;
         if (false) {
@@ -49,7 +49,7 @@
       /***/
     },
 
-    /***/ 4648: /***/ function(module, exports, __webpack_require__) {
+    /***/ 9809: /***/ function(module, exports, __webpack_require__) {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -63,9 +63,9 @@
       var _interop_require_wildcard = __webpack_require__(
         6687
       ) /* ["default"] */.Z;
-      var _react = _interop_require_wildcard(__webpack_require__(2947));
-      var _loadable = _interop_require_default(__webpack_require__(7007));
-      var _dynamicNoSsr = _interop_require_default(__webpack_require__(3685));
+      var _react = _interop_require_wildcard(__webpack_require__(465));
+      var _loadable = _interop_require_default(__webpack_require__(7936));
+      var _dynamicNoSsr = _interop_require_default(__webpack_require__(3831));
       function dynamic(dynamicOptions, options) {
         let loadableFn = _loadable.default;
         let loadableOptions = {
@@ -170,7 +170,7 @@
       /***/
     },
 
-    /***/ 1446: /***/ function(
+    /***/ 9851: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -183,7 +183,7 @@
       exports.LoadableContext = void 0;
       var _interop_require_default = __webpack_require__(1322) /* ["default"] */
         .Z;
-      var _react = _interop_require_default(__webpack_require__(2947));
+      var _react = _interop_require_default(__webpack_require__(465));
       const LoadableContext = _react.default.createContext(null);
       exports.LoadableContext = LoadableContext;
       if (false) {
@@ -192,7 +192,7 @@
       /***/
     },
 
-    /***/ 7007: /***/ function(
+    /***/ 7936: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -206,8 +206,8 @@
       var _extends = __webpack_require__(5321) /* ["default"] */.Z;
       var _interop_require_default = __webpack_require__(1322) /* ["default"] */
         .Z;
-      var _react = _interop_require_default(__webpack_require__(2947));
-      var _loadableContext = __webpack_require__(1446);
+      var _react = _interop_require_default(__webpack_require__(465));
+      var _loadableContext = __webpack_require__(9851);
       const ALL_INITIALIZERS = [];
       const READY_INITIALIZERS = [];
       let initialized = false;
@@ -425,7 +425,7 @@
       /***/
     },
 
-    /***/ 9780: /***/ function(
+    /***/ 685: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -439,10 +439,10 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
-        3268
+        9701
       );
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
-        6113
+        2677
       );
       /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/ __webpack_require__.n(
         next_dynamic__WEBPACK_IMPORTED_MODULE_1__
@@ -451,11 +451,11 @@
       const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
         () =>
           __webpack_require__
-            .e(/* import() */ 246)
-            .then(__webpack_require__.bind(__webpack_require__, 1246)),
+            .e(/* import() */ 363)
+            .then(__webpack_require__.bind(__webpack_require__, 7363)),
         {
           loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 1246]
+            webpack: () => [/*require.resolve*/ 7363]
           }
         }
       );
@@ -482,7 +482,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function(
+    /***/ 1963: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -497,7 +497,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -532,7 +532,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function(
+    /***/ 9701: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -540,19 +540,19 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
       /***/
     },
 
-    /***/ 6113: /***/ function(
+    /***/ 2677: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(4648);
+      module.exports = __webpack_require__(9809);
 
       /***/
     }
@@ -563,7 +563,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function() {
-      return __webpack_exec__(3995);
+      return __webpack_exec__(7753);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [800],
   {
-    /***/ 6219: /***/ function(
+    /***/ 6027: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/edge-ssr",
         function() {
-          return __webpack_require__(5260);
+          return __webpack_require__(699);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 5260: /***/ function(
+    /***/ 699: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -50,7 +50,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function() {
-      return __webpack_exec__(6219);
+      return __webpack_exec__(6027);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [645],
   {
-    /***/ 2899: /***/ function(
+    /***/ 6955: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/head",
         function() {
-          return __webpack_require__(6603);
+          return __webpack_require__(8620);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 6603: /***/ function(
+    /***/ 8620: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -32,10 +32,10 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
-        3268
+        9701
       );
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
-        8412
+        9046
       );
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/ __webpack_require__.n(
         next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -69,7 +69,7 @@
       /***/
     },
 
-    /***/ 6205: /***/ function(
+    /***/ 1963: /***/ function(
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -84,7 +84,7 @@
        * This source code is licensed under the MIT license found in the
        * LICENSE file in the root directory of this source tree.
        */
-      var f = __webpack_require__(2947),
+      var f = __webpack_require__(465),
         k = Symbol.for("react.element"),
         l = Symbol.for("react.fragment"),
         m = Object.prototype.hasOwnProperty,
@@ -119,7 +119,7 @@
       /***/
     },
 
-    /***/ 3268: /***/ function(
+    /***/ 9701: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
@@ -127,19 +127,19 @@
       "use strict";
 
       if (true) {
-        module.exports = __webpack_require__(6205);
+        module.exports = __webpack_require__(1963);
       } else {
       }
 
       /***/
     },
 
-    /***/ 8412: /***/ function(
+    /***/ 9046: /***/ function(
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) {
-      module.exports = __webpack_require__(9461);
+      module.exports = __webpack_require__(2483);
 
       /***/
     }
@@ -150,7 +150,7 @@
       return __webpack_require__((__webpack_require__.s = moduleId));
     };
     /******/ __webpack_require__.O(0, [888, 179], function() {
-      return __webpack_exec__(2899);
+      return __webpack_exec__(6955);
     });
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for hooks-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [757],
   {
-    /***/ 2304: /***/ function(
+    /***/ 7819: /***/ function(
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/hooks",
         function() {
-          return __webpack_require__(8586);
+          return __webpack_require__(708);
         }
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 8586: /***/ function(
+    /***/ 708: /***/ function(
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,10 +26,10 @@
       "use strict";
       __webpack_require__.r(__webpack_exports__);
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
-        3
Post job cleanup.
[command]/usr/bin/git version
git version 2.38.2
Temporarily overriding HOME='/home/runner/work/_temp/9b6f3f20-b5bd-4657-a850-7beecb1928f2' before making global git config changes
Adding repository directory to the temporary git global config as a safe directory
[command]/usr/bin/git config --global --add safe.directory /home/runner/work/next.js/next.js
[command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
[command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
[command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
http.https://github.com/.extraheader
[command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
[command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
Cleaning up orphan processes
Commit: 902b5ef8896a071b37da9332cdc42cc7247a0965

ijjk avatar Nov 07 '22 23:11 ijjk

Failing test suites

Commit: 4dc8cfcdb66f8e81f086a750046f67b7012caaa8

pnpm testheadless test/development/acceptance-app/ReactRefreshLogBox.test.ts

  • ReactRefreshLogBox app > should strip whitespace correctly with newline
  • ReactRefreshLogBox app > logbox: can recover from a syntax error without losing state
  • ReactRefreshLogBox app > logbox: can recover from a component error
  • ReactRefreshLogBox app > render error not shown right after syntax error
  • ReactRefreshLogBox app > module init error not shown
  • ReactRefreshLogBox app > stuck error
  • ReactRefreshLogBox app > syntax > runtime error
  • ReactRefreshLogBox app > boundaries
  • ReactRefreshLogBox app > unterminated JSX
  • ReactRefreshLogBox app > conversion to class component (1)
  • ReactRefreshLogBox app > css syntax errors
  • ReactRefreshLogBox app > logbox: anchors links in error messages
Expand output

● ReactRefreshLogBox app › should strip whitespace correctly with newline

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:31:5)

● ReactRefreshLogBox app › logbox: can recover from a syntax error without losing state

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:61:5)

● ReactRefreshLogBox app › logbox: can recover from a component error

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:202:5)

● ReactRefreshLogBox app › render error not shown right after syntax error

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:259:5)

● ReactRefreshLogBox app › module init error not shown

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:340:5)

● ReactRefreshLogBox app › stuck error

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:388:5)

● ReactRefreshLogBox app › syntax > runtime error

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:451:5)

● ReactRefreshLogBox app › boundaries

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:522:5)

● ReactRefreshLogBox app › unterminated JSX

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:603:5)

● ReactRefreshLogBox app › conversion to class component (1)

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:652:5)

● ReactRefreshLogBox app › css syntax errors

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:711:5)

● ReactRefreshLogBox app › logbox: anchors links in error messages

Application is in inconsistent state: timeout.

  73 |           }
  74 |           if (status !== 'pending') {
> 75 |             throw new Error(`Application is in inconsistent state: ${status}.`)
     |                   ^
  76 |           }
  77 |
  78 |           await new Promise((resolve) => setTimeout(resolve, 30))

  at Object.patch (development/acceptance-app/helpers.ts:75:19)
  at Object.<anonymous> (development/acceptance-app/ReactRefreshLogBox.test.ts:749:5)

Read more about building and testing Next.js in contributing.md.

pnpm testheadless test/e2e/middleware-general/test/index.test.ts

  • Middleware Runtime > with i18n > refreshes the page when middleware changes
  • Middleware Runtime > with i18n > should have correct query values for rewrite to ssg page
  • Middleware Runtime > with i18n > should have correct dynamic route params on client-transition to dynamic route
  • Middleware Runtime > with i18n > should have correct dynamic route params for middleware rewrite to dynamic route
  • Middleware Runtime > with i18n > should have correct route params for chained rewrite from middleware to config rewrite
  • Middleware Runtime > with i18n > should have correct route params for rewrite from config dynamic route
  • Middleware Runtime > with i18n > should have correct route params for rewrite from config non-dynamic route
  • Middleware Runtime > with i18n > should redirect the same for direct visit and client-transition
  • Middleware Runtime > with i18n > should rewrite the same for direct visit and client-transition
  • Middleware Runtime > with i18n > should rewrite correctly for non-SSG/SSP page
  • Middleware Runtime > with i18n > hard-navigates when the data request failed
  • Middleware Runtime > with i18n > allows shallow linking with middleware
  • Middleware Runtime > without i18n > refreshes the page when middleware changes
  • Middleware Runtime > without i18n > should have correct query values for rewrite to ssg page
  • Middleware Runtime > without i18n > should have correct dynamic route params on client-transition to dynamic route
  • Middleware Runtime > without i18n > should have correct dynamic route params for middleware rewrite to dynamic route
  • Middleware Runtime > without i18n > should have correct route params for chained rewrite from middleware to config rewrite
  • Middleware Runtime > without i18n > should have correct route params for rewrite from config dynamic route
  • Middleware Runtime > without i18n > should have correct route params for rewrite from config non-dynamic route
  • Middleware Runtime > without i18n > should redirect the same for direct visit and client-transition
  • Middleware Runtime > without i18n > should rewrite the same for direct visit and client-transition
  • Middleware Runtime > without i18n > should rewrite correctly for non-SSG/SSP page
  • Middleware Runtime > without i18n > hard-navigates when the data request failed
  • Middleware Runtime > without i18n > allows shallow linking with middleware
Expand output

● Middleware Runtime › with i18n › refreshes the page when middleware changes

expect(received).toEqual(expected) // deep equality

Expected: "AboutB"
Received: "AboutA"

  87 |           const textb = await browser.elementByCss('h1').text()
  88 |           expect(await browser.eval('window.itdidnotrefresh')).not.toBe('hello')
> 89 |           expect(textb).toEqual('AboutB')
     |                         ^
  90 |         } finally {
  91 |           fs.writeFileSync(middlewarePath, originalContent)
  92 |           await browser.close()

  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:89:25)

● Middleware Runtime › with i18n › should have correct query values for rewrite to ssg page

TIMED OUT: found

[]

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:215:7)

● Middleware Runtime › with i18n › should have correct dynamic route params on client-transition to dynamic route

page.waitForSelector: Timeout 30000ms exceeded.
=========================== logs ===========================
waiting for selector "#blog"
============================================================

  329 |     return this.chain(() => {
  330 |       return page
> 331 |         .waitForSelector(selector, { timeout, state: 'attached' })
      |          ^
  332 |         .then(async (el) => {
  333 |           // it seems selenium waits longer and tests rely on this behavior
  334 |           // so we wait for the load event fire before returning

  at lib/browsers/playwright.ts:331:10

● Middleware Runtime › with i18n › should have correct dynamic route params for middleware rewrite to dynamic route

TIMED OUT: yes

null

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:283:7)

● Middleware Runtime › with i18n › should have correct route params for chained rewrite from middleware to config rewrite

TIMED OUT: yes

null

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:310:7)

● Middleware Runtime › with i18n › should have correct route params for rewrite from config dynamic route

page.waitForSelector: Timeout 30000ms exceeded.
=========================== logs ===========================
waiting for selector "#blog"
============================================================

  329 |     return this.chain(() => {
  330 |       return page
> 331 |         .waitForSelector(selector, { timeout, state: 'attached' })
      |          ^
  332 |         .then(async (el) => {
  333 |           // it seems selenium waits longer and tests rely on this behavior
  334 |           // so we wait for the load event fire before returning

  at lib/browsers/playwright.ts:331:10

● Middleware Runtime › with i18n › should have correct route params for rewrite from config non-dynamic route

TIMED OUT: /Hello World/

<head><style data-next-hide-fouc="true">body{display:none}</style><noscript data-next-hide-fouc="true"><style>body{display:block}</style></noscript><meta charset="utf-8"><meta name="viewport" content="width=device-width"><meta name="next-head-count" content="2"><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills.js?ts=1668731267244"></script><script src="/_next/static/chunks/webpack.js?ts=1668731267244" defer=""></script><script src="/_next/static/chunks/main.js?ts=1668731267244" defer=""></script><script src="/_next/static/chunks/pages/_app.js?ts=1668731267244" defer=""></script><script src="/_next/static/chunks/pages/ssg/%5Bslug%5D.js?ts=1668731267244" defer=""></script><script src="/_next/static/development/_buildManifest.js?ts=1668731267244" defer=""></script><script src="/_next/static/development/_ssgManifest.js?ts=1668731267244" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript></head><body><div id="__next"><p id="ssg">/blog/[slug]</p><p id="query">{"slug":"first"}</p><p id="pathname">/ssg/[slug]</p><p id="as-path"></p><p id="props">{"now":1668731267245,"params":{"slug":"first"}}</p></div><script src="/_next/static/chunks/react-refresh.js?ts=1668731267244"></script><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"now":1668731267245,"params":{"slug":"first"}},"__N_SSG":true},"page":"/ssg/[slug]","query":{"slug":"first"},"buildId":"development","isFallback":false,"gsp":true,"locale":"en","locales":["en","fr","nl"],"defaultLocale":"en","scriptLoader":[]}</script></body>

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:364:7)

● Middleware Runtime › with i18n › should redirect the same for direct visit and client-transition

TIMED OUT: success

/

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:385:7)

● Middleware Runtime › with i18n › should rewrite the same for direct visit and client-transition

TIMED OUT: success

<head><style data-next-hide-fouc="true">body{display:none}</style><noscript data-next-hide-fouc="true"><style>body{display:block}</style></noscript><meta charset="utf-8"><meta name="viewport" content="width=device-width"><meta name="next-head-count" content="2"><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills.js?ts=1668731355696"></script><script src="/_next/static/chunks/webpack.js?ts=1668731355696" defer=""></script><script src="/_next/static/chunks/main.js?ts=1668731355696" defer=""></script><script src="/_next/static/chunks/pages/_app.js?ts=1668731355696" defer=""></script><script src="/_next/static/chunks/pages/ssg/%5Bslug%5D.js?ts=1668731355696" defer=""></script><script src="/_next/static/development/_buildManifest.js?ts=1668731355696" defer=""></script><script src="/_next/static/development/_ssgManifest.js?ts=1668731355696" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript></head><body><div id="__next"><p id="ssg">/blog/[slug]</p><p id="query">{"slug":"first"}</p><p id="pathname">/ssg/[slug]</p><p id="as-path"></p><p id="props">{"now":1668731355696,"params":{"slug":"first"}}</p></div><script src="/_next/static/chunks/react-refresh.js?ts=1668731355696"></script><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"now":1668731355696,"params":{"slug":"first"}},"__N_SSG":true},"page":"/ssg/[slug]","query":{"slug":"first"},"buildId":"development","isFallback":false,"gsp":true,"locale":"en","locales":["en","fr","nl"],"defaultLocale":"en","scriptLoader":[]}</script></body>

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:399:7)

● Middleware Runtime › with i18n › should rewrite correctly for non-SSG/SSP page

TIMED OUT: success

<head><style data-next-hide-fouc="true">body{display:none}</style><noscript data-next-hide-fouc="true"><style>body{display:block}</style></noscript><meta charset="utf-8"><meta name="viewport" content="width=device-width"><meta name="next-head-count" content="2"><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills.js?ts=1668731400257"></script><script src="/_next/static/chunks/webpack.js?ts=1668731400257" defer=""></script><script src="/_next/static/chunks/main.js?ts=1668731400257" defer=""></script><script src="/_next/static/chunks/pages/_app.js?ts=1668731400257" defer=""></script><script src="/_next/static/chunks/pages/ssg/%5Bslug%5D.js?ts=1668731400257" defer=""></script><script src="/_next/static/development/_buildManifest.js?ts=1668731400257" defer=""></script><script src="/_next/static/development/_ssgManifest.js?ts=1668731400257" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript></head><body><div id="__next"><p id="ssg">/blog/[slug]</p><p id="query">{"slug":"first"}</p><p id="pathname">/ssg/[slug]</p><p id="as-path"></p><p id="props">{"now":1668731400258,"params":{"slug":"first"}}</p></div><script src="/_next/static/chunks/react-refresh.js?ts=1668731400257"></script><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"now":1668731400258,"params":{"slug":"first"}},"__N_SSG":true},"page":"/ssg/[slug]","query":{"slug":"first"},"buildId":"development","isFallback":false,"gsp":true,"locale":"en","locales":["en","fr","nl"],"defaultLocale":"en","scriptLoader":[]}</script></body>

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:413:7)

● Middleware Runtime › with i18n › hard-navigates when the data request failed

elementHandle.click: Timeout 30000ms exceeded.
=========================== logs ===========================
attempting click action
  waiting for element to be visible, enabled and stable
    element is not visible - waiting...
============================================================

  300 |   click() {
  301 |     return this.chain((el) => {
> 302 |       return el.click().then(() => el)
      |                 ^
  303 |     })
  304 |   }
  305 |

  at lib/browsers/playwright.ts:302:17
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:642:7)

● Middleware Runtime › with i18n › allows shallow linking with middleware

elementHandle.click: Timeout 30000ms exceeded.
=========================== logs ===========================
attempting click action
  waiting for element to be visible, enabled and stable
    element is not visible - waiting...
============================================================

  300 |   click() {
  301 |     return this.chain((el) => {
> 302 |       return el.click().then(() => el)
      |                 ^
  303 |     })
  304 |   }
  305 |

  at lib/browsers/playwright.ts:302:17
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:660:31)

● Middleware Runtime › without i18n › refreshes the page when middleware changes

expect(received).toEqual(expected) // deep equality

Expected: "AboutB"
Received: "AboutA"

  87 |           const textb = await browser.elementByCss('h1').text()
  88 |           expect(await browser.eval('window.itdidnotrefresh')).not.toBe('hello')
> 89 |           expect(textb).toEqual('AboutB')
     |                         ^
  90 |         } finally {
  91 |           fs.writeFileSync(middlewarePath, originalContent)
  92 |           await browser.close()

  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:89:25)

● Middleware Runtime › without i18n › should have correct query values for rewrite to ssg page

TIMED OUT: found

[]

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:215:7)

● Middleware Runtime › without i18n › should have correct dynamic route params on client-transition to dynamic route

page.waitForSelector: Timeout 30000ms exceeded.
=========================== logs ===========================
waiting for selector "#blog"
============================================================

  329 |     return this.chain(() => {
  330 |       return page
> 331 |         .waitForSelector(selector, { timeout, state: 'attached' })
      |          ^
  332 |         .then(async (el) => {
  333 |           // it seems selenium waits longer and tests rely on this behavior
  334 |           // so we wait for the load event fire before returning

  at lib/browsers/playwright.ts:331:10

● Middleware Runtime › without i18n › should have correct dynamic route params for middleware rewrite to dynamic route

TIMED OUT: yes

null

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:283:7)

● Middleware Runtime › without i18n › should have correct route params for chained rewrite from middleware to config rewrite

TIMED OUT: yes

null

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:310:7)

● Middleware Runtime › without i18n › should have correct route params for rewrite from config dynamic route

page.waitForSelector: Timeout 30000ms exceeded.
=========================== logs ===========================
waiting for selector "#blog"
============================================================

  329 |     return this.chain(() => {
  330 |       return page
> 331 |         .waitForSelector(selector, { timeout, state: 'attached' })
      |          ^
  332 |         .then(async (el) => {
  333 |           // it seems selenium waits longer and tests rely on this behavior
  334 |           // so we wait for the load event fire before returning

  at lib/browsers/playwright.ts:331:10

● Middleware Runtime › without i18n › should have correct route params for rewrite from config non-dynamic route

TIMED OUT: /Hello World/

<head><style data-next-hide-fouc="true">body{display:none}</style><noscript data-next-hide-fouc="true"><style>body{display:block}</style></noscript><meta charset="utf-8"><meta name="viewport" content="width=device-width"><meta name="next-head-count" content="2"><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills.js?ts=1668731815087"></script><script src="/_next/static/chunks/webpack.js?ts=1668731815087" defer=""></script><script src="/_next/static/chunks/main.js?ts=1668731815087" defer=""></script><script src="/_next/static/chunks/pages/_app.js?ts=1668731815087" defer=""></script><script src="/_next/static/chunks/pages/ssg/%5Bslug%5D.js?ts=1668731815087" defer=""></script><script src="/_next/static/development/_buildManifest.js?ts=1668731815087" defer=""></script><script src="/_next/static/development/_ssgManifest.js?ts=1668731815087" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript></head><body><div id="__next"><p id="ssg">/blog/[slug]</p><p id="query">{"slug":"first"}</p><p id="pathname">/ssg/[slug]</p><p id="as-path"></p><p id="props">{"now":1668731815093,"params":{"slug":"first"}}</p></div><script src="/_next/static/chunks/react-refresh.js?ts=1668731815087"></script><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"now":1668731815093,"params":{"slug":"first"}},"__N_SSG":true},"page":"/ssg/[slug]","query":{"slug":"first"},"buildId":"development","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body>

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:364:7)

● Middleware Runtime › without i18n › should redirect the same for direct visit and client-transition

TIMED OUT: success

/

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:385:7)

● Middleware Runtime › without i18n › should rewrite the same for direct visit and client-transition

TIMED OUT: success

<head><style data-next-hide-fouc="true">body{display:none}</style><noscript data-next-hide-fouc="true"><style>body{display:block}</style></noscript><meta charset="utf-8"><meta name="viewport" content="width=device-width"><meta name="next-head-count" content="2"><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills.js?ts=1668731904570"></script><script src="/_next/static/chunks/webpack.js?ts=1668731904570" defer=""></script><script src="/_next/static/chunks/main.js?ts=1668731904570" defer=""></script><script src="/_next/static/chunks/pages/_app.js?ts=1668731904570" defer=""></script><script src="/_next/static/chunks/pages/ssg/%5Bslug%5D.js?ts=1668731904570" defer=""></script><script src="/_next/static/development/_buildManifest.js?ts=1668731904570" defer=""></script><script src="/_next/static/development/_ssgManifest.js?ts=1668731904570" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript></head><body><div id="__next"><p id="ssg">/blog/[slug]</p><p id="query">{"slug":"first"}</p><p id="pathname">/ssg/[slug]</p><p id="as-path"></p><p id="props">{"now":1668731904571,"params":{"slug":"first"}}</p></div><script src="/_next/static/chunks/react-refresh.js?ts=1668731904570"></script><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"now":1668731904571,"params":{"slug":"first"}},"__N_SSG":true},"page":"/ssg/[slug]","query":{"slug":"first"},"buildId":"development","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body>

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:399:7)

● Middleware Runtime › without i18n › should rewrite correctly for non-SSG/SSP page

TIMED OUT: success

<head><style data-next-hide-fouc="true">body{display:none}</style><noscript data-next-hide-fouc="true"><style>body{display:block}</style></noscript><meta charset="utf-8"><meta name="viewport" content="width=device-width"><meta name="next-head-count" content="2"><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills.js?ts=1668731949898"></script><script src="/_next/static/chunks/webpack.js?ts=1668731949898" defer=""></script><script src="/_next/static/chunks/main.js?ts=1668731949898" defer=""></script><script src="/_next/static/chunks/pages/_app.js?ts=1668731949898" defer=""></script><script src="/_next/static/chunks/pages/ssg/%5Bslug%5D.js?ts=1668731949898" defer=""></script><script src="/_next/static/development/_buildManifest.js?ts=1668731949898" defer=""></script><script src="/_next/static/development/_ssgManifest.js?ts=1668731949898" defer=""></script><noscript id="__next_css__DO_NOT_USE__"></noscript></head><body><div id="__next"><p id="ssg">/blog/[slug]</p><p id="query">{"slug":"first"}</p><p id="pathname">/ssg/[slug]</p><p id="as-path"></p><p id="props">{"now":1668731949899,"params":{"slug":"first"}}</p></div><script src="/_next/static/chunks/react-refresh.js?ts=1668731949898"></script><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"now":1668731949899,"params":{"slug":"first"}},"__N_SSG":true},"page":"/ssg/[slug]","query":{"slug":"first"},"buildId":"development","isFallback":false,"gsp":true,"scriptLoader":[]}</script></body>

  532 |
  533 |   if (hardError) {
> 534 |     throw new Error('TIMED OUT: ' + regex + '\n\n' + content)
      |           ^
  535 |   }
  536 |   return false
  537 | }

  at check (lib/next-test-utils.js:534:11)
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:413:7)

● Middleware Runtime › without i18n › hard-navigates when the data request failed

elementHandle.click: Timeout 30000ms exceeded.
=========================== logs ===========================
attempting click action
  waiting for element to be visible, enabled and stable
    element is not visible - waiting...
============================================================

  300 |   click() {
  301 |     return this.chain((el) => {
> 302 |       return el.click().then(() => el)
      |                 ^
  303 |     })
  304 |   }
  305 |

  at lib/browsers/playwright.ts:302:17
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:642:7)

● Middleware Runtime › without i18n › allows shallow linking with middleware

elementHandle.click: Timeout 30000ms exceeded.
=========================== logs ===========================
attempting click action
  waiting for element to be visible, enabled and stable
    element is not visible - waiting...
============================================================

  300 |   click() {
  301 |     return this.chain((el) => {
> 302 |       return el.click().then(() => el)
      |                 ^
  303 |     })
  304 |   }
  305 |

  at lib/browsers/playwright.ts:302:17
  at Object.<anonymous> (e2e/middleware-general/test/index.test.ts:660:31)

Read more about building and testing Next.js in contributing.md.

ijjk avatar Nov 07 '22 23:11 ijjk

Thanks @timneutkens!

next/router in app

I've adjusted the tests for next/router to ensure it validates that it throws an error.

next/navigation in pages

This will technically not be supported now, with better support coming from using the next/compat/navigation hooks instead that have correct null typings.

next/compat/router in both pages and app

Tests have been adjusted to use this compat router for the pages and app usecases.

wyattjoh avatar Nov 30 '22 18:11 wyattjoh

I wonder if it would be possible to alias these automatically so that you can just import next/navigation in either but have the tsconfig for pages/ be different (null in the return type).

sebmarkbage avatar Jan 05 '23 20:01 sebmarkbage

I wonder if it would be possible to alias these automatically so that you can just import next/navigation in either but have the tsconfig for pages/ be different (null in the return type).

The use case here though is pretty specific. The goal eventually is to have everyone switch to using app/ from pages/, but the hooks from pages/ won't work in app/, and the hooks in app/ won't completly work in pages/, hence the distinction here.

next/navigation provides guarentees (non-null) for its hooks versus the next/compat/navigation hooks which force the user to consider the case where (for example) pathname is null because the page is prerendering as it does in pages/.

I'd expect to see these hooks used in components rather than specific files in pages/ or app/ too. If you were to use next/navigation in pages/ today, it will work, until it reaches the condition (like during prerendering) where it would have returned null, and instead throws an error.

wyattjoh avatar Jan 05 '23 20:01 wyattjoh

Superceded by https://github.com/vercel/next.js/pull/45919

wyattjoh avatar Feb 14 '23 22:02 wyattjoh