next 15.4.2-canary.13 → 15.4.2-canary.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +2 -2
  3. package/dist/build/swc/index.js +1 -1
  4. package/dist/build/webpack-config.js +2 -2
  5. package/dist/client/app-bootstrap.js +1 -1
  6. package/dist/client/index.js +1 -1
  7. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js +1 -1
  8. package/dist/compiled/next-server/pages-api-turbo.runtime.dev.js.map +1 -1
  9. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js +1 -1
  10. package/dist/compiled/next-server/pages-api-turbo.runtime.prod.js.map +1 -1
  11. package/dist/compiled/next-server/pages-turbo.runtime.dev.js +1 -1
  12. package/dist/compiled/next-server/pages-turbo.runtime.dev.js.map +1 -1
  13. package/dist/compiled/next-server/pages-turbo.runtime.prod.js +1 -1
  14. package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
  15. package/dist/esm/build/index.js +2 -2
  16. package/dist/esm/build/swc/index.js +1 -1
  17. package/dist/esm/build/webpack-config.js +2 -2
  18. package/dist/esm/client/app-bootstrap.js +1 -1
  19. package/dist/esm/client/index.js +1 -1
  20. package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
  21. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  22. package/dist/esm/server/lib/app-info-log.js +1 -1
  23. package/dist/esm/server/lib/start-server.js +1 -1
  24. package/dist/esm/shared/lib/canary-only.js +1 -1
  25. package/dist/server/dev/hot-reloader-turbopack.js +1 -1
  26. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  27. package/dist/server/lib/app-info-log.js +1 -1
  28. package/dist/server/lib/start-server.js +1 -1
  29. package/dist/shared/lib/canary-only.js +1 -1
  30. package/dist/telemetry/anonymous-meta.js +1 -1
  31. package/dist/telemetry/events/session-stopped.js +2 -2
  32. package/dist/telemetry/events/version.js +2 -2
  33. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"pages-api-turbo.runtime.prod.js","sources":["webpack://next/./dist/compiled/@edge-runtime/cookies/index.js","webpack://next/./dist/compiled/bytes/index.js","webpack://next/./dist/compiled/content-type/index.js","webpack://next/./dist/compiled/cookie/index.js","webpack://next/./dist/compiled/fresh/index.js","webpack://next/./dist/compiled/path-to-regexp/index.js","webpack://next/./dist/src/lib/constants.ts","webpack://next/./dist/src/lib/format-dynamic-import-path.ts","webpack://next/./dist/src/server/api-utils/index.ts","webpack://next/./dist/src/server/api-utils/node/try-get-preview-data.ts","webpack://next/./dist/src/server/crypto-utils.ts","webpack://next/./dist/src/server/lib/node-fs-methods.ts","webpack://next/./dist/src/server/lib/trace/constants.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/reflect.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/headers.ts","webpack://next/./dist/src/shared/lib/isomorphic/path.js","webpack://next/./dist/src/shared/lib/modern-browserslist-target.js","webpack://next/./dist/compiled/superstruct/index.cjs","webpack://next/webpack/runtime/compat_get_default_export","webpack://next/webpack/runtime/create_fake_namespace_object","webpack://next/webpack/runtime/define_property_getters","webpack://next/webpack/runtime/has_own_property","webpack://next/webpack/runtime/make_namespace_object","webpack://next/./dist/src/shared/lib/constants.ts","webpack://next/./dist/src/lib/url.ts","webpack://next/./dist/src/shared/lib/i18n/normalize-locale-path.ts","webpack://next/./dist/src/shared/lib/page-path/ensure-leading-slash.ts","webpack://next/./dist/src/shared/lib/router/utils/app-paths.ts","webpack://next/./dist/src/shared/lib/segment.ts","webpack://next/./dist/src/shared/lib/router/utils/interception-routes.ts","webpack://next/./dist/src/shared/lib/router/utils/is-dynamic.ts","webpack://next/./dist/src/shared/lib/router/utils/parse-path.ts","webpack://next/./dist/src/shared/lib/router/utils/path-has-prefix.ts","webpack://next/./dist/src/shared/lib/router/utils/remove-path-prefix.ts","webpack://next/./dist/src/shared/lib/escape-regexp.ts","webpack://next/./dist/src/shared/lib/router/utils/remove-trailing-slash.ts","webpack://next/./dist/src/shared/lib/router/utils/route-regex.ts","webpack://next/./dist/src/shared/lib/utils.ts","webpack://next/./dist/src/lib/route-pattern-normalizer.ts","webpack://next/./dist/src/shared/lib/router/utils/route-match-utils.ts","webpack://next/./dist/src/shared/lib/router/utils/route-matcher.ts","webpack://next/./dist/src/shared/lib/router/utils/querystring.ts","webpack://next/./dist/src/server/api-utils/get-cookie-parser.ts","webpack://next/./dist/src/shared/lib/router/utils/prepare-destination.ts","webpack://next/./dist/src/server/web/utils.ts","webpack://next/./dist/src/server/lib/decode-query-path-parameter.ts","webpack://next/./dist/src/shared/lib/router/utils/format-url.ts","webpack://next/./dist/src/server/app-render/types.ts","webpack://next/./dist/src/lib/generate-interception-routes-rewrites.ts","webpack://next/./dist/src/client/components/app-router-headers.ts","webpack://next/./dist/src/server/server-utils.ts","webpack://next/./dist/src/shared/lib/i18n/detect-domain-locale.ts","webpack://next/./dist/src/shared/lib/get-hostname.ts","webpack://next/./dist/src/shared/lib/page-path/normalize-data-path.ts","webpack://next/./dist/src/server/request-meta.ts","webpack://next/./dist/src/shared/lib/page-path/normalize-page-path.ts","webpack://next/./dist/src/lib/metadata/is-metadata-route.ts","webpack://next/./dist/src/lib/detached-promise.ts","webpack://next/./dist/src/lib/batcher.ts","webpack://next/./dist/src/lib/scheduler.ts","webpack://next/./dist/src/server/response-cache/types.ts","webpack://next/./dist/src/server/stream-utils/node-web-streams-helper.ts","webpack://next/./dist/src/server/stream-utils/encoded-tags.ts","webpack://next/./dist/src/shared/lib/router/utils/add-path-prefix.ts","webpack://next/./dist/src/shared/lib/router/utils/add-path-suffix.ts","webpack://next/./dist/src/server/web/next-url.ts","webpack://next/./dist/src/shared/lib/router/utils/get-next-pathname-info.ts","webpack://next/./dist/src/shared/lib/router/utils/format-next-pathname-info.ts","webpack://next/./dist/src/shared/lib/router/utils/add-locale.ts","webpack://next/./dist/src/server/web/spec-extension/request.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/next-request.ts","webpack://next/./dist/src/server/client-component-renderer-logger.ts","webpack://next/./dist/src/server/pipe-readable.ts","webpack://next/./dist/src/shared/lib/invariant-error.ts","webpack://next/./dist/src/server/render-result.ts","webpack://next/./dist/src/server/route-kind.ts","webpack://next/./dist/src/server/response-cache/utils.ts","webpack://next/./dist/src/server/response-cache/index.ts","webpack://next/./dist/src/lib/multi-file-writer.ts","webpack://next/./dist/src/server/lib/incremental-cache/file-system-cache.ts","webpack://next/./dist/src/server/lib/to-route.ts","webpack://next/./dist/src/server/lib/incremental-cache/index.ts","webpack://next/./dist/src/server/use-cache/handlers.ts","webpack://next/./dist/src/server/app-render/interop-default.ts","webpack://next/./dist/src/server/lib/router-utils/router-server-context.ts","webpack://next/./dist/src/server/route-modules/route-module.ts","webpack://next/./dist/src/lib/is-app-route-route.ts","webpack://next/./dist/src/shared/lib/page-path/normalize-path-sep.ts","webpack://next/./dist/src/shared/lib/router/utils/path-match.ts","webpack://next/./dist/src/client/components/router-reducer/compute-changed-path.ts","webpack://next/./dist/src/server/app-render/parse-and-validate-flight-router-state.tsx","webpack://next/./dist/src/shared/lib/router/utils/parse-url.ts","webpack://next/./dist/src/shared/lib/router/utils/parse-relative-url.ts","webpack://next/./dist/src/server/lib/router-utils/decode-path-params.ts","webpack://next/./dist/src/shared/lib/router/utils/escape-path-delimiters.ts","webpack://next/./dist/src/lib/is-error.ts","webpack://next/./dist/src/server/api-utils/node/parse-body.ts","webpack://next/./dist/src/server/api-utils/node/api-resolver.ts","webpack://next/./dist/src/server/lib/etag.ts","webpack://next/./dist/src/server/send-payload.ts","webpack://next/./dist/src/lib/interop-default.ts","webpack://next/./dist/src/server/route-modules/pages-api/module.ts"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n RequestCookies: () => RequestCookies,\n ResponseCookies: () => ResponseCookies,\n parseCookie: () => parseCookie,\n parseSetCookie: () => parseSetCookie,\n stringifyCookie: () => stringifyCookie\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/serialize.ts\nfunction stringifyCookie(c) {\n var _a;\n const attrs = [\n \"path\" in c && c.path && `Path=${c.path}`,\n \"expires\" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === \"number\" ? new Date(c.expires) : c.expires).toUTCString()}`,\n \"maxAge\" in c && typeof c.maxAge === \"number\" && `Max-Age=${c.maxAge}`,\n \"domain\" in c && c.domain && `Domain=${c.domain}`,\n \"secure\" in c && c.secure && \"Secure\",\n \"httpOnly\" in c && c.httpOnly && \"HttpOnly\",\n \"sameSite\" in c && c.sameSite && `SameSite=${c.sameSite}`,\n \"partitioned\" in c && c.partitioned && \"Partitioned\",\n \"priority\" in c && c.priority && `Priority=${c.priority}`\n ].filter(Boolean);\n const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : \"\")}`;\n return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join(\"; \")}`;\n}\nfunction parseCookie(cookie) {\n const map = /* @__PURE__ */ new Map();\n for (const pair of cookie.split(/; */)) {\n if (!pair)\n continue;\n const splitAt = pair.indexOf(\"=\");\n if (splitAt === -1) {\n map.set(pair, \"true\");\n continue;\n }\n const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)];\n try {\n map.set(key, decodeURIComponent(value != null ? value : \"true\"));\n } catch {\n }\n }\n return map;\n}\nfunction parseSetCookie(setCookie) {\n if (!setCookie) {\n return void 0;\n }\n const [[name, value], ...attributes] = parseCookie(setCookie);\n const {\n domain,\n expires,\n httponly,\n maxage,\n path,\n samesite,\n secure,\n partitioned,\n priority\n } = Object.fromEntries(\n attributes.map(([key, value2]) => [\n key.toLowerCase().replace(/-/g, \"\"),\n value2\n ])\n );\n const cookie = {\n name,\n value: decodeURIComponent(value),\n domain,\n ...expires && { expires: new Date(expires) },\n ...httponly && { httpOnly: true },\n ...typeof maxage === \"string\" && { maxAge: Number(maxage) },\n path,\n ...samesite && { sameSite: parseSameSite(samesite) },\n ...secure && { secure: true },\n ...priority && { priority: parsePriority(priority) },\n ...partitioned && { partitioned: true }\n };\n return compact(cookie);\n}\nfunction compact(t) {\n const newT = {};\n for (const key in t) {\n if (t[key]) {\n newT[key] = t[key];\n }\n }\n return newT;\n}\nvar SAME_SITE = [\"strict\", \"lax\", \"none\"];\nfunction parseSameSite(string) {\n string = string.toLowerCase();\n return SAME_SITE.includes(string) ? string : void 0;\n}\nvar PRIORITY = [\"low\", \"medium\", \"high\"];\nfunction parsePriority(string) {\n string = string.toLowerCase();\n return PRIORITY.includes(string) ? string : void 0;\n}\nfunction splitCookiesString(cookiesString) {\n if (!cookiesString)\n return [];\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n lastComma = pos;\n pos += 1;\n skipWhitespace();\n nextStart = pos;\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n cookiesSeparatorFound = true;\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n return cookiesStrings;\n}\n\n// src/request-cookies.ts\nvar RequestCookies = class {\n constructor(requestHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n this._headers = requestHeaders;\n const header = requestHeaders.get(\"cookie\");\n if (header) {\n const parsed = parseCookie(header);\n for (const [name, value] of parsed) {\n this._parsed.set(name, { name, value });\n }\n }\n }\n [Symbol.iterator]() {\n return this._parsed[Symbol.iterator]();\n }\n /**\n * The amount of cookies received from the client\n */\n get size() {\n return this._parsed.size;\n }\n get(...args) {\n const name = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(name);\n }\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed);\n if (!args.length) {\n return all.map(([_, value]) => value);\n }\n const name = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter(([n]) => n === name).map(([_, value]) => value);\n }\n has(name) {\n return this._parsed.has(name);\n }\n set(...args) {\n const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args;\n const map = this._parsed;\n map.set(name, { name, value });\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join(\"; \")\n );\n return this;\n }\n /**\n * Delete the cookies matching the passed name or names in the request.\n */\n delete(names) {\n const map = this._parsed;\n const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name));\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value]) => stringifyCookie(value)).join(\"; \")\n );\n return result;\n }\n /**\n * Delete all the cookies in the cookies in the request.\n */\n clear() {\n this.delete(Array.from(this._parsed.keys()));\n return this;\n }\n /**\n * Format the cookies in the request as a string for logging\n */\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join(\"; \");\n }\n};\n\n// src/response-cookies.ts\nvar ResponseCookies = class {\n constructor(responseHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n var _a, _b, _c;\n this._headers = responseHeaders;\n const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get(\"set-cookie\")) != null ? _c : [];\n const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);\n for (const cookieString of cookieStrings) {\n const parsed = parseSetCookie(cookieString);\n if (parsed)\n this._parsed.set(parsed.name, parsed);\n }\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.\n */\n get(...args) {\n const key = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(key);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.\n */\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed.values());\n if (!args.length) {\n return all;\n }\n const key = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter((c) => c.name === key);\n }\n has(name) {\n return this._parsed.has(name);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.\n */\n set(...args) {\n const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args;\n const map = this._parsed;\n map.set(name, normalizeCookie({ name, value, ...cookie }));\n replace(map, this._headers);\n return this;\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.\n */\n delete(...args) {\n const [name, options] = typeof args[0] === \"string\" ? [args[0]] : [args[0].name, args[0]];\n return this.set({ ...options, name, value: \"\", expires: /* @__PURE__ */ new Date(0) });\n }\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map(stringifyCookie).join(\"; \");\n }\n};\nfunction replace(bag, headers) {\n headers.delete(\"set-cookie\");\n for (const [, value] of bag) {\n const serialized = stringifyCookie(value);\n headers.append(\"set-cookie\", serialized);\n }\n}\nfunction normalizeCookie(cookie = { name: \"\", value: \"\" }) {\n if (typeof cookie.expires === \"number\") {\n cookie.expires = new Date(cookie.expires);\n }\n if (cookie.maxAge) {\n cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);\n }\n if (cookie.path === null || cookie.path === void 0) {\n cookie.path = \"/\";\n }\n return cookie;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n RequestCookies,\n ResponseCookies,\n parseCookie,\n parseSetCookie,\n stringifyCookie\n});\n","(()=>{\"use strict\";var e={56:e=>{\n/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\ne.exports=bytes;e.exports.format=format;e.exports.parse=parse;var r=/\\B(?=(\\d{3})+(?!\\d))/g;var a=/(?:\\.0*|(\\.[^0]+)0+)$/;var t={b:1,kb:1<<10,mb:1<<20,gb:1<<30,tb:Math.pow(1024,4),pb:Math.pow(1024,5)};var i=/^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;function bytes(e,r){if(typeof e===\"string\"){return parse(e)}if(typeof e===\"number\"){return format(e,r)}return null}function format(e,i){if(!Number.isFinite(e)){return null}var n=Math.abs(e);var o=i&&i.thousandsSeparator||\"\";var s=i&&i.unitSeparator||\"\";var f=i&&i.decimalPlaces!==undefined?i.decimalPlaces:2;var u=Boolean(i&&i.fixedDecimals);var p=i&&i.unit||\"\";if(!p||!t[p.toLowerCase()]){if(n>=t.pb){p=\"PB\"}else if(n>=t.tb){p=\"TB\"}else if(n>=t.gb){p=\"GB\"}else if(n>=t.mb){p=\"MB\"}else if(n>=t.kb){p=\"KB\"}else{p=\"B\"}}var b=e/t[p.toLowerCase()];var l=b.toFixed(f);if(!u){l=l.replace(a,\"$1\")}if(o){l=l.split(\".\").map((function(e,a){return a===0?e.replace(r,o):e})).join(\".\")}return l+s+p}function parse(e){if(typeof e===\"number\"&&!isNaN(e)){return e}if(typeof e!==\"string\"){return null}var r=i.exec(e);var a;var n=\"b\";if(!r){a=parseInt(e,10);n=\"b\"}else{a=parseFloat(r[1]);n=r[4].toLowerCase()}return Math.floor(t[n]*a)}}};var r={};function __nccwpck_require__(a){var t=r[a];if(t!==undefined){return t.exports}var i=r[a]={exports:{}};var n=true;try{e[a](i,i.exports,__nccwpck_require__);n=false}finally{if(n)delete r[a]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var a=__nccwpck_require__(56);module.exports=a})();","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */var t=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g;var a=/^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/;var n=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;var i=/\\\\([\\u000b\\u0020-\\u00ff])/g;var o=/([\\\\\"])/g;var f=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;r.format=format;r.parse=parse;function format(e){if(!e||typeof e!==\"object\"){throw new TypeError(\"argument obj is required\")}var r=e.parameters;var t=e.type;if(!t||!f.test(t)){throw new TypeError(\"invalid type\")}var a=t;if(r&&typeof r===\"object\"){var i;var o=Object.keys(r).sort();for(var u=0;u<o.length;u++){i=o[u];if(!n.test(i)){throw new TypeError(\"invalid parameter name\")}a+=\"; \"+i+\"=\"+qstring(r[i])}}return a}function parse(e){if(!e){throw new TypeError(\"argument string is required\")}var r=typeof e===\"object\"?getcontenttype(e):e;if(typeof r!==\"string\"){throw new TypeError(\"argument string is required to be a string\")}var a=r.indexOf(\";\");var n=a!==-1?r.substr(0,a).trim():r.trim();if(!f.test(n)){throw new TypeError(\"invalid media type\")}var o=new ContentType(n.toLowerCase());if(a!==-1){var u;var p;var s;t.lastIndex=a;while(p=t.exec(r)){if(p.index!==a){throw new TypeError(\"invalid parameter format\")}a+=p[0].length;u=p[1].toLowerCase();s=p[2];if(s[0]==='\"'){s=s.substr(1,s.length-2).replace(i,\"$1\")}o.parameters[u]=s}if(a!==r.length){throw new TypeError(\"invalid parameter format\")}}return o}function getcontenttype(e){var r;if(typeof e.getHeader===\"function\"){r=e.getHeader(\"content-type\")}else if(typeof e.headers===\"object\"){r=e.headers&&e.headers[\"content-type\"]}if(typeof r!==\"string\"){throw new TypeError(\"content-type header is missing from object\")}return r}function qstring(e){var r=String(e);if(n.test(r)){return r}if(r.length>0&&!a.test(r)){throw new TypeError(\"invalid parameter value\")}return'\"'+r.replace(o,\"\\\\$1\")+'\"'}function ContentType(e){this.parameters=Object.create(null);this.type=e}})();module.exports=e})();","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p<o.length;p++){var f=o[p];var u=f.indexOf(\"=\");if(u<0){continue}var v=f.substr(0,u).trim();var c=f.substr(++u,f.length).trim();if('\"'==c[0]){c=c.slice(1,-1)}if(undefined==t[v]){t[v]=tryDecode(c,s)}}return t}function serialize(e,r,i){var a=i||{};var o=a.encode||t;if(typeof o!==\"function\"){throw new TypeError(\"option encode is invalid\")}if(!n.test(e)){throw new TypeError(\"argument name is invalid\")}var s=o(r);if(s&&!n.test(s)){throw new TypeError(\"argument val is invalid\")}var p=e+\"=\"+s;if(null!=a.maxAge){var f=a.maxAge-0;if(isNaN(f)||!isFinite(f)){throw new TypeError(\"option maxAge is invalid\")}p+=\"; Max-Age=\"+Math.floor(f)}if(a.domain){if(!n.test(a.domain)){throw new TypeError(\"option domain is invalid\")}p+=\"; Domain=\"+a.domain}if(a.path){if(!n.test(a.path)){throw new TypeError(\"option path is invalid\")}p+=\"; Path=\"+a.path}if(a.expires){if(typeof a.expires.toUTCString!==\"function\"){throw new TypeError(\"option expires is invalid\")}p+=\"; Expires=\"+a.expires.toUTCString()}if(a.httpOnly){p+=\"; HttpOnly\"}if(a.secure){p+=\"; Secure\"}if(a.sameSite){var u=typeof a.sameSite===\"string\"?a.sameSite.toLowerCase():a.sameSite;switch(u){case true:p+=\"; SameSite=Strict\";break;case\"lax\":p+=\"; SameSite=Lax\";break;case\"strict\":p+=\"; SameSite=Strict\";break;case\"none\":p+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return p}function tryDecode(e,r){try{return r(e)}catch(r){return e}}})();module.exports=e})();","(()=>{\"use strict\";var e={695:e=>{\n/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\nvar r=/(?:^|,)\\s*?no-cache\\s*?(?:,|$)/;e.exports=fresh;function fresh(e,a){var t=e[\"if-modified-since\"];var s=e[\"if-none-match\"];if(!t&&!s){return false}var i=e[\"cache-control\"];if(i&&r.test(i)){return false}if(s&&s!==\"*\"){var f=a[\"etag\"];if(!f){return false}var n=true;var u=parseTokenList(s);for(var _=0;_<u.length;_++){var o=u[_];if(o===f||o===\"W/\"+f||\"W/\"+o===f){n=false;break}}if(n){return false}}if(t){var p=a[\"last-modified\"];var v=!p||!(parseHttpDate(p)<=parseHttpDate(t));if(v){return false}}return true}function parseHttpDate(e){var r=e&&Date.parse(e);return typeof r===\"number\"?r:NaN}function parseTokenList(e){var r=0;var a=[];var t=0;for(var s=0,i=e.length;s<i;s++){switch(e.charCodeAt(s)){case 32:if(t===r){t=r=s+1}break;case 44:a.push(e.substring(t,r));t=r=s+1;break;default:r=s+1;break}}a.push(e.substring(t,r));return a}}};var r={};function __nccwpck_require__(a){var t=r[a];if(t!==undefined){return t.exports}var s=r[a]={exports:{}};var i=true;try{e[a](s,s.exports,__nccwpck_require__);i=false}finally{if(i)delete r[a]}return s.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var a=__nccwpck_require__(695);module.exports=a})();","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var n=e;Object.defineProperty(n,\"__esModule\",{value:true});n.pathToRegexp=n.tokensToRegexp=n.regexpToFunction=n.match=n.tokensToFunction=n.compile=n.parse=void 0;function lexer(e){var n=[];var r=0;while(r<e.length){var t=e[r];if(t===\"*\"||t===\"+\"||t===\"?\"){n.push({type:\"MODIFIER\",index:r,value:e[r++]});continue}if(t===\"\\\\\"){n.push({type:\"ESCAPED_CHAR\",index:r++,value:e[r++]});continue}if(t===\"{\"){n.push({type:\"OPEN\",index:r,value:e[r++]});continue}if(t===\"}\"){n.push({type:\"CLOSE\",index:r,value:e[r++]});continue}if(t===\":\"){var a=\"\";var i=r+1;while(i<e.length){var o=e.charCodeAt(i);if(o>=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){a+=e[i++];continue}break}if(!a)throw new TypeError(\"Missing parameter name at \".concat(r));n.push({type:\"NAME\",index:r,value:a});r=i;continue}if(t===\"(\"){var c=1;var f=\"\";var i=r+1;if(e[i]===\"?\"){throw new TypeError('Pattern cannot start with \"?\" at '.concat(i))}while(i<e.length){if(e[i]===\"\\\\\"){f+=e[i++]+e[i++];continue}if(e[i]===\")\"){c--;if(c===0){i++;break}}else if(e[i]===\"(\"){c++;if(e[i+1]!==\"?\"){throw new TypeError(\"Capturing groups are not allowed at \".concat(i))}}f+=e[i++]}if(c)throw new TypeError(\"Unbalanced pattern at \".concat(r));if(!f)throw new TypeError(\"Missing pattern at \".concat(r));n.push({type:\"PATTERN\",index:r,value:f});r=i;continue}n.push({type:\"CHAR\",index:r,value:e[r++]})}n.push({type:\"END\",index:r,value:\"\"});return n}function parse(e,n){if(n===void 0){n={}}var r=lexer(e);var t=n.prefixes,a=t===void 0?\"./\":t,i=n.delimiter,o=i===void 0?\"/#?\":i;var c=[];var f=0;var u=0;var p=\"\";var tryConsume=function(e){if(u<r.length&&r[u].type===e)return r[u++].value};var mustConsume=function(e){var n=tryConsume(e);if(n!==undefined)return n;var t=r[u],a=t.type,i=t.index;throw new TypeError(\"Unexpected \".concat(a,\" at \").concat(i,\", expected \").concat(e))};var consumeText=function(){var e=\"\";var n;while(n=tryConsume(\"CHAR\")||tryConsume(\"ESCAPED_CHAR\")){e+=n}return e};var isSafe=function(e){for(var n=0,r=o;n<r.length;n++){var t=r[n];if(e.indexOf(t)>-1)return true}return false};var safePattern=function(e){var n=c[c.length-1];var r=e||(n&&typeof n===\"string\"?n:\"\");if(n&&!r){throw new TypeError('Must have text between two parameters, missing text after \"'.concat(n.name,'\"'))}if(!r||isSafe(r))return\"[^\".concat(escapeString(o),\"]+?\");return\"(?:(?!\".concat(escapeString(r),\")[^\").concat(escapeString(o),\"])+?\")};while(u<r.length){var v=tryConsume(\"CHAR\");var s=tryConsume(\"NAME\");var d=tryConsume(\"PATTERN\");if(s||d){var g=v||\"\";if(a.indexOf(g)===-1){p+=g;g=\"\"}if(p){c.push(p);p=\"\"}c.push({name:s||f++,prefix:g,suffix:\"\",pattern:d||safePattern(g),modifier:tryConsume(\"MODIFIER\")||\"\"});continue}var x=v||tryConsume(\"ESCAPED_CHAR\");if(x){p+=x;continue}if(p){c.push(p);p=\"\"}var h=tryConsume(\"OPEN\");if(h){var g=consumeText();var l=tryConsume(\"NAME\")||\"\";var m=tryConsume(\"PATTERN\")||\"\";var T=consumeText();mustConsume(\"CLOSE\");c.push({name:l||(m?f++:\"\"),pattern:l&&!m?safePattern(g):m,prefix:g,suffix:T,modifier:tryConsume(\"MODIFIER\")||\"\"});continue}mustConsume(\"END\")}return c}n.parse=parse;function compile(e,n){return tokensToFunction(parse(e,n),n)}n.compile=compile;function tokensToFunction(e,n){if(n===void 0){n={}}var r=flags(n);var t=n.encode,a=t===void 0?function(e){return e}:t,i=n.validate,o=i===void 0?true:i;var c=e.map((function(e){if(typeof e===\"object\"){return new RegExp(\"^(?:\".concat(e.pattern,\")$\"),r)}}));return function(n){var r=\"\";for(var t=0;t<e.length;t++){var i=e[t];if(typeof i===\"string\"){r+=i;continue}var f=n?n[i.name]:undefined;var u=i.modifier===\"?\"||i.modifier===\"*\";var p=i.modifier===\"*\"||i.modifier===\"+\";if(Array.isArray(f)){if(!p){throw new TypeError('Expected \"'.concat(i.name,'\" to not repeat, but got an array'))}if(f.length===0){if(u)continue;throw new TypeError('Expected \"'.concat(i.name,'\" to not be empty'))}for(var v=0;v<f.length;v++){var s=a(f[v],i);if(o&&!c[t].test(s)){throw new TypeError('Expected all \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix}continue}if(typeof f===\"string\"||typeof f===\"number\"){var s=a(String(f),i);if(o&&!c[t].test(s)){throw new TypeError('Expected \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix;continue}if(u)continue;var d=p?\"an array\":\"a string\";throw new TypeError('Expected \"'.concat(i.name,'\" to be ').concat(d))}return r}}n.tokensToFunction=tokensToFunction;function match(e,n){var r=[];var t=pathToRegexp(e,r,n);return regexpToFunction(t,r,n)}n.match=match;function regexpToFunction(e,n,r){if(r===void 0){r={}}var t=r.decode,a=t===void 0?function(e){return e}:t;return function(r){var t=e.exec(r);if(!t)return false;var i=t[0],o=t.index;var c=Object.create(null);var _loop_1=function(e){if(t[e]===undefined)return\"continue\";var r=n[e-1];if(r.modifier===\"*\"||r.modifier===\"+\"){c[r.name]=t[e].split(r.prefix+r.suffix).map((function(e){return a(e,r)}))}else{c[r.name]=a(t[e],r)}};for(var f=1;f<t.length;f++){_loop_1(f)}return{path:i,index:o,params:c}}}n.regexpToFunction=regexpToFunction;function escapeString(e){return e.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g,\"\\\\$1\")}function flags(e){return e&&e.sensitive?\"\":\"i\"}function regexpToRegexp(e,n){if(!n)return e;var r=/\\((?:\\?<(.*?)>)?(?!\\?)/g;var t=0;var a=r.exec(e.source);while(a){n.push({name:a[1]||t++,prefix:\"\",suffix:\"\",modifier:\"\",pattern:\"\"});a=r.exec(e.source)}return e}function arrayToRegexp(e,n,r){var t=e.map((function(e){return pathToRegexp(e,n,r).source}));return new RegExp(\"(?:\".concat(t.join(\"|\"),\")\"),flags(r))}function stringToRegexp(e,n,r){return tokensToRegexp(parse(e,r),n,r)}function tokensToRegexp(e,n,r){if(r===void 0){r={}}var t=r.strict,a=t===void 0?false:t,i=r.start,o=i===void 0?true:i,c=r.end,f=c===void 0?true:c,u=r.encode,p=u===void 0?function(e){return e}:u,v=r.delimiter,s=v===void 0?\"/#?\":v,d=r.endsWith,g=d===void 0?\"\":d;var x=\"[\".concat(escapeString(g),\"]|$\");var h=\"[\".concat(escapeString(s),\"]\");var l=o?\"^\":\"\";for(var m=0,T=e;m<T.length;m++){var E=T[m];if(typeof E===\"string\"){l+=escapeString(p(E))}else{var w=escapeString(p(E.prefix));var y=escapeString(p(E.suffix));if(E.pattern){if(n)n.push(E);if(w||y){if(E.modifier===\"+\"||E.modifier===\"*\"){var R=E.modifier===\"*\"?\"?\":\"\";l+=\"(?:\".concat(w,\"((?:\").concat(E.pattern,\")(?:\").concat(y).concat(w,\"(?:\").concat(E.pattern,\"))*)\").concat(y,\")\").concat(R)}else{l+=\"(?:\".concat(w,\"(\").concat(E.pattern,\")\").concat(y,\")\").concat(E.modifier)}}else{if(E.modifier===\"+\"||E.modifier===\"*\"){throw new TypeError('Can not repeat \"'.concat(E.name,'\" without a prefix and suffix'))}l+=\"(\".concat(E.pattern,\")\").concat(E.modifier)}}else{l+=\"(?:\".concat(w).concat(y,\")\").concat(E.modifier)}}}if(f){if(!a)l+=\"\".concat(h,\"?\");l+=!r.endsWith?\"$\":\"(?=\".concat(x,\")\")}else{var A=e[e.length-1];var _=typeof A===\"string\"?h.indexOf(A[A.length-1])>-1:A===undefined;if(!a){l+=\"(?:\".concat(h,\"(?=\").concat(x,\"))?\")}if(!_){l+=\"(?=\".concat(h,\"|\").concat(x,\")\")}}return new RegExp(l,flags(r))}n.tokensToRegexp=tokensToRegexp;function pathToRegexp(e,n,r){if(e instanceof RegExp)return regexpToRegexp(e,n);if(Array.isArray(e))return arrayToRegexp(e,n,r);return stringToRegexp(e,n,r)}n.pathToRegexp=pathToRegexp})();module.exports=e})();","import type { ServerRuntime } from '../types'\n\nexport const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'\nexport const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'\nexport const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_PREFETCH_SUFFIX = '.prefetch.rsc'\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\n\n// in seconds\nexport const CACHE_ONE_YEAR = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS =\n 'private-next-rsc-track-dynamic-import'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record<string, ServerRuntime> = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */\n apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */\n apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */\n pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */\n pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */\n pagesDirNode: 'pages-dir-node',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n","import path from 'path'\nimport { pathToFileURL } from 'url'\n\n/**\n * The path for a dynamic route must be URLs with a valid scheme.\n *\n * When an absolute Windows path is passed to it, it interprets the beginning of the path as a protocol (`C:`).\n * Therefore, it is important to always construct a complete path.\n * @param dir File directory\n * @param filePath Absolute or relative path\n */\nexport const formatDynamicImportPath = (dir: string, filePath: string) => {\n const absoluteFilePath = path.isAbsolute(filePath)\n ? filePath\n : path.join(dir, filePath)\n const formattedFilePath = pathToFileURL(absoluteFilePath).toString()\n\n return formattedFilePath\n}\n","import type { IncomingMessage } from 'http'\nimport type { BaseNextRequest } from '../base-http'\nimport type { CookieSerializeOptions } from 'next/dist/compiled/cookie'\nimport type { NextApiResponse } from '../../shared/lib/utils'\n\nimport { HeadersAdapter } from '../web/spec-extension/adapters/headers'\nimport {\n PRERENDER_REVALIDATE_HEADER,\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,\n} from '../../lib/constants'\nimport { getTracer } from '../lib/trace/tracer'\nimport { NodeSpan } from '../lib/trace/constants'\n\nexport type NextApiRequestCookies = Partial<{ [key: string]: string }>\nexport type NextApiRequestQuery = Partial<{ [key: string]: string | string[] }>\n\nexport type __ApiPreviewProps = {\n previewModeId: string\n previewModeEncryptionKey: string\n previewModeSigningKey: string\n}\n\nexport function wrapApiHandler<T extends (...args: any[]) => any>(\n page: string,\n handler: T\n): T {\n return ((...args) => {\n getTracer().setRootSpanAttribute('next.route', page)\n // Call API route method\n return getTracer().trace(\n NodeSpan.runHandler,\n {\n spanName: `executing api route (pages) ${page}`,\n },\n () => handler(...args)\n )\n }) as T\n}\n\n/**\n *\n * @param res response object\n * @param statusCode `HTTP` status code of response\n */\nexport function sendStatusCode(\n res: NextApiResponse,\n statusCode: number\n): NextApiResponse<any> {\n res.statusCode = statusCode\n return res\n}\n\n/**\n *\n * @param res response object\n * @param [statusOrUrl] `HTTP` status code of redirect\n * @param url URL of redirect\n */\nexport function redirect(\n res: NextApiResponse,\n statusOrUrl: string | number,\n url?: string\n): NextApiResponse<any> {\n if (typeof statusOrUrl === 'string') {\n url = statusOrUrl\n statusOrUrl = 307\n }\n if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {\n throw new Error(\n `Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`\n )\n }\n res.writeHead(statusOrUrl, { Location: url })\n res.write(url)\n res.end()\n return res\n}\n\nexport function checkIsOnDemandRevalidate(\n req: Request | IncomingMessage | BaseNextRequest,\n previewProps: __ApiPreviewProps\n): {\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n} {\n const headers = HeadersAdapter.from(req.headers)\n\n const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.has(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n}\n\nexport const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`\nexport const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`\n\nexport const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024\n\nexport const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA)\nexport const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS)\n\nexport function clearPreviewData<T>(\n res: NextApiResponse<T>,\n options: {\n path?: string\n } = {}\n): NextApiResponse<T> {\n if (SYMBOL_CLEARED_COOKIES in res) {\n return res\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n\n Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {\n value: true,\n enumerable: false,\n })\n return res\n}\n\n/**\n * Custom error class\n */\nexport class ApiError extends Error {\n readonly statusCode: number\n\n constructor(statusCode: number, message: string) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\n/**\n * Sends error in `response`\n * @param res response object\n * @param statusCode of response\n * @param message of response\n */\nexport function sendError(\n res: NextApiResponse,\n statusCode: number,\n message: string\n): void {\n res.statusCode = statusCode\n res.statusMessage = message\n res.end(message)\n}\n\ninterface LazyProps {\n req: IncomingMessage\n}\n\n/**\n * Execute getter function only if its needed\n * @param LazyProps `req` and `params` for lazyProp\n * @param prop name of property\n * @param getter function to get data\n */\nexport function setLazyProp<T>(\n { req }: LazyProps,\n prop: string,\n getter: () => T\n): void {\n const opts = { configurable: true, enumerable: true }\n const optsReset = { ...opts, writable: true }\n\n Object.defineProperty(req, prop, {\n ...opts,\n get: () => {\n const value = getter()\n // we set the property on the object to avoid recalculating it\n Object.defineProperty(req, prop, { ...optsReset, value })\n return value\n },\n set: (value) => {\n Object.defineProperty(req, prop, { ...optsReset, value })\n },\n })\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextApiResponse } from '../../../shared/lib/utils'\nimport { checkIsOnDemandRevalidate } from '../.'\nimport type { __ApiPreviewProps } from '../.'\nimport type { BaseNextRequest, BaseNextResponse } from '../../base-http'\nimport type { PreviewData } from '../../../types'\n\nimport {\n clearPreviewData,\n COOKIE_NAME_PRERENDER_BYPASS,\n COOKIE_NAME_PRERENDER_DATA,\n SYMBOL_PREVIEW_DATA,\n} from '../index'\nimport { RequestCookies } from '../../web/spec-extension/cookies'\nimport { HeadersAdapter } from '../../web/spec-extension/adapters/headers'\n\nexport function tryGetPreviewData(\n req: IncomingMessage | BaseNextRequest | Request,\n res: ServerResponse | BaseNextResponse,\n options: __ApiPreviewProps,\n multiZoneDraftMode: boolean\n): PreviewData {\n // if an On-Demand revalidation is being done preview mode\n // is disabled\n if (options && checkIsOnDemandRevalidate(req, options).isOnDemandRevalidate) {\n return false\n }\n\n // Read cached preview data if present\n // TODO: use request metadata instead of a symbol\n if (SYMBOL_PREVIEW_DATA in req) {\n return (req as any)[SYMBOL_PREVIEW_DATA] as any\n }\n\n const headers = HeadersAdapter.from(req.headers)\n const cookies = new RequestCookies(headers)\n\n const previewModeId = cookies.get(COOKIE_NAME_PRERENDER_BYPASS)?.value\n const tokenPreviewData = cookies.get(COOKIE_NAME_PRERENDER_DATA)?.value\n\n // Case: preview mode cookie set but data cookie is not set\n if (\n previewModeId &&\n !tokenPreviewData &&\n previewModeId === options.previewModeId\n ) {\n // This is \"Draft Mode\" which doesn't use\n // previewData, so we return an empty object\n // for backwards compat with \"Preview Mode\".\n const data = {}\n Object.defineProperty(req, SYMBOL_PREVIEW_DATA, {\n value: data,\n enumerable: false,\n })\n return data\n }\n\n // Case: neither cookie is set.\n if (!previewModeId && !tokenPreviewData) {\n return false\n }\n\n // Case: one cookie is set, but not the other.\n if (!previewModeId || !tokenPreviewData) {\n if (!multiZoneDraftMode) {\n clearPreviewData(res as NextApiResponse)\n }\n return false\n }\n\n // Case: preview session is for an old build.\n if (previewModeId !== options.previewModeId) {\n if (!multiZoneDraftMode) {\n clearPreviewData(res as NextApiResponse)\n }\n return false\n }\n\n let encryptedPreviewData: {\n data: string\n }\n try {\n const jsonwebtoken =\n require('next/dist/compiled/jsonwebtoken') as typeof import('next/dist/compiled/jsonwebtoken')\n encryptedPreviewData = jsonwebtoken.verify(\n tokenPreviewData,\n options.previewModeSigningKey\n ) as typeof encryptedPreviewData\n } catch {\n // TODO: warn\n clearPreviewData(res as NextApiResponse)\n return false\n }\n\n const { decryptWithSecret } =\n require('../../crypto-utils') as typeof import('../../crypto-utils')\n const decryptedPreviewData = decryptWithSecret(\n Buffer.from(options.previewModeEncryptionKey),\n encryptedPreviewData.data\n )\n\n try {\n // TODO: strict runtime type checking\n const data = JSON.parse(decryptedPreviewData)\n // Cache lookup\n Object.defineProperty(req, SYMBOL_PREVIEW_DATA, {\n value: data,\n enumerable: false,\n })\n return data\n } catch {\n return false\n }\n}\n","import crypto from 'crypto'\n\n// Background:\n// https://security.stackexchange.com/questions/184305/why-would-i-ever-use-aes-256-cbc-if-aes-256-gcm-is-more-secure\n\nconst CIPHER_ALGORITHM = `aes-256-gcm`,\n CIPHER_KEY_LENGTH = 32, // https://stackoverflow.com/a/28307668/4397028\n CIPHER_IV_LENGTH = 16, // https://stackoverflow.com/a/28307668/4397028\n CIPHER_TAG_LENGTH = 16,\n CIPHER_SALT_LENGTH = 64\n\nconst PBKDF2_ITERATIONS = 100_000 // https://support.1password.com/pbkdf2/\n\nexport function encryptWithSecret(secret: Buffer, data: string): string {\n const iv = crypto.randomBytes(CIPHER_IV_LENGTH)\n const salt = crypto.randomBytes(CIPHER_SALT_LENGTH)\n\n // https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest\n const key = crypto.pbkdf2Sync(\n secret,\n salt,\n PBKDF2_ITERATIONS,\n CIPHER_KEY_LENGTH,\n `sha512`\n )\n\n const cipher = crypto.createCipheriv(CIPHER_ALGORITHM, key, iv)\n const encrypted = Buffer.concat([cipher.update(data, `utf8`), cipher.final()])\n\n // https://nodejs.org/api/crypto.html#crypto_cipher_getauthtag\n const tag = cipher.getAuthTag()\n\n return Buffer.concat([\n // Data as required by:\n // Salt for Key: https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest\n // IV: https://nodejs.org/api/crypto.html#crypto_class_decipher\n // Tag: https://nodejs.org/api/crypto.html#crypto_decipher_setauthtag_buffer\n salt,\n iv,\n tag,\n encrypted,\n ]).toString(`hex`)\n}\n\nexport function decryptWithSecret(\n secret: Buffer,\n encryptedData: string\n): string {\n const buffer = Buffer.from(encryptedData, `hex`)\n\n const salt = buffer.slice(0, CIPHER_SALT_LENGTH)\n const iv = buffer.slice(\n CIPHER_SALT_LENGTH,\n CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH\n )\n const tag = buffer.slice(\n CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH,\n CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH + CIPHER_TAG_LENGTH\n )\n const encrypted = buffer.slice(\n CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH + CIPHER_TAG_LENGTH\n )\n\n // https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest\n const key = crypto.pbkdf2Sync(\n secret,\n salt,\n PBKDF2_ITERATIONS,\n CIPHER_KEY_LENGTH,\n `sha512`\n )\n\n const decipher = crypto.createDecipheriv(CIPHER_ALGORITHM, key, iv)\n decipher.setAuthTag(tag)\n\n return decipher.update(encrypted) + decipher.final(`utf8`)\n}\n","import type { CacheFs } from '../../shared/lib/utils'\n\nimport fs from 'fs'\n\nexport const nodeFs: CacheFs = {\n existsSync: fs.existsSync,\n readFile: fs.promises.readFile,\n readFileSync: fs.readFileSync,\n writeFile: (f, d) => fs.promises.writeFile(f, d),\n mkdir: (dir) => fs.promises.mkdir(dir, { recursive: true }),\n stat: (f) => fs.promises.stat(f),\n}\n","/**\n * Contains predefined constants for the trace span name in next/server.\n *\n * Currently, next/server/tracer is internal implementation only for tracking\n * next.js's implementation only with known span names defined here.\n **/\n\n// eslint typescript has a bug with TS enums\n/* eslint-disable no-shadow */\n\nenum BaseServerSpan {\n handleRequest = 'BaseServer.handleRequest',\n run = 'BaseServer.run',\n pipe = 'BaseServer.pipe',\n getStaticHTML = 'BaseServer.getStaticHTML',\n render = 'BaseServer.render',\n renderToResponseWithComponents = 'BaseServer.renderToResponseWithComponents',\n renderToResponse = 'BaseServer.renderToResponse',\n renderToHTML = 'BaseServer.renderToHTML',\n renderError = 'BaseServer.renderError',\n renderErrorToResponse = 'BaseServer.renderErrorToResponse',\n renderErrorToHTML = 'BaseServer.renderErrorToHTML',\n render404 = 'BaseServer.render404',\n}\n\nenum LoadComponentsSpan {\n loadDefaultErrorComponents = 'LoadComponents.loadDefaultErrorComponents',\n loadComponents = 'LoadComponents.loadComponents',\n}\n\nenum NextServerSpan {\n getRequestHandler = 'NextServer.getRequestHandler',\n getServer = 'NextServer.getServer',\n getServerRequestHandler = 'NextServer.getServerRequestHandler',\n createServer = 'createServer.createServer',\n}\n\nenum NextNodeServerSpan {\n compression = 'NextNodeServer.compression',\n getBuildId = 'NextNodeServer.getBuildId',\n createComponentTree = 'NextNodeServer.createComponentTree',\n clientComponentLoading = 'NextNodeServer.clientComponentLoading',\n getLayoutOrPageModule = 'NextNodeServer.getLayoutOrPageModule',\n generateStaticRoutes = 'NextNodeServer.generateStaticRoutes',\n generateFsStaticRoutes = 'NextNodeServer.generateFsStaticRoutes',\n generatePublicRoutes = 'NextNodeServer.generatePublicRoutes',\n generateImageRoutes = 'NextNodeServer.generateImageRoutes.route',\n sendRenderResult = 'NextNodeServer.sendRenderResult',\n proxyRequest = 'NextNodeServer.proxyRequest',\n runApi = 'NextNodeServer.runApi',\n render = 'NextNodeServer.render',\n renderHTML = 'NextNodeServer.renderHTML',\n imageOptimizer = 'NextNodeServer.imageOptimizer',\n getPagePath = 'NextNodeServer.getPagePath',\n getRoutesManifest = 'NextNodeServer.getRoutesManifest',\n findPageComponents = 'NextNodeServer.findPageComponents',\n getFontManifest = 'NextNodeServer.getFontManifest',\n getServerComponentManifest = 'NextNodeServer.getServerComponentManifest',\n getRequestHandler = 'NextNodeServer.getRequestHandler',\n renderToHTML = 'NextNodeServer.renderToHTML',\n renderError = 'NextNodeServer.renderError',\n renderErrorToHTML = 'NextNodeServer.renderErrorToHTML',\n render404 = 'NextNodeServer.render404',\n startResponse = 'NextNodeServer.startResponse',\n\n // nested inner span, does not require parent scope name\n route = 'route',\n onProxyReq = 'onProxyReq',\n apiResolver = 'apiResolver',\n internalFetch = 'internalFetch',\n}\n\nenum StartServerSpan {\n startServer = 'startServer.startServer',\n}\n\nenum RenderSpan {\n getServerSideProps = 'Render.getServerSideProps',\n getStaticProps = 'Render.getStaticProps',\n renderToString = 'Render.renderToString',\n renderDocument = 'Render.renderDocument',\n createBodyResult = 'Render.createBodyResult',\n}\n\nenum AppRenderSpan {\n renderToString = 'AppRender.renderToString',\n renderToReadableStream = 'AppRender.renderToReadableStream',\n getBodyResult = 'AppRender.getBodyResult',\n fetch = 'AppRender.fetch',\n}\n\nenum RouterSpan {\n executeRoute = 'Router.executeRoute',\n}\n\nenum NodeSpan {\n runHandler = 'Node.runHandler',\n}\n\nenum AppRouteRouteHandlersSpan {\n runHandler = 'AppRouteRouteHandlers.runHandler',\n}\n\nenum ResolveMetadataSpan {\n generateMetadata = 'ResolveMetadata.generateMetadata',\n generateViewport = 'ResolveMetadata.generateViewport',\n}\n\nenum MiddlewareSpan {\n execute = 'Middleware.execute',\n}\n\ntype SpanTypes =\n | `${BaseServerSpan}`\n | `${LoadComponentsSpan}`\n | `${NextServerSpan}`\n | `${StartServerSpan}`\n | `${NextNodeServerSpan}`\n | `${RenderSpan}`\n | `${RouterSpan}`\n | `${AppRenderSpan}`\n | `${NodeSpan}`\n | `${AppRouteRouteHandlersSpan}`\n | `${ResolveMetadataSpan}`\n | `${MiddlewareSpan}`\n\n// This list is used to filter out spans that are not relevant to the user\nexport const NextVanillaSpanAllowlist = [\n MiddlewareSpan.execute,\n BaseServerSpan.handleRequest,\n RenderSpan.getServerSideProps,\n RenderSpan.getStaticProps,\n AppRenderSpan.fetch,\n AppRenderSpan.getBodyResult,\n RenderSpan.renderDocument,\n NodeSpan.runHandler,\n AppRouteRouteHandlersSpan.runHandler,\n ResolveMetadataSpan.generateMetadata,\n ResolveMetadataSpan.generateViewport,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.getLayoutOrPageModule,\n NextNodeServerSpan.startResponse,\n NextNodeServerSpan.clientComponentLoading,\n]\n\n// These Spans are allowed to be always logged\n// when the otel log prefix env is set\nexport const LogSpanAllowList = [\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.clientComponentLoading,\n]\n\nexport {\n BaseServerSpan,\n LoadComponentsSpan,\n NextServerSpan,\n NextNodeServerSpan,\n StartServerSpan,\n RenderSpan,\n RouterSpan,\n AppRenderSpan,\n NodeSpan,\n AppRouteRouteHandlersSpan,\n ResolveMetadataSpan,\n MiddlewareSpan,\n}\n\nexport type { SpanTypes }\n","export class ReflectAdapter {\n static get<T extends object>(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set<T extends object>(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has<T extends object>(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty<T extends object>(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n","import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n */\n public static seal(headers: Headers): ReadonlyHeaders {\n return new Proxy<ReadonlyHeaders>(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator<string> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator<string> {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n","/**\n * This module is for next.js server internal usage of path module.\n * It will use native path module for nodejs runtime.\n * It will use path-browserify polyfill for edge runtime.\n */\nlet path\n\nif (process.env.NEXT_RUNTIME === 'edge') {\n path = require('next/dist/compiled/path-browserify')\n} else {\n path = require('path')\n}\n\nmodule.exports = path\n","// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS.\n// Keep file changes in sync with the corresponding `.d.ts` files.\n/**\n * These are the browser versions that support all of the following:\n * static import: https://caniuse.com/es6-module\n * dynamic import: https://caniuse.com/es6-module-dynamic-import\n * import.meta: https://caniuse.com/mdn-javascript_operators_import_meta\n */\nconst MODERN_BROWSERSLIST_TARGET = [\n 'chrome 64',\n 'edge 79',\n 'firefox 67',\n 'opera 51',\n 'safari 12',\n]\n\nmodule.exports = MODERN_BROWSERSLIST_TARGET\n","(()=>{var e={318:function(e,t){(function(e,n){true?n(t):0})(this,(function(e){\"use strict\";class StructError extends TypeError{constructor(e,t){let n;const{message:r,explanation:i,...c}=e;const{path:o}=e;const a=o.length===0?r:`At path: ${o.join(\".\")} -- ${r}`;super(i??a);if(i!=null)this.cause=a;Object.assign(this,c);this.name=this.constructor.name;this.failures=()=>n??(n=[e,...t()])}}function isIterable(e){return isObject(e)&&typeof e[Symbol.iterator]===\"function\"}function isObject(e){return typeof e===\"object\"&&e!=null}function isPlainObject(e){if(Object.prototype.toString.call(e)!==\"[object Object]\"){return false}const t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function print(e){if(typeof e===\"symbol\"){return e.toString()}return typeof e===\"string\"?JSON.stringify(e):`${e}`}function shiftIterator(e){const{done:t,value:n}=e.next();return t?undefined:n}function toFailure(e,t,n,r){if(e===true){return}else if(e===false){e={}}else if(typeof e===\"string\"){e={message:e}}const{path:i,branch:c}=t;const{type:o}=n;const{refinement:a,message:s=`Expected a value of type \\`${o}\\`${a?` with refinement \\`${a}\\``:\"\"}, but received: \\`${print(r)}\\``}=e;return{value:r,type:o,refinement:a,key:i[i.length-1],path:i,branch:c,...e,message:s}}function*toFailures(e,t,n,r){if(!isIterable(e)){e=[e]}for(const i of e){const e=toFailure(i,t,n,r);if(e){yield e}}}function*run(e,t,n={}){const{path:r=[],branch:i=[e],coerce:c=false,mask:o=false}=n;const a={path:r,branch:i};if(c){e=t.coercer(e,a);if(o&&t.type!==\"type\"&&isObject(t.schema)&&isObject(e)&&!Array.isArray(e)){for(const n in e){if(t.schema[n]===undefined){delete e[n]}}}}let s=\"valid\";for(const r of t.validator(e,a)){r.explanation=n.message;s=\"not_valid\";yield[r,undefined]}for(let[u,f,l]of t.entries(e,a)){const t=run(f,l,{path:u===undefined?r:[...r,u],branch:u===undefined?i:[...i,f],coerce:c,mask:o,message:n.message});for(const n of t){if(n[0]){s=n[0].refinement!=null?\"not_refined\":\"not_valid\";yield[n[0],undefined]}else if(c){f=n[1];if(u===undefined){e=f}else if(e instanceof Map){e.set(u,f)}else if(e instanceof Set){e.add(f)}else if(isObject(e)){if(f!==undefined||u in e)e[u]=f}}}}if(s!==\"not_valid\"){for(const r of t.refiner(e,a)){r.explanation=n.message;s=\"not_refined\";yield[r,undefined]}}if(s===\"valid\"){yield[undefined,e]}}class Struct{constructor(e){const{type:t,schema:n,validator:r,refiner:i,coercer:c=(e=>e),entries:o=function*(){}}=e;this.type=t;this.schema=n;this.entries=o;this.coercer=c;if(r){this.validator=(e,t)=>{const n=r(e,t);return toFailures(n,t,this,e)}}else{this.validator=()=>[]}if(i){this.refiner=(e,t)=>{const n=i(e,t);return toFailures(n,t,this,e)}}else{this.refiner=()=>[]}}assert(e,t){return assert(e,this,t)}create(e,t){return create(e,this,t)}is(e){return is(e,this)}mask(e,t){return mask(e,this,t)}validate(e,t={}){return validate(e,this,t)}}function assert(e,t,n){const r=validate(e,t,{message:n});if(r[0]){throw r[0]}}function create(e,t,n){const r=validate(e,t,{coerce:true,message:n});if(r[0]){throw r[0]}else{return r[1]}}function mask(e,t,n){const r=validate(e,t,{coerce:true,mask:true,message:n});if(r[0]){throw r[0]}else{return r[1]}}function is(e,t){const n=validate(e,t);return!n[0]}function validate(e,t,n={}){const r=run(e,t,n);const i=shiftIterator(r);if(i[0]){const e=new StructError(i[0],(function*(){for(const e of r){if(e[0]){yield e[0]}}}));return[e,undefined]}else{const e=i[1];return[undefined,e]}}function assign(...e){const t=e[0].type===\"type\";const n=e.map((e=>e.schema));const r=Object.assign({},...n);return t?type(r):object(r)}function define(e,t){return new Struct({type:e,schema:null,validator:t})}function deprecated(e,t){return new Struct({...e,refiner:(t,n)=>t===undefined||e.refiner(t,n),validator(n,r){if(n===undefined){return true}else{t(n,r);return e.validator(n,r)}}})}function dynamic(e){return new Struct({type:\"dynamic\",schema:null,*entries(t,n){const r=e(t,n);yield*r.entries(t,n)},validator(t,n){const r=e(t,n);return r.validator(t,n)},coercer(t,n){const r=e(t,n);return r.coercer(t,n)},refiner(t,n){const r=e(t,n);return r.refiner(t,n)}})}function lazy(e){let t;return new Struct({type:\"lazy\",schema:null,*entries(n,r){t??(t=e());yield*t.entries(n,r)},validator(n,r){t??(t=e());return t.validator(n,r)},coercer(n,r){t??(t=e());return t.coercer(n,r)},refiner(n,r){t??(t=e());return t.refiner(n,r)}})}function omit(e,t){const{schema:n}=e;const r={...n};for(const e of t){delete r[e]}switch(e.type){case\"type\":return type(r);default:return object(r)}}function partial(e){const t=e instanceof Struct?{...e.schema}:{...e};for(const e in t){t[e]=optional(t[e])}return object(t)}function pick(e,t){const{schema:n}=e;const r={};for(const e of t){r[e]=n[e]}return object(r)}function struct(e,t){console.warn(\"superstruct@0.11 - The `struct` helper has been renamed to `define`.\");return define(e,t)}function any(){return define(\"any\",(()=>true))}function array(e){return new Struct({type:\"array\",schema:e,*entries(t){if(e&&Array.isArray(t)){for(const[n,r]of t.entries()){yield[n,r,e]}}},coercer(e){return Array.isArray(e)?e.slice():e},validator(e){return Array.isArray(e)||`Expected an array value, but received: ${print(e)}`}})}function bigint(){return define(\"bigint\",(e=>typeof e===\"bigint\"))}function boolean(){return define(\"boolean\",(e=>typeof e===\"boolean\"))}function date(){return define(\"date\",(e=>e instanceof Date&&!isNaN(e.getTime())||`Expected a valid \\`Date\\` object, but received: ${print(e)}`))}function enums(e){const t={};const n=e.map((e=>print(e))).join();for(const n of e){t[n]=n}return new Struct({type:\"enums\",schema:t,validator(t){return e.includes(t)||`Expected one of \\`${n}\\`, but received: ${print(t)}`}})}function func(){return define(\"func\",(e=>typeof e===\"function\"||`Expected a function, but received: ${print(e)}`))}function instance(e){return define(\"instance\",(t=>t instanceof e||`Expected a \\`${e.name}\\` instance, but received: ${print(t)}`))}function integer(){return define(\"integer\",(e=>typeof e===\"number\"&&!isNaN(e)&&Number.isInteger(e)||`Expected an integer, but received: ${print(e)}`))}function intersection(e){return new Struct({type:\"intersection\",schema:null,*entries(t,n){for(const r of e){yield*r.entries(t,n)}},*validator(t,n){for(const r of e){yield*r.validator(t,n)}},*refiner(t,n){for(const r of e){yield*r.refiner(t,n)}}})}function literal(e){const t=print(e);const n=typeof e;return new Struct({type:\"literal\",schema:n===\"string\"||n===\"number\"||n===\"boolean\"?e:null,validator(n){return n===e||`Expected the literal \\`${t}\\`, but received: ${print(n)}`}})}function map(e,t){return new Struct({type:\"map\",schema:null,*entries(n){if(e&&t&&n instanceof Map){for(const[r,i]of n.entries()){yield[r,r,e];yield[r,i,t]}}},coercer(e){return e instanceof Map?new Map(e):e},validator(e){return e instanceof Map||`Expected a \\`Map\\` object, but received: ${print(e)}`}})}function never(){return define(\"never\",(()=>false))}function nullable(e){return new Struct({...e,validator:(t,n)=>t===null||e.validator(t,n),refiner:(t,n)=>t===null||e.refiner(t,n)})}function number(){return define(\"number\",(e=>typeof e===\"number\"&&!isNaN(e)||`Expected a number, but received: ${print(e)}`))}function object(e){const t=e?Object.keys(e):[];const n=never();return new Struct({type:\"object\",schema:e?e:null,*entries(r){if(e&&isObject(r)){const i=new Set(Object.keys(r));for(const n of t){i.delete(n);yield[n,r[n],e[n]]}for(const e of i){yield[e,r[e],n]}}},validator(e){return isObject(e)||`Expected an object, but received: ${print(e)}`},coercer(e){return isObject(e)?{...e}:e}})}function optional(e){return new Struct({...e,validator:(t,n)=>t===undefined||e.validator(t,n),refiner:(t,n)=>t===undefined||e.refiner(t,n)})}function record(e,t){return new Struct({type:\"record\",schema:null,*entries(n){if(isObject(n)){for(const r in n){const i=n[r];yield[r,r,e];yield[r,i,t]}}},validator(e){return isObject(e)||`Expected an object, but received: ${print(e)}`}})}function regexp(){return define(\"regexp\",(e=>e instanceof RegExp))}function set(e){return new Struct({type:\"set\",schema:null,*entries(t){if(e&&t instanceof Set){for(const n of t){yield[n,n,e]}}},coercer(e){return e instanceof Set?new Set(e):e},validator(e){return e instanceof Set||`Expected a \\`Set\\` object, but received: ${print(e)}`}})}function string(){return define(\"string\",(e=>typeof e===\"string\"||`Expected a string, but received: ${print(e)}`))}function tuple(e){const t=never();return new Struct({type:\"tuple\",schema:null,*entries(n){if(Array.isArray(n)){const r=Math.max(e.length,n.length);for(let i=0;i<r;i++){yield[i,n[i],e[i]||t]}}},validator(e){return Array.isArray(e)||`Expected an array, but received: ${print(e)}`}})}function type(e){const t=Object.keys(e);return new Struct({type:\"type\",schema:e,*entries(n){if(isObject(n)){for(const r of t){yield[r,n[r],e[r]]}}},validator(e){return isObject(e)||`Expected an object, but received: ${print(e)}`},coercer(e){return isObject(e)?{...e}:e}})}function union(e){const t=e.map((e=>e.type)).join(\" | \");return new Struct({type:\"union\",schema:null,coercer(t){for(const n of e){const[e,r]=n.validate(t,{coerce:true});if(!e){return r}}return t},validator(n,r){const i=[];for(const t of e){const[...e]=run(n,t,r);const[c]=e;if(!c[0]){return[]}else{for(const[t]of e){if(t){i.push(t)}}}}return[`Expected the value to satisfy a union of \\`${t}\\`, but received: ${print(n)}`,...i]}})}function unknown(){return define(\"unknown\",(()=>true))}function coerce(e,t,n){return new Struct({...e,coercer:(r,i)=>is(r,t)?e.coercer(n(r,i),i):e.coercer(r,i)})}function defaulted(e,t,n={}){return coerce(e,unknown(),(e=>{const r=typeof t===\"function\"?t():t;if(e===undefined){return r}if(!n.strict&&isPlainObject(e)&&isPlainObject(r)){const t={...e};let n=false;for(const e in r){if(t[e]===undefined){t[e]=r[e];n=true}}if(n){return t}}return e}))}function trimmed(e){return coerce(e,string(),(e=>e.trim()))}function empty(e){return refine(e,\"empty\",(t=>{const n=getSize(t);return n===0||`Expected an empty ${e.type} but received one with a size of \\`${n}\\``}))}function getSize(e){if(e instanceof Map||e instanceof Set){return e.size}else{return e.length}}function max(e,t,n={}){const{exclusive:r}=n;return refine(e,\"max\",(n=>r?n<t:n<=t||`Expected a ${e.type} less than ${r?\"\":\"or equal to \"}${t} but received \\`${n}\\``))}function min(e,t,n={}){const{exclusive:r}=n;return refine(e,\"min\",(n=>r?n>t:n>=t||`Expected a ${e.type} greater than ${r?\"\":\"or equal to \"}${t} but received \\`${n}\\``))}function nonempty(e){return refine(e,\"nonempty\",(t=>{const n=getSize(t);return n>0||`Expected a nonempty ${e.type} but received an empty one`}))}function pattern(e,t){return refine(e,\"pattern\",(n=>t.test(n)||`Expected a ${e.type} matching \\`/${t.source}/\\` but received \"${n}\"`))}function size(e,t,n=t){const r=`Expected a ${e.type}`;const i=t===n?`of \\`${t}\\``:`between \\`${t}\\` and \\`${n}\\``;return refine(e,\"size\",(e=>{if(typeof e===\"number\"||e instanceof Date){return t<=e&&e<=n||`${r} ${i} but received \\`${e}\\``}else if(e instanceof Map||e instanceof Set){const{size:c}=e;return t<=c&&c<=n||`${r} with a size ${i} but received one with a size of \\`${c}\\``}else{const{length:c}=e;return t<=c&&c<=n||`${r} with a length ${i} but received one with a length of \\`${c}\\``}}))}function refine(e,t,n){return new Struct({...e,*refiner(r,i){yield*e.refiner(r,i);const c=n(r,i);const o=toFailures(c,i,e,r);for(const e of o){yield{...e,refinement:t}}}})}e.Struct=Struct;e.StructError=StructError;e.any=any;e.array=array;e.assert=assert;e.assign=assign;e.bigint=bigint;e.boolean=boolean;e.coerce=coerce;e.create=create;e.date=date;e.defaulted=defaulted;e.define=define;e.deprecated=deprecated;e.dynamic=dynamic;e.empty=empty;e.enums=enums;e.func=func;e.instance=instance;e.integer=integer;e.intersection=intersection;e.is=is;e.lazy=lazy;e.literal=literal;e.map=map;e.mask=mask;e.max=max;e.min=min;e.never=never;e.nonempty=nonempty;e.nullable=nullable;e.number=number;e.object=object;e.omit=omit;e.optional=optional;e.partial=partial;e.pattern=pattern;e.pick=pick;e.record=record;e.refine=refine;e.regexp=regexp;e.set=set;e.size=size;e.string=string;e.struct=struct;e.trimmed=trimmed;e.tuple=tuple;e.type=type;e.union=union;e.unknown=unknown;e.validate=validate}))}};if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t={};e[318](0,t);module.exports=t})();","// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n __webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => { def[key] = () => (value[key]) });\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import MODERN_BROWSERSLIST_TARGET from './modern-browserslist-target'\n\nexport { MODERN_BROWSERSLIST_TARGET }\n\nexport type ValueOf<T> = Required<T>[keyof T]\n\nexport const COMPILER_NAMES = {\n client: 'client',\n server: 'server',\n edgeServer: 'edge-server',\n} as const\n\nexport type CompilerNameValues = ValueOf<typeof COMPILER_NAMES>\n\nexport const COMPILER_INDEXES: {\n [compilerKey in CompilerNameValues]: number\n} = {\n [COMPILER_NAMES.client]: 0,\n [COMPILER_NAMES.server]: 1,\n [COMPILER_NAMES.edgeServer]: 2,\n} as const\n\nexport const UNDERSCORE_NOT_FOUND_ROUTE = '/_not-found'\nexport const UNDERSCORE_NOT_FOUND_ROUTE_ENTRY = `${UNDERSCORE_NOT_FOUND_ROUTE}/page`\nexport const PHASE_EXPORT = 'phase-export'\nexport const PHASE_PRODUCTION_BUILD = 'phase-production-build'\nexport const PHASE_PRODUCTION_SERVER = 'phase-production-server'\nexport const PHASE_DEVELOPMENT_SERVER = 'phase-development-server'\nexport const PHASE_TEST = 'phase-test'\nexport const PHASE_INFO = 'phase-info'\nexport const PAGES_MANIFEST = 'pages-manifest.json'\nexport const WEBPACK_STATS = 'webpack-stats.json'\nexport const APP_PATHS_MANIFEST = 'app-paths-manifest.json'\nexport const APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json'\nexport const BUILD_MANIFEST = 'build-manifest.json'\nexport const APP_BUILD_MANIFEST = 'app-build-manifest.json'\nexport const FUNCTIONS_CONFIG_MANIFEST = 'functions-config-manifest.json'\nexport const SUBRESOURCE_INTEGRITY_MANIFEST = 'subresource-integrity-manifest'\nexport const NEXT_FONT_MANIFEST = 'next-font-manifest'\nexport const EXPORT_MARKER = 'export-marker.json'\nexport const EXPORT_DETAIL = 'export-detail.json'\nexport const PRERENDER_MANIFEST = 'prerender-manifest.json'\nexport const ROUTES_MANIFEST = 'routes-manifest.json'\nexport const IMAGES_MANIFEST = 'images-manifest.json'\nexport const SERVER_FILES_MANIFEST = 'required-server-files.json'\nexport const DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json'\nexport const MIDDLEWARE_MANIFEST = 'middleware-manifest.json'\nexport const TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST =\n '_clientMiddlewareManifest.json'\nexport const TURBOPACK_CLIENT_BUILD_MANIFEST = 'client-build-manifest.json'\nexport const DEV_CLIENT_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json'\nexport const REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json'\nexport const SERVER_DIRECTORY = 'server'\nexport const CONFIG_FILES = [\n 'next.config.js',\n 'next.config.mjs',\n 'next.config.ts',\n]\nexport const BUILD_ID_FILE = 'BUILD_ID'\nexport const BLOCKED_PAGES = ['/_document', '/_app', '/_error']\nexport const CLIENT_PUBLIC_FILES_PATH = 'public'\nexport const CLIENT_STATIC_FILES_PATH = 'static'\nexport const STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__'\nexport const NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__'\nexport const BARREL_OPTIMIZATION_PREFIX = '__barrel_optimize__'\n\n// server/[entry]/page_client-reference-manifest.js\nexport const CLIENT_REFERENCE_MANIFEST = 'client-reference-manifest'\n// server/server-reference-manifest\nexport const SERVER_REFERENCE_MANIFEST = 'server-reference-manifest'\n// server/middleware-build-manifest.js\nexport const MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest'\n// server/middleware-react-loadable-manifest.js\nexport const MIDDLEWARE_REACT_LOADABLE_MANIFEST =\n 'middleware-react-loadable-manifest'\n// server/interception-route-rewrite-manifest.js\nexport const INTERCEPTION_ROUTE_REWRITE_MANIFEST =\n 'interception-route-rewrite-manifest'\n// server/dynamic-css-manifest.js\nexport const DYNAMIC_CSS_MANIFEST = 'dynamic-css-manifest'\n\n// static/runtime/main.js\nexport const CLIENT_STATIC_FILES_RUNTIME_MAIN = `main`\nexport const CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = `${CLIENT_STATIC_FILES_RUNTIME_MAIN}-app`\n// next internal client components chunk for layouts\nexport const APP_CLIENT_INTERNALS = 'app-pages-internals'\n// static/runtime/react-refresh.js\nexport const CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = `react-refresh`\n// static/runtime/amp.js\nexport const CLIENT_STATIC_FILES_RUNTIME_AMP = `amp`\n// static/runtime/webpack.js\nexport const CLIENT_STATIC_FILES_RUNTIME_WEBPACK = `webpack`\n// static/runtime/polyfills.js\nexport const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = 'polyfills'\nexport const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS\n)\nexport const DEFAULT_RUNTIME_WEBPACK = 'webpack-runtime'\nexport const EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack'\nexport const STATIC_PROPS_ID = '__N_SSG'\nexport const SERVER_PROPS_ID = '__N_SSP'\nexport const DEFAULT_SERIF_FONT = {\n name: 'Times New Roman',\n xAvgCharWidth: 821,\n azAvgWidth: 854.3953488372093,\n unitsPerEm: 2048,\n}\nexport const DEFAULT_SANS_SERIF_FONT = {\n name: 'Arial',\n xAvgCharWidth: 904,\n azAvgWidth: 934.5116279069767,\n unitsPerEm: 2048,\n}\nexport const STATIC_STATUS_PAGES = ['/500']\nexport const TRACE_OUTPUT_VERSION = 1\n// in `MB`\nexport const TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000\n\nexport const RSC_MODULE_TYPES = {\n client: 'client',\n server: 'server',\n} as const\n\n// comparing\n// https://nextjs.org/docs/api-reference/edge-runtime\n// with\n// https://nodejs.org/docs/latest/api/globals.html\nexport const EDGE_UNSUPPORTED_NODE_APIS = [\n 'clearImmediate',\n 'setImmediate',\n 'BroadcastChannel',\n 'ByteLengthQueuingStrategy',\n 'CompressionStream',\n 'CountQueuingStrategy',\n 'DecompressionStream',\n 'DomException',\n 'MessageChannel',\n 'MessageEvent',\n 'MessagePort',\n 'ReadableByteStreamController',\n 'ReadableStreamBYOBRequest',\n 'ReadableStreamDefaultController',\n 'TransformStreamDefaultController',\n 'WritableStreamDefaultController',\n]\n\nexport const SYSTEM_ENTRYPOINTS = new Set<string>([\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP,\n])\n","import type { UrlWithParsedQuery } from 'url'\nimport { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'\n\nconst DUMMY_ORIGIN = 'http://n'\n\nexport function isFullStringUrl(url: string) {\n return /https?:\\/\\//.test(url)\n}\n\nexport function parseUrl(url: string): URL | undefined {\n let parsed: URL | undefined = undefined\n try {\n parsed = new URL(url, DUMMY_ORIGIN)\n } catch {}\n return parsed\n}\n\nexport function parseReqUrl(url: string): UrlWithParsedQuery | undefined {\n const parsedUrl: URL | undefined = parseUrl(url)\n\n if (!parsedUrl) {\n return\n }\n\n const query: Record<string, string | string[]> = {}\n\n for (const key of parsedUrl.searchParams.keys()) {\n const values = parsedUrl.searchParams.getAll(key)\n query[key] = values.length > 1 ? values : values[0]\n }\n\n const legacyUrl: UrlWithParsedQuery = {\n query,\n hash: parsedUrl.hash,\n search: parsedUrl.search,\n path: parsedUrl.pathname,\n pathname: parsedUrl.pathname,\n href: `${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`,\n host: '',\n hostname: '',\n auth: '',\n protocol: '',\n slashes: null,\n port: '',\n }\n return legacyUrl\n}\n\nexport function stripNextRscUnionQuery(relativeUrl: string): string {\n const urlInstance = new URL(relativeUrl, DUMMY_ORIGIN)\n urlInstance.searchParams.delete(NEXT_RSC_UNION_QUERY)\n\n return urlInstance.pathname + urlInstance.search\n}\n","export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap<readonly string[], readonly string[]>()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n","/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n","import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n","import type { Segment } from '../../server/app-render/types'\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\n","import { normalizeAppPath } from './app-paths'\n\n// order matters here, the first match will be used\nexport const INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)',\n] as const\n\nexport function isInterceptionRouteAppPath(path: string): boolean {\n // TODO-APP: add more serious validation\n return (\n path\n .split('/')\n .find((segment) =>\n INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n ) !== undefined\n )\n}\n\nexport function extractInterceptionRouteInformation(path: string) {\n let interceptingRoute: string | undefined,\n marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined,\n interceptedRoute: string | undefined\n\n for (const segment of path.split('/')) {\n marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n if (marker) {\n ;[interceptingRoute, interceptedRoute] = path.split(marker, 2)\n break\n }\n }\n\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(\n `Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`\n )\n }\n\n interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n\n switch (marker) {\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute\n }\n break\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`\n )\n }\n interceptedRoute = interceptingRoute\n .split('/')\n .slice(0, -1)\n .concat(interceptedRoute)\n .join('/')\n break\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute\n break\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n\n const splitInterceptingRoute = interceptingRoute.split('/')\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`\n )\n }\n\n interceptedRoute = splitInterceptingRoute\n .slice(0, -2)\n .concat(interceptedRoute)\n .join('/')\n break\n default:\n throw new Error('Invariant: unexpected marker')\n }\n\n return { interceptingRoute, interceptedRoute }\n}\n","import {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from './interception-routes'\n\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/\n\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/\n\n/**\n * Check if a route is dynamic.\n *\n * @param route - The route to check.\n * @param strict - Whether to use strict mode which prohibits segments with prefixes/suffixes (default: true).\n * @returns Whether the route is dynamic.\n */\nexport function isDynamicRoute(route: string, strict: boolean = true): boolean {\n if (isInterceptionRouteAppPath(route)) {\n route = extractInterceptionRouteInformation(route).interceptedRoute\n }\n\n if (strict) {\n return TEST_STRICT_ROUTE.test(route)\n }\n\n return TEST_ROUTE.test(route)\n}\n","/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n","import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n","// regexp is based on https://github.com/sindresorhus/escape-string-regexp\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g\n\nexport function escapeStringRegexp(str: string) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, '\\\\$&')\n }\n return str\n}\n","/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */\nexport function removeTrailingSlash(route: string) {\n return route.replace(/\\/$/, '') || '/'\n}\n","import {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../../../lib/constants'\nimport { INTERCEPTION_ROUTE_MARKERS } from './interception-routes'\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { removeTrailingSlash } from './remove-trailing-slash'\n\nexport interface Group {\n pos: number\n repeat: boolean\n optional: boolean\n}\n\nexport interface RouteRegex {\n groups: { [groupName: string]: Group }\n re: RegExp\n}\n\ntype GetNamedRouteRegexOptions = {\n /**\n * Whether to prefix the route keys with the NEXT_INTERCEPTION_MARKER_PREFIX\n * or NEXT_QUERY_PARAM_PREFIX. This is only relevant when creating the\n * routes-manifest during the build.\n */\n prefixRouteKeys: boolean\n\n /**\n * Whether to include the suffix in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n\n /**\n * Whether to backtrack duplicate keys. This is only relevant when creating\n * the routes-manifest during the build.\n */\n backreferenceDuplicateKeys?: boolean\n}\n\ntype GetRouteRegexOptions = {\n /**\n * Whether to include extra parts in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n * of adding this option.\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n}\n\n/**\n * Regular expression pattern used to match route parameters.\n * Matches both single parameters and parameter groups.\n * Examples:\n * - `[[...slug]]` matches parameter group with key 'slug', repeat: true, optional: true\n * - `[...slug]` matches parameter group with key 'slug', repeat: true, optional: false\n * - `[[foo]]` matches parameter with key 'foo', repeat: false, optional: true\n * - `[bar]` matches parameter with key 'bar', repeat: false, optional: false\n */\nconst PARAMETER_PATTERN = /^([^[]*)\\[((?:\\[[^\\]]*\\])|[^\\]]+)\\](.*)$/\n\n/**\n * Parses a given parameter from a route to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[[...slug]]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[[foo]]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `[bar]` -> `{ key: 'bar', repeat: false, optional: false }`\n * - `fizz` -> `{ key: 'fizz', repeat: false, optional: false }`\n * @param param - The parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseParameter(param: string) {\n const match = param.match(PARAMETER_PATTERN)\n\n if (!match) {\n return parseMatchedParameter(param)\n }\n\n return parseMatchedParameter(match[2])\n}\n\n/**\n * Parses a matched parameter from the PARAMETER_PATTERN regex to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n * @param param - The matched parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nfunction parseMatchedParameter(param: string) {\n const optional = param.startsWith('[') && param.endsWith(']')\n if (optional) {\n param = param.slice(1, -1)\n }\n const repeat = param.startsWith('...')\n if (repeat) {\n param = param.slice(3)\n }\n return { key: param, repeat, optional }\n}\n\nfunction getParametrizedRoute(\n route: string,\n includeSuffix: boolean,\n includePrefix: boolean\n) {\n const groups: { [groupName: string]: Group } = {}\n let groupIndex = 1\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const markerMatch = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (markerMatch && paramMatches && paramMatches[2]) {\n const { key, optional, repeat } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n segments.push(`/${escapeStringRegexp(markerMatch)}([^/]+?)`)\n } else if (paramMatches && paramMatches[2]) {\n const { key, repeat, optional } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = repeat ? (optional ? '(?:/(.+?))?' : '/(.+?)') : '/([^/]+?)'\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n parameterizedRoute: segments.join(''),\n groups,\n }\n}\n\n/**\n * From a normalized route this function generates a regular expression and\n * a corresponding groups object intended to be used to store matching groups\n * from the regular expression.\n */\nexport function getRouteRegex(\n normalizedRoute: string,\n {\n includeSuffix = false,\n includePrefix = false,\n excludeOptionalTrailingSlash = false,\n }: GetRouteRegexOptions = {}\n): RouteRegex {\n const { parameterizedRoute, groups } = getParametrizedRoute(\n normalizedRoute,\n includeSuffix,\n includePrefix\n )\n\n let re = parameterizedRoute\n if (!excludeOptionalTrailingSlash) {\n re += '(?:/)?'\n }\n\n return {\n re: new RegExp(`^${re}$`),\n groups: groups,\n }\n}\n\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */\nfunction buildGetSafeRouteKey() {\n let i = 0\n\n return () => {\n let routeKey = ''\n let j = ++i\n while (j > 0) {\n routeKey += String.fromCharCode(97 + ((j - 1) % 26))\n j = Math.floor((j - 1) / 26)\n }\n return routeKey\n }\n}\n\nfunction getSafeKeyFromSegment({\n interceptionMarker,\n getSafeRouteKey,\n segment,\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n}: {\n interceptionMarker?: string\n getSafeRouteKey: () => string\n segment: string\n routeKeys: Record<string, string>\n keyPrefix?: string\n backreferenceDuplicateKeys: boolean\n}) {\n const { key, optional, repeat } = parseMatchedParameter(segment)\n\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, '')\n\n if (keyPrefix) {\n cleanedKey = `${keyPrefix}${cleanedKey}`\n }\n let invalidKey = false\n\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true\n }\n\n if (invalidKey) {\n cleanedKey = getSafeRouteKey()\n }\n\n const duplicateKey = cleanedKey in routeKeys\n\n if (keyPrefix) {\n routeKeys[cleanedKey] = `${keyPrefix}${key}`\n } else {\n routeKeys[cleanedKey] = key\n }\n\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker\n ? escapeStringRegexp(interceptionMarker)\n : ''\n\n let pattern: string\n if (duplicateKey && backreferenceDuplicateKeys) {\n // Use a backreference to the key to ensure that the key is the same value\n // in each of the placeholders.\n pattern = `\\\\k<${cleanedKey}>`\n } else if (repeat) {\n pattern = `(?<${cleanedKey}>.+?)`\n } else {\n pattern = `(?<${cleanedKey}>[^/]+?)`\n }\n\n return optional\n ? `(?:/${interceptionPrefix}${pattern})?`\n : `/${interceptionPrefix}${pattern}`\n}\n\nfunction getNamedParametrizedRoute(\n route: string,\n prefixRouteKeys: boolean,\n includeSuffix: boolean,\n includePrefix: boolean,\n backreferenceDuplicateKeys: boolean\n) {\n const getSafeRouteKey = buildGetSafeRouteKey()\n const routeKeys: { [named: string]: string } = {}\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const hasInterceptionMarker = INTERCEPTION_ROUTE_MARKERS.some((m) =>\n segment.startsWith(m)\n )\n\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (hasInterceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n segments.push(\n getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: paramMatches[1],\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys\n ? NEXT_INTERCEPTION_MARKER_PREFIX\n : undefined,\n backreferenceDuplicateKeys,\n })\n )\n } else if (paramMatches && paramMatches[2]) {\n // If there's a prefix, add it to the segments if it's enabled.\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined,\n backreferenceDuplicateKeys,\n })\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys,\n }\n}\n\n/**\n * This function extends `getRouteRegex` generating also a named regexp where\n * each group is named along with a routeKeys object that indexes the assigned\n * named group with its corresponding key. When the routeKeys need to be\n * prefixed to uniquely identify internally the \"prefixRouteKey\" arg should\n * be \"true\" currently this is only the case when creating the routes-manifest\n * during the build\n */\nexport function getNamedRouteRegex(\n normalizedRoute: string,\n options: GetNamedRouteRegexOptions\n) {\n const result = getNamedParametrizedRoute(\n normalizedRoute,\n options.prefixRouteKeys,\n options.includeSuffix ?? false,\n options.includePrefix ?? false,\n options.backreferenceDuplicateKeys ?? false\n )\n\n let namedRegex = result.namedParameterizedRoute\n if (!options.excludeOptionalTrailingSlash) {\n namedRegex += '(?:/)?'\n }\n\n return {\n ...getRouteRegex(normalizedRoute, options),\n namedRegex: `^${namedRegex}$`,\n routeKeys: result.routeKeys,\n }\n}\n\n/**\n * Generates a named regexp.\n * This is intended to be using for build time only.\n */\nexport function getNamedMiddlewareRegex(\n normalizedRoute: string,\n options: {\n catchAll?: boolean\n }\n) {\n const { parameterizedRoute } = getParametrizedRoute(\n normalizedRoute,\n false,\n false\n )\n const { catchAll = true } = options\n if (parameterizedRoute === '/') {\n let catchAllRegex = catchAll ? '.*' : ''\n return {\n namedRegex: `^/${catchAllRegex}$`,\n }\n }\n\n const { namedParameterizedRoute } = getNamedParametrizedRoute(\n normalizedRoute,\n false,\n false,\n false,\n false\n )\n let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''\n return {\n namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$`,\n }\n}\n","import type { HtmlProps } from './html-context.shared-runtime'\nimport type { ComponentType, JSX } from 'react'\nimport type { DomainLocale } from '../../server/config'\nimport type { Env } from '@next/env'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextRouter } from './router/router'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { PreviewData } from '../../types'\nimport type { COMPILER_NAMES } from './constants'\nimport type fs from 'fs'\n\nexport type NextComponentType<\n Context extends BaseContext = NextPageContext,\n InitialProps = {},\n Props = {},\n> = ComponentType<Props> & {\n /**\n * Used for initial page load data population. Data returned from `getInitialProps` is serialized when server rendered.\n * Make sure to return plain `Object` without using `Date`, `Map`, `Set`.\n * @param context Context of `page`\n */\n getInitialProps?(context: Context): InitialProps | Promise<InitialProps>\n}\n\nexport type DocumentType = NextComponentType<\n DocumentContext,\n DocumentInitialProps,\n DocumentProps\n>\n\nexport type AppType<P = {}> = NextComponentType<\n AppContextType,\n P,\n AppPropsType<any, P>\n>\n\nexport type AppTreeType = ComponentType<\n AppInitialProps & { [name: string]: any }\n>\n\n/**\n * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team.\n * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting\n */\nexport const WEB_VITALS = ['CLS', 'FCP', 'FID', 'INP', 'LCP', 'TTFB'] as const\nexport type NextWebVitalsMetric = {\n id: string\n startTime: number\n value: number\n attribution?: { [key: string]: unknown }\n} & (\n | {\n label: 'web-vital'\n name: (typeof WEB_VITALS)[number]\n }\n | {\n label: 'custom'\n name:\n | 'Next.js-hydration'\n | 'Next.js-route-change-to-render'\n | 'Next.js-render'\n }\n)\n\nexport type Enhancer<C> = (Component: C) => C\n\nexport type ComponentsEnhancer =\n | {\n enhanceApp?: Enhancer<AppType>\n enhanceComponent?: Enhancer<NextComponentType>\n }\n | Enhancer<NextComponentType>\n\nexport type RenderPageResult = {\n html: string\n head?: Array<JSX.Element | null>\n}\n\nexport type RenderPage = (\n options?: ComponentsEnhancer\n) => DocumentInitialProps | Promise<DocumentInitialProps>\n\nexport type BaseContext = {\n res?: ServerResponse\n [k: string]: any\n}\n\nexport type NEXT_DATA = {\n props: Record<string, any>\n page: string\n query: ParsedUrlQuery\n buildId: string\n assetPrefix?: string\n runtimeConfig?: { [key: string]: any }\n nextExport?: boolean\n autoExport?: boolean\n isFallback?: boolean\n isExperimentalCompile?: boolean\n dynamicIds?: (string | number)[]\n err?: Error & {\n statusCode?: number\n source?: typeof COMPILER_NAMES.server | typeof COMPILER_NAMES.edgeServer\n }\n gsp?: boolean\n gssp?: boolean\n customServer?: boolean\n gip?: boolean\n appGip?: boolean\n locale?: string\n locales?: readonly string[]\n defaultLocale?: string\n domainLocales?: readonly DomainLocale[]\n scriptLoader?: any[]\n isPreview?: boolean\n notFoundSrcPage?: string\n}\n\n/**\n * `Next` context\n */\nexport interface NextPageContext {\n /**\n * Error object if encountered during rendering\n */\n err?: (Error & { statusCode?: number }) | null\n /**\n * `HTTP` request object.\n */\n req?: IncomingMessage\n /**\n * `HTTP` response object.\n */\n res?: ServerResponse\n /**\n * Path section of `URL`.\n */\n pathname: string\n /**\n * Query string section of `URL` parsed as an object.\n */\n query: ParsedUrlQuery\n /**\n * `String` of the actual path including query.\n */\n asPath?: string\n /**\n * The currently active locale\n */\n locale?: string\n /**\n * All configured locales\n */\n locales?: readonly string[]\n /**\n * The configured default locale\n */\n defaultLocale?: string\n /**\n * `Component` the tree of the App to use if needing to render separately\n */\n AppTree: AppTreeType\n}\n\nexport type AppContextType<Router extends NextRouter = NextRouter> = {\n Component: NextComponentType<NextPageContext>\n AppTree: AppTreeType\n ctx: NextPageContext\n router: Router\n}\n\nexport type AppInitialProps<PageProps = any> = {\n pageProps: PageProps\n}\n\nexport type AppPropsType<\n Router extends NextRouter = NextRouter,\n PageProps = {},\n> = AppInitialProps<PageProps> & {\n Component: NextComponentType<NextPageContext, any, any>\n router: Router\n __N_SSG?: boolean\n __N_SSP?: boolean\n}\n\nexport type DocumentContext = NextPageContext & {\n renderPage: RenderPage\n defaultGetInitialProps(\n ctx: DocumentContext,\n options?: { nonce?: string }\n ): Promise<DocumentInitialProps>\n}\n\nexport type DocumentInitialProps = RenderPageResult & {\n styles?: React.ReactElement[] | Iterable<React.ReactNode> | JSX.Element\n}\n\nexport type DocumentProps = DocumentInitialProps & HtmlProps\n\n/**\n * Next `API` route request\n */\nexport interface NextApiRequest extends IncomingMessage {\n /**\n * Object of `query` values from url\n */\n query: Partial<{\n [key: string]: string | string[]\n }>\n /**\n * Object of `cookies` from header\n */\n cookies: Partial<{\n [key: string]: string\n }>\n\n body: any\n\n env: Env\n\n draftMode?: boolean\n\n preview?: boolean\n /**\n * Preview data set on the request, if any\n * */\n previewData?: PreviewData\n}\n\n/**\n * Send body of response\n */\ntype Send<T> = (body: T) => void\n\n/**\n * Next `API` route response\n */\nexport type NextApiResponse<Data = any> = ServerResponse & {\n /**\n * Send data `any` data in response\n */\n send: Send<Data>\n /**\n * Send data `json` data in response\n */\n json: Send<Data>\n status: (statusCode: number) => NextApiResponse<Data>\n redirect(url: string): NextApiResponse<Data>\n redirect(status: number, url: string): NextApiResponse<Data>\n\n /**\n * Set draft mode\n */\n setDraftMode: (options: { enable: boolean }) => NextApiResponse<Data>\n\n /**\n * Set preview data for Next.js' prerender mode\n */\n setPreviewData: (\n data: object | string,\n options?: {\n /**\n * Specifies the number (in seconds) for the preview session to last for.\n * The given number will be converted to an integer by rounding down.\n * By default, no maximum age is set and the preview session finishes\n * when the client shuts down (browser is closed).\n */\n maxAge?: number\n /**\n * Specifies the path for the preview session to work under. By default,\n * the path is considered the \"default path\", i.e., any pages under \"/\".\n */\n path?: string\n }\n ) => NextApiResponse<Data>\n\n /**\n * Clear preview data for Next.js' prerender mode\n */\n clearPreviewData: (options?: { path?: string }) => NextApiResponse<Data>\n\n /**\n * Revalidate a specific page and regenerate it using On-Demand Incremental\n * Static Regeneration.\n * The path should be an actual path, not a rewritten path. E.g. for\n * \"/blog/[slug]\" this should be \"/blog/post-1\".\n * @link https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation-with-revalidatepath\n */\n revalidate: (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => Promise<void>\n}\n\n/**\n * Next `API` route handler\n */\nexport type NextApiHandler<T = any> = (\n req: NextApiRequest,\n res: NextApiResponse<T>\n) => unknown | Promise<unknown>\n\n/**\n * Utils\n */\nexport function execOnce<T extends (...args: any[]) => ReturnType<T>>(\n fn: T\n): T {\n let used = false\n let result: ReturnType<T>\n\n return ((...args: any[]) => {\n if (!used) {\n used = true\n result = fn(...args)\n }\n return result\n }) as T\n}\n\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/\nexport const isAbsoluteUrl = (url: string) => ABSOLUTE_URL_REGEX.test(url)\n\nexport function getLocationOrigin() {\n const { protocol, hostname, port } = window.location\n return `${protocol}//${hostname}${port ? ':' + port : ''}`\n}\n\nexport function getURL() {\n const { href } = window.location\n const origin = getLocationOrigin()\n return href.substring(origin.length)\n}\n\nexport function getDisplayName<P>(Component: ComponentType<P>) {\n return typeof Component === 'string'\n ? Component\n : Component.displayName || Component.name || 'Unknown'\n}\n\nexport function isResSent(res: ServerResponse) {\n return res.finished || res.headersSent\n}\n\nexport function normalizeRepeatedSlashes(url: string) {\n const urlParts = url.split('?')\n const urlNoQuery = urlParts[0]\n\n return (\n urlNoQuery\n // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/')\n .replace(/\\/\\/+/g, '/') +\n (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '')\n )\n}\n\nexport async function loadGetInitialProps<\n C extends BaseContext,\n IP = {},\n P = {},\n>(App: NextComponentType<C, IP, P>, ctx: C): Promise<IP> {\n if (process.env.NODE_ENV !== 'production') {\n if (App.prototype?.getInitialProps) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`\n throw new Error(message)\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || (ctx.ctx && ctx.ctx.res)\n\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx),\n }\n }\n return {} as IP\n }\n\n const props = await App.getInitialProps(ctx)\n\n if (res && isResSent(res)) {\n return props\n }\n\n if (!props) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" should resolve to an object. But found \"${props}\" instead.`\n throw new Error(message)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\n `${getDisplayName(\n App\n )} returned an empty object from \\`getInitialProps\\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`\n )\n }\n }\n\n return props\n}\n\nexport const SP = typeof performance !== 'undefined'\nexport const ST =\n SP &&\n (['mark', 'measure', 'getEntriesByName'] as const).every(\n (method) => typeof performance[method] === 'function'\n )\n\nexport class DecodeError extends Error {}\nexport class NormalizeError extends Error {}\nexport class PageNotFoundError extends Error {\n code: string\n\n constructor(page: string) {\n super()\n this.code = 'ENOENT'\n this.name = 'PageNotFoundError'\n this.message = `Cannot find module for page: ${page}`\n }\n}\n\nexport class MissingStaticPage extends Error {\n constructor(page: string, message: string) {\n super()\n this.message = `Failed to load static file for page: ${page} ${message}`\n }\n}\n\nexport class MiddlewareNotFoundError extends Error {\n code: string\n constructor() {\n super()\n this.code = 'ENOENT'\n this.message = `Cannot find the middleware module`\n }\n}\n\nexport interface CacheFs {\n existsSync: typeof fs.existsSync\n readFile: typeof fs.promises.readFile\n readFileSync: typeof fs.readFileSync\n writeFile(f: string, d: any): Promise<void>\n mkdir(dir: string): Promise<void | string>\n stat(f: string): Promise<{ mtime: Date }>\n}\n\nexport function stringifyError(error: Error) {\n return JSON.stringify({ message: error.message, stack: error.stack })\n}\n","import type { Token } from 'next/dist/compiled/path-to-regexp'\n\n/**\n * Route pattern normalization utilities for path-to-regexp compatibility.\n *\n * path-to-regexp 6.3.0+ introduced stricter validation that rejects certain\n * patterns commonly used in Next.js interception routes. This module provides\n * normalization functions to make Next.js route patterns compatible with the\n * updated library while preserving all functionality.\n */\n\n/**\n * Internal separator used to normalize adjacent parameter patterns.\n * This unique marker is inserted between adjacent parameters and stripped out\n * during parameter extraction to avoid conflicts with real URL content.\n */\nconst PARAM_SEPARATOR = '_NEXTSEP_'\n\n/**\n * Detects if a route pattern needs normalization for path-to-regexp compatibility.\n */\nexport function hasAdjacentParameterIssues(route: string): boolean {\n if (typeof route !== 'string') return false\n\n // Check for interception route markers followed immediately by parameters\n // Pattern: /(.):param, /(..):param, /(...):param, /(.)(.):param etc.\n // These patterns cause \"Must have text between two parameters\" errors\n if (/\\/\\(\\.{1,3}\\):[^/\\s]+/.test(route)) {\n return true\n }\n\n // Check for basic adjacent parameters without separators\n // Pattern: :param1:param2 (but not :param* or other URL patterns)\n if (/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(route)) {\n return true\n }\n\n return false\n}\n\n/**\n * Normalizes route patterns that have adjacent parameters without text between them.\n * Inserts a unique separator that can be safely stripped out later.\n */\nexport function normalizeAdjacentParameters(route: string): string {\n let normalized = route\n\n // Handle interception route patterns: (.):param -> (.)_NEXTSEP_:param\n normalized = normalized.replace(\n /(\\([^)]*\\)):([^/\\s]+)/g,\n `$1${PARAM_SEPARATOR}:$2`\n )\n\n // Handle other adjacent parameter patterns: :param1:param2 -> :param1_NEXTSEP_:param2\n normalized = normalized.replace(/:([^:/\\s)]+)(?=:)/g, `:$1${PARAM_SEPARATOR}`)\n\n return normalized\n}\n\n/**\n * Normalizes tokens that have repeating modifiers (* or +) but empty prefix and suffix.\n *\n * path-to-regexp 6.3.0+ introduced validation that throws:\n * \"Can not repeat without prefix/suffix\"\n *\n * This occurs when a token has modifier: '*' or '+' with both prefix: '' and suffix: ''\n */\nexport function normalizeTokensForRegexp(tokens: Token[]): Token[] {\n return tokens.map((token) => {\n // Token union type: Token = string | TokenObject\n // Literal path segments are strings, parameters/wildcards are objects\n if (\n typeof token === 'object' &&\n token !== null &&\n // Not all token objects have 'modifier' property (e.g., simple text tokens)\n 'modifier' in token &&\n // Only repeating modifiers (* or +) cause the validation error\n // Other modifiers like '?' (optional) are fine\n (token.modifier === '*' || token.modifier === '+') &&\n // Token objects can have different shapes depending on route pattern\n 'prefix' in token &&\n 'suffix' in token &&\n // Both prefix and suffix must be empty strings\n // This is what causes the validation error in path-to-regexp\n token.prefix === '' &&\n token.suffix === ''\n ) {\n // Add minimal prefix to satisfy path-to-regexp validation\n // We use '/' as it's the most common path delimiter and won't break route matching\n // The prefix gets used in regex generation but doesn't affect parameter extraction\n return {\n ...token,\n prefix: '/',\n }\n }\n return token\n })\n}\n\n/**\n * Strips normalization separators from extracted route parameters.\n * Used by both server and client code to clean up parameters after route matching.\n */\nexport function stripParameterSeparators(\n params: Record<string, any>\n): Record<string, any> {\n const cleaned: Record<string, any> = {}\n\n for (const [key, value] of Object.entries(params)) {\n if (typeof value === 'string') {\n // Remove the separator if it appears at the start of parameter values\n cleaned[key] = value.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n } else if (Array.isArray(value)) {\n // Handle array parameters (from repeated route segments)\n cleaned[key] = value.map((item) =>\n typeof item === 'string'\n ? item.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n : item\n )\n } else {\n cleaned[key] = value\n }\n }\n\n return cleaned\n}\n","/**\n * Client-safe utilities for route matching that don't import server-side\n * utilities to avoid bundling issues with Turbopack\n */\n\nimport type {\n Key,\n TokensToRegexpOptions,\n ParseOptions,\n TokensToFunctionOptions,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n pathToRegexp,\n compile,\n regexpToFunction,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n hasAdjacentParameterIssues,\n normalizeAdjacentParameters,\n stripParameterSeparators,\n} from '../../../../lib/route-pattern-normalizer'\n\n/**\n * Client-safe wrapper around pathToRegexp that handles path-to-regexp 6.3.0+ validation errors.\n * This includes both \"Can not repeat without prefix/suffix\" and \"Must have text between parameters\" errors.\n */\nexport function safePathToRegexp(\n route: string | RegExp | Array<string | RegExp>,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n if (typeof route !== 'string') {\n return pathToRegexp(route, keys, options)\n }\n\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return pathToRegexp(routeToUse, keys, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return pathToRegexp(normalizedRoute, keys, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around compile that handles path-to-regexp 6.3.0+ validation errors.\n * No server-side error reporting to avoid bundling issues.\n */\nexport function safeCompile(\n route: string,\n options?: TokensToFunctionOptions & ParseOptions\n) {\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return compile(routeToUse, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return compile(normalizedRoute, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around regexpToFunction that automatically cleans parameters.\n */\nexport function safeRegexpToFunction<\n T extends Record<string, any> = Record<string, any>,\n>(regexp: RegExp, keys?: Key[]): (pathname: string) => { params: T } | false {\n const originalMatcher = regexpToFunction<T>(regexp, keys || [])\n\n return (pathname: string) => {\n const result = originalMatcher(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return {\n ...result,\n params: stripParameterSeparators(result.params as any) as T,\n }\n }\n}\n\n/**\n * Safe wrapper for route matcher functions that automatically cleans parameters.\n * This is client-safe and doesn't import path-to-regexp.\n */\nexport function safeRouteMatcher<T extends Record<string, any>>(\n matcherFn: (pathname: string) => false | T\n): (pathname: string) => false | T {\n return (pathname: string) => {\n const result = matcherFn(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return stripParameterSeparators(result) as T\n }\n}\n","import type { Group } from './route-regex'\nimport { DecodeError } from '../../utils'\nimport type { Params } from '../../../../server/request/params'\nimport { safeRouteMatcher } from './route-match-utils'\n\nexport interface RouteMatchFn {\n (pathname: string): false | Params\n}\n\ntype RouteMatcherOptions = {\n // We only use the exec method of the RegExp object. This helps us avoid using\n // type assertions that the passed in properties are of the correct type.\n re: Pick<RegExp, 'exec'>\n groups: Record<string, Group>\n}\n\nexport function getRouteMatcher({\n re,\n groups,\n}: RouteMatcherOptions): RouteMatchFn {\n const rawMatcher = (pathname: string) => {\n const routeMatch = re.exec(pathname)\n if (!routeMatch) return false\n\n const decode = (param: string) => {\n try {\n return decodeURIComponent(param)\n } catch {\n throw new DecodeError('failed to decode param')\n }\n }\n\n const params: Params = {}\n for (const [key, group] of Object.entries(groups)) {\n const match = routeMatch[group.pos]\n if (match !== undefined) {\n if (group.repeat) {\n params[key] = match.split('/').map((entry) => decode(entry))\n } else {\n params[key] = decode(match)\n }\n }\n }\n\n return params\n }\n\n // Wrap with safe matcher to handle parameter cleaning\n return safeRouteMatcher(rawMatcher)\n}\n","import type { ParsedUrlQuery } from 'querystring'\n\nexport function searchParamsToUrlQuery(\n searchParams: URLSearchParams\n): ParsedUrlQuery {\n const query: ParsedUrlQuery = {}\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key]\n if (typeof existing === 'undefined') {\n query[key] = value\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n query[key] = [existing, value]\n }\n }\n return query\n}\n\nfunction stringifyUrlQueryParam(param: unknown): string {\n if (typeof param === 'string') {\n return param\n }\n\n if (\n (typeof param === 'number' && !isNaN(param)) ||\n typeof param === 'boolean'\n ) {\n return String(param)\n } else {\n return ''\n }\n}\n\nexport function urlQueryToSearchParams(query: ParsedUrlQuery): URLSearchParams {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n searchParams.append(key, stringifyUrlQueryParam(item))\n }\n } else {\n searchParams.set(key, stringifyUrlQueryParam(value))\n }\n }\n return searchParams\n}\n\nexport function assign(\n target: URLSearchParams,\n ...searchParamsList: URLSearchParams[]\n): URLSearchParams {\n for (const searchParams of searchParamsList) {\n for (const key of searchParams.keys()) {\n target.delete(key)\n }\n\n for (const [key, value] of searchParams.entries()) {\n target.append(key, value)\n }\n }\n\n return target\n}\n","import type { NextApiRequestCookies } from '.'\n\n/**\n * Parse cookies from the `headers` of request\n * @param req request object\n */\n\nexport function getCookieParser(headers: {\n [key: string]: string | string[] | null | undefined\n}): () => NextApiRequestCookies {\n return function parseCookie(): NextApiRequestCookies {\n const { cookie } = headers\n\n if (!cookie) {\n return {}\n }\n\n const { parse: parseCookieFn } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie)\n }\n}\n","import type { IncomingMessage } from 'http'\nimport type { Key } from 'next/dist/compiled/path-to-regexp'\nimport type { NextParsedUrlQuery } from '../../../../server/request-meta'\nimport type { RouteHas } from '../../../../lib/load-custom-routes'\nimport type { BaseNextRequest } from '../../../../server/base-http'\n\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { parseUrl } from './parse-url'\nimport {\n INTERCEPTION_ROUTE_MARKERS,\n isInterceptionRouteAppPath,\n} from './interception-routes'\nimport { getCookieParser } from '../../../../server/api-utils/get-cookie-parser'\nimport type { Params } from '../../../../server/request/params'\nimport { safePathToRegexp, safeCompile } from './route-match-utils'\n\n/**\n * Ensure only a-zA-Z are used for param names for proper interpolating\n * with path-to-regexp\n */\nfunction getSafeParamName(paramName: string) {\n let newParamName = ''\n\n for (let i = 0; i < paramName.length; i++) {\n const charCode = paramName.charCodeAt(i)\n\n if (\n (charCode > 64 && charCode < 91) || // A-Z\n (charCode > 96 && charCode < 123) // a-z\n ) {\n newParamName += paramName[i]\n }\n }\n return newParamName\n}\n\nfunction escapeSegment(str: string, segmentName: string) {\n return str.replace(\n new RegExp(`:${escapeStringRegexp(segmentName)}`, 'g'),\n `__ESC_COLON_${segmentName}`\n )\n}\n\nfunction unescapeSegments(str: string) {\n return str.replace(/__ESC_COLON_/gi, ':')\n}\n\nexport function matchHas(\n req: BaseNextRequest | IncomingMessage,\n query: Params,\n has: RouteHas[] = [],\n missing: RouteHas[] = []\n): false | Params {\n const params: Params = {}\n\n const hasMatch = (hasItem: RouteHas) => {\n let value\n let key = hasItem.key\n\n switch (hasItem.type) {\n case 'header': {\n key = key!.toLowerCase()\n value = req.headers[key] as string\n break\n }\n case 'cookie': {\n if ('cookies' in req) {\n value = req.cookies[hasItem.key]\n } else {\n const cookies = getCookieParser(req.headers)()\n value = cookies[hasItem.key]\n }\n\n break\n }\n case 'query': {\n value = query[key!]\n break\n }\n case 'host': {\n const { host } = req?.headers || {}\n // remove port from host if present\n const hostname = host?.split(':', 1)[0].toLowerCase()\n value = hostname\n break\n }\n default: {\n break\n }\n }\n\n if (!hasItem.value && value) {\n params[getSafeParamName(key!)] = value\n return true\n } else if (value) {\n const matcher = new RegExp(`^${hasItem.value}$`)\n const matches = Array.isArray(value)\n ? value.slice(-1)[0].match(matcher)\n : value.match(matcher)\n\n if (matches) {\n if (Array.isArray(matches)) {\n if (matches.groups) {\n Object.keys(matches.groups).forEach((groupKey) => {\n params[groupKey] = matches.groups![groupKey]\n })\n } else if (hasItem.type === 'host' && matches[0]) {\n params.host = matches[0]\n }\n }\n return true\n }\n }\n return false\n }\n\n const allMatch =\n has.every((item) => hasMatch(item)) &&\n !missing.some((item) => hasMatch(item))\n\n if (allMatch) {\n return params\n }\n return false\n}\n\nexport function compileNonPath(value: string, params: Params): string {\n if (!value.includes(':')) {\n return value\n }\n\n for (const key of Object.keys(params)) {\n if (value.includes(`:${key}`)) {\n value = value\n .replace(\n new RegExp(`:${key}\\\\*`, 'g'),\n `:${key}--ESCAPED_PARAM_ASTERISKS`\n )\n .replace(\n new RegExp(`:${key}\\\\?`, 'g'),\n `:${key}--ESCAPED_PARAM_QUESTION`\n )\n .replace(new RegExp(`:${key}\\\\+`, 'g'), `:${key}--ESCAPED_PARAM_PLUS`)\n .replace(\n new RegExp(`:${key}(?!\\\\w)`, 'g'),\n `--ESCAPED_PARAM_COLON${key}`\n )\n }\n }\n value = value\n .replace(/(:|\\*|\\?|\\+|\\(|\\)|\\{|\\})/g, '\\\\$1')\n .replace(/--ESCAPED_PARAM_PLUS/g, '+')\n .replace(/--ESCAPED_PARAM_COLON/g, ':')\n .replace(/--ESCAPED_PARAM_QUESTION/g, '?')\n .replace(/--ESCAPED_PARAM_ASTERISKS/g, '*')\n\n // the value needs to start with a forward-slash to be compiled\n // correctly\n return safeCompile(`/${value}`, { validate: false })(params).slice(1)\n}\n\nexport function parseDestination(args: {\n destination: string\n params: Readonly<Params>\n query: Readonly<NextParsedUrlQuery>\n}) {\n let escaped = args.destination\n for (const param of Object.keys({ ...args.params, ...args.query })) {\n if (!param) continue\n\n escaped = escapeSegment(escaped, param)\n }\n\n const parsed = parseUrl(escaped)\n\n let pathname = parsed.pathname\n if (pathname) {\n pathname = unescapeSegments(pathname)\n }\n\n let href = parsed.href\n if (href) {\n href = unescapeSegments(href)\n }\n\n let hostname = parsed.hostname\n if (hostname) {\n hostname = unescapeSegments(hostname)\n }\n\n let hash = parsed.hash\n if (hash) {\n hash = unescapeSegments(hash)\n }\n\n return {\n ...parsed,\n pathname,\n hostname,\n href,\n hash,\n }\n}\n\nexport function prepareDestination(args: {\n appendParamsToQuery: boolean\n destination: string\n params: Params\n query: NextParsedUrlQuery\n}) {\n const parsedDestination = parseDestination(args)\n\n const { hostname: destHostname, query: destQuery } = parsedDestination\n\n // The following code assumes that the pathname here includes the hash if it's\n // present.\n let destPath = parsedDestination.pathname\n if (parsedDestination.hash) {\n destPath = `${destPath}${parsedDestination.hash}`\n }\n\n const destParams: (string | number)[] = []\n\n const destPathParamKeys: Key[] = []\n safePathToRegexp(destPath, destPathParamKeys)\n for (const key of destPathParamKeys) {\n destParams.push(key.name)\n }\n\n if (destHostname) {\n const destHostnameParamKeys: Key[] = []\n safePathToRegexp(destHostname, destHostnameParamKeys)\n for (const key of destHostnameParamKeys) {\n destParams.push(key.name)\n }\n }\n\n const destPathCompiler = safeCompile(\n destPath,\n // we don't validate while compiling the destination since we should\n // have already validated before we got to this point and validating\n // breaks compiling destinations with named pattern params from the source\n // e.g. /something:hello(.*) -> /another/:hello is broken with validation\n // since compile validation is meant for reversing and not for inserting\n // params from a separate path-regex into another\n { validate: false }\n )\n\n let destHostnameCompiler\n if (destHostname) {\n destHostnameCompiler = safeCompile(destHostname, { validate: false })\n }\n\n // update any params in query values\n for (const [key, strOrArray] of Object.entries(destQuery)) {\n // the value needs to start with a forward-slash to be compiled\n // correctly\n if (Array.isArray(strOrArray)) {\n destQuery[key] = strOrArray.map((value) =>\n compileNonPath(unescapeSegments(value), args.params)\n )\n } else if (typeof strOrArray === 'string') {\n destQuery[key] = compileNonPath(unescapeSegments(strOrArray), args.params)\n }\n }\n\n // add path params to query if it's not a redirect and not\n // already defined in destination query or path\n let paramKeys = Object.keys(args.params).filter(\n (name) => name !== 'nextInternalLocale'\n )\n\n if (\n args.appendParamsToQuery &&\n !paramKeys.some((key) => destParams.includes(key))\n ) {\n for (const key of paramKeys) {\n if (!(key in destQuery)) {\n destQuery[key] = args.params[key]\n }\n }\n }\n\n let newUrl\n\n // The compiler also that the interception route marker is an unnamed param, hence '0',\n // so we need to add it to the params object.\n if (isInterceptionRouteAppPath(destPath)) {\n for (const segment of destPath.split('/')) {\n const marker = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n if (marker) {\n if (marker === '(..)(..)') {\n args.params['0'] = '(..)'\n args.params['1'] = '(..)'\n } else {\n args.params['0'] = marker\n }\n break\n }\n }\n }\n\n try {\n newUrl = destPathCompiler(args.params)\n\n const [pathname, hash] = newUrl.split('#', 2)\n if (destHostnameCompiler) {\n parsedDestination.hostname = destHostnameCompiler(args.params)\n }\n parsedDestination.pathname = pathname\n parsedDestination.hash = `${hash ? '#' : ''}${hash || ''}`\n delete (parsedDestination as any).search\n } catch (err: any) {\n if (err.message.match(/Expected .*? to not repeat, but got an array/)) {\n throw new Error(\n `To use a multi-match in the destination you must add \\`*\\` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match`\n )\n }\n throw err\n }\n\n // Query merge order lowest priority to highest\n // 1. initial URL query values\n // 2. path segment values\n // 3. destination specified query values\n parsedDestination.query = {\n ...args.query,\n ...parsedDestination.query,\n }\n\n return {\n newUrl,\n destQuery,\n parsedDestination,\n }\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n","/**\n * Decodes a query path parameter.\n *\n * @param value - The value to decode.\n * @returns The decoded value.\n */\nexport function decodeQueryPathParameter(value: string) {\n // When deployed to Vercel, the value may be encoded, so this attempts to\n // decode it and returns the original value if it fails.\n try {\n return decodeURIComponent(value)\n } catch {\n return value\n }\n}\n","// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { UrlObject } from 'url'\nimport type { ParsedUrlQuery } from 'querystring'\nimport * as querystring from './querystring'\n\nconst slashedProtocols = /https?|ftp|gopher|file/\n\nexport function formatUrl(urlObj: UrlObject) {\n let { auth, hostname } = urlObj\n let protocol = urlObj.protocol || ''\n let pathname = urlObj.pathname || ''\n let hash = urlObj.hash || ''\n let query = urlObj.query || ''\n let host: string | false = false\n\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : ''\n\n if (urlObj.host) {\n host = auth + urlObj.host\n } else if (hostname) {\n host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname)\n if (urlObj.port) {\n host += ':' + urlObj.port\n }\n }\n\n if (query && typeof query === 'object') {\n query = String(querystring.urlQueryToSearchParams(query as ParsedUrlQuery))\n }\n\n let search = urlObj.search || (query && `?${query}`) || ''\n\n if (protocol && !protocol.endsWith(':')) protocol += ':'\n\n if (\n urlObj.slashes ||\n ((!protocol || slashedProtocols.test(protocol)) && host !== false)\n ) {\n host = '//' + (host || '')\n if (pathname && pathname[0] !== '/') pathname = '/' + pathname\n } else if (!host) {\n host = ''\n }\n\n if (hash && hash[0] !== '#') hash = '#' + hash\n if (search && search[0] !== '?') search = '?' + search\n\n pathname = pathname.replace(/[?#]/g, encodeURIComponent)\n search = search.replace('#', '%23')\n\n return `${protocol}${host}${pathname}${search}${hash}`\n}\n\nexport const urlObjectKeys = [\n 'auth',\n 'hash',\n 'host',\n 'hostname',\n 'href',\n 'path',\n 'pathname',\n 'port',\n 'protocol',\n 'query',\n 'search',\n 'slashes',\n]\n\nexport function formatWithValidation(url: UrlObject): string {\n if (process.env.NODE_ENV === 'development') {\n if (url !== null && typeof url === 'object') {\n Object.keys(url).forEach((key) => {\n if (!urlObjectKeys.includes(key)) {\n console.warn(\n `Unknown key passed via urlObject into url.format: ${key}`\n )\n }\n })\n }\n }\n\n return formatUrl(url)\n}\n","import type { LoadComponentsReturnType } from '../load-components'\nimport type { ServerRuntime, SizeLimit } from '../../types'\nimport type {\n ExperimentalConfig,\n NextConfigComplete,\n} from '../../server/config-shared'\nimport type { ClientReferenceManifest } from '../../build/webpack/plugins/flight-manifest-plugin'\nimport type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { AppPageModule } from '../route-modules/app-page/module'\nimport type {\n HeadData,\n LoadingModuleData,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nimport s from 'next/dist/compiled/superstruct'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { InstrumentationOnRequestError } from '../instrumentation/types'\nimport type { NextRequestHint } from '../web/adapter'\nimport type { BaseNextRequest } from '../base-http'\nimport type { IncomingMessage } from 'http'\nimport type { RenderResumeDataCache } from '../resume-data-cache/resume-data-cache'\n\nexport type DynamicParamTypes =\n | 'catchall'\n | 'catchall-intercepted'\n | 'optional-catchall'\n | 'dynamic'\n | 'dynamic-intercepted'\n\nconst dynamicParamTypesSchema = s.enums(['c', 'ci', 'oc', 'd', 'di'])\n\nexport type DynamicParamTypesShort = s.Infer<typeof dynamicParamTypesSchema>\n\nconst segmentSchema = s.union([\n s.string(),\n s.tuple([s.string(), s.string(), dynamicParamTypesSchema]),\n])\n\nexport type Segment = s.Infer<typeof segmentSchema>\n\n// unfortunately the tuple is not understood well by Describe so we have to\n// use any here. This does not have any impact on the runtime type since the validation\n// does work correctly.\nexport const flightRouterStateSchema: s.Describe<any> = s.tuple([\n segmentSchema,\n s.record(\n s.string(),\n s.lazy(() => flightRouterStateSchema)\n ),\n s.optional(s.nullable(s.string())),\n s.optional(\n s.nullable(\n s.union([\n s.literal('refetch'),\n s.literal('refresh'),\n s.literal('inside-shared-layout'),\n ])\n )\n ),\n s.optional(s.boolean()),\n])\n\n/**\n * Router state\n */\nexport type FlightRouterState = [\n segment: Segment,\n parallelRoutes: { [parallelRouterKey: string]: FlightRouterState },\n url?: string | null,\n /**\n * \"refresh\" and \"refetch\", despite being similarly named, have different\n * semantics:\n * - \"refetch\" is used during a request to inform the server where rendering\n * should start from.\n *\n * - \"refresh\" is used by the client to mark that a segment should re-fetch the\n * data from the server for the current segment. It uses the \"url\" property\n * above to determine where to fetch from.\n *\n * - \"inside-shared-layout\" is used during a prefetch request to inform the\n * server that even if the segment matches, it should be treated as if it's\n * within the \"new\" part of a navigation — inside the shared layout. If\n * the segment doesn't match, then it has no effect, since it would be\n * treated as new regardless. If it does match, though, the server does not\n * need to render it, because the client already has it.\n *\n * A bit confusing, but that's because it has only one extremely narrow use\n * case — during a non-PPR prefetch, the server uses it to find the first\n * loading boundary beneath a shared layout.\n *\n * TODO: We should rethink the protocol for dynamic requests. It might not\n * make sense for the client to send a FlightRouterState, since this type is\n * overloaded with concerns.\n */\n refresh?: 'refetch' | 'refresh' | 'inside-shared-layout' | null,\n isRootLayout?: boolean,\n /**\n * Only present when responding to a tree prefetch request. Indicates whether\n * there is a loading boundary somewhere in the tree. The client cache uses\n * this to determine if it can skip the data prefetch request.\n */\n hasLoadingBoundary?: HasLoadingBoundary,\n]\n\nexport const enum HasLoadingBoundary {\n // There is a loading boundary in this particular segment\n SegmentHasLoadingBoundary = 1,\n // There is a loading boundary somewhere in the subtree (but not in\n // this segment)\n SubtreeHasLoadingBoundary = 2,\n // There is no loading boundary in this segment or any of its descendants\n SubtreeHasNoLoadingBoundary = 3,\n}\n\n/**\n * Individual Flight response path\n */\nexport type FlightSegmentPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n ]\n\n/**\n * Represents a tree of segments and the Flight data (i.e. React nodes) that\n * correspond to each one. The tree is isomorphic to the FlightRouterState;\n * however in the future we want to be able to fetch arbitrary partial segments\n * without having to fetch all its children. So this response format will\n * likely change.\n */\nexport type CacheNodeSeedData = [\n segment: Segment,\n node: React.ReactNode | null,\n parallelRoutes: {\n [parallelRouterKey: string]: CacheNodeSeedData | null\n },\n loading: LoadingModuleData | Promise<LoadingModuleData>,\n isPartial: boolean,\n]\n\nexport type FlightDataSegment = [\n /* segment of the rendered slice: */ Segment,\n /* treePatch */ FlightRouterState,\n /* cacheNodeSeedData */ CacheNodeSeedData | null, // Can be null during prefetch if there's no loading component\n /* head: viewport */ HeadData,\n /* isHeadPartial */ boolean,\n]\n\nexport type FlightDataPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n // Holds full path to the segment.\n ...FlightSegmentPath[],\n ...FlightDataSegment,\n ]\n\n/**\n * The Flight response data\n */\nexport type FlightData = Array<FlightDataPath> | string\n\nexport type ActionResult = Promise<any>\n\nexport type ServerOnInstrumentationRequestError = (\n error: unknown,\n // The request could be middleware, node server or web server request,\n // we normalized them into an aligned format to `onRequestError` API later.\n request: NextRequestHint | BaseNextRequest | IncomingMessage,\n errorContext: Parameters<InstrumentationOnRequestError>[2]\n) => void | Promise<void>\n\nexport interface RenderOptsPartial {\n dir?: string\n previewProps: __ApiPreviewProps | undefined\n err?: Error | null\n dev?: boolean\n basePath: string\n trailingSlash: boolean\n clientReferenceManifest?: DeepReadonly<ClientReferenceManifest>\n supportsDynamicResponse: boolean\n runtime?: ServerRuntime\n serverComponents?: boolean\n enableTainting?: boolean\n assetPrefix?: string\n crossOrigin?: '' | 'anonymous' | 'use-credentials' | undefined\n nextFontManifest?: DeepReadonly<NextFontManifest>\n botType?: 'dom' | 'html' | undefined\n serveStreamingMetadata?: boolean\n incrementalCache?: import('../lib/incremental-cache').IncrementalCache\n cacheLifeProfiles?: {\n [profile: string]: import('../use-cache/cache-life').CacheLife\n }\n isOnDemandRevalidate?: boolean\n isPossibleServerAction?: boolean\n setIsrStatus?: (key: string, value: boolean | null) => void\n isRevalidate?: boolean\n nextExport?: boolean\n nextConfigOutput?: 'standalone' | 'export'\n onInstrumentationRequestError?: ServerOnInstrumentationRequestError\n isDraftMode?: boolean\n deploymentId?: string\n onUpdateCookies?: (cookies: string[]) => void\n loadConfig?: (\n phase: string,\n dir: string,\n customConfig?: object | null,\n rawConfig?: boolean,\n silent?: boolean\n ) => Promise<NextConfigComplete>\n serverActions?: {\n bodySizeLimit?: SizeLimit\n allowedOrigins?: string[]\n }\n params?: ParsedUrlQuery\n isPrefetch?: boolean\n htmlLimitedBots: string | undefined\n experimental: {\n /**\n * When true, it indicates that the current page supports partial\n * prerendering.\n */\n isRoutePPREnabled?: boolean\n expireTime: number | undefined\n staleTimes: ExperimentalConfig['staleTimes'] | undefined\n clientTraceMetadata: string[] | undefined\n cacheComponents: boolean\n clientSegmentCache: boolean | 'client-only'\n dynamicOnHover: boolean\n inlineCss: boolean\n authInterrupts: boolean\n }\n postponed?: string\n\n /**\n * Should wait for react stream allReady to resolve all suspense boundaries,\n * in order to perform a full page render.\n */\n shouldWaitOnAllReady?: boolean\n\n /**\n * A prefilled resume data cache. This was either generated for this page\n * during dev warmup, or when a page with defined params was previously\n * prerendered, and now its matching optional fallback shell is prerendered.\n */\n renderResumeDataCache?: RenderResumeDataCache\n\n /**\n * When true, the page will be rendered using the static rendering to detect\n * any dynamic API's that would have stopped the page from being fully\n * statically generated.\n */\n isDebugDynamicAccesses?: boolean\n\n /**\n * This is true when:\n * - source maps are generated\n * - source maps are applied\n * - minification is disabled\n */\n hasReadableErrorStacks?: boolean\n\n /**\n * The maximum length of the headers that are emitted by React and added to\n * the response.\n */\n reactMaxHeadersLength: number | undefined\n\n isStaticGeneration?: boolean\n\n /**\n * When true, the page is prerendered as a fallback shell, while allowing any\n * dynamic accesses to result in an empty shell. This is the case when there\n * are also routes prerendered with a more complete set of params.\n * Prerendering those routes would catch any invalid dynamic accesses.\n */\n allowEmptyStaticShell?: boolean\n\n /**\n * next config experimental.devtoolSegmentExplorer\n */\n devtoolSegmentExplorer?: boolean\n}\n\nexport type RenderOpts = LoadComponentsReturnType<AppPageModule> &\n RenderOptsPartial &\n RequestLifecycleOpts\n\nexport type PreloadCallbacks = (() => void)[]\n\nexport type InitialRSCPayload = {\n /** buildId */\n b: string\n /** assetPrefix */\n p: string\n /** initialCanonicalUrlParts */\n c: string[]\n /** couldBeIntercepted */\n i: boolean\n /** initialFlightData */\n f: FlightDataPath[]\n /** missingSlots */\n m: Set<string> | undefined\n /** GlobalError */\n G: [React.ComponentType<any>, React.ReactNode | undefined]\n /** postponed */\n s: boolean\n /** prerendered */\n S: boolean\n}\n\n// Response from `createFromFetch` for normal rendering\nexport type NavigationFlightResponse = {\n /** buildId */\n b: string\n /** flightData */\n f: FlightData\n /** prerendered */\n S: boolean\n}\n\n// Response from `createFromFetch` for server actions. Action's flight data can be null\nexport type ActionFlightResponse = {\n /** actionResult */\n a: ActionResult\n /** buildId */\n b: string\n /** flightData */\n f: FlightData\n}\n\nexport type RSCPayload =\n | InitialRSCPayload\n | NavigationFlightResponse\n | ActionFlightResponse\n","import { NEXT_URL } from '../client/components/app-router-headers'\nimport {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from '../shared/lib/router/utils/interception-routes'\nimport type { Rewrite } from './load-custom-routes'\nimport { safePathToRegexp } from '../shared/lib/router/utils/route-match-utils'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\n\n// a function that converts normalised paths (e.g. /foo/[bar]/[baz]) to the format expected by pathToRegexp (e.g. /foo/:bar/:baz)\nfunction toPathToRegexpPath(path: string): string {\n return path.replace(/\\[\\[?([^\\]]+)\\]\\]?/g, (_, capture) => {\n // path-to-regexp only supports word characters, so we replace any non-word characters with underscores\n const paramName = capture.replace(/\\W+/g, '_')\n\n // handle catch-all segments (e.g. /foo/bar/[...baz] or /foo/bar/[[...baz]])\n if (capture.startsWith('...')) {\n return `:${capture.slice(3)}*`\n }\n return ':' + paramName\n })\n}\n\nexport function generateInterceptionRoutesRewrites(\n appPaths: string[],\n basePath = ''\n): Rewrite[] {\n const rewrites: Rewrite[] = []\n\n for (const appPath of appPaths) {\n if (isInterceptionRouteAppPath(appPath)) {\n const { interceptingRoute, interceptedRoute } =\n extractInterceptionRouteInformation(appPath)\n\n const normalizedInterceptingRoute = `${\n interceptingRoute !== '/' ? toPathToRegexpPath(interceptingRoute) : ''\n }/(.*)?`\n\n const normalizedInterceptedRoute = toPathToRegexpPath(interceptedRoute)\n const normalizedAppPath = toPathToRegexpPath(appPath)\n\n // pathToRegexp returns a regex that matches the path, but we need to\n // convert it to a string that can be used in a header value\n // to the format that Next/the proxy expects\n let interceptingRouteRegex = safePathToRegexp(normalizedInterceptingRoute)\n .toString()\n .slice(2, -3)\n\n rewrites.push({\n source: `${basePath}${normalizedInterceptedRoute}`,\n destination: `${basePath}${normalizedAppPath}`,\n has: [\n {\n type: 'header',\n key: NEXT_URL,\n value: interceptingRouteRegex,\n },\n ],\n })\n }\n }\n\n return rewrites\n}\n\nexport function isInterceptionRouteRewrite(route: DeepReadonly<Rewrite>) {\n // When we generate interception rewrites in the above implementation, we always do so with only a single `has` condition.\n return route.has?.[0]?.key === NEXT_URL\n}\n","export const RSC_HEADER = 'RSC' as const\nexport const ACTION_HEADER = 'Next-Action' as const\n// TODO: Instead of sending the full router state, we only need to send the\n// segment path. Saves bytes. Then we could also use this field for segment\n// prefetches, which also need to specify a particular segment.\nexport const NEXT_ROUTER_STATE_TREE_HEADER = 'Next-Router-State-Tree' as const\nexport const NEXT_ROUTER_PREFETCH_HEADER = 'Next-Router-Prefetch' as const\n// This contains the path to the segment being prefetched.\n// TODO: If we change Next-Router-State-Tree to be a segment path, we can use\n// that instead. Then Next-Router-Prefetch and Next-Router-Segment-Prefetch can\n// be merged into a single enum.\nexport const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER =\n 'Next-Router-Segment-Prefetch' as const\nexport const NEXT_HMR_REFRESH_HEADER = 'Next-HMR-Refresh' as const\nexport const NEXT_HMR_REFRESH_HASH_COOKIE = '__next_hmr_refresh_hash__' as const\nexport const NEXT_URL = 'Next-Url' as const\nexport const RSC_CONTENT_TYPE_HEADER = 'text/x-component' as const\n\nexport const FLIGHT_HEADERS = [\n RSC_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_HMR_REFRESH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n] as const\n\nexport const NEXT_RSC_UNION_QUERY = '_rsc' as const\n\nexport const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const\nexport const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const\nexport const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const\nexport const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const\nexport const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const\nexport const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found' as const\n","import type { Rewrite } from '../lib/load-custom-routes'\nimport type { RouteMatchFn } from '../shared/lib/router/utils/route-matcher'\nimport type { NextConfig } from './config'\nimport type { BaseNextRequest } from './base-http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\n\nimport { normalizeLocalePath } from '../shared/lib/i18n/normalize-locale-path'\nimport { getPathMatch } from '../shared/lib/router/utils/path-match'\nimport { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex'\nimport { getRouteMatcher } from '../shared/lib/router/utils/route-matcher'\nimport {\n matchHas,\n prepareDestination,\n} from '../shared/lib/router/utils/prepare-destination'\nimport { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { normalizeRscURL } from '../shared/lib/router/utils/app-paths'\nimport {\n NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER,\n NEXT_CACHE_REVALIDATED_TAGS_HEADER,\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../lib/constants'\nimport { normalizeNextQueryParam } from './web/utils'\nimport type { IncomingHttpHeaders, IncomingMessage } from 'http'\nimport { decodeQueryPathParameter } from './lib/decode-query-path-parameter'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { parseReqUrl } from '../lib/url'\nimport { formatUrl } from '../shared/lib/router/utils/format-url'\nimport { parseAndValidateFlightRouterState } from './app-render/parse-and-validate-flight-router-state'\nimport { isInterceptionRouteRewrite } from '../lib/generate-interception-routes-rewrites'\nimport { NEXT_ROUTER_STATE_TREE_HEADER } from '../client/components/app-router-headers'\nimport { getSelectedParams } from '../client/components/router-reducer/compute-changed-path'\n\nfunction filterInternalQuery(\n query: Record<string, undefined | string | string[]>,\n paramKeys: string[]\n) {\n // this is used to pass query information in rewrites\n // but should not be exposed in final query\n delete query['nextInternalLocale']\n\n for (const key in query) {\n const isNextQueryPrefix =\n key !== NEXT_QUERY_PARAM_PREFIX && key.startsWith(NEXT_QUERY_PARAM_PREFIX)\n\n const isNextInterceptionMarkerPrefix =\n key !== NEXT_INTERCEPTION_MARKER_PREFIX &&\n key.startsWith(NEXT_INTERCEPTION_MARKER_PREFIX)\n\n if (\n isNextQueryPrefix ||\n isNextInterceptionMarkerPrefix ||\n paramKeys.includes(key)\n ) {\n delete query[key]\n }\n }\n}\n\nexport function normalizeCdnUrl(\n req: BaseNextRequest | IncomingMessage,\n paramKeys: string[]\n) {\n // make sure to normalize req.url from CDNs to strip dynamic and rewrite\n // params from the query which are added during routing\n const _parsedUrl = parseReqUrl(req.url!)\n\n // we can't normalize if we can't parse\n if (!_parsedUrl) {\n return req.url\n }\n delete (_parsedUrl as any).search\n filterInternalQuery(_parsedUrl.query, paramKeys)\n\n req.url = formatUrl(_parsedUrl)\n}\n\nexport function interpolateDynamicPath(\n pathname: string,\n params: ParsedUrlQuery,\n defaultRouteRegex?: ReturnType<typeof getNamedRouteRegex> | undefined\n) {\n if (!defaultRouteRegex) return pathname\n\n for (const param of Object.keys(defaultRouteRegex.groups)) {\n const { optional, repeat } = defaultRouteRegex.groups[param]\n let builtParam = `[${repeat ? '...' : ''}${param}]`\n\n if (optional) {\n builtParam = `[${builtParam}]`\n }\n\n let paramValue: string\n const value = params[param]\n\n if (Array.isArray(value)) {\n paramValue = value.map((v) => v && encodeURIComponent(v)).join('/')\n } else if (value) {\n paramValue = encodeURIComponent(value)\n } else {\n paramValue = ''\n }\n\n if (paramValue || optional) {\n pathname = pathname.replaceAll(builtParam, paramValue)\n }\n }\n\n return pathname\n}\n\nexport function normalizeDynamicRouteParams(\n query: ParsedUrlQuery,\n defaultRouteRegex: ReturnType<typeof getNamedRouteRegex>,\n defaultRouteMatches: ParsedUrlQuery,\n ignoreMissingOptional: boolean\n) {\n let hasValidParams = true\n let params: ParsedUrlQuery = {}\n\n for (const key of Object.keys(defaultRouteRegex.groups)) {\n let value: string | string[] | undefined = query[key]\n\n if (typeof value === 'string') {\n value = normalizeRscURL(value)\n } else if (Array.isArray(value)) {\n value = value.map(normalizeRscURL)\n }\n\n // if the value matches the default value we can't rely\n // on the parsed params, this is used to signal if we need\n // to parse x-now-route-matches or not\n const defaultValue = defaultRouteMatches![key]\n const isOptional = defaultRouteRegex!.groups[key].optional\n\n const isDefaultValue = Array.isArray(defaultValue)\n ? defaultValue.some((defaultVal) => {\n return Array.isArray(value)\n ? value.some((val) => val.includes(defaultVal))\n : value?.includes(defaultVal)\n })\n : value?.includes(defaultValue as string)\n\n if (\n isDefaultValue ||\n (typeof value === 'undefined' && !(isOptional && ignoreMissingOptional))\n ) {\n return { params: {}, hasValidParams: false }\n }\n\n // non-provided optional values should be undefined so normalize\n // them to undefined\n if (\n isOptional &&\n (!value ||\n (Array.isArray(value) &&\n value.length === 1 &&\n // fallback optional catch-all SSG pages have\n // [[...paramName]] for the root path on Vercel\n (value[0] === 'index' || value[0] === `[[...${key}]]`)))\n ) {\n value = undefined\n delete query[key]\n }\n\n // query values from the proxy aren't already split into arrays\n // so make sure to normalize catch-all values\n if (\n value &&\n typeof value === 'string' &&\n defaultRouteRegex!.groups[key].repeat\n ) {\n value = value.split('/')\n }\n\n if (value) {\n params[key] = value\n }\n }\n\n return {\n params,\n hasValidParams,\n }\n}\n\nexport function getServerUtils({\n page,\n i18n,\n basePath,\n rewrites,\n pageIsDynamic,\n trailingSlash,\n caseSensitive,\n}: {\n page: string\n i18n?: NextConfig['i18n']\n basePath: string\n rewrites: DeepReadonly<{\n fallback?: ReadonlyArray<Rewrite>\n afterFiles?: ReadonlyArray<Rewrite>\n beforeFiles?: ReadonlyArray<Rewrite>\n }>\n pageIsDynamic: boolean\n trailingSlash?: boolean\n caseSensitive: boolean\n}) {\n let defaultRouteRegex: ReturnType<typeof getNamedRouteRegex> | undefined\n let dynamicRouteMatcher: RouteMatchFn | undefined\n let defaultRouteMatches: ParsedUrlQuery | undefined\n\n if (pageIsDynamic) {\n defaultRouteRegex = getNamedRouteRegex(page, {\n prefixRouteKeys: false,\n })\n dynamicRouteMatcher = getRouteMatcher(defaultRouteRegex)\n defaultRouteMatches = dynamicRouteMatcher(page) as ParsedUrlQuery\n }\n\n function handleRewrites(\n req: BaseNextRequest | IncomingMessage,\n parsedUrl: UrlWithParsedQuery\n ) {\n const rewriteParams: Record<string, string> = {}\n let fsPathname = parsedUrl.pathname\n\n const matchesPage = () => {\n const fsPathnameNoSlash = removeTrailingSlash(fsPathname || '')\n return (\n fsPathnameNoSlash === removeTrailingSlash(page) ||\n dynamicRouteMatcher?.(fsPathnameNoSlash)\n )\n }\n\n const checkRewrite = (rewrite: DeepReadonly<Rewrite>): boolean => {\n const matcher = getPathMatch(\n rewrite.source + (trailingSlash ? '(/)?' : ''),\n {\n removeUnnamedParams: true,\n strict: true,\n sensitive: !!caseSensitive,\n }\n )\n\n if (!parsedUrl.pathname) return false\n\n let params = matcher(parsedUrl.pathname)\n\n if ((rewrite.has || rewrite.missing) && params) {\n const hasParams = matchHas(\n req,\n parsedUrl.query,\n rewrite.has as Rewrite['has'],\n rewrite.missing as Rewrite['missing']\n )\n\n if (hasParams) {\n Object.assign(params, hasParams)\n } else {\n params = false\n }\n }\n\n if (params) {\n try {\n // An interception rewrite might reference a dynamic param for a route the user\n // is currently on, which wouldn't be extractable from the matched route params.\n // This attempts to extract the dynamic params from the provided router state.\n if (isInterceptionRouteRewrite(rewrite as Rewrite)) {\n const stateHeader =\n req.headers[NEXT_ROUTER_STATE_TREE_HEADER.toLowerCase()]\n\n if (stateHeader) {\n params = {\n ...getSelectedParams(\n parseAndValidateFlightRouterState(stateHeader)\n ),\n ...params,\n }\n }\n }\n } catch (err) {\n // this is a no-op -- we couldn't extract dynamic params from the provided router state,\n // so we'll just use the params from the route matcher\n }\n\n const { parsedDestination, destQuery } = prepareDestination({\n appendParamsToQuery: true,\n destination: rewrite.destination,\n params: params,\n query: parsedUrl.query,\n })\n\n // if the rewrite destination is external break rewrite chain\n if (parsedDestination.protocol) {\n return true\n }\n\n Object.assign(rewriteParams, destQuery, params)\n Object.assign(parsedUrl.query, parsedDestination.query)\n delete (parsedDestination as any).query\n\n // for each property in parsedUrl.query, if the value is parametrized (eg :foo), look up the value\n // in rewriteParams and replace the parametrized value with the actual value\n // this is used when the rewrite destination does not contain the original source param\n // and so the value is still parametrized and needs to be replaced with the actual rewrite param\n Object.entries(parsedUrl.query).forEach(([key, value]) => {\n if (value && typeof value === 'string' && value.startsWith(':')) {\n const paramName = value.slice(1)\n const actualValue = rewriteParams[paramName]\n if (actualValue) {\n parsedUrl.query[key] = actualValue\n }\n }\n })\n\n Object.assign(parsedUrl, parsedDestination)\n\n fsPathname = parsedUrl.pathname\n if (!fsPathname) return false\n\n if (basePath) {\n fsPathname = fsPathname.replace(new RegExp(`^${basePath}`), '') || '/'\n }\n\n if (i18n) {\n const result = normalizeLocalePath(fsPathname, i18n.locales)\n fsPathname = result.pathname\n parsedUrl.query.nextInternalLocale =\n result.detectedLocale || params.nextInternalLocale\n }\n\n if (fsPathname === page) {\n return true\n }\n\n if (pageIsDynamic && dynamicRouteMatcher) {\n const dynamicParams = dynamicRouteMatcher(fsPathname)\n if (dynamicParams) {\n parsedUrl.query = {\n ...parsedUrl.query,\n ...dynamicParams,\n }\n return true\n }\n }\n }\n return false\n }\n\n for (const rewrite of rewrites.beforeFiles || []) {\n checkRewrite(rewrite)\n }\n\n if (fsPathname !== page) {\n let finished = false\n\n for (const rewrite of rewrites.afterFiles || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n\n if (!finished && !matchesPage()) {\n for (const rewrite of rewrites.fallback || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n }\n }\n return rewriteParams\n }\n\n function getParamsFromRouteMatches(routeMatchesHeader: string) {\n // If we don't have a default route regex, we can't get params from route\n // matches\n if (!defaultRouteRegex) return null\n\n const { groups, routeKeys } = defaultRouteRegex\n\n const matcher = getRouteMatcher({\n re: {\n // Simulate a RegExp match from the \\`req.url\\` input\n exec: (str: string) => {\n // Normalize all the prefixed query params.\n const obj: Record<string, string> = Object.fromEntries(\n new URLSearchParams(str)\n )\n for (const [key, value] of Object.entries(obj)) {\n const normalizedKey = normalizeNextQueryParam(key)\n if (!normalizedKey) continue\n\n obj[normalizedKey] = value\n delete obj[key]\n }\n\n // Use all the named route keys.\n const result = {} as RegExpExecArray\n for (const keyName of Object.keys(routeKeys)) {\n const paramName = routeKeys[keyName]\n\n // If this param name is not a valid parameter name, then skip it.\n if (!paramName) continue\n\n const group = groups[paramName]\n const value = obj[keyName]\n\n // When we're missing a required param, we can't match the route.\n if (!group.optional && !value) return null\n\n result[group.pos] = value\n }\n\n return result\n },\n },\n groups,\n })\n\n const routeMatches = matcher(routeMatchesHeader)\n if (!routeMatches) return null\n\n return routeMatches\n }\n\n function normalizeQueryParams(\n query: Record<string, string | string[] | undefined>,\n routeParamKeys: Set<string>\n ) {\n // this is used to pass query information in rewrites\n // but should not be exposed in final query\n delete query['nextInternalLocale']\n\n for (const [key, value] of Object.entries(query)) {\n const normalizedKey = normalizeNextQueryParam(key)\n if (!normalizedKey) continue\n\n // Remove the prefixed key from the query params because we want\n // to consume it for the dynamic route matcher.\n delete query[key]\n routeParamKeys.add(normalizedKey)\n\n if (typeof value === 'undefined') continue\n\n query[normalizedKey] = Array.isArray(value)\n ? value.map((v) => decodeQueryPathParameter(v))\n : decodeQueryPathParameter(value)\n }\n }\n\n return {\n handleRewrites,\n defaultRouteRegex,\n dynamicRouteMatcher,\n defaultRouteMatches,\n normalizeQueryParams,\n getParamsFromRouteMatches,\n /**\n * Normalize dynamic route params.\n *\n * @param query - The query params to normalize.\n * @param ignoreMissingOptional - Whether to ignore missing optional params.\n * @returns The normalized params and whether they are valid.\n */\n normalizeDynamicRouteParams: (\n query: ParsedUrlQuery,\n ignoreMissingOptional: boolean\n ) => {\n if (!defaultRouteRegex || !defaultRouteMatches) {\n return { params: {}, hasValidParams: false }\n }\n\n return normalizeDynamicRouteParams(\n query,\n defaultRouteRegex,\n defaultRouteMatches,\n ignoreMissingOptional\n )\n },\n\n normalizeCdnUrl: (\n req: BaseNextRequest | IncomingMessage,\n paramKeys: string[]\n ) => normalizeCdnUrl(req, paramKeys),\n\n interpolateDynamicPath: (\n pathname: string,\n params: Record<string, undefined | string | string[]>\n ) => interpolateDynamicPath(pathname, params, defaultRouteRegex),\n\n filterInternalQuery: (query: ParsedUrlQuery, paramKeys: string[]) =>\n filterInternalQuery(query, paramKeys),\n }\n}\n\nexport function getPreviouslyRevalidatedTags(\n headers: IncomingHttpHeaders,\n previewModeId: string | undefined\n): string[] {\n return typeof headers[NEXT_CACHE_REVALIDATED_TAGS_HEADER] === 'string' &&\n headers[NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER] === previewModeId\n ? headers[NEXT_CACHE_REVALIDATED_TAGS_HEADER].split(',')\n : []\n}\n","import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n","import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n","/**\n * strip _next/data/<build-id>/ prefix and .json suffix\n */\nexport function normalizeDataPath(pathname: string) {\n pathname = pathname\n .replace(/\\/_next\\/data\\/[^/]{1,}/, '')\n .replace(/\\.json$/, '')\n\n if (pathname === '/index') {\n return '/'\n }\n return pathname\n}\n","/* eslint-disable no-redeclare */\nimport type { IncomingMessage } from 'http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\nimport type { BaseNextRequest } from './base-http'\nimport type { CloneableBody } from './body-streams'\nimport type { RouteMatch } from './route-matches/route-match'\nimport type { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'\nimport type { ServerComponentsHmrCache } from './response-cache'\nimport type { PagesDevOverlayBridgeType } from '../next-devtools/userspace/pages/pages-dev-overlay-setup'\n\n// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules\nexport const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta')\n\nexport type NextIncomingMessage = (BaseNextRequest | IncomingMessage) & {\n [NEXT_REQUEST_META]?: RequestMeta\n}\n\nexport interface RequestMeta {\n /**\n * The query that was used to make the request.\n */\n initQuery?: ParsedUrlQuery\n\n /**\n * The URL that was used to make the request.\n */\n initURL?: string\n\n /**\n * The protocol that was used to make the request.\n */\n initProtocol?: string\n\n /**\n * The body that was read from the request. This is used to allow the body to\n * be read multiple times.\n */\n clonableBody?: CloneableBody\n\n /**\n * True when the request matched a locale domain that was configured in the\n * next.config.js file.\n */\n isLocaleDomain?: boolean\n\n /**\n * True when the request had locale information stripped from the pathname\n * part of the URL.\n */\n didStripLocale?: boolean\n\n /**\n * If the request had it's URL rewritten, this is the URL it was rewritten to.\n */\n rewroteURL?: string\n\n /**\n * The cookies that were added by middleware and were added to the response.\n */\n middlewareCookie?: string[]\n\n /**\n * The match on the request for a given route.\n */\n match?: RouteMatch\n\n /**\n * The incremental cache to use for the request.\n */\n incrementalCache?: any\n\n /**\n * The server components HMR cache, only for dev.\n */\n serverComponentsHmrCache?: ServerComponentsHmrCache\n\n /**\n * Equals the segment path that was used for the prefetch RSC request.\n */\n segmentPrefetchRSCRequest?: string\n\n /**\n * True when the request is for the prefetch flight data.\n */\n isPrefetchRSCRequest?: true\n\n /**\n * True when the request is for the flight data.\n */\n isRSCRequest?: true\n\n /**\n * A search param set by the Next.js client when performing RSC requests.\n * Because some CDNs do not vary their cache entries on our custom headers,\n * this search param represents a hash of the header values. For any cached\n * RSC request, we should verify that the hash matches before responding.\n * Otherwise this can lead to cache poisoning.\n * TODO: Consider not using custom request headers at all, and instead encode\n * everything into the search param.\n */\n cacheBustingSearchParam?: string\n\n /**\n * True when the request is for the `/_next/data` route using the pages\n * router.\n */\n isNextDataReq?: true\n\n /**\n * Postponed state to use for resumption. If present it's assumed that the\n * request is for a page that has postponed (there are no guarantees that the\n * page actually has postponed though as it would incur an additional cache\n * lookup).\n */\n postponed?: string\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n */\n onCacheEntry?: (\n cacheEntry: any,\n requestMeta: any\n ) => Promise<boolean | void> | boolean | void\n\n /**\n * The previous revalidate before rendering 404 page for notFound: true\n */\n notFoundRevalidate?: number | false\n\n /**\n * In development, the original source page that returned a 404.\n */\n developmentNotFoundSourcePage?: string\n\n /**\n * The path we routed to and should be invoked\n */\n invokePath?: string\n\n /**\n * The specific page output we should be matching\n */\n invokeOutput?: string\n\n /**\n * The status we are invoking the request with from routing\n */\n invokeStatus?: number\n\n /**\n * The routing error we are invoking with\n */\n invokeError?: Error\n\n /**\n * The query parsed for the invocation\n */\n invokeQuery?: Record<string, undefined | string | string[]>\n\n /**\n * Whether the request is a middleware invocation\n */\n middlewareInvoke?: boolean\n\n /**\n * Whether the request should render the fallback shell or not.\n */\n renderFallbackShell?: boolean\n\n /**\n * Whether the request is for the custom error page.\n */\n customErrorRender?: true\n\n /**\n * Whether to bubble up the NoFallbackError to the caller when a 404 is\n * returned.\n */\n bubbleNoFallback?: true\n\n /**\n * True when the request had locale information inferred from the default\n * locale.\n */\n localeInferredFromDefault?: true\n\n /**\n * The locale that was inferred or explicitly set for the request.\n */\n locale?: string\n\n /**\n * The default locale that was inferred or explicitly set for the request.\n */\n defaultLocale?: string\n\n /**\n * The project dir the server is running in\n */\n projectDir?: string\n\n /**\n * The dist directory the server is currently using\n */\n distDir?: string\n\n /**\n * Whether we are generating the fallback version of the page in dev mode\n */\n isIsrFallback?: boolean\n\n /**\n * The query after resolving routes\n */\n query?: ParsedUrlQuery\n\n /**\n * The params after resolving routes\n */\n params?: ParsedUrlQuery\n\n /**\n * The AMP validator to use in development\n */\n ampValidator?: (html: string, pathname: string) => Promise<void>\n\n /**\n * ErrorOverlay component to use in development for pages router\n */\n PagesErrorDebug?: PagesDevOverlayBridgeType\n\n /**\n * Whether server is in minimal mode (this will be replaced with more\n * specific flags in future)\n */\n minimalMode?: boolean\n}\n\n/**\n * Gets the request metadata. If no key is provided, the entire metadata object\n * is returned.\n *\n * @param req the request to get the metadata from\n * @param key the key to get from the metadata (optional)\n * @returns the value for the key or the entire metadata object\n */\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: undefined\n): RequestMeta\nexport function getRequestMeta<K extends keyof RequestMeta>(\n req: NextIncomingMessage,\n key: K\n): RequestMeta[K]\nexport function getRequestMeta<K extends keyof RequestMeta>(\n req: NextIncomingMessage,\n key?: K\n): RequestMeta | RequestMeta[K] {\n const meta = req[NEXT_REQUEST_META] || {}\n return typeof key === 'string' ? meta[key] : meta\n}\n\n/**\n * Sets the request metadata.\n *\n * @param req the request to set the metadata on\n * @param meta the metadata to set\n * @returns the mutated request metadata\n */\nexport function setRequestMeta(req: NextIncomingMessage, meta: RequestMeta) {\n req[NEXT_REQUEST_META] = meta\n return meta\n}\n\n/**\n * Adds a value to the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to set\n * @param value the value to set\n * @returns the mutated request metadata\n */\nexport function addRequestMeta<K extends keyof RequestMeta>(\n request: NextIncomingMessage,\n key: K,\n value: RequestMeta[K]\n) {\n const meta = getRequestMeta(request)\n meta[key] = value\n return setRequestMeta(request, meta)\n}\n\n/**\n * Removes a key from the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to remove\n * @returns the mutated request metadata\n */\nexport function removeRequestMeta<K extends keyof RequestMeta>(\n request: NextIncomingMessage,\n key: K\n) {\n const meta = getRequestMeta(request)\n delete meta[key]\n return setRequestMeta(request, meta)\n}\n\ntype NextQueryMetadata = {\n /**\n * The `_rsc` query parameter used for cache busting to ensure that the RSC\n * requests do not get cached by the browser explicitly.\n */\n [NEXT_RSC_UNION_QUERY]?: string\n}\n\nexport type NextParsedUrlQuery = ParsedUrlQuery &\n NextQueryMetadata & {\n amp?: '1'\n }\n\nexport interface NextUrlWithParsedQuery extends UrlWithParsedQuery {\n query: NextParsedUrlQuery\n}\n","import { ensureLeadingSlash } from './ensure-leading-slash'\nimport { isDynamicRoute } from '../router/utils'\nimport { NormalizeError } from '../utils'\n\n/**\n * Takes a page and transforms it into its file counterpart ensuring that the\n * output is normalized. Note this function is not idempotent because a page\n * `/index` can be referencing `/index/index.js` and `/index/index` could be\n * referencing `/index/index/index.js`. Examples:\n * - `/` -> `/index`\n * - `/index/foo` -> `/index/index/foo`\n * - `/index` -> `/index/index`\n */\nexport function normalizePagePath(page: string): string {\n const normalized =\n /^\\/index(\\/|$)/.test(page) && !isDynamicRoute(page)\n ? `/index${page}`\n : page === '/'\n ? '/index'\n : ensureLeadingSlash(page)\n\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { posix } = require('path') as typeof import('path')\n const resolvedPage = posix.normalize(normalized)\n if (resolvedPage !== normalized) {\n throw new NormalizeError(\n `Requested and resolved page mismatch: ${normalized} ${resolvedPage}`\n )\n }\n }\n\n return normalized\n}\n","import type { PageExtensions } from '../../build/page-extensions-type'\nimport { normalizePathSep } from '../../shared/lib/page-path/normalize-path-sep'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { isAppRouteRoute } from '../is-app-route-route'\n\nexport const STATIC_METADATA_IMAGES = {\n icon: {\n filename: 'icon',\n extensions: ['ico', 'jpg', 'jpeg', 'png', 'svg'],\n },\n apple: {\n filename: 'apple-icon',\n extensions: ['jpg', 'jpeg', 'png'],\n },\n favicon: {\n filename: 'favicon',\n extensions: ['ico'],\n },\n openGraph: {\n filename: 'opengraph-image',\n extensions: ['jpg', 'jpeg', 'png', 'gif'],\n },\n twitter: {\n filename: 'twitter-image',\n extensions: ['jpg', 'jpeg', 'png', 'gif'],\n },\n} as const\n\n// Match routes that are metadata routes, e.g. /sitemap.xml, /favicon.<ext>, /<icon>.<ext>, etc.\n// TODO-METADATA: support more metadata routes with more extensions\nexport const DEFAULT_METADATA_ROUTE_EXTENSIONS = ['js', 'jsx', 'ts', 'tsx']\n\n// Match the file extension with the dynamic multi-routes extensions\n// e.g. ([xml, js], null) -> can match `/sitemap.xml/route`, `sitemap.js/route`\n// e.g. ([png], [ts]) -> can match `/opengrapg-image.png`, `/opengraph-image.ts`\nexport const getExtensionRegexString = (\n staticExtensions: readonly string[],\n dynamicExtensions: readonly string[] | null\n) => {\n // If there's no possible multi dynamic routes, will not match any <name>[].<ext> files\n if (!dynamicExtensions || dynamicExtensions.length === 0) {\n return `(\\\\.(?:${staticExtensions.join('|')}))`\n }\n return `(?:\\\\.(${staticExtensions.join('|')})|(\\\\.(${dynamicExtensions.join('|')})))`\n}\n\n/**\n * Determine if the file is a metadata route file entry\n * @param appDirRelativePath the relative file path to app/\n * @param pageExtensions the js extensions, such as ['js', 'jsx', 'ts', 'tsx']\n * @param strictlyMatchExtensions if it's true, match the file with page extension, otherwise match the file with default corresponding extension\n * @returns if the file is a metadata route file\n */\nexport function isMetadataRouteFile(\n appDirRelativePath: string,\n pageExtensions: PageExtensions,\n strictlyMatchExtensions: boolean\n) {\n // End with the extension or optional to have the extension\n // When strictlyMatchExtensions is true, it's used for match file path;\n // When strictlyMatchExtensions, the dynamic extension is skipped but\n // static extension is kept, which is usually used for matching route path.\n const trailingMatcher = (strictlyMatchExtensions ? '' : '?') + '$'\n // Match the optional variants like /opengraph-image2, /icon-a102f4.png, etc.\n const variantsMatcher = '\\\\d?'\n // The -\\w{6} is the suffix that normalized from group routes;\n const groupSuffix = strictlyMatchExtensions ? '' : '(-\\\\w{6})?'\n\n const suffixMatcher = `${variantsMatcher}${groupSuffix}`\n\n const metadataRouteFilesRegex = [\n new RegExp(\n `^[\\\\\\\\/]robots${getExtensionRegexString(\n pageExtensions.concat('txt'),\n null\n )}${trailingMatcher}`\n ),\n new RegExp(\n `^[\\\\\\\\/]manifest${getExtensionRegexString(\n pageExtensions.concat('webmanifest', 'json'),\n null\n )}${trailingMatcher}`\n ),\n new RegExp(`^[\\\\\\\\/]favicon\\\\.ico$`),\n new RegExp(\n `[\\\\\\\\/]sitemap${getExtensionRegexString(['xml'], pageExtensions)}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]${STATIC_METADATA_IMAGES.icon.filename}${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.icon.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]${STATIC_METADATA_IMAGES.apple.filename}${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.apple.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]${STATIC_METADATA_IMAGES.openGraph.filename}${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.openGraph.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]${STATIC_METADATA_IMAGES.twitter.filename}${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.twitter.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n ]\n\n const normalizedAppDirRelativePath = normalizePathSep(appDirRelativePath)\n const matched = metadataRouteFilesRegex.some((r) =>\n r.test(normalizedAppDirRelativePath)\n )\n\n return matched\n}\n\n// Check if the route is a static metadata route, with /route suffix\n// e.g. /favicon.ico/route, /icon.png/route, etc.\n// But skip the text routes like robots.txt since they might also be dynamic.\n// Checking route path is not enough to determine if text routes is dynamic.\nexport function isStaticMetadataRoute(route: string) {\n // extract ext with regex\n const pathname = route.replace(/\\/route$/, '')\n\n const matched =\n isAppRouteRoute(route) &&\n isMetadataRouteFile(pathname, [], true) &&\n // These routes can either be built by static or dynamic entrypoints,\n // so we assume they're dynamic\n pathname !== '/robots.txt' &&\n pathname !== '/manifest.webmanifest' &&\n !pathname.endsWith('/sitemap.xml')\n\n return matched\n}\n\n/**\n * Determine if a page or pathname is a metadata page.\n *\n * The input is a page or pathname, which can be with or without page suffix /foo/page or /foo.\n * But it will not contain the /route suffix.\n *\n * .e.g\n * /robots -> true\n * /sitemap -> true\n * /foo -> false\n */\nexport function isMetadataPage(page: string) {\n const matched = !isAppRouteRoute(page) && isMetadataRouteFile(page, [], false)\n\n return matched\n}\n\n/*\n * Determine if a Next.js route is a metadata route.\n * `route` will has a route suffix.\n *\n * e.g.\n * /app/robots/route -> true\n * /robots/route -> true\n * /sitemap/[__metadata_id__]/route -> true\n * /app/sitemap/page -> false\n * /icon-a102f4/route -> true\n */\nexport function isMetadataRoute(route: string): boolean {\n let page = normalizeAppPath(route)\n .replace(/^\\/?app\\//, '')\n // Remove the dynamic route id\n .replace('/[__metadata_id__]', '')\n // Remove the /route suffix\n .replace(/\\/route$/, '')\n\n if (page[0] !== '/') page = '/' + page\n\n const matched = isAppRouteRoute(route) && isMetadataRouteFile(page, [], false)\n\n return matched\n}\n","/**\n * A `Promise.withResolvers` implementation that exposes the `resolve` and\n * `reject` functions on a `Promise`.\n *\n * @see https://tc39.es/proposal-promise-with-resolvers/\n */\nexport class DetachedPromise<T = any> {\n public readonly resolve: (value: T | PromiseLike<T>) => void\n public readonly reject: (reason: any) => void\n public readonly promise: Promise<T>\n\n constructor() {\n let resolve: (value: T | PromiseLike<T>) => void\n let reject: (reason: any) => void\n\n // Create the promise and assign the resolvers to the object.\n this.promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n\n // We know that resolvers is defined because the Promise constructor runs\n // synchronously.\n this.resolve = resolve!\n this.reject = reject!\n }\n}\n","import type { SchedulerFn } from './scheduler'\n\nimport { DetachedPromise } from './detached-promise'\n\ntype CacheKeyFn<K, C extends string | number | null> = (\n key: K\n) => PromiseLike<C> | C\n\ntype BatcherOptions<K, C extends string | number | null> = {\n cacheKeyFn?: CacheKeyFn<K, C>\n schedulerFn?: SchedulerFn<void>\n}\n\ntype WorkFn<V, C> = (\n key: C,\n resolve: (value: V | PromiseLike<V>) => void\n) => Promise<V>\n\n/**\n * A wrapper for a function that will only allow one call to the function to\n * execute at a time.\n */\nexport class Batcher<K, V, C extends string | number | null> {\n private readonly pending = new Map<C, Promise<V>>()\n\n protected constructor(\n private readonly cacheKeyFn?: CacheKeyFn<K, C>,\n /**\n * A function that will be called to schedule the wrapped function to be\n * executed. This defaults to a function that will execute the function\n * immediately.\n */\n private readonly schedulerFn: SchedulerFn<void> = (fn) => fn()\n ) {}\n\n /**\n * Creates a new instance of PendingWrapper. If the key extends a string or\n * number, the key will be used as the cache key. If the key is an object, a\n * cache key function must be provided.\n */\n public static create<K extends string | number | null, V>(\n options?: BatcherOptions<K, K>\n ): Batcher<K, V, K>\n public static create<K, V, C extends string | number | null>(\n options: BatcherOptions<K, C> &\n Required<Pick<BatcherOptions<K, C>, 'cacheKeyFn'>>\n ): Batcher<K, V, C>\n public static create<K, V, C extends string | number | null>(\n options?: BatcherOptions<K, C>\n ): Batcher<K, V, C> {\n return new Batcher<K, V, C>(options?.cacheKeyFn, options?.schedulerFn)\n }\n\n /**\n * Wraps a function in a promise that will be resolved or rejected only once\n * for a given key. This will allow multiple calls to the function to be\n * made, but only one will be executed at a time. The result of the first\n * call will be returned to all callers.\n *\n * @param key the key to use for the cache\n * @param fn the function to wrap\n * @returns a promise that resolves to the result of the function\n */\n public async batch(key: K, fn: WorkFn<V, C>): Promise<V> {\n const cacheKey = (this.cacheKeyFn ? await this.cacheKeyFn(key) : key) as C\n if (cacheKey === null) {\n return fn(cacheKey, Promise.resolve)\n }\n\n const pending = this.pending.get(cacheKey)\n if (pending) return pending\n\n const { promise, resolve, reject } = new DetachedPromise<V>()\n this.pending.set(cacheKey, promise)\n\n this.schedulerFn(async () => {\n try {\n const result = await fn(cacheKey, resolve)\n\n // Resolving a promise multiple times is a no-op, so we can safely\n // resolve all pending promises with the same result.\n resolve(result)\n } catch (err) {\n reject(err)\n } finally {\n this.pending.delete(cacheKey)\n }\n })\n\n return promise\n }\n}\n","export type ScheduledFn<T = void> = () => T | PromiseLike<T>\nexport type SchedulerFn<T = void> = (cb: ScheduledFn<T>) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = (cb: ScheduledFn<void>) => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = (cb: ScheduledFn<void>): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise<void>((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise<void> {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport type RenderResult from '../render-result'\nimport type { CacheControl, Revalidate } from '../lib/cache-control'\nimport type { RouteKind } from '../route-kind'\n\nexport interface ResponseCacheBase {\n get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalCache\n /**\n * This is a hint to the cache to help it determine what kind of route\n * this is so it knows where to look up the cache entry from. If not\n * provided it will test the filesystem to check.\n */\n routeKind: RouteKind\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n }\n ): Promise<ResponseCacheEntry | null>\n}\n\n// The server components HMR cache might store other data as well in the future,\n// at which point this should be refactored to a discriminated union type.\nexport interface ServerComponentsHmrCache {\n get(key: string): CachedFetchData | undefined\n set(key: string, data: CachedFetchData): void\n}\n\nexport type CachedFetchData = {\n headers: Record<string, string>\n body: string\n url: string\n status?: number\n}\n\nexport const enum CachedRouteKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n REDIRECT = 'REDIRECT',\n IMAGE = 'IMAGE',\n}\n\nexport interface CachedFetchValue {\n kind: CachedRouteKind.FETCH\n data: CachedFetchData\n // tags are only present with file-system-cache\n // fetch cache stores tags outside of cache entry\n tags?: string[]\n revalidate: number\n}\n\nexport interface CachedRedirectValue {\n kind: CachedRouteKind.REDIRECT\n props: Object\n}\n\nexport interface CachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n rscData: Buffer | undefined\n status: number | undefined\n postponed: string | undefined\n headers: OutgoingHttpHeaders | undefined\n segmentData: Map<string, Buffer> | undefined\n}\n\nexport interface CachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n pageData: Object\n status: number | undefined\n headers: OutgoingHttpHeaders | undefined\n}\n\nexport interface CachedRouteValue {\n kind: CachedRouteKind.APP_ROUTE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n body: Buffer\n status: number\n headers: OutgoingHttpHeaders\n}\n\nexport interface CachedImageValue {\n kind: CachedRouteKind.IMAGE\n etag: string\n upstreamEtag: string\n buffer: Buffer\n extension: string\n isMiss?: boolean\n isStale?: boolean\n}\n\nexport interface IncrementalCachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n rscData: Buffer | undefined\n headers: OutgoingHttpHeaders | undefined\n postponed: string | undefined\n status: number | undefined\n segmentData: Map<string, Buffer> | undefined\n}\n\nexport interface IncrementalCachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n pageData: Object\n headers: OutgoingHttpHeaders | undefined\n status: number | undefined\n}\n\nexport interface IncrementalResponseCacheEntry {\n cacheControl?: CacheControl\n /**\n * timestamp in milliseconds to revalidate after\n */\n revalidateAfter?: Revalidate\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n isMiss?: boolean\n value: Exclude<IncrementalCacheValue, CachedFetchValue> | null\n}\n\nexport interface IncrementalFetchCacheEntry {\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n value: CachedFetchValue\n}\n\nexport type IncrementalCacheEntry =\n | IncrementalResponseCacheEntry\n | IncrementalFetchCacheEntry\n\nexport type IncrementalCacheValue =\n | CachedRedirectValue\n | IncrementalCachedPageValue\n | IncrementalCachedAppPageValue\n | CachedImageValue\n | CachedFetchValue\n | CachedRouteValue\n\nexport type ResponseCacheValue =\n | CachedRedirectValue\n | CachedPageValue\n | CachedAppPageValue\n | CachedImageValue\n | CachedRouteValue\n\nexport type ResponseCacheEntry = {\n cacheControl?: CacheControl\n value: ResponseCacheValue | null\n isStale?: boolean | -1\n isMiss?: boolean\n}\n\n/**\n * @param hasResolved whether the responseGenerator has resolved it's promise\n * @param previousCacheEntry the previous cache entry if it exists or the current\n */\nexport type ResponseGenerator = (state: {\n hasResolved: boolean\n previousCacheEntry?: IncrementalResponseCacheEntry | null\n isRevalidating?: boolean\n span?: any\n}) => Promise<ResponseCacheEntry | null>\n\nexport const enum IncrementalCacheKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n IMAGE = 'IMAGE',\n}\n\nexport interface GetIncrementalFetchCacheContext {\n kind: IncrementalCacheKind.FETCH\n revalidate?: Revalidate\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n softTags?: string[]\n}\n\nexport interface GetIncrementalResponseCacheContext {\n kind: Exclude<IncrementalCacheKind, IncrementalCacheKind.FETCH>\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback: boolean\n}\n\nexport interface SetIncrementalFetchCacheContext {\n fetchCache: true\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n isImplicitBuildTimeCache?: boolean\n}\n\nexport interface SetIncrementalResponseCacheContext {\n fetchCache?: false\n cacheControl?: CacheControl\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n}\n\nexport interface IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext\n ): Promise<IncrementalResponseCacheEntry | null>\n set(\n key: string,\n data: Exclude<IncrementalCacheValue, CachedFetchValue> | null,\n ctx: SetIncrementalResponseCacheContext\n ): Promise<void>\n}\n\nexport interface IncrementalCache extends IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext\n ): Promise<IncrementalFetchCacheEntry | null>\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext\n ): Promise<IncrementalResponseCacheEntry | null>\n set(\n key: string,\n data: CachedFetchValue | null,\n ctx: SetIncrementalFetchCacheContext\n ): Promise<void>\n set(\n key: string,\n data: Exclude<IncrementalCacheValue, CachedFetchValue> | null,\n ctx: SetIncrementalResponseCacheContext\n ): Promise<void>\n}\n","import { getTracer } from '../lib/trace/tracer'\nimport { AppRenderSpan } from '../lib/trace/constants'\nimport { DetachedPromise } from '../../lib/detached-promise'\nimport { scheduleImmediate, atLeastOneTask } from '../../lib/scheduler'\nimport { ENCODED_TAGS } from './encoded-tags'\nimport {\n indexOfUint8Array,\n isEquivalentUint8Arrays,\n removeFromUint8Array,\n} from './uint8array-helpers'\nimport { MISSING_ROOT_TAGS_ERROR } from '../../shared/lib/errors/constants'\nimport { insertBuildIdComment } from '../../shared/lib/segment-cache/output-export-prefetch-encoding'\n\nfunction voidCatch() {\n // this catcher is designed to be used with pipeTo where we expect the underlying\n // pipe implementation to forward errors but we don't want the pipeTo promise to reject\n // and be unhandled\n}\n\nexport type ReactReadableStream = ReadableStream<Uint8Array> & {\n allReady?: Promise<void> | undefined\n}\n\n// We can share the same encoder instance everywhere\n// Notably we cannot do the same for TextDecoder because it is stateful\n// when handling streaming data\nconst encoder = new TextEncoder()\n\nexport function chainStreams<T>(\n ...streams: ReadableStream<T>[]\n): ReadableStream<T> {\n // If we have no streams, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n if (streams.length === 0) {\n return new ReadableStream<T>({\n start(controller) {\n controller.close()\n },\n })\n }\n\n // If we only have 1 stream we fast path it by returning just this stream\n if (streams.length === 1) {\n return streams[0]\n }\n\n const { readable, writable } = new TransformStream()\n\n // We always initiate pipeTo immediately. We know we have at least 2 streams\n // so we need to avoid closing the writable when this one finishes.\n let promise = streams[0].pipeTo(writable, { preventClose: true })\n\n let i = 1\n for (; i < streams.length - 1; i++) {\n const nextStream = streams[i]\n promise = promise.then(() =>\n nextStream.pipeTo(writable, { preventClose: true })\n )\n }\n\n // We can omit the length check because we halted before the last stream and there\n // is at least two streams so the lastStream here will always be defined\n const lastStream = streams[i]\n promise = promise.then(() => lastStream.pipeTo(writable))\n\n // Catch any errors from the streams and ignore them, they will be handled\n // by whatever is consuming the readable stream.\n promise.catch(voidCatch)\n\n return readable\n}\n\nexport function streamFromString(str: string): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(encoder.encode(str))\n controller.close()\n },\n })\n}\n\nexport function streamFromBuffer(chunk: Buffer): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(chunk)\n controller.close()\n },\n })\n}\n\nexport async function streamToBuffer(\n stream: ReadableStream<Uint8Array>\n): Promise<Buffer> {\n const reader = stream.getReader()\n const chunks: Uint8Array[] = []\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n break\n }\n\n chunks.push(value)\n }\n\n return Buffer.concat(chunks)\n}\n\nexport async function streamToString(\n stream: ReadableStream<Uint8Array>,\n signal?: AbortSignal\n): Promise<string> {\n const decoder = new TextDecoder('utf-8', { fatal: true })\n let string = ''\n\n for await (const chunk of stream) {\n if (signal?.aborted) {\n return string\n }\n\n string += decoder.decode(chunk, { stream: true })\n }\n\n string += decoder.decode()\n\n return string\n}\n\nexport function createBufferedTransformStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let bufferedChunks: Array<Uint8Array> = []\n let bufferByteLength: number = 0\n let pending: DetachedPromise<void> | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n // If we already have a pending flush, then return early.\n if (pending) return\n\n const detached = new DetachedPromise<void>()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n const chunk = new Uint8Array(bufferByteLength)\n let copiedBytes = 0\n\n for (let i = 0; i < bufferedChunks.length; i++) {\n const bufferedChunk = bufferedChunks[i]\n chunk.set(bufferedChunk, copiedBytes)\n copiedBytes += bufferedChunk.byteLength\n }\n // We just wrote all the buffered chunks so we need to reset the bufferedChunks array\n // and our bufferByteLength to prepare for the next round of buffered chunks\n bufferedChunks.length = 0\n bufferByteLength = 0\n controller.enqueue(chunk)\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n // Combine the previous buffer with the new chunk.\n bufferedChunks.push(chunk)\n bufferByteLength += chunk.byteLength\n\n // Flush the buffer to the controller.\n flush(controller)\n },\n flush() {\n if (!pending) return\n\n return pending.promise\n },\n })\n}\n\nfunction createPrefetchCommentStream(\n isBuildTimePrerendering: boolean,\n buildId: string\n): TransformStream<Uint8Array, Uint8Array> {\n // Insert an extra comment at the beginning of the HTML document. This must\n // come after the DOCTYPE, which is inserted by React.\n //\n // The first chunk sent by React will contain the doctype. After that, we can\n // pass through the rest of the chunks as-is.\n let didTransformFirstChunk = false\n return new TransformStream({\n transform(chunk, controller) {\n if (isBuildTimePrerendering && !didTransformFirstChunk) {\n didTransformFirstChunk = true\n const decoder = new TextDecoder('utf-8', { fatal: true })\n const chunkStr = decoder.decode(chunk, {\n stream: true,\n })\n const updatedChunkStr = insertBuildIdComment(chunkStr, buildId)\n controller.enqueue(encoder.encode(updatedChunkStr))\n return\n }\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function renderToInitialFizzStream({\n ReactDOMServer,\n element,\n streamOptions,\n}: {\n ReactDOMServer: {\n renderToReadableStream: typeof import('react-dom/server').renderToReadableStream\n }\n element: React.ReactElement\n streamOptions?: Parameters<typeof ReactDOMServer.renderToReadableStream>[1]\n}): Promise<ReactReadableStream> {\n return getTracer().trace(AppRenderSpan.renderToReadableStream, async () =>\n ReactDOMServer.renderToReadableStream(element, streamOptions)\n )\n}\n\nfunction createMetadataTransformStream(\n insert: () => Promise<string> | string\n): TransformStream<Uint8Array, Uint8Array> {\n let chunkIndex = -1\n let isMarkRemoved = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n let iconMarkIndex = -1\n let closedHeadIndex = -1\n chunkIndex++\n\n if (isMarkRemoved) {\n controller.enqueue(chunk)\n return\n }\n let iconMarkLength = 0\n // Only search for the closed head tag once\n if (iconMarkIndex === -1) {\n iconMarkIndex = indexOfUint8Array(chunk, ENCODED_TAGS.META.ICON_MARK)\n if (iconMarkIndex === -1) {\n controller.enqueue(chunk)\n return\n } else {\n // When we found the `<meta name=\"«nxt-icon»\"` tag prefix, we will remove it from the chunk.\n // Its close tag could either be `/>` or `>`, checking the next char to ensure we cover both cases.\n iconMarkLength = ENCODED_TAGS.META.ICON_MARK.length\n // Check if next char is /, this is for xml mode.\n if (chunk[iconMarkIndex + iconMarkLength] === 47) {\n iconMarkLength += 2\n } else {\n // The last char is `>`\n iconMarkLength++\n }\n }\n }\n\n // Check if icon mark is inside <head> tag in the first chunk.\n if (chunkIndex === 0) {\n closedHeadIndex = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n if (iconMarkIndex !== -1) {\n // The mark icon is located in the 1st chunk before the head tag.\n // We do not need to insert the script tag in this case because it's in the head.\n // Just remove the icon mark from the chunk.\n if (iconMarkIndex < closedHeadIndex) {\n const replaced = new Uint8Array(chunk.length - iconMarkLength)\n\n // Remove the icon mark from the chunk.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex\n )\n chunk = replaced\n } else {\n // The icon mark is after the head tag, replace and insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(encodedInsertion, iconMarkIndex)\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n }\n isMarkRemoved = true\n }\n // If there's no icon mark located, it will be handled later when if present in the following chunks.\n } else {\n // When it's appeared in the following chunks, we'll need to\n // remove the mark and then insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n // Replace the icon mark with the hoist script or empty string.\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n // Set the first part of the chunk, before the icon mark.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n // Set the insertion after the icon mark.\n replaced.set(encodedInsertion, iconMarkIndex)\n\n // Set the rest of the chunk after the icon mark.\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n isMarkRemoved = true\n }\n controller.enqueue(chunk)\n },\n })\n}\n\nfunction createHeadInsertionTransformStream(\n insert: () => Promise<string>\n): TransformStream<Uint8Array, Uint8Array> {\n let inserted = false\n\n // We need to track if this transform saw any bytes because if it didn't\n // we won't want to insert any server HTML at all\n let hasBytes = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n hasBytes = true\n\n const insertion = await insert()\n if (inserted) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n controller.enqueue(encodedInsertion)\n }\n controller.enqueue(chunk)\n } else {\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n if (index !== -1) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n // Get the total count of the bytes in the chunk and the insertion\n // e.g.\n // chunk = <head><meta charset=\"utf-8\"></head>\n // insertion = <script>...</script>\n // output = <head><meta charset=\"utf-8\"> [ <script>...</script> ] </head>\n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, index))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, index)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(index),\n index + encodedInsertion.length\n )\n controller.enqueue(insertedHeadContent)\n } else {\n controller.enqueue(chunk)\n }\n inserted = true\n } else {\n // This will happens in PPR rendering during next start, when the page is partially rendered.\n // When the page resumes, the head tag will be found in the middle of the chunk.\n // Where we just need to append the insertion and chunk to the current stream.\n // e.g.\n // PPR-static: <head>...</head><body> [ resume content ] </body>\n // PPR-resume: [ insertion ] [ rest content ]\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n controller.enqueue(chunk)\n inserted = true\n }\n }\n },\n async flush(controller) {\n // Check before closing if there's anything remaining to insert.\n if (hasBytes) {\n const insertion = await insert()\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n }\n },\n })\n}\n\n// Suffix after main body content - scripts before </body>,\n// but wait for the major chunks to be enqueued.\nfunction createDeferredSuffixStream(\n suffix: string\n): TransformStream<Uint8Array, Uint8Array> {\n let flushed = false\n let pending: DetachedPromise<void> | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n const detached = new DetachedPromise<void>()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n controller.enqueue(encoder.encode(suffix))\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // If we've already flushed, we're done.\n if (flushed) return\n\n // Schedule the flush to happen.\n flushed = true\n flush(controller)\n },\n flush(controller) {\n if (pending) return pending.promise\n if (flushed) return\n\n // Flush now.\n controller.enqueue(encoder.encode(suffix))\n },\n })\n}\n\n// Merge two streams into one. Ensure the final transform stream is closed\n// when both are finished.\nfunction createMergedTransformStream(\n stream: ReadableStream<Uint8Array>\n): TransformStream<Uint8Array, Uint8Array> {\n let pull: Promise<void> | null = null\n let donePulling = false\n\n async function startPulling(controller: TransformStreamDefaultController) {\n if (pull) {\n return\n }\n\n const reader = stream.getReader()\n\n // NOTE: streaming flush\n // We are buffering here for the inlined data stream because the\n // \"shell\" stream might be chunkenized again by the underlying stream\n // implementation, e.g. with a specific high-water mark. To ensure it's\n // the safe timing to pipe the data stream, this extra tick is\n // necessary.\n\n // We don't start reading until we've left the current Task to ensure\n // that it's inserted after flushing the shell. Note that this implementation\n // might get stale if impl details of Fizz change in the future.\n await atLeastOneTask()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n donePulling = true\n return\n }\n\n controller.enqueue(value)\n }\n } catch (err) {\n controller.error(err)\n }\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // Start the streaming if it hasn't already been started yet.\n if (!pull) {\n pull = startPulling(controller)\n }\n },\n flush(controller) {\n if (donePulling) {\n return\n }\n return pull || startPulling(controller)\n },\n })\n}\n\nconst CLOSE_TAG = '</body></html>'\n\n/**\n * This transform stream moves the suffix to the end of the stream, so results\n * like `</body></html><script>...</script>` will be transformed to\n * `<script>...</script></body></html>`.\n */\nfunction createMoveSuffixStream(): TransformStream<Uint8Array, Uint8Array> {\n let foundSuffix = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (foundSuffix) {\n return controller.enqueue(chunk)\n }\n\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n if (index > -1) {\n foundSuffix = true\n\n // If the whole chunk is the suffix, then don't write anything, it will\n // be written in the flush.\n if (chunk.length === ENCODED_TAGS.CLOSED.BODY_AND_HTML.length) {\n return\n }\n\n // Write out the part before the suffix.\n const before = chunk.slice(0, index)\n controller.enqueue(before)\n\n // In the case where the suffix is in the middle of the chunk, we need\n // to split the chunk into two parts.\n if (chunk.length > ENCODED_TAGS.CLOSED.BODY_AND_HTML.length + index) {\n // Write out the part after the suffix.\n const after = chunk.slice(\n index + ENCODED_TAGS.CLOSED.BODY_AND_HTML.length\n )\n controller.enqueue(after)\n }\n } else {\n controller.enqueue(chunk)\n }\n },\n flush(controller) {\n // Even if we didn't find the suffix, the HTML is not valid if we don't\n // add it, so insert it at the end.\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n },\n })\n}\n\nfunction createStripDocumentClosingTagsTransform(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n return new TransformStream({\n transform(chunk, controller) {\n // We rely on the assumption that chunks will never break across a code unit.\n // This is reasonable because we currently concat all of React's output from a single\n // flush into one chunk before streaming it forward which means the chunk will represent\n // a single coherent utf-8 string. This is not safe to use if we change our streaming to no\n // longer do this large buffered chunk\n if (\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.HTML)\n ) {\n // the entire chunk is the closing tags; return without enqueueing anything.\n return\n }\n\n // We assume these tags will go at together at the end of the document and that\n // they won't appear anywhere else in the document. This is not really a safe assumption\n // but until we revamp our streaming infra this is a performant way to string the tags\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY)\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.HTML)\n\n controller.enqueue(chunk)\n },\n })\n}\n\n/*\n * Checks if the root layout is missing the html or body tags\n * and if so, it will inject a script tag to throw an error in the browser, showing the user\n * the error message in the error overlay.\n */\nexport function createRootLayoutValidatorStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let foundHtml = false\n let foundBody = false\n return new TransformStream({\n async transform(chunk, controller) {\n // Peek into the streamed chunk to see if the tags are present.\n if (\n !foundHtml &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML) > -1\n ) {\n foundHtml = true\n }\n\n if (\n !foundBody &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.BODY) > -1\n ) {\n foundBody = true\n }\n\n controller.enqueue(chunk)\n },\n flush(controller) {\n const missingTags: ('html' | 'body')[] = []\n if (!foundHtml) missingTags.push('html')\n if (!foundBody) missingTags.push('body')\n\n if (!missingTags.length) return\n\n controller.enqueue(\n encoder.encode(\n `<html id=\"__next_error__\">\n <template\n data-next-error-message=\"Missing ${missingTags\n .map((c) => `<${c}>`)\n .join(\n missingTags.length > 1 ? ' and ' : ''\n )} tags in the root layout.\\nRead more at https://nextjs.org/docs/messages/missing-root-layout-tags\"\"\n data-next-error-digest=\"${MISSING_ROOT_TAGS_ERROR}\"\n data-next-error-stack=\"\"\n ></template>\n `\n )\n )\n },\n })\n}\n\nfunction chainTransformers<T>(\n readable: ReadableStream<T>,\n transformers: ReadonlyArray<TransformStream<T, T> | null>\n): ReadableStream<T> {\n let stream = readable\n for (const transformer of transformers) {\n if (!transformer) continue\n\n stream = stream.pipeThrough(transformer)\n }\n return stream\n}\n\nexport type ContinueStreamOptions = {\n inlinedDataStream: ReadableStream<Uint8Array> | undefined\n isStaticGeneration: boolean\n isBuildTimePrerendering: boolean\n buildId: string\n getServerInsertedHTML: () => Promise<string>\n getServerInsertedMetadata: () => Promise<string>\n validateRootLayout?: boolean\n /**\n * Suffix to inject after the buffered data, but before the close tags.\n */\n suffix?: string | undefined\n}\n\nexport async function continueFizzStream(\n renderStream: ReactReadableStream,\n {\n suffix,\n inlinedDataStream,\n isStaticGeneration,\n isBuildTimePrerendering,\n buildId,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n validateRootLayout,\n }: ContinueStreamOptions\n): Promise<ReadableStream<Uint8Array>> {\n // Suffix itself might contain close tags at the end, so we need to split it.\n const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null\n\n // If we're generating static HTML and there's an `allReady` promise on the\n // stream, we need to wait for it to resolve before continuing.\n if (isStaticGeneration && 'allReady' in renderStream) {\n await renderStream.allReady\n }\n\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n\n // Add build id comment to start of the HTML document (in export mode)\n createPrefetchCommentStream(isBuildTimePrerendering, buildId),\n\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n\n // Insert suffix content\n suffixUnclosed != null && suffixUnclosed.length > 0\n ? createDeferredSuffixStream(suffixUnclosed)\n : null,\n\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n inlinedDataStream ? createMergedTransformStream(inlinedDataStream) : null,\n\n // Validate the root layout for missing html or body tags\n validateRootLayout ? createRootLayoutValidatorStream() : null,\n\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n\n // Special head insertions\n // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid\n // hydration errors. Remove this once it's ready to be handled by react itself.\n createHeadInsertionTransformStream(getServerInsertedHTML),\n ])\n}\n\ntype ContinueDynamicPrerenderOptions = {\n getServerInsertedHTML: () => Promise<string>\n getServerInsertedMetadata: () => Promise<string>\n}\n\nexport async function continueDynamicPrerender(\n prerenderStream: ReadableStream<Uint8Array>,\n {\n getServerInsertedHTML,\n getServerInsertedMetadata,\n }: ContinueDynamicPrerenderOptions\n) {\n return (\n prerenderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n .pipeThrough(createStripDocumentClosingTagsTransform())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Transform metadata\n .pipeThrough(createMetadataTransformStream(getServerInsertedMetadata))\n )\n}\n\ntype ContinueStaticPrerenderOptions = {\n inlinedDataStream: ReadableStream<Uint8Array>\n getServerInsertedHTML: () => Promise<string>\n getServerInsertedMetadata: () => Promise<string>\n isBuildTimePrerendering: boolean\n buildId: string\n}\n\nexport async function continueStaticPrerender(\n prerenderStream: ReadableStream<Uint8Array>,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n isBuildTimePrerendering,\n buildId,\n }: ContinueStaticPrerenderOptions\n) {\n return (\n prerenderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n // Add build id comment to start of the HTML document (in export mode)\n .pipeThrough(\n createPrefetchCommentStream(isBuildTimePrerendering, buildId)\n )\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Transform metadata\n .pipeThrough(createMetadataTransformStream(getServerInsertedMetadata))\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n .pipeThrough(createMergedTransformStream(inlinedDataStream))\n // Close tags should always be deferred to the end\n .pipeThrough(createMoveSuffixStream())\n )\n}\n\ntype ContinueResumeOptions = {\n inlinedDataStream: ReadableStream<Uint8Array>\n getServerInsertedHTML: () => Promise<string>\n getServerInsertedMetadata: () => Promise<string>\n}\n\nexport async function continueDynamicHTMLResume(\n renderStream: ReadableStream<Uint8Array>,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n }: ContinueResumeOptions\n) {\n return (\n renderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Transform metadata\n .pipeThrough(createMetadataTransformStream(getServerInsertedMetadata))\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n .pipeThrough(createMergedTransformStream(inlinedDataStream))\n // Close tags should always be deferred to the end\n .pipeThrough(createMoveSuffixStream())\n )\n}\n\nexport function createDocumentClosingStream(): ReadableStream<Uint8Array> {\n return streamFromString(CLOSE_TAG)\n}\n","export const ENCODED_TAGS = {\n // opening tags do not have the closing `>` since they can contain other attributes such as `<body className=''>`\n OPENING: {\n // <html\n HTML: new Uint8Array([60, 104, 116, 109, 108]),\n // <body\n BODY: new Uint8Array([60, 98, 111, 100, 121]),\n },\n CLOSED: {\n // </head>\n HEAD: new Uint8Array([60, 47, 104, 101, 97, 100, 62]),\n // </body>\n BODY: new Uint8Array([60, 47, 98, 111, 100, 121, 62]),\n // </html>\n HTML: new Uint8Array([60, 47, 104, 116, 109, 108, 62]),\n // </body></html>\n BODY_AND_HTML: new Uint8Array([\n 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, 108, 62,\n ]),\n },\n META: {\n // Only the match the prefix cause the suffix can be different wether it's xml compatible or not \">\" or \"/>\"\n // <meta name=\"«nxt-icon»\"\n // This is a special mark that will be replaced by the icon insertion script tag.\n ICON_MARK: new Uint8Array([\n 60, 109, 101, 116, 97, 32, 110, 97, 109, 101, 61, 34, 194, 171, 110, 120,\n 116, 45, 105, 99, 111, 110, 194, 187, 34,\n ]),\n },\n} as const\n","import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /(?!^https?:\\/\\/)(127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n return new URL(\n String(url).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'),\n base && String(base).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost')\n )\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record<string, string>\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n","import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n","import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n","import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n","import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n\n validateURL(url)\n\n // node Request instance requires duplex option when a body\n // is present or it errors, we don't handle this for\n // Request being passed in since it would have already\n // errored if this wasn't configured\n if (process.env.NEXT_RUNTIME !== 'edge') {\n if (init.body && init.duplex !== 'half') {\n init.duplex = 'half'\n }\n }\n\n if (input instanceof Request) super(input, init)\n else super(url, init)\n\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n // see https://github.com/whatwg/fetch/pull/1457\n duplex?: 'half'\n}\n","import type { BaseNextRequest } from '../../../base-http'\nimport type { NodeNextRequest } from '../../../base-http/node'\nimport type { WebNextRequest } from '../../../base-http/web'\nimport type { Writable } from 'node:stream'\n\nimport { getRequestMeta } from '../../../request-meta'\nimport { fromNodeOutgoingHttpHeaders } from '../../utils'\nimport { NextRequest } from '../request'\nimport { isNodeNextRequest, isWebNextRequest } from '../../../base-http/helpers'\n\nexport const ResponseAbortedName = 'ResponseAborted'\nexport class ResponseAborted extends Error {\n public readonly name = ResponseAbortedName\n}\n\n/**\n * Creates an AbortController tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * If the `close` event is fired before the `finish` event, then we'll send the\n * `abort` signal.\n */\nexport function createAbortController(response: Writable): AbortController {\n const controller = new AbortController()\n\n // If `finish` fires first, then `res.end()` has been called and the close is\n // just us finishing the stream on our side. If `close` fires first, then we\n // know the client disconnected before we finished.\n response.once('close', () => {\n if (response.writableFinished) return\n\n controller.abort(new ResponseAborted())\n })\n\n return controller\n}\n\n/**\n * Creates an AbortSignal tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * This cannot be done with the request (IncomingMessage or Readable) because\n * the `abort` event will not fire if to data has been fully read (because that\n * will \"close\" the readable stream and nothing fires after that).\n */\nexport function signalFromNodeResponse(response: Writable): AbortSignal {\n const { errored, destroyed } = response\n if (errored || destroyed) {\n return AbortSignal.abort(errored ?? new ResponseAborted())\n }\n\n const { signal } = createAbortController(response)\n return signal\n}\n\nexport class NextRequestAdapter {\n public static fromBaseNextRequest(\n request: BaseNextRequest,\n signal: AbortSignal\n ): NextRequest {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME === 'edge' &&\n isWebNextRequest(request)\n ) {\n return NextRequestAdapter.fromWebNextRequest(request)\n } else if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextRequest(request)\n ) {\n return NextRequestAdapter.fromNodeNextRequest(request, signal)\n } else {\n throw new Error('Invariant: Unsupported NextRequest type')\n }\n }\n\n public static fromNodeNextRequest(\n request: NodeNextRequest,\n signal: AbortSignal\n ): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: BodyInit | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) {\n // @ts-expect-error - this is handled by undici, when streams/web land use it instead\n body = request.body\n }\n\n let url: URL\n if (request.url.startsWith('http')) {\n url = new URL(request.url)\n } else {\n // Grab the full URL from the request metadata.\n const base = getRequestMeta(request, 'initURL')\n if (!base || !base.startsWith('http')) {\n // Because the URL construction relies on the fact that the URL provided\n // is absolute, we need to provide a base URL. We can't use the request\n // URL because it's relative, so we use a dummy URL instead.\n url = new URL(request.url, 'http://n')\n } else {\n url = new URL(request.url, base)\n }\n }\n\n return new NextRequest(url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n\n public static fromWebNextRequest(request: WebNextRequest): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: ReadableStream | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD') {\n body = request.body\n }\n\n return new NextRequest(request.url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal: request.request.signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(request.request.signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n}\n","import type { AppPageModule } from './route-modules/app-page/module'\n\n// Combined load times for loading client components\nlet clientComponentLoadStart = 0\nlet clientComponentLoadTimes = 0\nlet clientComponentLoadCount = 0\n\nexport function wrapClientComponentLoader(\n ComponentMod: AppPageModule\n): AppPageModule['__next_app__'] {\n if (!('performance' in globalThis)) {\n return ComponentMod.__next_app__\n }\n\n return {\n require: (...args) => {\n const startTime = performance.now()\n\n if (clientComponentLoadStart === 0) {\n clientComponentLoadStart = startTime\n }\n\n try {\n clientComponentLoadCount += 1\n return ComponentMod.__next_app__.require(...args)\n } finally {\n clientComponentLoadTimes += performance.now() - startTime\n }\n },\n loadChunk: (...args) => {\n const startTime = performance.now()\n const result = ComponentMod.__next_app__.loadChunk(...args)\n // Avoid wrapping `loadChunk`'s result in an extra promise in case something like React depends on its identity.\n // We only need to know when it's settled.\n result.finally(() => {\n clientComponentLoadTimes += performance.now() - startTime\n })\n return result\n },\n }\n}\n\nexport function getClientComponentLoaderMetrics(\n options: { reset?: boolean } = {}\n) {\n const metrics =\n clientComponentLoadStart === 0\n ? undefined\n : {\n clientComponentLoadStart,\n clientComponentLoadTimes,\n clientComponentLoadCount,\n }\n\n if (options.reset) {\n clientComponentLoadStart = 0\n clientComponentLoadTimes = 0\n clientComponentLoadCount = 0\n }\n\n return metrics\n}\n","import type { ServerResponse } from 'node:http'\n\nimport {\n ResponseAbortedName,\n createAbortController,\n} from './web/spec-extension/adapters/next-request'\nimport { DetachedPromise } from '../lib/detached-promise'\nimport { getTracer } from './lib/trace/tracer'\nimport { NextNodeServerSpan } from './lib/trace/constants'\nimport { getClientComponentLoaderMetrics } from './client-component-renderer-logger'\n\nexport function isAbortError(e: any): e is Error & { name: 'AbortError' } {\n return e?.name === 'AbortError' || e?.name === ResponseAbortedName\n}\n\nfunction createWriterFromResponse(\n res: ServerResponse,\n waitUntilForEnd?: Promise<unknown>\n): WritableStream<Uint8Array> {\n let started = false\n\n // Create a promise that will resolve once the response has drained. See\n // https://nodejs.org/api/stream.html#stream_event_drain\n let drained = new DetachedPromise<void>()\n function onDrain() {\n drained.resolve()\n }\n res.on('drain', onDrain)\n\n // If the finish event fires, it means we shouldn't block and wait for the\n // drain event.\n res.once('close', () => {\n res.off('drain', onDrain)\n drained.resolve()\n })\n\n // Create a promise that will resolve once the response has finished. See\n // https://nodejs.org/api/http.html#event-finish_1\n const finished = new DetachedPromise<void>()\n res.once('finish', () => {\n finished.resolve()\n })\n\n // Create a writable stream that will write to the response.\n return new WritableStream<Uint8Array>({\n write: async (chunk) => {\n // You'd think we'd want to use `start` instead of placing this in `write`\n // but this ensures that we don't actually flush the headers until we've\n // started writing chunks.\n if (!started) {\n started = true\n\n if (\n 'performance' in globalThis &&\n process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n ) {\n const metrics = getClientComponentLoaderMetrics()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n try {\n const ok = res.write(chunk)\n\n // Added by the `compression` middleware, this is a function that will\n // flush the partially-compressed response to the client.\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n // If the write returns false, it means there's some backpressure, so\n // wait until it's streamed before continuing.\n if (!ok) {\n await drained.promise\n\n // Reset the drained promise so that we can wait for the next drain event.\n drained = new DetachedPromise<void>()\n }\n } catch (err) {\n res.end()\n throw new Error('failed to write chunk to response', { cause: err })\n }\n },\n abort: (err) => {\n if (res.writableFinished) return\n\n res.destroy(err)\n },\n close: async () => {\n // if a waitUntil promise was passed, wait for it to resolve before\n // ending the response.\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (res.writableFinished) return\n\n res.end()\n return finished.promise\n },\n })\n}\n\nexport async function pipeToNodeResponse(\n readable: ReadableStream<Uint8Array>,\n res: ServerResponse,\n waitUntilForEnd?: Promise<unknown>\n) {\n try {\n // If the response has already errored, then just return now.\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n // Create a new AbortController so that we can abort the readable if the\n // client disconnects.\n const controller = createAbortController(res)\n\n const writer = createWriterFromResponse(res, waitUntilForEnd)\n\n await readable.pipeTo(writer, { signal: controller.signal })\n } catch (err: any) {\n // If this isn't related to an abort error, re-throw it.\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n","export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n","import type { OutgoingHttpHeaders, ServerResponse } from 'http'\nimport type { CacheControl } from './lib/cache-control'\nimport type { FetchMetrics } from './base-http'\n\nimport {\n chainStreams,\n streamFromBuffer,\n streamFromString,\n streamToString,\n} from './stream-utils/node-web-streams-helper'\nimport { isAbortError, pipeToNodeResponse } from './pipe-readable'\nimport type { RenderResumeDataCache } from './resume-data-cache/resume-data-cache'\nimport { InvariantError } from '../shared/lib/invariant-error'\nimport type {\n HTML_CONTENT_TYPE_HEADER,\n JSON_CONTENT_TYPE_HEADER,\n TEXT_PLAIN_CONTENT_TYPE_HEADER,\n} from '../lib/constants'\nimport type { RSC_CONTENT_TYPE_HEADER } from '../client/components/app-router-headers'\n\ntype ContentTypeOption =\n | typeof RSC_CONTENT_TYPE_HEADER // For App Page RSC responses\n | typeof HTML_CONTENT_TYPE_HEADER // For App Page, Pages HTML responses\n | typeof JSON_CONTENT_TYPE_HEADER // For API routes, Next.js data requests\n | typeof TEXT_PLAIN_CONTENT_TYPE_HEADER // For simplified errors\n\nexport type AppPageRenderResultMetadata = {\n flightData?: Buffer\n cacheControl?: CacheControl\n staticBailoutInfo?: {\n stack?: string\n description?: string\n }\n\n /**\n * The postponed state if the render had postponed and needs to be resumed.\n */\n postponed?: string\n\n /**\n * The headers to set on the response that were added by the render.\n */\n headers?: OutgoingHttpHeaders\n statusCode?: number\n fetchTags?: string\n fetchMetrics?: FetchMetrics\n\n segmentData?: Map<string, Buffer>\n\n /**\n * In development, the resume data cache is warmed up before the render. This\n * is attached to the metadata so that it can be used during the render. When\n * prerendering, the filled resume data cache is also attached to the metadata\n * so that it can be used when prerendering matching fallback shells.\n */\n renderResumeDataCache?: RenderResumeDataCache\n}\n\nexport type PagesRenderResultMetadata = {\n pageData?: any\n cacheControl?: CacheControl\n assetQueryString?: string\n isNotFound?: boolean\n isRedirect?: boolean\n}\n\nexport type StaticRenderResultMetadata = {}\n\nexport type RenderResultMetadata = AppPageRenderResultMetadata &\n PagesRenderResultMetadata &\n StaticRenderResultMetadata\n\nexport type RenderResultResponse =\n | ReadableStream<Uint8Array>[]\n | ReadableStream<Uint8Array>\n | string\n | Buffer\n | null\n\nexport type RenderResultOptions<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> = {\n contentType: ContentTypeOption | null\n waitUntil?: Promise<unknown>\n metadata: Metadata\n}\n\nexport default class RenderResult<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> {\n /**\n * The detected content type for the response. This is used to set the\n * `Content-Type` header.\n */\n public readonly contentType: ContentTypeOption | null\n\n /**\n * The metadata for the response. This is used to set the revalidation times\n * and other metadata.\n */\n public readonly metadata: Readonly<Metadata>\n\n /**\n * The response itself. This can be a string, a stream, or null. If it's a\n * string, then it's a static response. If it's a stream, then it's a\n * dynamic response. If it's null, then the response was not found or was\n * already sent.\n */\n private response: RenderResultResponse\n\n /**\n * A render result that represents an empty response. This is used to\n * represent a response that was not found or was already sent.\n */\n public static readonly EMPTY = new RenderResult<StaticRenderResultMetadata>(\n null,\n { metadata: {}, contentType: null }\n )\n\n /**\n * Creates a new RenderResult instance from a static response.\n *\n * @param value the static response value\n * @param contentType the content type of the response\n * @returns a new RenderResult instance\n */\n public static fromStatic(\n value: string | Buffer,\n contentType: ContentTypeOption\n ) {\n return new RenderResult<StaticRenderResultMetadata>(value, {\n metadata: {},\n contentType,\n })\n }\n\n private readonly waitUntil?: Promise<unknown>\n\n constructor(\n response: RenderResultResponse,\n { contentType, waitUntil, metadata }: RenderResultOptions<Metadata>\n ) {\n this.response = response\n this.contentType = contentType\n this.metadata = metadata\n this.waitUntil = waitUntil\n }\n\n public assignMetadata(metadata: Metadata) {\n Object.assign(this.metadata, metadata)\n }\n\n /**\n * Returns true if the response is null. It can be null if the response was\n * not found or was already sent.\n */\n public get isNull(): boolean {\n return this.response === null\n }\n\n /**\n * Returns false if the response is a string. It can be a string if the page\n * was prerendered. If it's not, then it was generated dynamically.\n */\n public get isDynamic(): boolean {\n return typeof this.response !== 'string'\n }\n\n /**\n * Returns the response if it is a string. If the page was dynamic, this will\n * return a promise if the `stream` option is true, or it will throw an error.\n *\n * @param stream Whether or not to return a promise if the response is dynamic\n * @returns The response as a string\n */\n public toUnchunkedString(stream?: false): string\n public toUnchunkedString(stream: true): Promise<string>\n public toUnchunkedString(stream = false): Promise<string> | string {\n if (this.response === null) {\n // If the response is null, return an empty string. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return ''\n }\n\n if (typeof this.response !== 'string') {\n if (!stream) {\n throw new InvariantError(\n 'dynamic responses cannot be unchunked. This is a bug in Next.js'\n )\n }\n\n return streamToString(this.readable)\n }\n\n return this.response\n }\n\n /**\n * Returns a readable stream of the response.\n */\n private get readable(): ReadableStream<Uint8Array> {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return new ReadableStream<Uint8Array>({\n start(controller) {\n controller.close()\n },\n })\n }\n\n if (typeof this.response === 'string') {\n return streamFromString(this.response)\n }\n\n if (Buffer.isBuffer(this.response)) {\n return streamFromBuffer(this.response)\n }\n\n // If the response is an array of streams, then chain them together.\n if (Array.isArray(this.response)) {\n return chainStreams(...this.response)\n }\n\n return this.response\n }\n\n /**\n * Coerces the response to an array of streams. This will convert the response\n * to an array of streams if it is not already one.\n *\n * @returns An array of streams\n */\n private coerce(): ReadableStream<Uint8Array>[] {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return []\n }\n\n if (typeof this.response === 'string') {\n return [streamFromString(this.response)]\n } else if (Array.isArray(this.response)) {\n return this.response\n } else if (Buffer.isBuffer(this.response)) {\n return [streamFromBuffer(this.response)]\n } else {\n return [this.response]\n }\n }\n\n /**\n * Unshifts a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the start of the array. When this response is piped, all of the streams\n * will be piped one after the other.\n *\n * @param readable The new stream to unshift\n */\n public unshift(readable: ReadableStream<Uint8Array>): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the start of the array.\n this.response.unshift(readable)\n }\n\n /**\n * Chains a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the end. When this response is piped, all of the streams will be piped\n * one after the other.\n *\n * @param readable The new stream to chain\n */\n public push(readable: ReadableStream<Uint8Array>): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the end of the array.\n this.response.push(readable)\n }\n\n /**\n * Pipes the response to a writable stream. This will close/cancel the\n * writable stream if an error is encountered. If this doesn't throw, then\n * the writable stream will be closed or aborted.\n *\n * @param writable Writable stream to pipe the response to\n */\n public async pipeTo(writable: WritableStream<Uint8Array>): Promise<void> {\n try {\n await this.readable.pipeTo(writable, {\n // We want to close the writable stream ourselves so that we can wait\n // for the waitUntil promise to resolve before closing it. If an error\n // is encountered, we'll abort the writable stream if we swallowed the\n // error.\n preventClose: true,\n })\n\n // If there is a waitUntil promise, wait for it to resolve before\n // closing the writable stream.\n if (this.waitUntil) await this.waitUntil\n\n // Close the writable stream.\n await writable.close()\n } catch (err) {\n // If this is an abort error, we should abort the writable stream (as we\n // took ownership of it when we started piping). We don't need to re-throw\n // because we handled the error.\n if (isAbortError(err)) {\n // Abort the writable stream if an error is encountered.\n await writable.abort(err)\n\n return\n }\n\n // We're not aborting the writer here as when this method throws it's not\n // clear as to how so the caller should assume it's their responsibility\n // to clean up the writer.\n throw err\n }\n }\n\n /**\n * Pipes the response to a node response. This will close/cancel the node\n * response if an error is encountered.\n *\n * @param res\n */\n public async pipeToNodeResponse(res: ServerResponse) {\n await pipeToNodeResponse(this.readable, res, this.waitUntil)\n }\n}\n","export const enum RouteKind {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */\n PAGES = 'PAGES',\n /**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */\n PAGES_API = 'PAGES_API',\n /**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */\n APP_PAGE = 'APP_PAGE',\n /**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */\n APP_ROUTE = 'APP_ROUTE',\n\n /**\n * `IMAGE` represents all the images that are generated by `next/image`.\n */\n IMAGE = 'IMAGE',\n}\n","import {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedAppPageValue,\n type CachedPageValue,\n type IncrementalResponseCacheEntry,\n type ResponseCacheEntry,\n} from './types'\n\nimport RenderResult from '../render-result'\nimport { RouteKind } from '../route-kind'\nimport { HTML_CONTENT_TYPE_HEADER } from '../../lib/constants'\n\nexport async function fromResponseCacheEntry(\n cacheEntry: ResponseCacheEntry\n): Promise<IncrementalResponseCacheEntry> {\n return {\n ...cacheEntry,\n value:\n cacheEntry.value?.kind === CachedRouteKind.PAGES\n ? {\n kind: CachedRouteKind.PAGES,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n pageData: cacheEntry.value.pageData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n }\n : cacheEntry.value?.kind === CachedRouteKind.APP_PAGE\n ? {\n kind: CachedRouteKind.APP_PAGE,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n postponed: cacheEntry.value.postponed,\n rscData: cacheEntry.value.rscData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n segmentData: cacheEntry.value.segmentData,\n }\n : cacheEntry.value,\n }\n}\n\nexport async function toResponseCacheEntry(\n response: IncrementalResponseCacheEntry | null\n): Promise<ResponseCacheEntry | null> {\n if (!response) return null\n\n return {\n isMiss: response.isMiss,\n isStale: response.isStale,\n cacheControl: response.cacheControl,\n value:\n response.value?.kind === CachedRouteKind.PAGES\n ? ({\n kind: CachedRouteKind.PAGES,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n pageData: response.value.pageData,\n headers: response.value.headers,\n status: response.value.status,\n } satisfies CachedPageValue)\n : response.value?.kind === CachedRouteKind.APP_PAGE\n ? ({\n kind: CachedRouteKind.APP_PAGE,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n rscData: response.value.rscData,\n headers: response.value.headers,\n status: response.value.status,\n postponed: response.value.postponed,\n segmentData: response.value.segmentData,\n } satisfies CachedAppPageValue)\n : response.value,\n }\n}\n\nexport function routeKindToIncrementalCacheKind(\n routeKind: RouteKind\n): Exclude<IncrementalCacheKind, IncrementalCacheKind.FETCH> {\n switch (routeKind) {\n case RouteKind.PAGES:\n return IncrementalCacheKind.PAGES\n case RouteKind.APP_PAGE:\n return IncrementalCacheKind.APP_PAGE\n case RouteKind.IMAGE:\n return IncrementalCacheKind.IMAGE\n case RouteKind.APP_ROUTE:\n return IncrementalCacheKind.APP_ROUTE\n case RouteKind.PAGES_API:\n // Pages Router API routes are not cached in the incremental cache.\n throw new Error(`Unexpected route kind ${routeKind}`)\n default:\n return routeKind satisfies never\n }\n}\n","import type {\n ResponseCacheEntry,\n ResponseGenerator,\n ResponseCacheBase,\n IncrementalResponseCacheEntry,\n IncrementalResponseCache,\n} from './types'\n\nimport { Batcher } from '../../lib/batcher'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n fromResponseCacheEntry,\n routeKindToIncrementalCacheKind,\n toResponseCacheEntry,\n} from './utils'\nimport type { RouteKind } from '../route-kind'\n\nexport * from './types'\n\nexport default class ResponseCache implements ResponseCacheBase {\n private readonly batcher = Batcher.create<\n { key: string; isOnDemandRevalidate: boolean },\n IncrementalResponseCacheEntry | null,\n string\n >({\n // Ensure on-demand revalidate doesn't block normal requests, it should be\n // safe to run an on-demand revalidate for the same key as a normal request.\n cacheKeyFn: ({ key, isOnDemandRevalidate }) =>\n `${key}-${isOnDemandRevalidate ? '1' : '0'}`,\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n private previousCacheItem?: {\n key: string\n entry: IncrementalResponseCacheEntry | null\n expiresAt: number\n }\n\n // we don't use minimal_mode name here as this.minimal_mode is\n // statically replace for server runtimes but we need it to\n // be dynamic here\n private minimal_mode?: boolean\n\n constructor(minimal_mode: boolean) {\n this.minimal_mode = minimal_mode\n }\n\n public async get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n routeKind: RouteKind\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalResponseCache\n isRoutePPREnabled?: boolean\n isFallback?: boolean\n waitUntil?: (prom: Promise<any>) => void\n }\n ): Promise<ResponseCacheEntry | null> {\n // If there is no key for the cache, we can't possibly look this up in the\n // cache so just return the result of the response generator.\n if (!key) {\n return responseGenerator({ hasResolved: false, previousCacheEntry: null })\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n waitUntil,\n } = context\n\n const response = await this.batcher.batch(\n { key, isOnDemandRevalidate },\n (cacheKey, resolve) => {\n const prom = (async () => {\n // We keep the previous cache entry around to leverage when the\n // incremental cache is disabled in minimal mode.\n if (\n this.minimal_mode &&\n this.previousCacheItem?.key === cacheKey &&\n this.previousCacheItem.expiresAt > Date.now()\n ) {\n return this.previousCacheItem.entry\n }\n\n // Coerce the kindHint into a given kind for the incremental cache.\n const kind = routeKindToIncrementalCacheKind(context.routeKind)\n\n let resolved = false\n let cachedResponse: IncrementalResponseCacheEntry | null = null\n try {\n cachedResponse = !this.minimal_mode\n ? await incrementalCache.get(key, {\n kind,\n isRoutePPREnabled: context.isRoutePPREnabled,\n isFallback,\n })\n : null\n\n if (cachedResponse && !isOnDemandRevalidate) {\n resolve(cachedResponse)\n resolved = true\n\n if (!cachedResponse.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need\n // to update it yet.\n return null\n }\n }\n\n const cacheEntry = await responseGenerator({\n hasResolved: resolved,\n previousCacheEntry: cachedResponse,\n isRevalidating: true,\n })\n\n // If the cache entry couldn't be generated, we don't want to cache\n // the result.\n if (!cacheEntry) {\n // Unset the previous cache item if it was set.\n if (this.minimal_mode) this.previousCacheItem = undefined\n return null\n }\n\n const resolveValue = await fromResponseCacheEntry({\n ...cacheEntry,\n isMiss: !cachedResponse,\n })\n if (!resolveValue) {\n // Unset the previous cache item if it was set.\n if (this.minimal_mode) this.previousCacheItem = undefined\n return null\n }\n\n // For on-demand revalidate wait to resolve until cache is set.\n // Otherwise resolve now.\n if (!isOnDemandRevalidate && !resolved) {\n resolve(resolveValue)\n resolved = true\n }\n\n // We want to persist the result only if it has a cache control value\n // defined.\n if (resolveValue.cacheControl) {\n if (this.minimal_mode) {\n this.previousCacheItem = {\n key: cacheKey,\n entry: resolveValue,\n expiresAt: Date.now() + 1000,\n }\n } else {\n await incrementalCache.set(key, resolveValue.value, {\n cacheControl: resolveValue.cacheControl,\n isRoutePPREnabled,\n isFallback,\n })\n }\n }\n\n return resolveValue\n } catch (err) {\n // When a path is erroring we automatically re-set the existing cache\n // with new revalidate and expire times to prevent non-stop retrying.\n if (cachedResponse?.cacheControl) {\n const newRevalidate = Math.min(\n Math.max(cachedResponse.cacheControl.revalidate || 3, 3),\n 30\n )\n\n const newExpire =\n cachedResponse.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n newRevalidate + 3,\n cachedResponse.cacheControl.expire\n )\n\n await incrementalCache.set(key, cachedResponse.value, {\n cacheControl: { revalidate: newRevalidate, expire: newExpire },\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n // While revalidating in the background we can't reject as we already\n // resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n // We haven't resolved yet, so let's throw to indicate an error.\n throw err\n }\n })()\n\n // we need to ensure background revalidates are\n // passed to waitUntil\n if (waitUntil) {\n waitUntil(prom)\n }\n return prom\n }\n )\n\n return toResponseCacheEntry(response)\n }\n}\n","import path from '../shared/lib/isomorphic/path'\nimport type { CacheFs } from '../shared/lib/utils'\n\n/**\n * A task to be written.\n */\ntype Task = [\n /**\n * The directory to create.\n */\n directory: string,\n\n /**\n * The promise to create the directory.\n */\n mkdir: Promise<unknown>,\n\n /**\n * The promises to write the files that are dependent on the directory being\n * created.\n */\n writeFile: Promise<unknown>[],\n]\n/**\n * MultiFileWriter is a utility for writing multiple files in parallel that\n * guarantees that all files will be written after their containing directory\n * is created, and that the directory will only be created once.\n */\nexport class MultiFileWriter {\n /**\n * The tasks to be written.\n */\n private readonly tasks: Task[] = []\n\n constructor(\n /**\n * The file system methods to use.\n */\n private readonly fs: Pick<CacheFs, 'mkdir' | 'writeFile'>\n ) {}\n\n /**\n * Finds or creates a task for a directory.\n *\n * @param directory - The directory to find or create a task for.\n * @returns The task for the directory.\n */\n private findOrCreateTask(directory: string): Task {\n // See if this directory already has a task to create it.\n for (const task of this.tasks) {\n if (task[0] === directory) {\n return task\n }\n }\n\n const promise = this.fs.mkdir(directory)\n\n // Attach a catch handler so that it doesn't throw an unhandled promise\n // rejection warning.\n promise.catch(() => {})\n\n // Otherwise, create a new task for this directory.\n const task: Task = [directory, promise, []]\n this.tasks.push(task)\n\n return task\n }\n\n /**\n * Appends a file to the writer to be written after its containing directory\n * is created. The file writer should be awaited after all the files have been\n * appended. Any async operation that occurs between appending and awaiting\n * may cause an unhandled promise rejection warning and potentially crash the\n * process.\n *\n * @param filePath - The path to the file to write.\n * @param data - The data to write to the file.\n */\n public append(filePath: string, data: Buffer | string): void {\n // Find or create a task for the directory that contains the file.\n const task = this.findOrCreateTask(path.dirname(filePath))\n\n const promise = task[1].then(() => this.fs.writeFile(filePath, data))\n\n // Attach a catch handler so that it doesn't throw an unhandled promise\n // rejection warning.\n promise.catch(() => {})\n\n // Add the file write to the task AFTER the directory promise has resolved.\n task[2].push(promise)\n }\n\n /**\n * Returns a promise that resolves when all the files have been written.\n */\n public wait(): Promise<unknown> {\n return Promise.all(this.tasks.flatMap((task) => task[2]))\n }\n}\n","import type { RouteMetadata } from '../../../export/routes/types'\nimport type { CacheHandler, CacheHandlerContext, CacheHandlerValue } from '.'\nimport type { CacheFs } from '../../../shared/lib/utils'\nimport {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedFetchValue,\n type IncrementalCacheValue,\n type SetIncrementalFetchCacheContext,\n type SetIncrementalResponseCacheContext,\n} from '../../response-cache'\n\nimport type { LRUCache } from '../lru-cache'\nimport path from '../../../shared/lib/isomorphic/path'\nimport {\n NEXT_CACHE_TAGS_HEADER,\n NEXT_DATA_SUFFIX,\n NEXT_META_SUFFIX,\n RSC_PREFETCH_SUFFIX,\n RSC_SEGMENT_SUFFIX,\n RSC_SEGMENTS_DIR_SUFFIX,\n RSC_SUFFIX,\n} from '../../../lib/constants'\nimport { isStale, tagsManifest } from './tags-manifest.external'\nimport { MultiFileWriter } from '../../../lib/multi-file-writer'\nimport { getMemoryCache } from './memory-cache.external'\n\ntype FileSystemCacheContext = Omit<\n CacheHandlerContext,\n 'fs' | 'serverDistDir'\n> & {\n fs: CacheFs\n serverDistDir: string\n}\n\nexport default class FileSystemCache implements CacheHandler {\n private fs: FileSystemCacheContext['fs']\n private flushToDisk?: FileSystemCacheContext['flushToDisk']\n private serverDistDir: FileSystemCacheContext['serverDistDir']\n private revalidatedTags: string[]\n private static debug: boolean = !!process.env.NEXT_PRIVATE_DEBUG_CACHE\n private static memoryCache: LRUCache<CacheHandlerValue> | undefined\n\n constructor(ctx: FileSystemCacheContext) {\n this.fs = ctx.fs\n this.flushToDisk = ctx.flushToDisk\n this.serverDistDir = ctx.serverDistDir\n this.revalidatedTags = ctx.revalidatedTags\n\n if (ctx.maxMemoryCacheSize) {\n if (!FileSystemCache.memoryCache) {\n if (FileSystemCache.debug) {\n console.log('using memory store for fetch cache')\n }\n\n FileSystemCache.memoryCache = getMemoryCache(ctx.maxMemoryCacheSize)\n } else if (FileSystemCache.debug) {\n console.log('memory store already initialized')\n }\n } else if (FileSystemCache.debug) {\n console.log('not using memory store for fetch cache')\n }\n }\n\n public resetRequestCache(): void {}\n\n public async revalidateTag(\n ...args: Parameters<CacheHandler['revalidateTag']>\n ) {\n let [tags] = args\n tags = typeof tags === 'string' ? [tags] : tags\n\n if (FileSystemCache.debug) {\n console.log('revalidateTag', tags)\n }\n\n if (tags.length === 0) {\n return\n }\n\n for (const tag of tags) {\n if (!tagsManifest.has(tag)) {\n tagsManifest.set(tag, Date.now())\n }\n }\n }\n\n public async get(...args: Parameters<CacheHandler['get']>) {\n const [key, ctx] = args\n const { kind } = ctx\n\n let data = FileSystemCache.memoryCache?.get(key)\n\n if (FileSystemCache.debug) {\n if (kind === IncrementalCacheKind.FETCH) {\n console.log('get', key, ctx.tags, kind, !!data)\n } else {\n console.log('get', key, kind, !!data)\n }\n }\n\n // let's check the disk for seed data\n if (!data && process.env.NEXT_RUNTIME !== 'edge') {\n try {\n if (kind === IncrementalCacheKind.APP_ROUTE) {\n const filePath = this.getFilePath(\n `${key}.body`,\n IncrementalCacheKind.APP_ROUTE\n )\n const fileData = await this.fs.readFile(filePath)\n const { mtime } = await this.fs.stat(filePath)\n\n const meta = JSON.parse(\n await this.fs.readFile(\n filePath.replace(/\\.body$/, NEXT_META_SUFFIX),\n 'utf8'\n )\n )\n\n data = {\n lastModified: mtime.getTime(),\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n body: fileData,\n headers: meta.headers,\n status: meta.status,\n },\n }\n } else {\n const filePath = this.getFilePath(\n kind === IncrementalCacheKind.FETCH ? key : `${key}.html`,\n kind\n )\n\n const fileData = await this.fs.readFile(filePath, 'utf8')\n const { mtime } = await this.fs.stat(filePath)\n\n if (kind === IncrementalCacheKind.FETCH) {\n const { tags, fetchIdx, fetchUrl } = ctx\n\n if (!this.flushToDisk) return null\n\n const lastModified = mtime.getTime()\n const parsedData: CachedFetchValue = JSON.parse(fileData)\n data = {\n lastModified,\n value: parsedData,\n }\n\n if (data.value?.kind === CachedRouteKind.FETCH) {\n const storedTags = data.value?.tags\n\n // update stored tags if a new one is being added\n // TODO: remove this when we can send the tags\n // via header on GET same as SET\n if (!tags?.every((tag) => storedTags?.includes(tag))) {\n if (FileSystemCache.debug) {\n console.log('tags vs storedTags mismatch', tags, storedTags)\n }\n await this.set(key, data.value, {\n fetchCache: true,\n tags,\n fetchIdx,\n fetchUrl,\n })\n }\n }\n } else if (kind === IncrementalCacheKind.APP_PAGE) {\n // We try to load the metadata file, but if it fails, we don't\n // error. We also don't load it if this is a fallback.\n let meta: RouteMetadata | undefined\n try {\n meta = JSON.parse(\n await this.fs.readFile(\n filePath.replace(/\\.html$/, NEXT_META_SUFFIX),\n 'utf8'\n )\n )\n } catch {}\n\n let maybeSegmentData: Map<string, Buffer> | undefined\n if (meta?.segmentPaths) {\n // Collect all the segment data for this page.\n // TODO: To optimize file system reads, we should consider creating\n // separate cache entries for each segment, rather than storing them\n // all on the page's entry. Though the behavior is\n // identical regardless.\n const segmentData: Map<string, Buffer> = new Map()\n maybeSegmentData = segmentData\n const segmentsDir = key + RSC_SEGMENTS_DIR_SUFFIX\n await Promise.all(\n meta.segmentPaths.map(async (segmentPath: string) => {\n const segmentDataFilePath = this.getFilePath(\n segmentsDir + segmentPath + RSC_SEGMENT_SUFFIX,\n IncrementalCacheKind.APP_PAGE\n )\n try {\n segmentData.set(\n segmentPath,\n await this.fs.readFile(segmentDataFilePath)\n )\n } catch {\n // This shouldn't happen, but if for some reason we fail to\n // load a segment from the filesystem, treat it the same as if\n // the segment is dynamic and does not have a prefetch.\n }\n })\n )\n }\n\n let rscData: Buffer | undefined\n if (!ctx.isFallback) {\n rscData = await this.fs.readFile(\n this.getFilePath(\n `${key}${ctx.isRoutePPREnabled ? RSC_PREFETCH_SUFFIX : RSC_SUFFIX}`,\n IncrementalCacheKind.APP_PAGE\n )\n )\n }\n\n data = {\n lastModified: mtime.getTime(),\n value: {\n kind: CachedRouteKind.APP_PAGE,\n html: fileData,\n rscData,\n postponed: meta?.postponed,\n headers: meta?.headers,\n status: meta?.status,\n segmentData: maybeSegmentData,\n },\n }\n } else if (kind === IncrementalCacheKind.PAGES) {\n let meta: RouteMetadata | undefined\n let pageData: string | object = {}\n\n if (!ctx.isFallback) {\n pageData = JSON.parse(\n await this.fs.readFile(\n this.getFilePath(\n `${key}${NEXT_DATA_SUFFIX}`,\n IncrementalCacheKind.PAGES\n ),\n 'utf8'\n )\n )\n }\n\n data = {\n lastModified: mtime.getTime(),\n value: {\n kind: CachedRouteKind.PAGES,\n html: fileData,\n pageData,\n headers: meta?.headers,\n status: meta?.status,\n },\n }\n } else {\n throw new Error(\n `Invariant: Unexpected route kind ${kind} in file system cache.`\n )\n }\n }\n\n if (data) {\n FileSystemCache.memoryCache?.set(key, data)\n }\n } catch {\n return null\n }\n }\n\n if (\n data?.value?.kind === CachedRouteKind.APP_PAGE ||\n data?.value?.kind === CachedRouteKind.APP_ROUTE ||\n data?.value?.kind === CachedRouteKind.PAGES\n ) {\n let cacheTags: undefined | string[]\n const tagsHeader = data.value.headers?.[NEXT_CACHE_TAGS_HEADER]\n\n if (typeof tagsHeader === 'string') {\n cacheTags = tagsHeader.split(',')\n }\n\n if (cacheTags?.length) {\n // we trigger a blocking validation if an ISR page\n // had a tag revalidated, if we want to be a background\n // revalidation instead we return data.lastModified = -1\n if (isStale(cacheTags, data?.lastModified || Date.now())) {\n return null\n }\n }\n } else if (data?.value?.kind === CachedRouteKind.FETCH) {\n const combinedTags =\n ctx.kind === IncrementalCacheKind.FETCH\n ? [...(ctx.tags || []), ...(ctx.softTags || [])]\n : []\n\n const wasRevalidated = combinedTags.some((tag) => {\n if (this.revalidatedTags.includes(tag)) {\n return true\n }\n\n return isStale([tag], data?.lastModified || Date.now())\n })\n // When revalidate tag is called we don't return\n // stale data so it's updated right away\n if (wasRevalidated) {\n data = undefined\n }\n }\n\n return data ?? null\n }\n\n public async set(\n key: string,\n data: IncrementalCacheValue | null,\n ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ) {\n FileSystemCache.memoryCache?.set(key, {\n value: data,\n lastModified: Date.now(),\n })\n\n if (FileSystemCache.debug) {\n console.log('set', key)\n }\n\n if (!this.flushToDisk || !data) return\n\n // Create a new writer that will prepare to write all the files to disk\n // after their containing directory is created.\n const writer = new MultiFileWriter(this.fs)\n\n if (data.kind === CachedRouteKind.APP_ROUTE) {\n const filePath = this.getFilePath(\n `${key}.body`,\n IncrementalCacheKind.APP_ROUTE\n )\n\n writer.append(filePath, data.body)\n\n const meta: RouteMetadata = {\n headers: data.headers,\n status: data.status,\n postponed: undefined,\n segmentPaths: undefined,\n }\n\n writer.append(\n filePath.replace(/\\.body$/, NEXT_META_SUFFIX),\n JSON.stringify(meta, null, 2)\n )\n } else if (\n data.kind === CachedRouteKind.PAGES ||\n data.kind === CachedRouteKind.APP_PAGE\n ) {\n const isAppPath = data.kind === CachedRouteKind.APP_PAGE\n const htmlPath = this.getFilePath(\n `${key}.html`,\n isAppPath ? IncrementalCacheKind.APP_PAGE : IncrementalCacheKind.PAGES\n )\n\n writer.append(htmlPath, data.html)\n\n // Fallbacks don't generate a data file.\n if (!ctx.fetchCache && !ctx.isFallback) {\n writer.append(\n this.getFilePath(\n `${key}${\n isAppPath\n ? ctx.isRoutePPREnabled\n ? RSC_PREFETCH_SUFFIX\n : RSC_SUFFIX\n : NEXT_DATA_SUFFIX\n }`,\n isAppPath\n ? IncrementalCacheKind.APP_PAGE\n : IncrementalCacheKind.PAGES\n ),\n isAppPath ? data.rscData! : JSON.stringify(data.pageData)\n )\n }\n\n if (data?.kind === CachedRouteKind.APP_PAGE) {\n let segmentPaths: string[] | undefined\n if (data.segmentData) {\n segmentPaths = []\n const segmentsDir = htmlPath.replace(\n /\\.html$/,\n RSC_SEGMENTS_DIR_SUFFIX\n )\n\n for (const [segmentPath, buffer] of data.segmentData) {\n segmentPaths.push(segmentPath)\n const segmentDataFilePath =\n segmentsDir + segmentPath + RSC_SEGMENT_SUFFIX\n writer.append(segmentDataFilePath, buffer)\n }\n }\n\n const meta: RouteMetadata = {\n headers: data.headers,\n status: data.status,\n postponed: data.postponed,\n segmentPaths,\n }\n\n writer.append(\n htmlPath.replace(/\\.html$/, NEXT_META_SUFFIX),\n JSON.stringify(meta)\n )\n }\n } else if (data.kind === CachedRouteKind.FETCH) {\n const filePath = this.getFilePath(key, IncrementalCacheKind.FETCH)\n writer.append(\n filePath,\n JSON.stringify({\n ...data,\n tags: ctx.fetchCache ? ctx.tags : [],\n })\n )\n }\n\n // Wait for all FS operations to complete.\n await writer.wait()\n }\n\n private getFilePath(pathname: string, kind: IncrementalCacheKind): string {\n switch (kind) {\n case IncrementalCacheKind.FETCH:\n // we store in .next/cache/fetch-cache so it can be persisted\n // across deploys\n return path.join(\n this.serverDistDir,\n '..',\n 'cache',\n 'fetch-cache',\n pathname\n )\n case IncrementalCacheKind.PAGES:\n return path.join(this.serverDistDir, 'pages', pathname)\n case IncrementalCacheKind.IMAGE:\n case IncrementalCacheKind.APP_PAGE:\n case IncrementalCacheKind.APP_ROUTE:\n return path.join(this.serverDistDir, 'app', pathname)\n default:\n throw new Error(`Unexpected file path kind: ${kind}`)\n }\n }\n}\n","/**\n * This transforms a URL pathname into a route. It removes any trailing slashes\n * and the `/index` suffix.\n *\n * @param pathname - The URL path that needs to be optimized.\n * @returns - The route\n *\n * @example\n * // returns '/example'\n * toRoute('/example/index/');\n *\n * @example\n * // returns '/example'\n * toRoute('/example/');\n *\n * @example\n * // returns '/'\n * toRoute('/index/');\n *\n * @example\n * // returns '/'\n * toRoute('/');\n */\nexport function toRoute(pathname: string): string {\n return pathname.replace(/(?:\\/index)?\\/?$/, '') || '/'\n}\n","import type { CacheFs } from '../../../shared/lib/utils'\nimport type { PrerenderManifest } from '../../../build'\nimport {\n type IncrementalCacheValue,\n type IncrementalCacheEntry,\n type IncrementalCache as IncrementalCacheType,\n IncrementalCacheKind,\n CachedRouteKind,\n type IncrementalResponseCacheEntry,\n type IncrementalFetchCacheEntry,\n type GetIncrementalFetchCacheContext,\n type GetIncrementalResponseCacheContext,\n type CachedFetchValue,\n type SetIncrementalFetchCacheContext,\n type SetIncrementalResponseCacheContext,\n} from '../../response-cache'\nimport type { DeepReadonly } from '../../../shared/lib/deep-readonly'\n\nimport FileSystemCache from './file-system-cache'\nimport { normalizePagePath } from '../../../shared/lib/page-path/normalize-page-path'\n\nimport {\n CACHE_ONE_YEAR,\n PRERENDER_REVALIDATE_HEADER,\n} from '../../../lib/constants'\nimport { toRoute } from '../to-route'\nimport { SharedCacheControls } from './shared-cache-controls.external'\nimport {\n getPrerenderResumeDataCache,\n getRenderResumeDataCache,\n workUnitAsyncStorage,\n} from '../../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../../shared/lib/invariant-error'\nimport type { Revalidate } from '../cache-control'\nimport { getPreviouslyRevalidatedTags } from '../../server-utils'\nimport { workAsyncStorage } from '../../app-render/work-async-storage.external'\nimport { DetachedPromise } from '../../../lib/detached-promise'\n\nexport interface CacheHandlerContext {\n fs?: CacheFs\n dev?: boolean\n flushToDisk?: boolean\n serverDistDir?: string\n maxMemoryCacheSize?: number\n fetchCacheKeyPrefix?: string\n prerenderManifest?: PrerenderManifest\n revalidatedTags: string[]\n _requestHeaders: IncrementalCache['requestHeaders']\n}\n\nexport interface CacheHandlerValue {\n lastModified?: number\n age?: number\n cacheState?: string\n value: IncrementalCacheValue | null\n}\n\nexport class CacheHandler {\n // eslint-disable-next-line\n constructor(_ctx: CacheHandlerContext) {}\n\n public async get(\n _cacheKey: string,\n _ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext\n ): Promise<CacheHandlerValue | null> {\n return {} as any\n }\n\n public async set(\n _cacheKey: string,\n _data: IncrementalCacheValue | null,\n _ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ): Promise<void> {}\n\n public async revalidateTag(\n ..._args: Parameters<IncrementalCache['revalidateTag']>\n ): Promise<void> {}\n\n public resetRequestCache(): void {}\n}\n\nexport class IncrementalCache implements IncrementalCacheType {\n readonly dev?: boolean\n readonly disableForTestmode?: boolean\n readonly cacheHandler?: CacheHandler\n readonly hasCustomCacheHandler: boolean\n readonly prerenderManifest: DeepReadonly<PrerenderManifest>\n readonly requestHeaders: Record<string, undefined | string | string[]>\n readonly allowedRevalidateHeaderKeys?: string[]\n readonly minimalMode?: boolean\n readonly fetchCacheKeyPrefix?: string\n readonly revalidatedTags?: string[]\n readonly isOnDemandRevalidate?: boolean\n\n private static readonly debug: boolean =\n !!process.env.NEXT_PRIVATE_DEBUG_CACHE\n private readonly locks = new Map<string, Promise<void>>()\n\n /**\n * The cache controls for routes. This will source the values from the\n * prerender manifest until the in-memory cache is updated with new values.\n */\n private readonly cacheControls: SharedCacheControls\n\n constructor({\n fs,\n dev,\n flushToDisk,\n minimalMode,\n serverDistDir,\n requestHeaders,\n maxMemoryCacheSize,\n getPrerenderManifest,\n fetchCacheKeyPrefix,\n CurCacheHandler,\n allowedRevalidateHeaderKeys,\n }: {\n fs?: CacheFs\n dev: boolean\n minimalMode?: boolean\n serverDistDir?: string\n flushToDisk?: boolean\n allowedRevalidateHeaderKeys?: string[]\n requestHeaders: IncrementalCache['requestHeaders']\n maxMemoryCacheSize?: number\n getPrerenderManifest: () => DeepReadonly<PrerenderManifest>\n fetchCacheKeyPrefix?: string\n CurCacheHandler?: typeof CacheHandler\n }) {\n this.hasCustomCacheHandler = Boolean(CurCacheHandler)\n\n const cacheHandlersSymbol = Symbol.for('@next/cache-handlers')\n const _globalThis: typeof globalThis & {\n [cacheHandlersSymbol]?: {\n FetchCache?: typeof CacheHandler\n }\n } = globalThis\n\n if (!CurCacheHandler) {\n // if we have a global cache handler available leverage it\n const globalCacheHandler = _globalThis[cacheHandlersSymbol]\n\n if (globalCacheHandler?.FetchCache) {\n CurCacheHandler = globalCacheHandler.FetchCache\n } else {\n if (fs && serverDistDir) {\n if (IncrementalCache.debug) {\n console.log('using filesystem cache handler')\n }\n CurCacheHandler = FileSystemCache\n }\n }\n } else if (IncrementalCache.debug) {\n console.log('using custom cache handler', CurCacheHandler.name)\n }\n\n if (process.env.__NEXT_TEST_MAX_ISR_CACHE) {\n // Allow cache size to be overridden for testing purposes\n maxMemoryCacheSize = parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE, 10)\n }\n this.dev = dev\n this.disableForTestmode = process.env.NEXT_PRIVATE_TEST_PROXY === 'true'\n // this is a hack to avoid Webpack knowing this is equal to this.minimalMode\n // because we replace this.minimalMode to true in production bundles.\n const minimalModeKey = 'minimalMode'\n this[minimalModeKey] = minimalMode\n this.requestHeaders = requestHeaders\n this.allowedRevalidateHeaderKeys = allowedRevalidateHeaderKeys\n this.prerenderManifest = getPrerenderManifest()\n this.cacheControls = new SharedCacheControls(this.prerenderManifest)\n this.fetchCacheKeyPrefix = fetchCacheKeyPrefix\n let revalidatedTags: string[] = []\n\n if (\n requestHeaders[PRERENDER_REVALIDATE_HEADER] ===\n this.prerenderManifest?.preview?.previewModeId\n ) {\n this.isOnDemandRevalidate = true\n }\n\n if (minimalMode) {\n revalidatedTags = getPreviouslyRevalidatedTags(\n requestHeaders,\n this.prerenderManifest?.preview?.previewModeId\n )\n }\n\n if (CurCacheHandler) {\n this.cacheHandler = new CurCacheHandler({\n dev,\n fs,\n flushToDisk,\n serverDistDir,\n revalidatedTags,\n maxMemoryCacheSize,\n _requestHeaders: requestHeaders,\n fetchCacheKeyPrefix,\n })\n }\n }\n\n private calculateRevalidate(\n pathname: string,\n fromTime: number,\n dev: boolean,\n isFallback: boolean | undefined\n ): Revalidate {\n // in development we don't have a prerender-manifest\n // and default to always revalidating to allow easier debugging\n if (dev)\n return Math.floor(performance.timeOrigin + performance.now() - 1000)\n\n const cacheControl = this.cacheControls.get(toRoute(pathname))\n\n // if an entry isn't present in routes we fallback to a default\n // of revalidating after 1 second unless it's a fallback request.\n const initialRevalidateSeconds = cacheControl\n ? cacheControl.revalidate\n : isFallback\n ? false\n : 1\n\n const revalidateAfter =\n typeof initialRevalidateSeconds === 'number'\n ? initialRevalidateSeconds * 1000 + fromTime\n : initialRevalidateSeconds\n\n return revalidateAfter\n }\n\n _getPathname(pathname: string, fetchCache?: boolean) {\n return fetchCache ? pathname : normalizePagePath(pathname)\n }\n\n resetRequestCache() {\n this.cacheHandler?.resetRequestCache?.()\n }\n\n async lock(cacheKey: string): Promise<() => Promise<void> | void> {\n // Wait for any existing lock on this cache key to be released\n // This implements a simple queue-based locking mechanism\n while (true) {\n const lock = this.locks.get(cacheKey)\n\n if (IncrementalCache.debug) {\n console.log('lock get', cacheKey, !!lock)\n }\n\n // If no lock exists, we can proceed to acquire it\n if (!lock) break\n\n // Wait for the existing lock to be released before trying again\n await lock\n }\n\n // Create a new detached promise that will represent this lock\n // The resolve function (unlock) will be returned to the caller\n const { resolve, promise } = new DetachedPromise<void>()\n\n if (IncrementalCache.debug) {\n console.log('successfully locked', cacheKey)\n }\n\n // Store the lock promise in the locks map\n this.locks.set(cacheKey, promise)\n\n return () => {\n // Resolve the promise to release the lock.\n resolve()\n\n // Remove the lock from the map once it's released so that future gets\n // can acquire the lock.\n this.locks.delete(cacheKey)\n }\n }\n\n async revalidateTag(tags: string | string[]): Promise<void> {\n return this.cacheHandler?.revalidateTag(tags)\n }\n\n // x-ref: https://github.com/facebook/react/blob/2655c9354d8e1c54ba888444220f63e836925caa/packages/react/src/ReactFetch.js#L23\n async generateCacheKey(\n url: string,\n init: RequestInit | Request = {}\n ): Promise<string> {\n // this should be bumped anytime a fix is made to cache entries\n // that should bust the cache\n const MAIN_KEY_PREFIX = 'v3'\n\n const bodyChunks: string[] = []\n\n const encoder = new TextEncoder()\n const decoder = new TextDecoder()\n\n if (init.body) {\n // handle Uint8Array body\n if (init.body instanceof Uint8Array) {\n bodyChunks.push(decoder.decode(init.body))\n ;(init as any)._ogBody = init.body\n } // handle ReadableStream body\n else if (typeof (init.body as any).getReader === 'function') {\n const readableBody = init.body as ReadableStream<Uint8Array | string>\n\n const chunks: Uint8Array[] = []\n\n try {\n await readableBody.pipeTo(\n new WritableStream({\n write(chunk) {\n if (typeof chunk === 'string') {\n chunks.push(encoder.encode(chunk))\n bodyChunks.push(chunk)\n } else {\n chunks.push(chunk)\n bodyChunks.push(decoder.decode(chunk, { stream: true }))\n }\n },\n })\n )\n\n // Flush the decoder.\n bodyChunks.push(decoder.decode())\n\n // Create a new buffer with all the chunks.\n const length = chunks.reduce((total, arr) => total + arr.length, 0)\n const arrayBuffer = new Uint8Array(length)\n\n // Push each of the chunks into the new array buffer.\n let offset = 0\n for (const chunk of chunks) {\n arrayBuffer.set(chunk, offset)\n offset += chunk.length\n }\n\n ;(init as any)._ogBody = arrayBuffer\n } catch (err) {\n console.error('Problem reading body', err)\n }\n } // handle FormData or URLSearchParams bodies\n else if (typeof (init.body as any).keys === 'function') {\n const formData = init.body as FormData\n ;(init as any)._ogBody = init.body\n for (const key of new Set([...formData.keys()])) {\n const values = formData.getAll(key)\n bodyChunks.push(\n `${key}=${(\n await Promise.all(\n values.map(async (val) => {\n if (typeof val === 'string') {\n return val\n } else {\n return await val.text()\n }\n })\n )\n ).join(',')}`\n )\n }\n // handle blob body\n } else if (typeof (init.body as any).arrayBuffer === 'function') {\n const blob = init.body as Blob\n const arrayBuffer = await blob.arrayBuffer()\n bodyChunks.push(await blob.text())\n ;(init as any)._ogBody = new Blob([arrayBuffer], { type: blob.type })\n } else if (typeof init.body === 'string') {\n bodyChunks.push(init.body)\n ;(init as any)._ogBody = init.body\n }\n }\n\n const headers =\n typeof (init.headers || {}).keys === 'function'\n ? Object.fromEntries(init.headers as Headers)\n : Object.assign({}, init.headers)\n\n // w3c trace context headers can break request caching and deduplication\n // so we remove them from the cache key\n if ('traceparent' in headers) delete headers['traceparent']\n if ('tracestate' in headers) delete headers['tracestate']\n\n const cacheString = JSON.stringify([\n MAIN_KEY_PREFIX,\n this.fetchCacheKeyPrefix || '',\n url,\n init.method,\n headers,\n init.mode,\n init.redirect,\n init.credentials,\n init.referrer,\n init.referrerPolicy,\n init.integrity,\n init.cache,\n bodyChunks,\n ])\n\n if (process.env.NEXT_RUNTIME === 'edge') {\n function bufferToHex(buffer: ArrayBuffer): string {\n return Array.prototype.map\n .call(new Uint8Array(buffer), (b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n const buffer = encoder.encode(cacheString)\n return bufferToHex(await crypto.subtle.digest('SHA-256', buffer))\n } else {\n const crypto = require('crypto') as typeof import('crypto')\n return crypto.createHash('sha256').update(cacheString).digest('hex')\n }\n }\n\n async get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext\n ): Promise<IncrementalFetchCacheEntry | null>\n async get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext\n ): Promise<IncrementalResponseCacheEntry | null>\n async get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext\n ): Promise<IncrementalCacheEntry | null> {\n // Unlike other caches if we have a resume data cache, we use it even if\n // testmode would normally disable it or if requestHeaders say 'no-cache'.\n if (ctx.kind === IncrementalCacheKind.FETCH) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n const resumeDataCache = workUnitStore\n ? getRenderResumeDataCache(workUnitStore)\n : null\n if (resumeDataCache) {\n const memoryCacheData = resumeDataCache.fetch.get(cacheKey)\n if (memoryCacheData?.kind === CachedRouteKind.FETCH) {\n return { isStale: false, value: memoryCacheData }\n }\n }\n }\n\n // we don't leverage the prerender cache in dev mode\n // so that getStaticProps is always called for easier debugging\n if (\n this.disableForTestmode ||\n (this.dev &&\n (ctx.kind !== IncrementalCacheKind.FETCH ||\n this.requestHeaders['cache-control'] === 'no-cache'))\n ) {\n return null\n }\n\n cacheKey = this._getPathname(\n cacheKey,\n ctx.kind === IncrementalCacheKind.FETCH\n )\n\n const cacheData = await this.cacheHandler?.get(cacheKey, ctx)\n\n if (ctx.kind === IncrementalCacheKind.FETCH) {\n if (!cacheData) {\n return null\n }\n\n if (cacheData.value?.kind !== CachedRouteKind.FETCH) {\n throw new InvariantError(\n `Expected cached value for cache key ${JSON.stringify(cacheKey)} to be a \"FETCH\" kind, got ${JSON.stringify(cacheData.value?.kind)} instead.`\n )\n }\n\n const workStore = workAsyncStorage.getStore()\n const combinedTags = [...(ctx.tags || []), ...(ctx.softTags || [])]\n // if a tag was revalidated we don't return stale data\n if (\n combinedTags.some(\n (tag) =>\n this.revalidatedTags?.includes(tag) ||\n workStore?.pendingRevalidatedTags?.includes(tag)\n )\n ) {\n return null\n }\n\n const revalidate = ctx.revalidate || cacheData.value.revalidate\n const age =\n (performance.timeOrigin +\n performance.now() -\n (cacheData.lastModified || 0)) /\n 1000\n\n const isStale = age > revalidate\n const data = cacheData.value.data\n\n return {\n isStale,\n value: { kind: CachedRouteKind.FETCH, data, revalidate },\n }\n } else if (cacheData?.value?.kind === CachedRouteKind.FETCH) {\n throw new InvariantError(\n `Expected cached value for cache key ${JSON.stringify(cacheKey)} not to be a ${JSON.stringify(ctx.kind)} kind, got \"FETCH\" instead.`\n )\n }\n\n let entry: IncrementalResponseCacheEntry | null = null\n const cacheControl = this.cacheControls.get(toRoute(cacheKey))\n\n let isStale: boolean | -1 | undefined\n let revalidateAfter: Revalidate\n\n if (cacheData?.lastModified === -1) {\n isStale = -1\n revalidateAfter = -1 * CACHE_ONE_YEAR\n } else {\n revalidateAfter = this.calculateRevalidate(\n cacheKey,\n cacheData?.lastModified || performance.timeOrigin + performance.now(),\n this.dev ?? false,\n ctx.isFallback\n )\n isStale =\n revalidateAfter !== false &&\n revalidateAfter < performance.timeOrigin + performance.now()\n ? true\n : undefined\n }\n\n if (cacheData) {\n entry = {\n isStale,\n cacheControl,\n revalidateAfter,\n value: cacheData.value,\n }\n }\n\n if (\n !cacheData &&\n this.prerenderManifest.notFoundRoutes.includes(cacheKey)\n ) {\n // for the first hit after starting the server the cache\n // may not have a way to save notFound: true so if\n // the prerender-manifest marks this as notFound then we\n // return that entry and trigger a cache set to give it a\n // chance to update in-memory entries\n entry = {\n isStale,\n value: null,\n cacheControl,\n revalidateAfter,\n }\n this.set(cacheKey, entry.value, { ...ctx, cacheControl })\n }\n return entry\n }\n\n async set(\n pathname: string,\n data: CachedFetchValue | null,\n ctx: SetIncrementalFetchCacheContext\n ): Promise<void>\n async set(\n pathname: string,\n data: Exclude<IncrementalCacheValue, CachedFetchValue> | null,\n ctx: SetIncrementalResponseCacheContext\n ): Promise<void>\n async set(\n pathname: string,\n data: IncrementalCacheValue | null,\n ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ): Promise<void> {\n // Even if we otherwise disable caching for testMode or if no fetchCache is\n // configured we still always stash results in the resume data cache if one\n // exists. This is because this is a transient in memory cache that\n // populates caches ahead of a dynamic render in dev mode to allow the RSC\n // debug info to have the right environment associated to it.\n if (data?.kind === CachedRouteKind.FETCH) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n const prerenderResumeDataCache = workUnitStore\n ? getPrerenderResumeDataCache(workUnitStore)\n : null\n if (prerenderResumeDataCache) {\n prerenderResumeDataCache.fetch.set(pathname, data)\n }\n }\n\n if (this.disableForTestmode || (this.dev && !ctx.fetchCache)) return\n\n pathname = this._getPathname(pathname, ctx.fetchCache)\n\n // FetchCache has upper limit of 2MB per-entry currently\n const itemSize = JSON.stringify(data).length\n if (\n ctx.fetchCache &&\n itemSize > 2 * 1024 * 1024 &&\n // We ignore the size limit when custom cache handler is being used, as it\n // might not have this limit\n !this.hasCustomCacheHandler &&\n // We also ignore the size limit when it's an implicit build-time-only\n // caching that the user isn't even aware of.\n !ctx.isImplicitBuildTimeCache\n ) {\n const warningText = `Failed to set Next.js data cache for ${ctx.fetchUrl || pathname}, items over 2MB can not be cached (${itemSize} bytes)`\n\n if (this.dev) {\n throw new Error(warningText)\n }\n console.warn(warningText)\n return\n }\n\n try {\n if (!ctx.fetchCache && ctx.cacheControl) {\n this.cacheControls.set(toRoute(pathname), ctx.cacheControl)\n }\n\n await this.cacheHandler?.set(pathname, data, ctx)\n } catch (error) {\n console.warn('Failed to update prerender cache for', pathname, error)\n }\n }\n}\n","import DefaultCacheHandler from '../lib/cache-handlers/default.external'\nimport type { CacheHandlerCompat } from '../lib/cache-handlers/types'\n\nconst debug = process.env.NEXT_PRIVATE_DEBUG_CACHE\n ? (message: string, ...args: any[]) => {\n console.log(`use-cache: ${message}`, ...args)\n }\n : undefined\n\nconst handlersSymbol = Symbol.for('@next/cache-handlers')\nconst handlersMapSymbol = Symbol.for('@next/cache-handlers-map')\nconst handlersSetSymbol = Symbol.for('@next/cache-handlers-set')\n\n/**\n * The reference to the cache handlers. We store the cache handlers on the\n * global object so that we can access the same instance across different\n * boundaries (such as different copies of the same module).\n */\nconst reference: typeof globalThis & {\n [handlersSymbol]?: {\n RemoteCache?: CacheHandlerCompat\n DefaultCache?: CacheHandlerCompat\n }\n [handlersMapSymbol]?: Map<string, CacheHandlerCompat>\n [handlersSetSymbol]?: Set<CacheHandlerCompat>\n} = globalThis\n\n/**\n * Initialize the cache handlers.\n * @returns `true` if the cache handlers were initialized, `false` if they were already initialized.\n */\nexport function initializeCacheHandlers(): boolean {\n // If the cache handlers have already been initialized, don't do it again.\n if (reference[handlersMapSymbol]) {\n debug?.('cache handlers already initialized')\n return false\n }\n\n debug?.('initializing cache handlers')\n reference[handlersMapSymbol] = new Map<string, CacheHandlerCompat>()\n\n // Initialize the cache from the symbol contents first.\n if (reference[handlersSymbol]) {\n let fallback: CacheHandlerCompat\n if (reference[handlersSymbol].DefaultCache) {\n debug?.('setting \"default\" cache handler from symbol')\n fallback = reference[handlersSymbol].DefaultCache\n } else {\n debug?.('setting \"default\" cache handler from default')\n fallback = DefaultCacheHandler\n }\n\n reference[handlersMapSymbol].set('default', fallback)\n\n if (reference[handlersSymbol].RemoteCache) {\n debug?.('setting \"remote\" cache handler from symbol')\n reference[handlersMapSymbol].set(\n 'remote',\n reference[handlersSymbol].RemoteCache\n )\n } else {\n debug?.('setting \"remote\" cache handler from default')\n reference[handlersMapSymbol].set('remote', fallback)\n }\n } else {\n debug?.('setting \"default\" cache handler from default')\n reference[handlersMapSymbol].set('default', DefaultCacheHandler)\n debug?.('setting \"remote\" cache handler from default')\n reference[handlersMapSymbol].set('remote', DefaultCacheHandler)\n }\n\n // Create a set of the cache handlers.\n reference[handlersSetSymbol] = new Set(reference[handlersMapSymbol].values())\n\n return true\n}\n\n/**\n * Get a cache handler by kind.\n * @param kind - The kind of cache handler to get.\n * @returns The cache handler, or `undefined` if it does not exist.\n * @throws If the cache handlers are not initialized.\n */\nexport function getCacheHandler(kind: string): CacheHandlerCompat | undefined {\n // This should never be called before initializeCacheHandlers.\n if (!reference[handlersMapSymbol]) {\n throw new Error('Cache handlers not initialized')\n }\n\n return reference[handlersMapSymbol].get(kind)\n}\n\n/**\n * Get a set iterator over the cache handlers.\n * @returns An iterator over the cache handlers, or `undefined` if they are not\n * initialized.\n */\nexport function getCacheHandlers():\n | SetIterator<CacheHandlerCompat>\n | undefined {\n if (!reference[handlersSetSymbol]) {\n return undefined\n }\n\n return reference[handlersSetSymbol].values()\n}\n\n/**\n * Get a map iterator over the cache handlers (keyed by kind).\n * @returns An iterator over the cache handler entries, or `undefined` if they\n * are not initialized.\n * @throws If the cache handlers are not initialized.\n */\nexport function getCacheHandlerEntries():\n | MapIterator<[string, CacheHandlerCompat]>\n | undefined {\n if (!reference[handlersMapSymbol]) {\n return undefined\n }\n\n return reference[handlersMapSymbol].entries()\n}\n\n/**\n * Set a cache handler by kind.\n * @param kind - The kind of cache handler to set.\n * @param cacheHandler - The cache handler to set.\n */\nexport function setCacheHandler(\n kind: string,\n cacheHandler: CacheHandlerCompat\n): void {\n // This should never be called before initializeCacheHandlers.\n if (!reference[handlersMapSymbol] || !reference[handlersSetSymbol]) {\n throw new Error('Cache handlers not initialized')\n }\n\n debug?.('setting cache handler for \"%s\"', kind)\n reference[handlersMapSymbol].set(kind, cacheHandler)\n reference[handlersSetSymbol].add(cacheHandler)\n}\n","/**\n * Interop between \"export default\" and \"module.exports\".\n */\nexport function interopDefault(mod: any) {\n return mod.default || mod\n}\n","import type { IncomingMessage, ServerResponse } from 'node:http'\nimport type { NextConfigComplete } from '../../config-shared'\nimport type { UrlWithParsedQuery } from 'node:url'\n\nexport type RevalidateFn = (config: {\n urlPath: string\n revalidateHeaders: { [key: string]: string | string[] }\n opts: { unstable_onlyGenerated?: boolean }\n}) => Promise<void>\n\n// The RouterServerContext contains instance specific\n// information that isn't available/relevant when\n// deployed in serverless environments, the key is\n// the relative project dir this allows separate contexts\n// when running multiple next instances in same process\nexport type RouterServerContext = Record<\n string,\n {\n // hostname the server is started with\n hostname?: string\n // revalidate function to bypass going through network\n // to invoke revalidate request (uses mocked req/res)\n revalidate?: RevalidateFn\n // function to render the 404 page\n render404?: (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery,\n setHeaders?: boolean\n ) => Promise<void>\n // current loaded public runtime config\n publicRuntimeConfig?: NextConfigComplete['publicRuntimeConfig']\n // exposing nextConfig for dev mode specifically\n nextConfig?: NextConfigComplete\n // whether running in custom server mode\n isCustomServer?: boolean\n // whether test proxy is enabled\n experimentalTestProxy?: boolean\n // allow dev server to log with original stack\n logErrorWithOriginalStack?: (err: unknown, type: string) => void\n // allow setting ISR status in dev\n setIsrStatus?: (key: string, value: boolean | null) => void\n }\n>\n\nexport const RouterServerContextSymbol = Symbol.for(\n '@next/router-server-methods'\n)\n\nexport const routerServerGlobal = globalThis as typeof globalThis & {\n [RouterServerContextSymbol]?: RouterServerContext\n}\n","import type { IncomingMessage, ServerResponse } from 'node:http'\nimport type {\n InstrumentationOnRequestError,\n RequestErrorContext,\n} from '../instrumentation/types'\nimport type { ParsedUrlQuery } from 'node:querystring'\nimport type { UrlWithParsedQuery } from 'node:url'\nimport type {\n PrerenderManifest,\n RequiredServerFilesManifest,\n} from '../../build'\nimport type { DevRoutesManifest } from '../lib/router-utils/setup-dev-bundler'\nimport type { RouteDefinition } from '../route-definitions/route-definition'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport {\n BUILD_ID_FILE,\n BUILD_MANIFEST,\n CLIENT_REFERENCE_MANIFEST,\n DYNAMIC_CSS_MANIFEST,\n NEXT_FONT_MANIFEST,\n PRERENDER_MANIFEST,\n REACT_LOADABLE_MANIFEST,\n ROUTES_MANIFEST,\n SERVER_FILES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n SUBRESOURCE_INTEGRITY_MANIFEST,\n} from '../../shared/lib/constants'\nimport { parseReqUrl } from '../../lib/url'\nimport {\n normalizeLocalePath,\n type PathLocale,\n} from '../../shared/lib/i18n/normalize-locale-path'\nimport { isDynamicRoute } from '../../shared/lib/router/utils'\nimport { removePathPrefix } from '../../shared/lib/router/utils/remove-path-prefix'\nimport { getServerUtils } from '../server-utils'\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { checkIsOnDemandRevalidate } from '../api-utils'\nimport type { PreviewData } from '../../types'\nimport type { BuildManifest } from '../get-page-files'\nimport type { ReactLoadableManifest } from '../load-components'\nimport type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin'\nimport { normalizeDataPath } from '../../shared/lib/page-path/normalize-data-path'\nimport { pathHasPrefix } from '../../shared/lib/router/utils/path-has-prefix'\nimport { addRequestMeta, getRequestMeta } from '../request-meta'\nimport { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path'\nimport { isStaticMetadataRoute } from '../../lib/metadata/is-metadata-route'\nimport { IncrementalCache } from '../lib/incremental-cache'\nimport { initializeCacheHandlers, setCacheHandler } from '../use-cache/handlers'\nimport { interopDefault } from '../app-render/interop-default'\nimport type { RouteKind } from '../route-kind'\nimport type { BaseNextRequest } from '../base-http'\nimport type { I18NConfig, NextConfigComplete } from '../config-shared'\nimport ResponseCache, { type ResponseGenerator } from '../response-cache'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport {\n RouterServerContextSymbol,\n routerServerGlobal,\n type RouterServerContext,\n} from '../lib/router-utils/router-server-context'\nimport { decodePathParams } from '../lib/router-utils/decode-path-params'\nimport { removeTrailingSlash } from '../../shared/lib/router/utils/remove-trailing-slash'\nimport { isInterceptionRouteRewrite } from '../../lib/generate-interception-routes-rewrites'\n\n/**\n * RouteModuleOptions is the options that are passed to the route module, other\n * route modules should extend this class to add specific options for their\n * route.\n */\nexport interface RouteModuleOptions<\n D extends RouteDefinition = RouteDefinition,\n U = unknown,\n> {\n readonly definition: Readonly<D>\n readonly userland: Readonly<U>\n readonly distDir: string\n readonly projectDir: string\n}\n\n/**\n * RouteHandlerContext is the base context for a route handler.\n */\nexport interface RouteModuleHandleContext {\n /**\n * Any matched parameters for the request. This is only defined for dynamic\n * routes.\n */\n params: Record<string, string | string[] | undefined> | undefined\n}\n\nconst dynamicImportEsmDefault = (id: string) =>\n import(/* webpackIgnore: true */ /* turbopackIgnore: true */ id).then(\n (mod) => mod.default || mod\n )\n\n/**\n * RouteModule is the base class for all route modules. This class should be\n * extended by all route modules.\n */\nexport abstract class RouteModule<\n D extends RouteDefinition = RouteDefinition,\n U = unknown,\n> {\n /**\n * The userland module. This is the module that is exported from the user's\n * code. This is marked as readonly to ensure that the module is not mutated\n * because the module (when compiled) only provides getters.\n */\n public readonly userland: Readonly<U>\n\n /**\n * The definition of the route.\n */\n public readonly definition: Readonly<D>\n\n /**\n * The shared modules that are exposed and required for the route module.\n */\n public static readonly sharedModules: any\n\n public isDev: boolean\n public distDir: string\n public projectDir: string\n public isAppRouter?: boolean\n public incrementCache?: IncrementalCache\n public responseCache?: ResponseCache\n\n constructor({\n userland,\n definition,\n distDir,\n projectDir,\n }: RouteModuleOptions<D, U>) {\n this.userland = userland\n this.definition = definition\n this.isDev = process.env.NODE_ENV === 'development'\n this.distDir = distDir\n this.projectDir = projectDir\n }\n\n public async instrumentationOnRequestError(\n req: IncomingMessage | BaseNextRequest,\n ...args: Parameters<InstrumentationOnRequestError>\n ) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n const { getEdgeInstrumentationModule } = await import('../web/globals')\n const instrumentation = await getEdgeInstrumentationModule()\n\n if (instrumentation) {\n await instrumentation.onRequestError?.(...args)\n }\n } else {\n const { join } = require('node:path') as typeof import('node:path')\n const absoluteProjectDir =\n getRequestMeta(req, 'projectDir') ||\n join(process.cwd(), this.projectDir)\n\n const { instrumentationOnRequestError } = await import(\n '../lib/router-utils/instrumentation-globals.external'\n )\n\n return instrumentationOnRequestError(\n absoluteProjectDir,\n this.distDir,\n ...args\n )\n }\n }\n\n private loadManifests(\n srcPage: string,\n projectDir?: string\n ): {\n buildId: string\n buildManifest: BuildManifest\n routesManifest: DeepReadonly<DevRoutesManifest>\n nextFontManifest: DeepReadonly<NextFontManifest>\n prerenderManifest: DeepReadonly<PrerenderManifest>\n serverFilesManifest: RequiredServerFilesManifest\n reactLoadableManifest: DeepReadonly<ReactLoadableManifest>\n subresourceIntegrityManifest: any\n clientReferenceManifest: any\n serverActionsManifest: any\n dynamicCssManifest: any\n interceptionRoutePatterns: RegExp[]\n } {\n if (process.env.NEXT_RUNTIME === 'edge') {\n const { getEdgePreviewProps } =\n require('../web/get-edge-preview-props') as typeof import('../web/get-edge-preview-props')\n\n const maybeJSONParse = (str?: string) =>\n str ? JSON.parse(str) : undefined\n\n return {\n buildId: process.env.__NEXT_BUILD_ID || '',\n buildManifest: self.__BUILD_MANIFEST as any,\n reactLoadableManifest: maybeJSONParse(self.__REACT_LOADABLE_MANIFEST),\n nextFontManifest: maybeJSONParse(self.__NEXT_FONT_MANIFEST),\n prerenderManifest: {\n routes: {},\n dynamicRoutes: {},\n notFoundRoutes: [],\n version: 4,\n preview: getEdgePreviewProps(),\n },\n routesManifest: {\n version: 4,\n caseSensitive: Boolean(process.env.__NEXT_CASE_SENSITIVE_ROUTES),\n basePath: process.env.__NEXT_BASE_PATH || '',\n rewrites: (process.env.__NEXT_REWRITES as any) || {\n beforeFiles: [],\n afterFiles: [],\n fallback: [],\n },\n redirects: [],\n headers: [],\n i18n:\n (process.env.__NEXT_I18N_CONFIG as any as I18NConfig) || undefined,\n skipMiddlewareUrlNormalize: Boolean(\n process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ),\n },\n serverFilesManifest: {\n config: (globalThis as any).nextConfig || {},\n } as any,\n clientReferenceManifest: self.__RSC_MANIFEST?.[srcPage],\n serverActionsManifest: maybeJSONParse(self.__RSC_SERVER_MANIFEST),\n subresourceIntegrityManifest: maybeJSONParse(\n self.__SUBRESOURCE_INTEGRITY_MANIFEST\n ),\n dynamicCssManifest: maybeJSONParse(self.__DYNAMIC_CSS_MANIFEST),\n interceptionRoutePatterns: (\n maybeJSONParse(self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST) ?? []\n ).map((rewrite: any) => new RegExp(rewrite.regex)),\n }\n } else {\n if (!projectDir) {\n throw new Error('Invariant: projectDir is required for node runtime')\n }\n const { loadManifestFromRelativePath } =\n require('../load-manifest.external') as typeof import('../load-manifest.external')\n const normalizedPagePath = normalizePagePath(srcPage)\n\n const [\n routesManifest,\n prerenderManifest,\n buildManifest,\n reactLoadableManifest,\n nextFontManifest,\n clientReferenceManifest,\n serverActionsManifest,\n subresourceIntegrityManifest,\n serverFilesManifest,\n buildId,\n dynamicCssManifest,\n ] = [\n loadManifestFromRelativePath<DevRoutesManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: ROUTES_MANIFEST,\n shouldCache: !this.isDev,\n }),\n loadManifestFromRelativePath<PrerenderManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: PRERENDER_MANIFEST,\n shouldCache: !this.isDev,\n }),\n loadManifestFromRelativePath<BuildManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: BUILD_MANIFEST,\n shouldCache: !this.isDev,\n }),\n loadManifestFromRelativePath<ReactLoadableManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: process.env.TURBOPACK\n ? `server/${this.isAppRouter ? 'app' : 'pages'}${normalizedPagePath}/${REACT_LOADABLE_MANIFEST}`\n : REACT_LOADABLE_MANIFEST,\n handleMissing: true,\n shouldCache: !this.isDev,\n }),\n loadManifestFromRelativePath<NextFontManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: `server/${NEXT_FONT_MANIFEST}.json`,\n shouldCache: !this.isDev,\n }),\n this.isAppRouter && !isStaticMetadataRoute(srcPage)\n ? loadManifestFromRelativePath({\n distDir: this.distDir,\n projectDir,\n useEval: true,\n handleMissing: true,\n manifest: `server/app${srcPage.replace(/%5F/g, '_') + '_' + CLIENT_REFERENCE_MANIFEST}.js`,\n shouldCache: !this.isDev,\n })\n : undefined,\n this.isAppRouter\n ? loadManifestFromRelativePath<any>({\n distDir: this.distDir,\n projectDir,\n manifest: `server/${SERVER_REFERENCE_MANIFEST}.json`,\n handleMissing: true,\n shouldCache: !this.isDev,\n })\n : {},\n loadManifestFromRelativePath<Record<string, string>>({\n projectDir,\n distDir: this.distDir,\n manifest: `server/${SUBRESOURCE_INTEGRITY_MANIFEST}.json`,\n handleMissing: true,\n shouldCache: !this.isDev,\n }),\n this.isDev\n ? ({} as any)\n : loadManifestFromRelativePath<RequiredServerFilesManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: SERVER_FILES_MANIFEST,\n }),\n this.isDev\n ? 'development'\n : loadManifestFromRelativePath<any>({\n projectDir,\n distDir: this.distDir,\n manifest: BUILD_ID_FILE,\n skipParse: true,\n }),\n loadManifestFromRelativePath<any>({\n projectDir,\n distDir: this.distDir,\n manifest: DYNAMIC_CSS_MANIFEST,\n handleMissing: true,\n }),\n ]\n\n return {\n buildId,\n buildManifest,\n routesManifest,\n nextFontManifest,\n prerenderManifest,\n serverFilesManifest,\n reactLoadableManifest,\n clientReferenceManifest: (clientReferenceManifest as any)\n ?.__RSC_MANIFEST?.[srcPage.replace(/%5F/g, '_')],\n serverActionsManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n interceptionRoutePatterns: routesManifest.rewrites.beforeFiles\n .filter(isInterceptionRouteRewrite)\n .map((rewrite) => new RegExp(rewrite.regex)),\n }\n }\n }\n\n public async loadCustomCacheHandlers(\n req: IncomingMessage | BaseNextRequest,\n nextConfig: NextConfigComplete\n ) {\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { cacheHandlers } = nextConfig.experimental\n if (!cacheHandlers) return\n\n // If we've already initialized the cache handlers interface, don't do it\n // again.\n if (!initializeCacheHandlers()) return\n\n for (const [kind, handler] of Object.entries(cacheHandlers)) {\n if (!handler) continue\n\n const { formatDynamicImportPath } =\n require('../../lib/format-dynamic-import-path') as typeof import('../../lib/format-dynamic-import-path')\n\n const { join } = require('node:path') as typeof import('node:path')\n const absoluteProjectDir =\n getRequestMeta(req, 'projectDir') ||\n join(process.cwd(), this.projectDir)\n\n setCacheHandler(\n kind,\n interopDefault(\n await dynamicImportEsmDefault(\n formatDynamicImportPath(\n `${absoluteProjectDir}/${this.distDir}`,\n handler\n )\n )\n )\n )\n }\n }\n }\n\n public async getIncrementalCache(\n req: IncomingMessage | BaseNextRequest,\n nextConfig: NextConfigComplete,\n prerenderManifest: DeepReadonly<PrerenderManifest>\n ): Promise<IncrementalCache> {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return (globalThis as any).__incrementalCache\n } else {\n let CacheHandler: any\n const { cacheHandler } = nextConfig\n\n if (cacheHandler) {\n const { formatDynamicImportPath } =\n require('../../lib/format-dynamic-import-path') as typeof import('../../lib/format-dynamic-import-path')\n\n CacheHandler = interopDefault(\n await dynamicImportEsmDefault(\n formatDynamicImportPath(this.distDir, cacheHandler)\n )\n )\n }\n const { join } = require('node:path') as typeof import('node:path')\n const projectDir =\n getRequestMeta(req, 'projectDir') ||\n join(process.cwd(), this.projectDir)\n\n await this.loadCustomCacheHandlers(req, nextConfig)\n\n // incremental-cache is request specific\n // although can have shared caches in module scope\n // per-cache handler\n return new IncrementalCache({\n fs: (\n require('../lib/node-fs-methods') as typeof import('../lib/node-fs-methods')\n ).nodeFs,\n dev: this.isDev,\n requestHeaders: req.headers,\n allowedRevalidateHeaderKeys:\n nextConfig.experimental.allowedRevalidateHeaderKeys,\n minimalMode: getRequestMeta(req, 'minimalMode'),\n serverDistDir: `${projectDir}/${this.distDir}/server`,\n fetchCacheKeyPrefix: nextConfig.experimental.fetchCacheKeyPrefix,\n maxMemoryCacheSize: nextConfig.cacheMaxMemorySize,\n flushToDisk: nextConfig.experimental.isrFlushToDisk,\n getPrerenderManifest: () => prerenderManifest,\n CurCacheHandler: CacheHandler,\n })\n }\n }\n\n public async onRequestError(\n req: IncomingMessage | BaseNextRequest,\n err: unknown,\n errorContext: RequestErrorContext,\n routerServerContext?: RouterServerContext[string]\n ) {\n if (routerServerContext?.logErrorWithOriginalStack) {\n routerServerContext.logErrorWithOriginalStack(err, 'app-dir')\n } else {\n console.error(err)\n }\n await this.instrumentationOnRequestError(\n req,\n err,\n {\n path: req.url || '/',\n headers: req.headers,\n method: req.method || 'GET',\n },\n errorContext\n )\n }\n\n public async prepare(\n req: IncomingMessage | BaseNextRequest,\n res: ServerResponse | null,\n {\n srcPage,\n multiZoneDraftMode,\n }: {\n srcPage: string\n multiZoneDraftMode?: boolean\n }\n ): Promise<\n | {\n buildId: string\n locale?: string\n locales?: readonly string[]\n defaultLocale?: string\n query: ParsedUrlQuery\n originalQuery: ParsedUrlQuery\n originalPathname: string\n params?: ParsedUrlQuery\n parsedUrl: UrlWithParsedQuery\n previewData: PreviewData\n pageIsDynamic: boolean\n isDraftMode: boolean\n resolvedPathname: string\n isNextDataRequest: boolean\n buildManifest: DeepReadonly<BuildManifest>\n nextFontManifest: DeepReadonly<NextFontManifest>\n serverFilesManifest: DeepReadonly<RequiredServerFilesManifest>\n reactLoadableManifest: DeepReadonly<ReactLoadableManifest>\n routesManifest: DeepReadonly<DevRoutesManifest>\n prerenderManifest: DeepReadonly<PrerenderManifest>\n // we can't pull in the client reference type or it causes issues with\n // our pre-compiled types\n clientReferenceManifest?: any\n serverActionsManifest?: any\n dynamicCssManifest?: any\n subresourceIntegrityManifest?: DeepReadonly<Record<string, string>>\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n nextConfig: NextConfigComplete\n routerServerContext?: RouterServerContext[string]\n interceptionRoutePatterns?: any\n }\n | undefined\n > {\n let projectDir: string | undefined\n\n // edge runtime handles loading instrumentation at the edge adapter level\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { join, relative } =\n require('node:path') as typeof import('node:path')\n\n projectDir =\n getRequestMeta(req, 'projectDir') ||\n join(process.cwd(), this.projectDir)\n\n const absoluteDistDir = getRequestMeta(req, 'distDir')\n\n if (absoluteDistDir) {\n this.distDir = relative(projectDir, absoluteDistDir)\n }\n const { ensureInstrumentationRegistered } = await import(\n '../lib/router-utils/instrumentation-globals.external'\n )\n // ensure instrumentation is registered and pass\n // onRequestError below\n ensureInstrumentationRegistered(projectDir, this.distDir)\n }\n const manifests = await this.loadManifests(srcPage, projectDir)\n const { routesManifest, prerenderManifest, serverFilesManifest } = manifests\n\n const { basePath, i18n, rewrites } = routesManifest\n\n if (basePath) {\n req.url = removePathPrefix(req.url || '/', basePath)\n }\n\n const parsedUrl = parseReqUrl(req.url || '/')\n // if we couldn't parse the URL we can't continue\n if (!parsedUrl) {\n return\n }\n let isNextDataRequest = false\n\n if (pathHasPrefix(parsedUrl.pathname || '/', '/_next/data')) {\n isNextDataRequest = true\n parsedUrl.pathname = normalizeDataPath(parsedUrl.pathname || '/')\n }\n let originalPathname = parsedUrl.pathname || '/'\n const originalQuery = { ...parsedUrl.query }\n const pageIsDynamic = isDynamicRoute(srcPage)\n\n let localeResult: PathLocale | undefined\n let detectedLocale: string | undefined\n\n if (i18n) {\n localeResult = normalizeLocalePath(\n parsedUrl.pathname || '/',\n i18n.locales\n )\n\n if (localeResult.detectedLocale) {\n req.url = `${localeResult.pathname}${parsedUrl.search}`\n originalPathname = localeResult.pathname\n\n if (!detectedLocale) {\n detectedLocale = localeResult.detectedLocale\n }\n }\n }\n\n const serverUtils = getServerUtils({\n page: srcPage,\n i18n,\n basePath,\n rewrites,\n pageIsDynamic,\n trailingSlash: process.env.__NEXT_TRAILING_SLASH as any as boolean,\n caseSensitive: Boolean(routesManifest.caseSensitive),\n })\n\n const domainLocale = detectDomainLocale(\n i18n?.domains,\n getHostname(parsedUrl, req.headers),\n detectedLocale\n )\n addRequestMeta(req, 'isLocaleDomain', Boolean(domainLocale))\n\n const defaultLocale = domainLocale?.defaultLocale || i18n?.defaultLocale\n\n // Ensure parsedUrl.pathname includes locale before processing\n // rewrites or they won't match correctly.\n if (defaultLocale && !detectedLocale) {\n parsedUrl.pathname = `/${defaultLocale}${parsedUrl.pathname === '/' ? '' : parsedUrl.pathname}`\n }\n const locale =\n getRequestMeta(req, 'locale') || detectedLocale || defaultLocale\n\n const rewriteParamKeys = Object.keys(\n serverUtils.handleRewrites(req, parsedUrl)\n )\n\n // after processing rewrites we want to remove locale\n // from parsedUrl pathname\n if (i18n) {\n parsedUrl.pathname = normalizeLocalePath(\n parsedUrl.pathname || '/',\n i18n.locales\n ).pathname\n }\n\n let params: Record<string, undefined | string | string[]> | undefined =\n getRequestMeta(req, 'params')\n\n // attempt parsing from pathname\n if (!params && serverUtils.dynamicRouteMatcher) {\n const paramsMatch = serverUtils.dynamicRouteMatcher(\n normalizeDataPath(localeResult?.pathname || parsedUrl.pathname || '/')\n )\n const paramsResult = serverUtils.normalizeDynamicRouteParams(\n paramsMatch || {},\n true\n )\n\n if (paramsResult.hasValidParams) {\n params = paramsResult.params\n }\n }\n\n // Local \"next start\" expects the routing parsed query values\n // to not be present in the URL although when deployed proxies\n // will add query values from resolving the routes to pass to function.\n\n // TODO: do we want to change expectations for \"next start\"\n // to include these query values in the URL which affects asPath\n // but would match deployed behavior, e.g. a rewrite from middleware\n // that adds a query param would be in asPath as query but locally\n // it won't be in the asPath but still available in the query object\n const query = getRequestMeta(req, 'query') || {\n ...parsedUrl.query,\n }\n\n const routeParamKeys = new Set<string>()\n const combinedParamKeys = []\n\n // we don't include rewriteParamKeys in the combinedParamKeys\n // for app router since the searchParams is populated from the\n // URL so we don't want to strip the rewrite params from the URL\n // so that searchParams can include them\n if (!this.isAppRouter) {\n for (const key of [\n ...rewriteParamKeys,\n ...Object.keys(serverUtils.defaultRouteMatches || {}),\n ]) {\n // We only want to filter rewrite param keys from the URL\n // if they are matches from the URL e.g. the key/value matches\n // before and after applying the rewrites /:path for /hello and\n // { path: 'hello' } but not for { path: 'another' } and /hello\n // TODO: we should prefix rewrite param keys the same as we do\n // for dynamic routes so we can identify them properly\n const originalValue = Array.isArray(originalQuery[key])\n ? originalQuery[key].join('')\n : originalQuery[key]\n\n const queryValue = Array.isArray(query[key])\n ? query[key].join('')\n : query[key]\n\n if (!(key in originalQuery) || originalValue === queryValue) {\n combinedParamKeys.push(key)\n }\n }\n }\n\n serverUtils.normalizeCdnUrl(req, combinedParamKeys)\n serverUtils.normalizeQueryParams(query, routeParamKeys)\n serverUtils.filterInternalQuery(originalQuery, combinedParamKeys)\n\n if (pageIsDynamic) {\n const queryResult = serverUtils.normalizeDynamicRouteParams(query, true)\n\n const paramsResult = serverUtils.normalizeDynamicRouteParams(\n params || {},\n true\n )\n const paramsToInterpolate: ParsedUrlQuery =\n paramsResult.hasValidParams && params\n ? params\n : queryResult.hasValidParams\n ? query\n : {}\n\n req.url = serverUtils.interpolateDynamicPath(\n req.url || '/',\n paramsToInterpolate\n )\n parsedUrl.pathname = serverUtils.interpolateDynamicPath(\n parsedUrl.pathname || '/',\n paramsToInterpolate\n )\n originalPathname = serverUtils.interpolateDynamicPath(\n originalPathname,\n paramsToInterpolate\n )\n\n // try pulling from query if valid\n if (!params) {\n if (queryResult.hasValidParams) {\n params = Object.assign({}, queryResult.params)\n\n // If we pulled from query remove it so it's\n // only in params\n for (const key in serverUtils.defaultRouteMatches) {\n delete query[key]\n }\n } else {\n // use final params from URL matching\n const paramsMatch = serverUtils.dynamicRouteMatcher?.(\n normalizeDataPath(\n localeResult?.pathname || parsedUrl.pathname || '/'\n )\n )\n // we don't normalize these as they are allowed to be\n // the literal slug matches here e.g. /blog/[slug]\n // actually being requested\n if (paramsMatch) {\n params = Object.assign({}, paramsMatch)\n }\n }\n }\n }\n\n // Remove any normalized params from the query if they\n // weren't present as non-prefixed query key e.g.\n // ?search=1&nxtPsearch=hello we don't delete search\n for (const key of routeParamKeys) {\n if (!(key in originalQuery)) {\n delete query[key]\n }\n }\n\n const { isOnDemandRevalidate, revalidateOnlyGenerated } =\n checkIsOnDemandRevalidate(req, prerenderManifest.preview)\n\n let isDraftMode = false\n let previewData: PreviewData\n\n // preview data relies on non-edge utils\n if (process.env.NEXT_RUNTIME !== 'edge' && res) {\n const { tryGetPreviewData } =\n require('../api-utils/node/try-get-preview-data') as typeof import('../api-utils/node/try-get-preview-data')\n\n previewData = tryGetPreviewData(\n req,\n res,\n prerenderManifest.preview,\n Boolean(multiZoneDraftMode)\n )\n isDraftMode = previewData !== false\n }\n\n const routerServerContext =\n routerServerGlobal[RouterServerContextSymbol]?.[this.projectDir]\n const nextConfig =\n routerServerContext?.nextConfig || serverFilesManifest.config\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n let resolvedPathname =\n getRequestMeta(req, 'rewroteURL') || normalizedSrcPage\n\n if (isDynamicRoute(resolvedPathname) && params) {\n resolvedPathname = serverUtils.interpolateDynamicPath(\n resolvedPathname,\n params\n )\n }\n\n if (resolvedPathname === '/index') {\n resolvedPathname = '/'\n }\n try {\n resolvedPathname = decodePathParams(resolvedPathname)\n } catch (_) {}\n\n resolvedPathname = removeTrailingSlash(resolvedPathname)\n\n return {\n query,\n originalQuery,\n originalPathname,\n params,\n parsedUrl,\n locale,\n isNextDataRequest,\n locales: i18n?.locales,\n defaultLocale,\n isDraftMode,\n previewData,\n pageIsDynamic,\n resolvedPathname,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n ...manifests,\n serverActionsManifest: manifests.serverActionsManifest,\n clientReferenceManifest: manifests.clientReferenceManifest,\n nextConfig,\n routerServerContext,\n }\n }\n\n public getResponseCache(req: IncomingMessage | BaseNextRequest) {\n if (!this.responseCache) {\n const minimalMode = getRequestMeta(req, 'minimalMode') ?? false\n this.responseCache = new ResponseCache(minimalMode)\n }\n return this.responseCache\n }\n\n public async handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind,\n isFallback,\n prerenderManifest,\n isRoutePPREnabled,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil,\n }: {\n req: IncomingMessage | BaseNextRequest\n nextConfig: NextConfigComplete\n cacheKey: string | null\n routeKind: RouteKind\n isFallback?: boolean\n prerenderManifest: DeepReadonly<PrerenderManifest>\n isRoutePPREnabled?: boolean\n isOnDemandRevalidate?: boolean\n revalidateOnlyGenerated?: boolean\n responseGenerator: ResponseGenerator\n waitUntil?: (prom: Promise<any>) => void\n }) {\n const responseCache = this.getResponseCache(req)\n const cacheEntry = await responseCache.get(cacheKey, responseGenerator, {\n routeKind,\n isFallback,\n isRoutePPREnabled,\n isOnDemandRevalidate,\n isPrefetch: req.headers.purpose === 'prefetch',\n incrementalCache: await this.getIncrementalCache(\n req,\n nextConfig,\n prerenderManifest\n ),\n waitUntil,\n })\n\n if (!cacheEntry) {\n if (\n cacheKey &&\n // revalidate only generated can bail even if cacheKey is provided\n !(isOnDemandRevalidate && revalidateOnlyGenerated)\n ) {\n // A cache entry might not be generated if a response is written\n // in `getInitialProps` or `getServerSideProps`, but those shouldn't\n // have a cache key. If we do have a cache key but we don't end up\n // with a cache entry, then either Next.js or the application has a\n // bug that needs fixing.\n throw new Error('invariant: cache entry required but not generated')\n }\n }\n return cacheEntry\n }\n}\n","export function isAppRouteRoute(route: string): boolean {\n return route.endsWith('/route')\n}\n","/**\n * For a given page path, this function ensures that there is no backslash\n * escaping slashes in the path. Example:\n * - `foo\\/bar\\/baz` -> `foo/bar/baz`\n */\nexport function normalizePathSep(path: string): string {\n return path.replace(/\\\\/g, '/')\n}\n","import type { Key } from 'next/dist/compiled/path-to-regexp'\nimport { regexpToFunction } from 'next/dist/compiled/path-to-regexp'\nimport { pathToRegexp } from 'next/dist/compiled/path-to-regexp'\n\ninterface Options {\n /**\n * A transformer function that will be applied to the regexp generated\n * from the provided path and path-to-regexp.\n */\n regexModifier?: (regex: string) => string\n /**\n * When true the function will remove all unnamed parameters\n * from the matched parameters.\n */\n removeUnnamedParams?: boolean\n /**\n * When true the regexp won't allow an optional trailing delimiter\n * to match.\n */\n strict?: boolean\n\n /**\n * When true the matcher will be case-sensitive, defaults to false\n */\n sensitive?: boolean\n}\n\nexport type PatchMatcher = (\n pathname: string,\n params?: Record<string, any>\n) => Record<string, any> | false\n\n/**\n * Generates a path matcher function for a given path and options based on\n * path-to-regexp. By default the match will be case insensitive, non strict\n * and delimited by `/`.\n */\nexport function getPathMatch(path: string, options?: Options): PatchMatcher {\n const keys: Key[] = []\n const regexp = pathToRegexp(path, keys, {\n delimiter: '/',\n sensitive:\n typeof options?.sensitive === 'boolean' ? options.sensitive : false,\n strict: options?.strict,\n })\n\n const matcher = regexpToFunction<Record<string, any>>(\n options?.regexModifier\n ? new RegExp(options.regexModifier(regexp.source), regexp.flags)\n : regexp,\n keys\n )\n\n /**\n * A matcher function that will check if a given pathname matches the path\n * given in the builder function. When the path does not match it will return\n * `false` but if it does it will return an object with the matched params\n * merged with the params provided in the second argument.\n */\n return (pathname, params) => {\n // If no pathname is provided it's not a match.\n if (typeof pathname !== 'string') return false\n\n const match = matcher(pathname)\n\n // If the path did not match `false` will be returned.\n if (!match) return false\n\n /**\n * If unnamed params are not allowed they must be removed from\n * the matched parameters. path-to-regexp uses \"string\" for named and\n * \"number\" for unnamed parameters.\n */\n if (options?.removeUnnamedParams) {\n for (const key of keys) {\n if (typeof key.name === 'number') {\n delete match.params[key.name]\n }\n }\n }\n\n return { ...params, ...match.params }\n }\n}\n","import type {\n FlightRouterState,\n Segment,\n} from '../../../server/app-render/types'\nimport { INTERCEPTION_ROUTE_MARKERS } from '../../../shared/lib/router/utils/interception-routes'\nimport type { Params } from '../../../server/request/params'\nimport {\n isGroupSegment,\n DEFAULT_SEGMENT_KEY,\n PAGE_SEGMENT_KEY,\n} from '../../../shared/lib/segment'\nimport { matchSegment } from '../match-segments'\n\nconst removeLeadingSlash = (segment: string): string => {\n return segment[0] === '/' ? segment.slice(1) : segment\n}\n\nconst segmentToPathname = (segment: Segment): string => {\n if (typeof segment === 'string') {\n // 'children' is not a valid path -- it's technically a parallel route that corresponds with the current segment's page\n // if we don't skip it, then the computed pathname might be something like `/children` which doesn't make sense.\n if (segment === 'children') return ''\n\n return segment\n }\n\n return segment[1]\n}\n\nfunction normalizeSegments(segments: string[]): string {\n return (\n segments.reduce((acc, segment) => {\n segment = removeLeadingSlash(segment)\n if (segment === '' || isGroupSegment(segment)) {\n return acc\n }\n\n return `${acc}/${segment}`\n }, '') || '/'\n )\n}\n\nexport function extractPathFromFlightRouterState(\n flightRouterState: FlightRouterState\n): string | undefined {\n const segment = Array.isArray(flightRouterState[0])\n ? flightRouterState[0][1]\n : flightRouterState[0]\n\n if (\n segment === DEFAULT_SEGMENT_KEY ||\n INTERCEPTION_ROUTE_MARKERS.some((m) => segment.startsWith(m))\n )\n return undefined\n\n if (segment.startsWith(PAGE_SEGMENT_KEY)) return ''\n\n const segments = [segmentToPathname(segment)]\n const parallelRoutes = flightRouterState[1] ?? {}\n\n const childrenPath = parallelRoutes.children\n ? extractPathFromFlightRouterState(parallelRoutes.children)\n : undefined\n\n if (childrenPath !== undefined) {\n segments.push(childrenPath)\n } else {\n for (const [key, value] of Object.entries(parallelRoutes)) {\n if (key === 'children') continue\n\n const childPath = extractPathFromFlightRouterState(value)\n\n if (childPath !== undefined) {\n segments.push(childPath)\n }\n }\n }\n\n return normalizeSegments(segments)\n}\n\nfunction computeChangedPathImpl(\n treeA: FlightRouterState,\n treeB: FlightRouterState\n): string | null {\n const [segmentA, parallelRoutesA] = treeA\n const [segmentB, parallelRoutesB] = treeB\n\n const normalizedSegmentA = segmentToPathname(segmentA)\n const normalizedSegmentB = segmentToPathname(segmentB)\n\n if (\n INTERCEPTION_ROUTE_MARKERS.some(\n (m) =>\n normalizedSegmentA.startsWith(m) || normalizedSegmentB.startsWith(m)\n )\n ) {\n return ''\n }\n\n if (!matchSegment(segmentA, segmentB)) {\n // once we find where the tree changed, we compute the rest of the path by traversing the tree\n return extractPathFromFlightRouterState(treeB) ?? ''\n }\n\n for (const parallelRouterKey in parallelRoutesA) {\n if (parallelRoutesB[parallelRouterKey]) {\n const changedPath = computeChangedPathImpl(\n parallelRoutesA[parallelRouterKey],\n parallelRoutesB[parallelRouterKey]\n )\n if (changedPath !== null) {\n return `${segmentToPathname(segmentB)}/${changedPath}`\n }\n }\n }\n\n return null\n}\n\nexport function computeChangedPath(\n treeA: FlightRouterState,\n treeB: FlightRouterState\n): string | null {\n const changedPath = computeChangedPathImpl(treeA, treeB)\n\n if (changedPath == null || changedPath === '/') {\n return changedPath\n }\n\n // lightweight normalization to remove route groups\n return normalizeSegments(changedPath.split('/'))\n}\n\n/**\n * Recursively extracts dynamic parameters from FlightRouterState.\n */\nexport function getSelectedParams(\n currentTree: FlightRouterState,\n params: Params = {}\n): Params {\n const parallelRoutes = currentTree[1]\n\n for (const parallelRoute of Object.values(parallelRoutes)) {\n const segment = parallelRoute[0]\n const isDynamicParameter = Array.isArray(segment)\n const segmentValue = isDynamicParameter ? segment[1] : segment\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) continue\n\n // Ensure catchAll and optional catchall are turned into an array\n const isCatchAll =\n isDynamicParameter && (segment[2] === 'c' || segment[2] === 'oc')\n\n if (isCatchAll) {\n params[segment[0]] = segment[1].split('/')\n } else if (isDynamicParameter) {\n params[segment[0]] = segment[1]\n }\n\n params = getSelectedParams(parallelRoute, params)\n }\n\n return params\n}\n","import type { FlightRouterState } from './types'\nimport { flightRouterStateSchema } from './types'\nimport { assert } from 'next/dist/compiled/superstruct'\n\nexport function parseAndValidateFlightRouterState(\n stateHeader: string | string[]\n): FlightRouterState\nexport function parseAndValidateFlightRouterState(\n stateHeader: undefined\n): undefined\nexport function parseAndValidateFlightRouterState(\n stateHeader: string | string[] | undefined\n): FlightRouterState | undefined\nexport function parseAndValidateFlightRouterState(\n stateHeader: string | string[] | undefined\n): FlightRouterState | undefined {\n if (typeof stateHeader === 'undefined') {\n return undefined\n }\n if (Array.isArray(stateHeader)) {\n throw new Error(\n 'Multiple router state headers were sent. This is not allowed.'\n )\n }\n\n // We limit the size of the router state header to ~40kb. This is to prevent\n // a malicious user from sending a very large header and slowing down the\n // resolving of the router state.\n // This is around 2,000 nested or parallel route segment states:\n // '{\"children\":[\"\",{}]}'.length === 20.\n if (stateHeader.length > 20 * 2000) {\n throw new Error('The router state header was too large.')\n }\n\n try {\n const state = JSON.parse(decodeURIComponent(stateHeader))\n assert(state, flightRouterStateSchema)\n return state\n } catch {\n throw new Error('The router state header was sent but could not be parsed.')\n }\n}\n","import type { ParsedUrlQuery } from 'querystring'\n\nimport { searchParamsToUrlQuery } from './querystring'\nimport { parseRelativeUrl } from './parse-relative-url'\n\nexport interface ParsedUrl {\n hash: string\n hostname?: string | null\n href: string\n pathname: string\n port?: string | null\n protocol?: string | null\n query: ParsedUrlQuery\n search: string\n slashes: boolean | undefined\n}\n\nexport function parseUrl(url: string): ParsedUrl {\n if (url.startsWith('/')) {\n return parseRelativeUrl(url)\n }\n\n const parsedURL = new URL(url)\n return {\n hash: parsedURL.hash,\n hostname: parsedURL.hostname,\n href: parsedURL.href,\n pathname: parsedURL.pathname,\n port: parsedURL.port,\n protocol: parsedURL.protocol,\n query: searchParamsToUrlQuery(parsedURL.searchParams),\n search: parsedURL.search,\n slashes:\n parsedURL.href.slice(\n parsedURL.protocol.length,\n parsedURL.protocol.length + 2\n ) === '//',\n }\n}\n","import type { ParsedUrlQuery } from 'querystring'\nimport { getLocationOrigin } from '../../utils'\nimport { searchParamsToUrlQuery } from './querystring'\n\nexport interface ParsedRelativeUrl {\n hash: string\n href: string\n pathname: string\n query: ParsedUrlQuery\n search: string\n slashes: undefined\n}\n\n/**\n * Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative\n * (e.g. `./hello`) then at least base must be.\n * Absolute urls are rejected with one exception, in the browser, absolute urls that are on\n * the current origin will be parsed as relative\n */\nexport function parseRelativeUrl(\n url: string,\n base?: string,\n parseQuery?: true\n): ParsedRelativeUrl\nexport function parseRelativeUrl(\n url: string,\n base: string | undefined,\n parseQuery: false\n): Omit<ParsedRelativeUrl, 'query'>\nexport function parseRelativeUrl(\n url: string,\n base?: string,\n parseQuery = true\n): ParsedRelativeUrl | Omit<ParsedRelativeUrl, 'query'> {\n const globalBase = new URL(\n typeof window === 'undefined' ? 'http://n' : getLocationOrigin()\n )\n\n const resolvedBase = base\n ? new URL(base, globalBase)\n : url.startsWith('.')\n ? new URL(\n typeof window === 'undefined' ? 'http://n' : window.location.href\n )\n : globalBase\n\n const { pathname, searchParams, search, hash, href, origin } = new URL(\n url,\n resolvedBase\n )\n\n if (origin !== globalBase.origin) {\n throw new Error(`invariant: invalid relative URL, router received ${url}`)\n }\n\n return {\n pathname,\n query: parseQuery ? searchParamsToUrlQuery(searchParams) : undefined,\n search,\n hash,\n href: href.slice(origin.length),\n // We don't know for relative URLs at this point since we set a custom, internal\n // base that isn't surfaced to users.\n slashes: undefined,\n }\n}\n","import escapePathDelimiters from '../../../shared/lib/router/utils/escape-path-delimiters'\nimport { DecodeError } from '../../../shared/lib/utils'\n\n/**\n * We only encode path delimiters for path segments from\n * getStaticPaths so we need to attempt decoding the URL\n * to match against and only escape the path delimiters\n * this allows non-ascii values to be handled e.g.\n * Japanese characters.\n * */\nfunction decodePathParams(pathname: string): string {\n // TODO: investigate adding this handling for non-SSG\n // pages so non-ascii names also work there.\n return pathname\n .split('/')\n .map((seg) => {\n try {\n seg = escapePathDelimiters(decodeURIComponent(seg), true)\n } catch (_) {\n // An improperly encoded URL was provided\n throw new DecodeError('Failed to decode path param(s).')\n }\n return seg\n })\n .join('/')\n}\n\nexport { decodePathParams }\n","// escape delimiters used by path-to-regexp\nexport default function escapePathDelimiters(\n segment: string,\n escapeEncoded?: boolean\n): string {\n return segment.replace(\n new RegExp(`([/#?]${escapeEncoded ? '|%(2f|23|3f|5c)' : ''})`, 'gi'),\n (char: string) => encodeURIComponent(char)\n )\n}\n","import { isPlainObject } from '../shared/lib/is-plain-object'\n\n// We allow some additional attached properties for Next.js errors\nexport interface NextError extends Error {\n type?: string\n page?: string\n code?: string | number\n cancelled?: boolean\n digest?: number\n}\n\n/**\n * Checks whether the given value is a NextError.\n * This can be used to print a more detailed error message with properties like `code` & `digest`.\n */\nexport default function isError(err: unknown): err is NextError {\n return (\n typeof err === 'object' && err !== null && 'name' in err && 'message' in err\n )\n}\n\nfunction safeStringify(obj: any) {\n const seen = new WeakSet()\n\n return JSON.stringify(obj, (_key, value) => {\n // If value is an object and already seen, replace with \"[Circular]\"\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]'\n }\n seen.add(value)\n }\n return value\n })\n}\n\nexport function getProperError(err: unknown): Error {\n if (isError(err)) {\n return err\n }\n\n if (process.env.NODE_ENV === 'development') {\n // provide better error for case where `throw undefined`\n // is called in development\n if (typeof err === 'undefined') {\n return new Error(\n 'An undefined error was thrown, ' +\n 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'\n )\n }\n\n if (err === null) {\n return new Error(\n 'A null error was thrown, ' +\n 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'\n )\n }\n }\n\n return new Error(isPlainObject(err) ? safeStringify(err) : err + '')\n}\n","import type { IncomingMessage } from 'http'\n\nimport { parse } from 'next/dist/compiled/content-type'\nimport isError from '../../../lib/is-error'\nimport type { SizeLimit } from '../../../types'\nimport { ApiError } from '../index'\n\n/**\n * Parse `JSON` and handles invalid `JSON` strings\n * @param str `JSON` string\n */\nfunction parseJson(str: string): object {\n if (str.length === 0) {\n // special-case empty json body, as it's a common client-side mistake\n return {}\n }\n\n try {\n return JSON.parse(str)\n } catch (e) {\n throw new ApiError(400, 'Invalid JSON')\n }\n}\n\n/**\n * Parse incoming message like `json` or `urlencoded`\n * @param req request object\n */\nexport async function parseBody(\n req: IncomingMessage,\n limit: SizeLimit\n): Promise<any> {\n let contentType\n try {\n contentType = parse(req.headers['content-type'] || 'text/plain')\n } catch {\n contentType = parse('text/plain')\n }\n const { type, parameters } = contentType\n const encoding = parameters.charset || 'utf-8'\n\n let buffer\n\n try {\n const getRawBody =\n require('next/dist/compiled/raw-body') as typeof import('next/dist/compiled/raw-body')\n buffer = await getRawBody(req, { encoding, limit })\n } catch (e) {\n if (isError(e) && e.type === 'entity.too.large') {\n throw new ApiError(413, `Body exceeded ${limit} limit`)\n } else {\n throw new ApiError(400, 'Invalid body')\n }\n }\n\n const body = buffer.toString()\n\n if (type === 'application/json' || type === 'application/ld+json') {\n return parseJson(body)\n } else if (type === 'application/x-www-form-urlencoded') {\n const qs = require('querystring') as typeof import('querystring')\n return qs.decode(body)\n } else {\n return body\n }\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextApiRequest, NextApiResponse } from '../../../shared/lib/utils'\nimport type { PageConfig, ResponseLimit } from '../../../types'\nimport type { __ApiPreviewProps } from '../.'\nimport type { CookieSerializeOptions } from 'next/dist/compiled/cookie'\n\nimport bytes from 'next/dist/compiled/bytes'\nimport { generateETag } from '../../lib/etag'\nimport { sendEtagResponse } from '../../send-payload'\nimport { Stream } from 'stream'\nimport isError from '../../../lib/is-error'\nimport { isResSent } from '../../../shared/lib/utils'\nimport { interopDefault } from '../../../lib/interop-default'\nimport {\n setLazyProp,\n sendStatusCode,\n redirect,\n clearPreviewData,\n sendError,\n ApiError,\n COOKIE_NAME_PRERENDER_BYPASS,\n COOKIE_NAME_PRERENDER_DATA,\n RESPONSE_LIMIT_DEFAULT,\n} from './../index'\nimport { getCookieParser } from './../get-cookie-parser'\nimport {\n JSON_CONTENT_TYPE_HEADER,\n PRERENDER_REVALIDATE_HEADER,\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,\n} from '../../../lib/constants'\nimport { tryGetPreviewData } from './try-get-preview-data'\nimport { parseBody } from './parse-body'\nimport {\n RouterServerContextSymbol,\n routerServerGlobal,\n} from '../../lib/router-utils/router-server-context'\nimport type { InstrumentationOnRequestError } from '../../instrumentation/types'\n\ntype ApiContext = __ApiPreviewProps & {\n trustHostHeader?: boolean\n allowedRevalidateHeaderKeys?: string[]\n hostname?: string\n multiZoneDraftMode?: boolean\n dev: boolean\n projectDir: string\n}\n\nfunction getMaxContentLength(responseLimit?: ResponseLimit) {\n if (responseLimit && typeof responseLimit !== 'boolean') {\n return bytes.parse(responseLimit)\n }\n return RESPONSE_LIMIT_DEFAULT\n}\n\n/**\n * Send `any` body to response\n * @param req request object\n * @param res response object\n * @param body of response\n */\nfunction sendData(req: NextApiRequest, res: NextApiResponse, body: any): void {\n if (body === null || body === undefined) {\n res.end()\n return\n }\n\n // strip irrelevant headers/body\n if (res.statusCode === 204 || res.statusCode === 304) {\n res.removeHeader('Content-Type')\n res.removeHeader('Content-Length')\n res.removeHeader('Transfer-Encoding')\n\n if (process.env.NODE_ENV === 'development' && body) {\n console.warn(\n `A body was attempted to be set with a 204 statusCode for ${req.url}, this is invalid and the body was ignored.\\n` +\n `See more info here https://nextjs.org/docs/messages/invalid-api-status-body`\n )\n }\n res.end()\n return\n }\n\n const contentType = res.getHeader('Content-Type')\n\n if (body instanceof Stream) {\n if (!contentType) {\n res.setHeader('Content-Type', 'application/octet-stream')\n }\n body.pipe(res)\n return\n }\n\n const isJSONLike = ['object', 'number', 'boolean'].includes(typeof body)\n const stringifiedBody = isJSONLike ? JSON.stringify(body) : body\n const etag = generateETag(stringifiedBody)\n if (sendEtagResponse(req, res, etag)) {\n return\n }\n\n if (Buffer.isBuffer(body)) {\n if (!contentType) {\n res.setHeader('Content-Type', 'application/octet-stream')\n }\n res.setHeader('Content-Length', body.length)\n res.end(body)\n return\n }\n\n if (isJSONLike) {\n res.setHeader('Content-Type', JSON_CONTENT_TYPE_HEADER)\n }\n\n res.setHeader('Content-Length', Buffer.byteLength(stringifiedBody))\n res.end(stringifiedBody)\n}\n\n/**\n * Send `JSON` object\n * @param res response object\n * @param jsonBody of data\n */\nfunction sendJson(res: NextApiResponse, jsonBody: any): void {\n // Set header to application/json\n res.setHeader('Content-Type', JSON_CONTENT_TYPE_HEADER)\n\n // Use send to handle request\n res.send(JSON.stringify(jsonBody))\n}\n\nfunction isValidData(str: any): str is string {\n return typeof str === 'string' && str.length >= 16\n}\n\nfunction setDraftMode<T>(\n res: NextApiResponse<T>,\n options: {\n enable: boolean\n previewModeId?: string\n }\n): NextApiResponse<T> {\n if (!isValidData(options.previewModeId)) {\n throw new Error('invariant: invalid previewModeId')\n }\n const expires = options.enable ? undefined : new Date(0)\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, options.previewModeId, {\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n expires,\n }),\n ])\n return res\n}\n\nfunction setPreviewData<T>(\n res: NextApiResponse<T>,\n data: object | string, // TODO: strict runtime type checking\n options: {\n maxAge?: number\n path?: string\n } & __ApiPreviewProps\n): NextApiResponse<T> {\n if (!isValidData(options.previewModeId)) {\n throw new Error('invariant: invalid previewModeId')\n }\n if (!isValidData(options.previewModeEncryptionKey)) {\n throw new Error('invariant: invalid previewModeEncryptionKey')\n }\n if (!isValidData(options.previewModeSigningKey)) {\n throw new Error('invariant: invalid previewModeSigningKey')\n }\n\n const jsonwebtoken =\n require('next/dist/compiled/jsonwebtoken') as typeof import('next/dist/compiled/jsonwebtoken')\n const { encryptWithSecret } =\n require('../../crypto-utils') as typeof import('../../crypto-utils')\n const payload = jsonwebtoken.sign(\n {\n data: encryptWithSecret(\n Buffer.from(options.previewModeEncryptionKey),\n JSON.stringify(data)\n ),\n },\n options.previewModeSigningKey,\n {\n algorithm: 'HS256',\n ...(options.maxAge !== undefined\n ? { expiresIn: options.maxAge }\n : undefined),\n }\n )\n\n // limit preview mode cookie to 2KB since we shouldn't store too much\n // data here and browsers drop cookies over 4KB\n if (payload.length > 2048) {\n throw new Error(\n `Preview data is limited to 2KB currently, reduce how much data you are storing as preview data to continue`\n )\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, options.previewModeId, {\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.maxAge !== undefined\n ? ({ maxAge: options.maxAge } as CookieSerializeOptions)\n : undefined),\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, payload, {\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.maxAge !== undefined\n ? ({ maxAge: options.maxAge } as CookieSerializeOptions)\n : undefined),\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n return res\n}\n\nasync function revalidate(\n urlPath: string,\n opts: {\n unstable_onlyGenerated?: boolean\n },\n req: IncomingMessage,\n context: ApiContext\n) {\n if (typeof urlPath !== 'string' || !urlPath.startsWith('/')) {\n throw new Error(\n `Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received ${urlPath}`\n )\n }\n const revalidateHeaders: HeadersInit = {\n [PRERENDER_REVALIDATE_HEADER]: context.previewModeId,\n ...(opts.unstable_onlyGenerated\n ? {\n [PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER]: '1',\n }\n : {}),\n }\n const allowedRevalidateHeaderKeys = [\n ...(context.allowedRevalidateHeaderKeys || []),\n ]\n\n if (context.trustHostHeader || context.dev) {\n allowedRevalidateHeaderKeys.push('cookie')\n }\n\n if (context.trustHostHeader) {\n allowedRevalidateHeaderKeys.push('x-vercel-protection-bypass')\n }\n\n for (const key of Object.keys(req.headers)) {\n if (allowedRevalidateHeaderKeys.includes(key)) {\n revalidateHeaders[key] = req.headers[key] as string\n }\n }\n\n const internalRevalidate =\n routerServerGlobal[RouterServerContextSymbol]?.[context.projectDir]\n ?.revalidate\n\n try {\n // We use the revalidate in router-server if available.\n // If we are operating without router-server (serverless)\n // we must go through network layer with fetch request\n if (internalRevalidate) {\n return await internalRevalidate({\n urlPath,\n revalidateHeaders,\n opts,\n })\n }\n\n if (context.trustHostHeader) {\n const res = await fetch(`https://${req.headers.host}${urlPath}`, {\n method: 'HEAD',\n headers: revalidateHeaders,\n })\n // we use the cache header to determine successful revalidate as\n // a non-200 status code can be returned from a successful revalidate\n // e.g. notFound: true returns 404 status code but is successful\n const cacheHeader =\n res.headers.get('x-vercel-cache') || res.headers.get('x-nextjs-cache')\n\n if (\n cacheHeader?.toUpperCase() !== 'REVALIDATED' &&\n res.status !== 200 &&\n !(res.status === 404 && opts.unstable_onlyGenerated)\n ) {\n throw new Error(`Invalid response ${res.status}`)\n }\n } else {\n throw new Error(\n `Invariant: missing internal router-server-methods this is an internal bug`\n )\n }\n } catch (err: unknown) {\n throw new Error(\n `Failed to revalidate ${urlPath}: ${isError(err) ? err.message : err}`\n )\n }\n}\n\nexport async function apiResolver(\n req: IncomingMessage,\n res: ServerResponse,\n query: any,\n resolverModule: any,\n apiContext: ApiContext,\n propagateError: boolean,\n dev?: boolean,\n page?: string,\n onError?: InstrumentationOnRequestError\n): Promise<void> {\n const apiReq = req as NextApiRequest\n const apiRes = res as NextApiResponse\n\n try {\n if (!resolverModule) {\n res.statusCode = 404\n res.end('Not Found')\n return\n }\n const config: PageConfig = resolverModule.config || {}\n const bodyParser = config.api?.bodyParser !== false\n const responseLimit = config.api?.responseLimit ?? true\n const externalResolver = config.api?.externalResolver || false\n\n // Parsing of cookies\n setLazyProp({ req: apiReq }, 'cookies', getCookieParser(req.headers))\n // Parsing query string\n apiReq.query = query\n // Parsing preview data\n setLazyProp({ req: apiReq }, 'previewData', () =>\n tryGetPreviewData(req, res, apiContext, !!apiContext.multiZoneDraftMode)\n )\n // Checking if preview mode is enabled\n setLazyProp({ req: apiReq }, 'preview', () =>\n apiReq.previewData !== false ? true : undefined\n )\n // Set draftMode to the same value as preview\n setLazyProp({ req: apiReq }, 'draftMode', () => apiReq.preview)\n\n // Parsing of body\n if (bodyParser && !apiReq.body) {\n apiReq.body = await parseBody(\n apiReq,\n config.api && config.api.bodyParser && config.api.bodyParser.sizeLimit\n ? config.api.bodyParser.sizeLimit\n : '1mb'\n )\n }\n\n let contentLength = 0\n const maxContentLength = getMaxContentLength(responseLimit)\n const writeData = apiRes.write\n const endResponse = apiRes.end\n apiRes.write = (...args: any[2]) => {\n contentLength += Buffer.byteLength(args[0] || '')\n return writeData.apply(apiRes, args)\n }\n apiRes.end = (...args: any[2]) => {\n if (args.length && typeof args[0] !== 'function') {\n contentLength += Buffer.byteLength(args[0] || '')\n }\n\n if (responseLimit && contentLength >= maxContentLength) {\n console.warn(\n `API response for ${req.url} exceeds ${bytes.format(\n maxContentLength\n )}. API Routes are meant to respond quickly. https://nextjs.org/docs/messages/api-routes-response-size-limit`\n )\n }\n\n return endResponse.apply(apiRes, args)\n }\n apiRes.status = (statusCode) => sendStatusCode(apiRes, statusCode)\n apiRes.send = (data) => sendData(apiReq, apiRes, data)\n apiRes.json = (data) => sendJson(apiRes, data)\n apiRes.redirect = (statusOrUrl: number | string, url?: string) =>\n redirect(apiRes, statusOrUrl, url)\n apiRes.setDraftMode = (options = { enable: true }) =>\n setDraftMode(apiRes, Object.assign({}, apiContext, options))\n apiRes.setPreviewData = (data, options = {}) =>\n setPreviewData(apiRes, data, Object.assign({}, apiContext, options))\n apiRes.clearPreviewData = (options = {}) =>\n clearPreviewData(apiRes, options)\n apiRes.revalidate = (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => revalidate(urlPath, opts || {}, req, apiContext)\n\n const resolver = interopDefault(resolverModule)\n let wasPiped = false\n\n if (process.env.NODE_ENV !== 'production') {\n // listen for pipe event and don't show resolve warning\n res.once('pipe', () => (wasPiped = true))\n }\n\n const apiRouteResult = await resolver(req, res)\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof apiRouteResult !== 'undefined') {\n if (apiRouteResult instanceof Response) {\n throw new Error(\n 'API route returned a Response object in the Node.js runtime, this is not supported. Please use `runtime: \"edge\"` instead: https://nextjs.org/docs/api-routes/edge-api-routes'\n )\n }\n console.warn(\n `API handler should not return a value, received ${typeof apiRouteResult}.`\n )\n }\n\n if (!externalResolver && !isResSent(res) && !wasPiped) {\n console.warn(\n `API resolved without sending a response for ${req.url}, this may result in stalled requests.`\n )\n }\n }\n } catch (err) {\n await onError?.(\n err,\n {\n method: req.method || 'GET',\n headers: req.headers,\n path: req.url || '/',\n },\n {\n routerKind: 'Pages Router',\n routePath: page || '',\n routeType: 'route',\n revalidateReason: undefined,\n }\n )\n\n if (err instanceof ApiError) {\n sendError(apiRes, err.statusCode, err.message)\n } else {\n if (dev) {\n if (isError(err)) {\n err.page = page\n }\n throw err\n }\n\n console.error(err)\n if (propagateError) {\n throw err\n }\n sendError(apiRes, 500, 'Internal Server Error')\n }\n }\n}\n","/**\n * FNV-1a Hash implementation\n * @author Travis Webb (tjwebb) <me@traviswebb.com>\n *\n * Ported from https://github.com/tjwebb/fnv-plus/blob/master/index.js\n *\n * Simplified, optimized and add modified for 52 bit, which provides a larger hash space\n * and still making use of Javascript's 53-bit integer space.\n */\nexport const fnv1a52 = (str: string) => {\n const len = str.length\n let i = 0,\n t0 = 0,\n v0 = 0x2325,\n t1 = 0,\n v1 = 0x8422,\n t2 = 0,\n v2 = 0x9ce4,\n t3 = 0,\n v3 = 0xcbf2\n\n while (i < len) {\n v0 ^= str.charCodeAt(i++)\n t0 = v0 * 435\n t1 = v1 * 435\n t2 = v2 * 435\n t3 = v3 * 435\n t2 += v0 << 8\n t3 += v1 << 8\n t1 += t0 >>> 16\n v0 = t0 & 65535\n t2 += t1 >>> 16\n v1 = t1 & 65535\n v3 = (t3 + (t2 >>> 16)) & 65535\n v2 = t2 & 65535\n }\n\n return (\n (v3 & 15) * 281474976710656 +\n v2 * 4294967296 +\n v1 * 65536 +\n (v0 ^ (v3 >> 4))\n )\n}\n\nexport const generateETag = (payload: string, weak = false) => {\n const prefix = weak ? 'W/\"' : '\"'\n return (\n prefix + fnv1a52(payload).toString(36) + payload.length.toString(36) + '\"'\n )\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport type RenderResult from './render-result'\nimport type { CacheControl } from './lib/cache-control'\n\nimport { isResSent } from '../shared/lib/utils'\nimport { generateETag } from './lib/etag'\nimport fresh from 'next/dist/compiled/fresh'\nimport { getCacheControlHeader } from './lib/cache-control'\nimport { HTML_CONTENT_TYPE_HEADER } from '../lib/constants'\n\nexport function sendEtagResponse(\n req: IncomingMessage,\n res: ServerResponse,\n etag: string | undefined\n): boolean {\n if (etag) {\n /**\n * The server generating a 304 response MUST generate any of the\n * following header fields that would have been sent in a 200 (OK)\n * response to the same request: Cache-Control, Content-Location, Date,\n * ETag, Expires, and Vary. https://tools.ietf.org/html/rfc7232#section-4.1\n */\n res.setHeader('ETag', etag)\n }\n\n if (fresh(req.headers, { etag })) {\n res.statusCode = 304\n res.end()\n return true\n }\n\n return false\n}\n\nexport async function sendRenderResult({\n req,\n res,\n result,\n generateEtags,\n poweredByHeader,\n cacheControl,\n}: {\n req: IncomingMessage\n res: ServerResponse\n result: RenderResult\n generateEtags: boolean\n poweredByHeader: boolean\n cacheControl: CacheControl | undefined\n}): Promise<void> {\n if (isResSent(res)) {\n return\n }\n\n if (poweredByHeader && result.contentType === HTML_CONTENT_TYPE_HEADER) {\n res.setHeader('X-Powered-By', 'Next.js')\n }\n\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheControl && !res.getHeader('Cache-Control')) {\n res.setHeader('Cache-Control', getCacheControlHeader(cacheControl))\n }\n\n const payload = result.isDynamic ? null : result.toUnchunkedString()\n\n if (generateEtags && payload !== null) {\n const etag = generateETag(payload)\n if (sendEtagResponse(req, res, etag)) {\n return\n }\n }\n\n if (!res.getHeader('Content-Type') && result.contentType) {\n res.setHeader('Content-Type', result.contentType)\n }\n\n if (payload) {\n res.setHeader('Content-Length', Buffer.byteLength(payload))\n }\n\n if (req.method === 'HEAD') {\n res.end(null)\n return\n }\n\n if (payload !== null) {\n res.end(payload)\n return\n }\n\n // Pipe the render result to the response after we get a writer for it.\n await result.pipeToNodeResponse(res)\n}\n","export function interopDefault(mod: any) {\n return mod.default || mod\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport type { PagesAPIRouteDefinition } from '../../route-definitions/pages-api-route-definition'\nimport type { PageConfig } from '../../../types'\nimport type { ParsedUrlQuery } from 'querystring'\nimport { wrapApiHandler, type __ApiPreviewProps } from '../../api-utils'\nimport type { RouteModuleOptions } from '../route-module'\n\nimport { RouteModule, type RouteModuleHandleContext } from '../route-module'\nimport { apiResolver } from '../../api-utils/node/api-resolver'\n\ntype PagesAPIHandleFn = (\n req: IncomingMessage,\n res: ServerResponse\n) => Promise<void>\n\n/**\n * The PagesAPIModule is the type of the module exported by the bundled Pages\n * API module.\n */\nexport type PagesAPIModule = typeof import('../../../build/templates/pages-api')\n\ntype PagesAPIUserlandModule = {\n /**\n * The exported handler method.\n */\n readonly default: PagesAPIHandleFn\n\n /**\n * The exported page config.\n */\n readonly config?: PageConfig\n}\n\ntype PagesAPIRouteHandlerContext = RouteModuleHandleContext & {\n /**\n * The incoming server request in non-edge runtime.\n */\n req?: IncomingMessage\n\n /**\n * The outgoing server response in non-edge runtime.\n */\n res?: ServerResponse\n\n /**\n * The hostname for the request.\n */\n hostname?: string\n\n /**\n * Keys allowed in the revalidate call.\n */\n allowedRevalidateHeaderKeys?: string[]\n\n /**\n * Whether to trust the host header.\n */\n trustHostHeader?: boolean\n\n /**\n * The query for the request.\n */\n query: ParsedUrlQuery\n\n /**\n * The preview props used by the `preview` API.\n */\n previewProps: __ApiPreviewProps\n\n /**\n * True if the server is in development mode.\n */\n dev: boolean\n\n /**\n * Whether errors should be left uncaught to handle\n * higher up\n */\n propagateError: boolean\n\n /**\n * The page that's being rendered.\n */\n page: string\n\n /**\n * The error handler for the request.\n */\n onError?: Parameters<typeof apiResolver>[8]\n\n /**\n * whether multi-zone flag is enabled for draft mode\n */\n multiZoneDraftMode?: boolean\n\n /**\n * The relative project directory\n */\n projectDir: string\n}\n\nexport type PagesAPIRouteModuleOptions = RouteModuleOptions<\n PagesAPIRouteDefinition,\n PagesAPIUserlandModule\n>\n\nexport class PagesAPIRouteModule extends RouteModule<\n PagesAPIRouteDefinition,\n PagesAPIUserlandModule\n> {\n private apiResolverWrapped: typeof apiResolver\n\n constructor(options: PagesAPIRouteModuleOptions) {\n super(options)\n\n if (typeof options.userland.default !== 'function') {\n throw new Error(\n `Page ${options.definition.page} does not export a default function.`\n )\n }\n\n this.apiResolverWrapped = wrapApiHandler(\n options.definition.page,\n apiResolver\n )\n }\n\n /**\n *\n * @param req the incoming server request\n * @param res the outgoing server response\n * @param context the context for the render\n */\n public async render(\n req: IncomingMessage,\n res: ServerResponse,\n context: PagesAPIRouteHandlerContext\n ): Promise<void> {\n const { apiResolverWrapped } = this\n await apiResolverWrapped(\n req,\n res,\n context.query,\n this.userland,\n {\n ...context.previewProps,\n trustHostHeader: context.trustHostHeader,\n allowedRevalidateHeaderKeys: context.allowedRevalidateHeaderKeys,\n hostname: context.hostname,\n multiZoneDraftMode: context.multiZoneDraftMode,\n dev: context.dev,\n projectDir: context.projectDir,\n },\n context.propagateError,\n context.dev,\n context.page,\n context.onError\n )\n }\n}\n\nexport default PagesAPIRouteModule\n"],"names":["Object","Date","Boolean","encodeURIComponent","Map","decodeURIComponent","Number","Symbol","Array","n","r","JSON","e","i","Math","isNaN","parseFloat","parseInt","__dirname","__nccwpck_require__","TypeError","u","String","s","a","isFinite","NaN","o","RegExp","h","HTML_CONTENT_TYPE_HEADER","JSON_CONTENT_TYPE_HEADER","NEXT_QUERY_PARAM_PREFIX","NEXT_INTERCEPTION_MARKER_PREFIX","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","RSC_PREFETCH_SUFFIX","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","NEXT_DATA_SUFFIX","NEXT_META_SUFFIX","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","CACHE_ONE_YEAR","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","formatDynamicImportPath","dir","filePath","absoluteFilePath","path","pathToFileURL","toString","wrapApiHandler","page","handler","args","getTracer","setRootSpanAttribute","trace","NodeSpan","spanName","sendStatusCode","res","statusCode","redirect","statusOrUrl","url","Error","writeHead","Location","write","end","checkIsOnDemandRevalidate","req","previewProps","headers","HeadersAdapter","isOnDemandRevalidate","previewModeId","get","revalidateOnlyGenerated","has","COOKIE_NAME_PRERENDER_BYPASS","COOKIE_NAME_PRERENDER_DATA","RESPONSE_LIMIT_DEFAULT","SYMBOL_PREVIEW_DATA","SYMBOL_CLEARED_COOKIES","clearPreviewData","options","serialize","require","previous","getHeader","setHeader","isArray","expires","httpOnly","sameSite","secure","process","undefined","defineProperty","value","enumerable","ApiError","constructor","message","sendError","statusMessage","setLazyProp","prop","getter","opts","configurable","optsReset","writable","set","tryGetPreviewData","multiZoneDraftMode","cookies","encryptedPreviewData","RequestCookies","tokenPreviewData","data","jsonwebtoken","verify","previewModeSigningKey","decryptWithSecret","decryptedPreviewData","Buffer","from","previewModeEncryptionKey","parse","CIPHER_ALGORITHM","encryptWithSecret","secret","iv","crypto","salt","key","cipher","encrypted","concat","update","final","tag","getAuthTag","encryptedData","buffer","slice","CIPHER_SALT_LENGTH","decipher","setAuthTag","nodeFs","existsSync","fs","readFile","readFileSync","writeFile","f","d","mkdir","recursive","stat","NextNodeServerSpan","ReflectAdapter","target","receiver","Reflect","bind","deleteProperty","ReadonlyHeadersError","callable","Headers","Proxy","lowercased","toLowerCase","original","keys","find","seal","merge","join","append","name","existing","push","delete","forEach","callbackfn","thisArg","entries","call","values","iterator","module","t","Set","c","console","COMPILER_NAMES","client","server","edgeServer","parseReqUrl","parsedUrl","parseUrl","parsed","URL","query","searchParams","getAll","length","hash","search","pathname","href","host","hostname","auth","protocol","slashes","port","cache","WeakMap","normalizeLocalePath","locales","detectedLocale","lowercasedLocales","map","locale","segments","split","segment","index","indexOf","ensureLeadingSlash","startsWith","normalizeAppPath","route","reduce","endsWith","normalizeRscURL","replace","INTERCEPTION_ROUTE_MARKERS","isInterceptionRouteAppPath","m","TEST_ROUTE","TEST_STRICT_ROUTE","isDynamicRoute","strict","extractInterceptionRouteInformation","interceptingRoute","marker","interceptedRoute","splitInterceptingRoute","test","parsePath","hashIndex","queryIndex","hasQuery","substring","pathHasPrefix","prefix","removePathPrefix","withoutPrefix","reHasRegExp","reReplaceRegExp","escapeStringRegexp","str","removeTrailingSlash","PARAMETER_PATTERN","parseMatchedParameter","param","optional","repeat","getSafeKeyFromSegment","pattern","interceptionMarker","getSafeRouteKey","routeKeys","keyPrefix","backreferenceDuplicateKeys","cleanedKey","invalidKey","duplicateKey","interceptionPrefix","SP","performance","every","method","DecodeError","NormalizeError","PARAM_SEPARATOR","hasAdjacentParameterIssues","normalizeAdjacentParameters","normalized","safePathToRegexp","pathToRegexp","needsNormalization","routeToUse","error","normalizedRoute","retryError","safeCompile","compile","getRouteMatcher","matcherFn","re","groups","routeMatch","exec","decode","params","group","match","pos","entry","result","cleaned","item","searchParamsToUrlQuery","stringifyUrlQueryParam","getCookieParser","cookie","parseCookieFn","unescapeSegments","compileNonPath","includes","validate","normalizeNextQueryParam","decodeQueryPathParameter","slashedProtocols","dynamicParamTypesSchema","segmentSchema","flightRouterStateSchema","isInterceptionRouteRewrite","filterInternalQuery","paramKeys","isNextQueryPrefix","isNextInterceptionMarkerPrefix","detectDomainLocale","domainItems","domain","defaultLocale","some","getHostname","normalizeDataPath","NEXT_REQUEST_META","for","getRequestMeta","meta","normalizePagePath","posix","resolvedPage","normalize","STATIC_METADATA_IMAGES","icon","filename","extensions","apple","openGraph","twitter","getExtensionRegexString","staticExtensions","dynamicExtensions","DetachedPromise","resolve","reject","promise","Promise","rej","Batcher","cacheKeyFn","schedulerFn","fn","pending","create","batch","cacheKey","err","scheduleOnNextTick","cb","then","nextTick","CachedRouteKind","IncrementalCacheKind","voidCatch","Uint8Array","encoder","TextEncoder","streamFromString","ReadableStream","start","controller","enqueue","encode","close","streamFromBuffer","chunk","streamToString","stream","signal","decoder","TextDecoder","fatal","string","aborted","addPathPrefix","addPathSuffix","suffix","REGEX_LOCALHOST_HOSTNAME","parseURL","base","Internal","NextURL","input","baseOrOpts","basePath","analyze","info","getNextPathnameInfo","i18n","trailingSlash","nextConfig","pathnameNoDataPrefix","paths","buildId","parseData","i18nProvider","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","domainLocale","domains","formatPathname","addLocale","ignorePrefix","lower","forceLocale","formatSearch","origin","password","username","toJSON","clone","Request","ResponseAbortedName","ResponseAborted","clientComponentLoadStart","clientComponentLoadTimes","clientComponentLoadCount","isAbortError","pipeToNodeResponse","readable","waitUntilForEnd","errored","destroyed","createAbortController","response","AbortController","once","writableFinished","abort","writer","createWriterFromResponse","started","drained","onDrain","on","off","finished","WritableStream","globalThis","NEXT_OTEL_PERFORMANCE_PREFIX","metrics","getClientComponentLoaderMetrics","reset","measure","flushHeaders","ok","flush","cause","destroy","pipeTo","InvariantError","RenderResult","EMPTY","metadata","contentType","fromStatic","waitUntil","assignMetadata","assign","isNull","isDynamic","toUnchunkedString","isBuffer","chainStreams","streams","TransformStream","preventClose","nextStream","lastStream","catch","coerce","unshift","RouteKind","fromResponseCacheEntry","cacheEntry","kind","html","pageData","status","postponed","rscData","segmentData","toResponseCacheEntry","isMiss","isStale","cacheControl","ResponseCache","minimal_mode","batcher","responseGenerator","context","hasResolved","previousCacheEntry","incrementalCache","isFallback","isRoutePPREnabled","prom","previousCacheItem","expiresAt","now","routeKindToIncrementalCacheKind","routeKind","resolved","cachedResponse","isPrefetch","isRevalidating","resolveValue","newRevalidate","min","max","revalidate","newExpire","expire","MultiFileWriter","tasks","findOrCreateTask","directory","task","wait","all","flatMap","FileSystemCache","debug","NEXT_PRIVATE_DEBUG_CACHE","ctx","flushToDisk","serverDistDir","revalidatedTags","maxMemoryCacheSize","memoryCache","log","getMemoryCache","resetRequestCache","revalidateTag","tags","tagsManifest","getFilePath","fileData","mtime","lastModified","getTime","body","fetchIdx","fetchUrl","parsedData","storedTags","fetchCache","maybeSegmentData","segmentPaths","segmentsDir","segmentPath","segmentDataFilePath","cacheTags","tagsHeader","combinedTags","softTags","stringify","isAppPath","htmlPath","toRoute","IncrementalCache","dev","minimalMode","requestHeaders","getPrerenderManifest","fetchCacheKeyPrefix","CurCacheHandler","allowedRevalidateHeaderKeys","locks","hasCustomCacheHandler","cacheHandlersSymbol","_globalThis","globalCacheHandler","FetchCache","__NEXT_TEST_MAX_ISR_CACHE","disableForTestmode","NEXT_PRIVATE_TEST_PROXY","prerenderManifest","cacheControls","SharedCacheControls","preview","getPreviouslyRevalidatedTags","cacheHandler","_requestHeaders","calculateRevalidate","fromTime","floor","timeOrigin","initialRevalidateSeconds","_getPathname","lock","generateCacheKey","init","bodyChunks","_ogBody","getReader","readableBody","chunks","total","arr","arrayBuffer","offset","formData","val","text","blob","Blob","type","fromEntries","cacheString","mode","credentials","referrer","referrerPolicy","integrity","createHash","digest","cacheData","revalidateAfter","workUnitStore","workUnitAsyncStorage","resumeDataCache","getRenderResumeDataCache","memoryCacheData","fetch","workStore","workAsyncStorage","pendingRevalidatedTags","age","notFoundRoutes","prerenderResumeDataCache","getPrerenderResumeDataCache","itemSize","isImplicitBuildTimeCache","warningText","warn","handlersSymbol","handlersMapSymbol","handlersSetSymbol","reference","interopDefault","mod","default","RouterServerContextSymbol","routerServerGlobal","dynamicImportEsmDefault","id","RouteModule","userland","definition","distDir","projectDir","isDev","instrumentationOnRequestError","absoluteProjectDir","cwd","loadManifests","srcPage","loadManifestFromRelativePath","normalizedPagePath","routesManifest","buildManifest","reactLoadableManifest","nextFontManifest","clientReferenceManifest","serverActionsManifest","subresourceIntegrityManifest","serverFilesManifest","dynamicCssManifest","manifest","shouldCache","isAppRouter","handleMissing","isStaticMetadataRoute","isAppRouteRoute","isMetadataRouteFile","appDirRelativePath","pageExtensions","strictlyMatchExtensions","trailingMatcher","suffixMatcher","metadataRouteFilesRegex","normalizedAppDirRelativePath","useEval","skipParse","__RSC_MANIFEST","interceptionRoutePatterns","rewrites","beforeFiles","filter","rewrite","regex","loadCustomCacheHandlers","cacheHandlers","experimental","initializeCacheHandlers","fallback","DefaultCache","DefaultCacheHandler","RemoteCache","add","getIncrementalCache","CacheHandler","cacheMaxMemorySize","isrFlushToDisk","onRequestError","errorContext","routerServerContext","logErrorWithOriginalStack","prepare","localeResult","previewData","relative","absoluteDistDir","ensureInstrumentationRegistered","manifests","isNextDataRequest","originalPathname","originalQuery","pageIsDynamic","serverUtils","getServerUtils","caseSensitive","defaultRouteRegex","dynamicRouteMatcher","defaultRouteMatches","getNamedRouteRegex","getNamedParametrizedRoute","prefixRouteKeys","includeSuffix","includePrefix","routeKey","j","fromCharCode","hasInterceptionMarker","paramMatches","namedParameterizedRoute","namedRegex","excludeOptionalTrailingSlash","getRouteRegex","parameterizedRoute","getParametrizedRoute","groupIndex","markerMatch","handleRewrites","rewriteParams","fsPathname","checkRewrite","matcher","getPathMatch","regexp","delimiter","sensitive","regexpToFunction","regexModifier","source","flags","removeUnnamedParams","missing","hasParams","matchHas","hasMatch","hasItem","getSafeParamName","paramName","newParamName","charCode","charCodeAt","matches","groupKey","stateHeader","getSelectedParams","currentTree","parallelRoute","isDynamicParameter","segmentValue","parseAndValidateFlightRouterState","state","assert","parsedDestination","destQuery","prepareDestination","destHostnameCompiler","newUrl","parseDestination","escaped","destination","parseRelativeUrl","parseQuery","globalBase","resolvedBase","parsedURL","destHostname","destPath","destParams","destPathParamKeys","destHostnameParamKeys","destPathCompiler","strOrArray","appendParamsToQuery","actualValue","nextInternalLocale","dynamicParams","afterFiles","matchesPage","fsPathnameNoSlash","normalizeQueryParams","routeParamKeys","normalizedKey","v","getParamsFromRouteMatches","routeMatchesHeader","routeMatches","obj","URLSearchParams","keyName","normalizeDynamicRouteParams","ignoreMissingOptional","hasValidParams","defaultValue","isOptional","isDefaultValue","defaultVal","normalizeCdnUrl","_parsedUrl","formatUrl","urlObj","querystring","interpolateDynamicPath","paramValue","builtParam","replaceAll","__NEXT_TRAILING_SLASH","addRequestMeta","request","rewriteParamKeys","paramsMatch","paramsResult","combinedParamKeys","originalValue","queryValue","queryResult","paramsToInterpolate","isDraftMode","config","normalizedSrcPage","resolvedPathname","seg","char","_","getResponseCache","responseCache","handleResponse","purpose","isError","parseBody","limit","parameters","encoding","charset","getRawBody","parseJson","qs","isValidData","urlPath","revalidateHeaders","unstable_onlyGenerated","trustHostHeader","internalRevalidate","cacheHeader","toUpperCase","apiResolver","resolverModule","apiContext","propagateError","onError","bodyParser","api","responseLimit","externalResolver","apiReq","sizeLimit","contentLength","maxContentLength","bytes","writeData","apiRes","endResponse","byteLength","apply","send","sendData","removeHeader","Stream","pipe","isJSONLike","stringifiedBody","etag","generateETag","payload","weak","fnv1a52","len","t0","v0","t1","v1","t2","v2","t3","v3","fresh","json","setDraftMode","enable","setPreviewData","sign","algorithm","maxAge","expiresIn","resolver","routerKind","routePath","routeType","revalidateReason","PagesAPIRouteModule","apiResolverWrapped","render"],"mappings":"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","ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]}
1
+ {"version":3,"file":"pages-api-turbo.runtime.prod.js","sources":["webpack://next/./dist/compiled/@edge-runtime/cookies/index.js","webpack://next/./dist/compiled/bytes/index.js","webpack://next/./dist/compiled/content-type/index.js","webpack://next/./dist/compiled/cookie/index.js","webpack://next/./dist/compiled/fresh/index.js","webpack://next/./dist/compiled/path-to-regexp/index.js","webpack://next/./dist/src/lib/constants.ts","webpack://next/./dist/src/lib/format-dynamic-import-path.ts","webpack://next/./dist/src/server/api-utils/index.ts","webpack://next/./dist/src/server/api-utils/node/try-get-preview-data.ts","webpack://next/./dist/src/server/crypto-utils.ts","webpack://next/./dist/src/server/lib/node-fs-methods.ts","webpack://next/./dist/src/server/lib/trace/constants.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/reflect.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/headers.ts","webpack://next/./dist/src/shared/lib/isomorphic/path.js","webpack://next/./dist/src/shared/lib/modern-browserslist-target.js","webpack://next/./dist/compiled/superstruct/index.cjs","webpack://next/webpack/runtime/compat_get_default_export","webpack://next/webpack/runtime/create_fake_namespace_object","webpack://next/webpack/runtime/define_property_getters","webpack://next/webpack/runtime/has_own_property","webpack://next/webpack/runtime/make_namespace_object","webpack://next/./dist/src/shared/lib/constants.ts","webpack://next/./dist/src/lib/url.ts","webpack://next/./dist/src/shared/lib/i18n/normalize-locale-path.ts","webpack://next/./dist/src/shared/lib/page-path/ensure-leading-slash.ts","webpack://next/./dist/src/shared/lib/router/utils/app-paths.ts","webpack://next/./dist/src/shared/lib/segment.ts","webpack://next/./dist/src/shared/lib/router/utils/interception-routes.ts","webpack://next/./dist/src/shared/lib/router/utils/is-dynamic.ts","webpack://next/./dist/src/shared/lib/router/utils/parse-path.ts","webpack://next/./dist/src/shared/lib/router/utils/path-has-prefix.ts","webpack://next/./dist/src/shared/lib/router/utils/remove-path-prefix.ts","webpack://next/./dist/src/shared/lib/escape-regexp.ts","webpack://next/./dist/src/shared/lib/router/utils/remove-trailing-slash.ts","webpack://next/./dist/src/shared/lib/router/utils/route-regex.ts","webpack://next/./dist/src/shared/lib/utils.ts","webpack://next/./dist/src/lib/route-pattern-normalizer.ts","webpack://next/./dist/src/shared/lib/router/utils/route-match-utils.ts","webpack://next/./dist/src/shared/lib/router/utils/route-matcher.ts","webpack://next/./dist/src/shared/lib/router/utils/querystring.ts","webpack://next/./dist/src/server/api-utils/get-cookie-parser.ts","webpack://next/./dist/src/shared/lib/router/utils/prepare-destination.ts","webpack://next/./dist/src/server/web/utils.ts","webpack://next/./dist/src/server/lib/decode-query-path-parameter.ts","webpack://next/./dist/src/shared/lib/router/utils/format-url.ts","webpack://next/./dist/src/server/app-render/types.ts","webpack://next/./dist/src/lib/generate-interception-routes-rewrites.ts","webpack://next/./dist/src/client/components/app-router-headers.ts","webpack://next/./dist/src/server/server-utils.ts","webpack://next/./dist/src/shared/lib/i18n/detect-domain-locale.ts","webpack://next/./dist/src/shared/lib/get-hostname.ts","webpack://next/./dist/src/shared/lib/page-path/normalize-data-path.ts","webpack://next/./dist/src/server/request-meta.ts","webpack://next/./dist/src/shared/lib/page-path/normalize-page-path.ts","webpack://next/./dist/src/lib/metadata/is-metadata-route.ts","webpack://next/./dist/src/lib/detached-promise.ts","webpack://next/./dist/src/lib/batcher.ts","webpack://next/./dist/src/lib/scheduler.ts","webpack://next/./dist/src/server/response-cache/types.ts","webpack://next/./dist/src/server/stream-utils/node-web-streams-helper.ts","webpack://next/./dist/src/server/stream-utils/encoded-tags.ts","webpack://next/./dist/src/shared/lib/router/utils/add-path-prefix.ts","webpack://next/./dist/src/shared/lib/router/utils/add-path-suffix.ts","webpack://next/./dist/src/server/web/next-url.ts","webpack://next/./dist/src/shared/lib/router/utils/get-next-pathname-info.ts","webpack://next/./dist/src/shared/lib/router/utils/format-next-pathname-info.ts","webpack://next/./dist/src/shared/lib/router/utils/add-locale.ts","webpack://next/./dist/src/server/web/spec-extension/request.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/next-request.ts","webpack://next/./dist/src/server/client-component-renderer-logger.ts","webpack://next/./dist/src/server/pipe-readable.ts","webpack://next/./dist/src/shared/lib/invariant-error.ts","webpack://next/./dist/src/server/render-result.ts","webpack://next/./dist/src/server/route-kind.ts","webpack://next/./dist/src/server/response-cache/utils.ts","webpack://next/./dist/src/server/response-cache/index.ts","webpack://next/./dist/src/lib/multi-file-writer.ts","webpack://next/./dist/src/server/lib/incremental-cache/file-system-cache.ts","webpack://next/./dist/src/server/lib/to-route.ts","webpack://next/./dist/src/server/lib/incremental-cache/index.ts","webpack://next/./dist/src/server/use-cache/handlers.ts","webpack://next/./dist/src/server/app-render/interop-default.ts","webpack://next/./dist/src/server/lib/router-utils/router-server-context.ts","webpack://next/./dist/src/server/route-modules/route-module.ts","webpack://next/./dist/src/lib/is-app-route-route.ts","webpack://next/./dist/src/shared/lib/page-path/normalize-path-sep.ts","webpack://next/./dist/src/shared/lib/router/utils/path-match.ts","webpack://next/./dist/src/client/components/router-reducer/compute-changed-path.ts","webpack://next/./dist/src/server/app-render/parse-and-validate-flight-router-state.tsx","webpack://next/./dist/src/shared/lib/router/utils/parse-url.ts","webpack://next/./dist/src/shared/lib/router/utils/parse-relative-url.ts","webpack://next/./dist/src/server/lib/router-utils/decode-path-params.ts","webpack://next/./dist/src/shared/lib/router/utils/escape-path-delimiters.ts","webpack://next/./dist/src/lib/is-error.ts","webpack://next/./dist/src/server/api-utils/node/parse-body.ts","webpack://next/./dist/src/server/api-utils/node/api-resolver.ts","webpack://next/./dist/src/server/lib/etag.ts","webpack://next/./dist/src/server/send-payload.ts","webpack://next/./dist/src/lib/interop-default.ts","webpack://next/./dist/src/server/route-modules/pages-api/module.ts"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/index.ts\nvar src_exports = {};\n__export(src_exports, {\n RequestCookies: () => RequestCookies,\n ResponseCookies: () => ResponseCookies,\n parseCookie: () => parseCookie,\n parseSetCookie: () => parseSetCookie,\n stringifyCookie: () => stringifyCookie\n});\nmodule.exports = __toCommonJS(src_exports);\n\n// src/serialize.ts\nfunction stringifyCookie(c) {\n var _a;\n const attrs = [\n \"path\" in c && c.path && `Path=${c.path}`,\n \"expires\" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === \"number\" ? new Date(c.expires) : c.expires).toUTCString()}`,\n \"maxAge\" in c && typeof c.maxAge === \"number\" && `Max-Age=${c.maxAge}`,\n \"domain\" in c && c.domain && `Domain=${c.domain}`,\n \"secure\" in c && c.secure && \"Secure\",\n \"httpOnly\" in c && c.httpOnly && \"HttpOnly\",\n \"sameSite\" in c && c.sameSite && `SameSite=${c.sameSite}`,\n \"partitioned\" in c && c.partitioned && \"Partitioned\",\n \"priority\" in c && c.priority && `Priority=${c.priority}`\n ].filter(Boolean);\n const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : \"\")}`;\n return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join(\"; \")}`;\n}\nfunction parseCookie(cookie) {\n const map = /* @__PURE__ */ new Map();\n for (const pair of cookie.split(/; */)) {\n if (!pair)\n continue;\n const splitAt = pair.indexOf(\"=\");\n if (splitAt === -1) {\n map.set(pair, \"true\");\n continue;\n }\n const [key, value] = [pair.slice(0, splitAt), pair.slice(splitAt + 1)];\n try {\n map.set(key, decodeURIComponent(value != null ? value : \"true\"));\n } catch {\n }\n }\n return map;\n}\nfunction parseSetCookie(setCookie) {\n if (!setCookie) {\n return void 0;\n }\n const [[name, value], ...attributes] = parseCookie(setCookie);\n const {\n domain,\n expires,\n httponly,\n maxage,\n path,\n samesite,\n secure,\n partitioned,\n priority\n } = Object.fromEntries(\n attributes.map(([key, value2]) => [\n key.toLowerCase().replace(/-/g, \"\"),\n value2\n ])\n );\n const cookie = {\n name,\n value: decodeURIComponent(value),\n domain,\n ...expires && { expires: new Date(expires) },\n ...httponly && { httpOnly: true },\n ...typeof maxage === \"string\" && { maxAge: Number(maxage) },\n path,\n ...samesite && { sameSite: parseSameSite(samesite) },\n ...secure && { secure: true },\n ...priority && { priority: parsePriority(priority) },\n ...partitioned && { partitioned: true }\n };\n return compact(cookie);\n}\nfunction compact(t) {\n const newT = {};\n for (const key in t) {\n if (t[key]) {\n newT[key] = t[key];\n }\n }\n return newT;\n}\nvar SAME_SITE = [\"strict\", \"lax\", \"none\"];\nfunction parseSameSite(string) {\n string = string.toLowerCase();\n return SAME_SITE.includes(string) ? string : void 0;\n}\nvar PRIORITY = [\"low\", \"medium\", \"high\"];\nfunction parsePriority(string) {\n string = string.toLowerCase();\n return PRIORITY.includes(string) ? string : void 0;\n}\nfunction splitCookiesString(cookiesString) {\n if (!cookiesString)\n return [];\n var cookiesStrings = [];\n var pos = 0;\n var start;\n var ch;\n var lastComma;\n var nextStart;\n var cookiesSeparatorFound;\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1;\n }\n return pos < cookiesString.length;\n }\n function notSpecialChar() {\n ch = cookiesString.charAt(pos);\n return ch !== \"=\" && ch !== \";\" && ch !== \",\";\n }\n while (pos < cookiesString.length) {\n start = pos;\n cookiesSeparatorFound = false;\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos);\n if (ch === \",\") {\n lastComma = pos;\n pos += 1;\n skipWhitespace();\n nextStart = pos;\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1;\n }\n if (pos < cookiesString.length && cookiesString.charAt(pos) === \"=\") {\n cookiesSeparatorFound = true;\n pos = nextStart;\n cookiesStrings.push(cookiesString.substring(start, lastComma));\n start = pos;\n } else {\n pos = lastComma + 1;\n }\n } else {\n pos += 1;\n }\n }\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length));\n }\n }\n return cookiesStrings;\n}\n\n// src/request-cookies.ts\nvar RequestCookies = class {\n constructor(requestHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n this._headers = requestHeaders;\n const header = requestHeaders.get(\"cookie\");\n if (header) {\n const parsed = parseCookie(header);\n for (const [name, value] of parsed) {\n this._parsed.set(name, { name, value });\n }\n }\n }\n [Symbol.iterator]() {\n return this._parsed[Symbol.iterator]();\n }\n /**\n * The amount of cookies received from the client\n */\n get size() {\n return this._parsed.size;\n }\n get(...args) {\n const name = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(name);\n }\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed);\n if (!args.length) {\n return all.map(([_, value]) => value);\n }\n const name = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter(([n]) => n === name).map(([_, value]) => value);\n }\n has(name) {\n return this._parsed.has(name);\n }\n set(...args) {\n const [name, value] = args.length === 1 ? [args[0].name, args[0].value] : args;\n const map = this._parsed;\n map.set(name, { name, value });\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value2]) => stringifyCookie(value2)).join(\"; \")\n );\n return this;\n }\n /**\n * Delete the cookies matching the passed name or names in the request.\n */\n delete(names) {\n const map = this._parsed;\n const result = !Array.isArray(names) ? map.delete(names) : names.map((name) => map.delete(name));\n this._headers.set(\n \"cookie\",\n Array.from(map).map(([_, value]) => stringifyCookie(value)).join(\"; \")\n );\n return result;\n }\n /**\n * Delete all the cookies in the cookies in the request.\n */\n clear() {\n this.delete(Array.from(this._parsed.keys()));\n return this;\n }\n /**\n * Format the cookies in the request as a string for logging\n */\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map((v) => `${v.name}=${encodeURIComponent(v.value)}`).join(\"; \");\n }\n};\n\n// src/response-cookies.ts\nvar ResponseCookies = class {\n constructor(responseHeaders) {\n /** @internal */\n this._parsed = /* @__PURE__ */ new Map();\n var _a, _b, _c;\n this._headers = responseHeaders;\n const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get(\"set-cookie\")) != null ? _c : [];\n const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);\n for (const cookieString of cookieStrings) {\n const parsed = parseSetCookie(cookieString);\n if (parsed)\n this._parsed.set(parsed.name, parsed);\n }\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.\n */\n get(...args) {\n const key = typeof args[0] === \"string\" ? args[0] : args[0].name;\n return this._parsed.get(key);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.\n */\n getAll(...args) {\n var _a;\n const all = Array.from(this._parsed.values());\n if (!args.length) {\n return all;\n }\n const key = typeof args[0] === \"string\" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;\n return all.filter((c) => c.name === key);\n }\n has(name) {\n return this._parsed.has(name);\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.\n */\n set(...args) {\n const [name, value, cookie] = args.length === 1 ? [args[0].name, args[0].value, args[0]] : args;\n const map = this._parsed;\n map.set(name, normalizeCookie({ name, value, ...cookie }));\n replace(map, this._headers);\n return this;\n }\n /**\n * {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.\n */\n delete(...args) {\n const [name, options] = typeof args[0] === \"string\" ? [args[0]] : [args[0].name, args[0]];\n return this.set({ ...options, name, value: \"\", expires: /* @__PURE__ */ new Date(0) });\n }\n [Symbol.for(\"edge-runtime.inspect.custom\")]() {\n return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;\n }\n toString() {\n return [...this._parsed.values()].map(stringifyCookie).join(\"; \");\n }\n};\nfunction replace(bag, headers) {\n headers.delete(\"set-cookie\");\n for (const [, value] of bag) {\n const serialized = stringifyCookie(value);\n headers.append(\"set-cookie\", serialized);\n }\n}\nfunction normalizeCookie(cookie = { name: \"\", value: \"\" }) {\n if (typeof cookie.expires === \"number\") {\n cookie.expires = new Date(cookie.expires);\n }\n if (cookie.maxAge) {\n cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);\n }\n if (cookie.path === null || cookie.path === void 0) {\n cookie.path = \"/\";\n }\n return cookie;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n RequestCookies,\n ResponseCookies,\n parseCookie,\n parseSetCookie,\n stringifyCookie\n});\n","(()=>{\"use strict\";var e={56:e=>{\n/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\ne.exports=bytes;e.exports.format=format;e.exports.parse=parse;var r=/\\B(?=(\\d{3})+(?!\\d))/g;var a=/(?:\\.0*|(\\.[^0]+)0+)$/;var t={b:1,kb:1<<10,mb:1<<20,gb:1<<30,tb:Math.pow(1024,4),pb:Math.pow(1024,5)};var i=/^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb|pb)$/i;function bytes(e,r){if(typeof e===\"string\"){return parse(e)}if(typeof e===\"number\"){return format(e,r)}return null}function format(e,i){if(!Number.isFinite(e)){return null}var n=Math.abs(e);var o=i&&i.thousandsSeparator||\"\";var s=i&&i.unitSeparator||\"\";var f=i&&i.decimalPlaces!==undefined?i.decimalPlaces:2;var u=Boolean(i&&i.fixedDecimals);var p=i&&i.unit||\"\";if(!p||!t[p.toLowerCase()]){if(n>=t.pb){p=\"PB\"}else if(n>=t.tb){p=\"TB\"}else if(n>=t.gb){p=\"GB\"}else if(n>=t.mb){p=\"MB\"}else if(n>=t.kb){p=\"KB\"}else{p=\"B\"}}var b=e/t[p.toLowerCase()];var l=b.toFixed(f);if(!u){l=l.replace(a,\"$1\")}if(o){l=l.split(\".\").map((function(e,a){return a===0?e.replace(r,o):e})).join(\".\")}return l+s+p}function parse(e){if(typeof e===\"number\"&&!isNaN(e)){return e}if(typeof e!==\"string\"){return null}var r=i.exec(e);var a;var n=\"b\";if(!r){a=parseInt(e,10);n=\"b\"}else{a=parseFloat(r[1]);n=r[4].toLowerCase()}return Math.floor(t[n]*a)}}};var r={};function __nccwpck_require__(a){var t=r[a];if(t!==undefined){return t.exports}var i=r[a]={exports:{}};var n=true;try{e[a](i,i.exports,__nccwpck_require__);n=false}finally{if(n)delete r[a]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var a=__nccwpck_require__(56);module.exports=a})();","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * content-type\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */var t=/; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *(\"(?:[\\u000b\\u0020\\u0021\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u000b\\u0020-\\u00ff])*\"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g;var a=/^[\\u000b\\u0020-\\u007e\\u0080-\\u00ff]+$/;var n=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;var i=/\\\\([\\u000b\\u0020-\\u00ff])/g;var o=/([\\\\\"])/g;var f=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+\\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;r.format=format;r.parse=parse;function format(e){if(!e||typeof e!==\"object\"){throw new TypeError(\"argument obj is required\")}var r=e.parameters;var t=e.type;if(!t||!f.test(t)){throw new TypeError(\"invalid type\")}var a=t;if(r&&typeof r===\"object\"){var i;var o=Object.keys(r).sort();for(var u=0;u<o.length;u++){i=o[u];if(!n.test(i)){throw new TypeError(\"invalid parameter name\")}a+=\"; \"+i+\"=\"+qstring(r[i])}}return a}function parse(e){if(!e){throw new TypeError(\"argument string is required\")}var r=typeof e===\"object\"?getcontenttype(e):e;if(typeof r!==\"string\"){throw new TypeError(\"argument string is required to be a string\")}var a=r.indexOf(\";\");var n=a!==-1?r.substr(0,a).trim():r.trim();if(!f.test(n)){throw new TypeError(\"invalid media type\")}var o=new ContentType(n.toLowerCase());if(a!==-1){var u;var p;var s;t.lastIndex=a;while(p=t.exec(r)){if(p.index!==a){throw new TypeError(\"invalid parameter format\")}a+=p[0].length;u=p[1].toLowerCase();s=p[2];if(s[0]==='\"'){s=s.substr(1,s.length-2).replace(i,\"$1\")}o.parameters[u]=s}if(a!==r.length){throw new TypeError(\"invalid parameter format\")}}return o}function getcontenttype(e){var r;if(typeof e.getHeader===\"function\"){r=e.getHeader(\"content-type\")}else if(typeof e.headers===\"object\"){r=e.headers&&e.headers[\"content-type\"]}if(typeof r!==\"string\"){throw new TypeError(\"content-type header is missing from object\")}return r}function qstring(e){var r=String(e);if(n.test(r)){return r}if(r.length>0&&!a.test(r)){throw new TypeError(\"invalid parameter value\")}return'\"'+r.replace(o,\"\\\\$1\")+'\"'}function ContentType(e){this.parameters=Object.create(null);this.type=e}})();module.exports=e})();","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var r=e;\n/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */r.parse=parse;r.serialize=serialize;var i=decodeURIComponent;var t=encodeURIComponent;var a=/; */;var n=/^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;function parse(e,r){if(typeof e!==\"string\"){throw new TypeError(\"argument str must be a string\")}var t={};var n=r||{};var o=e.split(a);var s=n.decode||i;for(var p=0;p<o.length;p++){var f=o[p];var u=f.indexOf(\"=\");if(u<0){continue}var v=f.substr(0,u).trim();var c=f.substr(++u,f.length).trim();if('\"'==c[0]){c=c.slice(1,-1)}if(undefined==t[v]){t[v]=tryDecode(c,s)}}return t}function serialize(e,r,i){var a=i||{};var o=a.encode||t;if(typeof o!==\"function\"){throw new TypeError(\"option encode is invalid\")}if(!n.test(e)){throw new TypeError(\"argument name is invalid\")}var s=o(r);if(s&&!n.test(s)){throw new TypeError(\"argument val is invalid\")}var p=e+\"=\"+s;if(null!=a.maxAge){var f=a.maxAge-0;if(isNaN(f)||!isFinite(f)){throw new TypeError(\"option maxAge is invalid\")}p+=\"; Max-Age=\"+Math.floor(f)}if(a.domain){if(!n.test(a.domain)){throw new TypeError(\"option domain is invalid\")}p+=\"; Domain=\"+a.domain}if(a.path){if(!n.test(a.path)){throw new TypeError(\"option path is invalid\")}p+=\"; Path=\"+a.path}if(a.expires){if(typeof a.expires.toUTCString!==\"function\"){throw new TypeError(\"option expires is invalid\")}p+=\"; Expires=\"+a.expires.toUTCString()}if(a.httpOnly){p+=\"; HttpOnly\"}if(a.secure){p+=\"; Secure\"}if(a.sameSite){var u=typeof a.sameSite===\"string\"?a.sameSite.toLowerCase():a.sameSite;switch(u){case true:p+=\"; SameSite=Strict\";break;case\"lax\":p+=\"; SameSite=Lax\";break;case\"strict\":p+=\"; SameSite=Strict\";break;case\"none\":p+=\"; SameSite=None\";break;default:throw new TypeError(\"option sameSite is invalid\")}}return p}function tryDecode(e,r){try{return r(e)}catch(r){return e}}})();module.exports=e})();","(()=>{\"use strict\";var e={695:e=>{\n/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\nvar r=/(?:^|,)\\s*?no-cache\\s*?(?:,|$)/;e.exports=fresh;function fresh(e,a){var t=e[\"if-modified-since\"];var s=e[\"if-none-match\"];if(!t&&!s){return false}var i=e[\"cache-control\"];if(i&&r.test(i)){return false}if(s&&s!==\"*\"){var f=a[\"etag\"];if(!f){return false}var n=true;var u=parseTokenList(s);for(var _=0;_<u.length;_++){var o=u[_];if(o===f||o===\"W/\"+f||\"W/\"+o===f){n=false;break}}if(n){return false}}if(t){var p=a[\"last-modified\"];var v=!p||!(parseHttpDate(p)<=parseHttpDate(t));if(v){return false}}return true}function parseHttpDate(e){var r=e&&Date.parse(e);return typeof r===\"number\"?r:NaN}function parseTokenList(e){var r=0;var a=[];var t=0;for(var s=0,i=e.length;s<i;s++){switch(e.charCodeAt(s)){case 32:if(t===r){t=r=s+1}break;case 44:a.push(e.substring(t,r));t=r=s+1;break;default:r=s+1;break}}a.push(e.substring(t,r));return a}}};var r={};function __nccwpck_require__(a){var t=r[a];if(t!==undefined){return t.exports}var s=r[a]={exports:{}};var i=true;try{e[a](s,s.exports,__nccwpck_require__);i=false}finally{if(i)delete r[a]}return s.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var a=__nccwpck_require__(695);module.exports=a})();","(()=>{\"use strict\";if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var e={};(()=>{var n=e;Object.defineProperty(n,\"__esModule\",{value:true});n.pathToRegexp=n.tokensToRegexp=n.regexpToFunction=n.match=n.tokensToFunction=n.compile=n.parse=void 0;function lexer(e){var n=[];var r=0;while(r<e.length){var t=e[r];if(t===\"*\"||t===\"+\"||t===\"?\"){n.push({type:\"MODIFIER\",index:r,value:e[r++]});continue}if(t===\"\\\\\"){n.push({type:\"ESCAPED_CHAR\",index:r++,value:e[r++]});continue}if(t===\"{\"){n.push({type:\"OPEN\",index:r,value:e[r++]});continue}if(t===\"}\"){n.push({type:\"CLOSE\",index:r,value:e[r++]});continue}if(t===\":\"){var a=\"\";var i=r+1;while(i<e.length){var o=e.charCodeAt(i);if(o>=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122||o===95){a+=e[i++];continue}break}if(!a)throw new TypeError(\"Missing parameter name at \".concat(r));n.push({type:\"NAME\",index:r,value:a});r=i;continue}if(t===\"(\"){var c=1;var f=\"\";var i=r+1;if(e[i]===\"?\"){throw new TypeError('Pattern cannot start with \"?\" at '.concat(i))}while(i<e.length){if(e[i]===\"\\\\\"){f+=e[i++]+e[i++];continue}if(e[i]===\")\"){c--;if(c===0){i++;break}}else if(e[i]===\"(\"){c++;if(e[i+1]!==\"?\"){throw new TypeError(\"Capturing groups are not allowed at \".concat(i))}}f+=e[i++]}if(c)throw new TypeError(\"Unbalanced pattern at \".concat(r));if(!f)throw new TypeError(\"Missing pattern at \".concat(r));n.push({type:\"PATTERN\",index:r,value:f});r=i;continue}n.push({type:\"CHAR\",index:r,value:e[r++]})}n.push({type:\"END\",index:r,value:\"\"});return n}function parse(e,n){if(n===void 0){n={}}var r=lexer(e);var t=n.prefixes,a=t===void 0?\"./\":t,i=n.delimiter,o=i===void 0?\"/#?\":i;var c=[];var f=0;var u=0;var p=\"\";var tryConsume=function(e){if(u<r.length&&r[u].type===e)return r[u++].value};var mustConsume=function(e){var n=tryConsume(e);if(n!==undefined)return n;var t=r[u],a=t.type,i=t.index;throw new TypeError(\"Unexpected \".concat(a,\" at \").concat(i,\", expected \").concat(e))};var consumeText=function(){var e=\"\";var n;while(n=tryConsume(\"CHAR\")||tryConsume(\"ESCAPED_CHAR\")){e+=n}return e};var isSafe=function(e){for(var n=0,r=o;n<r.length;n++){var t=r[n];if(e.indexOf(t)>-1)return true}return false};var safePattern=function(e){var n=c[c.length-1];var r=e||(n&&typeof n===\"string\"?n:\"\");if(n&&!r){throw new TypeError('Must have text between two parameters, missing text after \"'.concat(n.name,'\"'))}if(!r||isSafe(r))return\"[^\".concat(escapeString(o),\"]+?\");return\"(?:(?!\".concat(escapeString(r),\")[^\").concat(escapeString(o),\"])+?\")};while(u<r.length){var v=tryConsume(\"CHAR\");var s=tryConsume(\"NAME\");var d=tryConsume(\"PATTERN\");if(s||d){var g=v||\"\";if(a.indexOf(g)===-1){p+=g;g=\"\"}if(p){c.push(p);p=\"\"}c.push({name:s||f++,prefix:g,suffix:\"\",pattern:d||safePattern(g),modifier:tryConsume(\"MODIFIER\")||\"\"});continue}var x=v||tryConsume(\"ESCAPED_CHAR\");if(x){p+=x;continue}if(p){c.push(p);p=\"\"}var h=tryConsume(\"OPEN\");if(h){var g=consumeText();var l=tryConsume(\"NAME\")||\"\";var m=tryConsume(\"PATTERN\")||\"\";var T=consumeText();mustConsume(\"CLOSE\");c.push({name:l||(m?f++:\"\"),pattern:l&&!m?safePattern(g):m,prefix:g,suffix:T,modifier:tryConsume(\"MODIFIER\")||\"\"});continue}mustConsume(\"END\")}return c}n.parse=parse;function compile(e,n){return tokensToFunction(parse(e,n),n)}n.compile=compile;function tokensToFunction(e,n){if(n===void 0){n={}}var r=flags(n);var t=n.encode,a=t===void 0?function(e){return e}:t,i=n.validate,o=i===void 0?true:i;var c=e.map((function(e){if(typeof e===\"object\"){return new RegExp(\"^(?:\".concat(e.pattern,\")$\"),r)}}));return function(n){var r=\"\";for(var t=0;t<e.length;t++){var i=e[t];if(typeof i===\"string\"){r+=i;continue}var f=n?n[i.name]:undefined;var u=i.modifier===\"?\"||i.modifier===\"*\";var p=i.modifier===\"*\"||i.modifier===\"+\";if(Array.isArray(f)){if(!p){throw new TypeError('Expected \"'.concat(i.name,'\" to not repeat, but got an array'))}if(f.length===0){if(u)continue;throw new TypeError('Expected \"'.concat(i.name,'\" to not be empty'))}for(var v=0;v<f.length;v++){var s=a(f[v],i);if(o&&!c[t].test(s)){throw new TypeError('Expected all \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix}continue}if(typeof f===\"string\"||typeof f===\"number\"){var s=a(String(f),i);if(o&&!c[t].test(s)){throw new TypeError('Expected \"'.concat(i.name,'\" to match \"').concat(i.pattern,'\", but got \"').concat(s,'\"'))}r+=i.prefix+s+i.suffix;continue}if(u)continue;var d=p?\"an array\":\"a string\";throw new TypeError('Expected \"'.concat(i.name,'\" to be ').concat(d))}return r}}n.tokensToFunction=tokensToFunction;function match(e,n){var r=[];var t=pathToRegexp(e,r,n);return regexpToFunction(t,r,n)}n.match=match;function regexpToFunction(e,n,r){if(r===void 0){r={}}var t=r.decode,a=t===void 0?function(e){return e}:t;return function(r){var t=e.exec(r);if(!t)return false;var i=t[0],o=t.index;var c=Object.create(null);var _loop_1=function(e){if(t[e]===undefined)return\"continue\";var r=n[e-1];if(r.modifier===\"*\"||r.modifier===\"+\"){c[r.name]=t[e].split(r.prefix+r.suffix).map((function(e){return a(e,r)}))}else{c[r.name]=a(t[e],r)}};for(var f=1;f<t.length;f++){_loop_1(f)}return{path:i,index:o,params:c}}}n.regexpToFunction=regexpToFunction;function escapeString(e){return e.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g,\"\\\\$1\")}function flags(e){return e&&e.sensitive?\"\":\"i\"}function regexpToRegexp(e,n){if(!n)return e;var r=/\\((?:\\?<(.*?)>)?(?!\\?)/g;var t=0;var a=r.exec(e.source);while(a){n.push({name:a[1]||t++,prefix:\"\",suffix:\"\",modifier:\"\",pattern:\"\"});a=r.exec(e.source)}return e}function arrayToRegexp(e,n,r){var t=e.map((function(e){return pathToRegexp(e,n,r).source}));return new RegExp(\"(?:\".concat(t.join(\"|\"),\")\"),flags(r))}function stringToRegexp(e,n,r){return tokensToRegexp(parse(e,r),n,r)}function tokensToRegexp(e,n,r){if(r===void 0){r={}}var t=r.strict,a=t===void 0?false:t,i=r.start,o=i===void 0?true:i,c=r.end,f=c===void 0?true:c,u=r.encode,p=u===void 0?function(e){return e}:u,v=r.delimiter,s=v===void 0?\"/#?\":v,d=r.endsWith,g=d===void 0?\"\":d;var x=\"[\".concat(escapeString(g),\"]|$\");var h=\"[\".concat(escapeString(s),\"]\");var l=o?\"^\":\"\";for(var m=0,T=e;m<T.length;m++){var E=T[m];if(typeof E===\"string\"){l+=escapeString(p(E))}else{var w=escapeString(p(E.prefix));var y=escapeString(p(E.suffix));if(E.pattern){if(n)n.push(E);if(w||y){if(E.modifier===\"+\"||E.modifier===\"*\"){var R=E.modifier===\"*\"?\"?\":\"\";l+=\"(?:\".concat(w,\"((?:\").concat(E.pattern,\")(?:\").concat(y).concat(w,\"(?:\").concat(E.pattern,\"))*)\").concat(y,\")\").concat(R)}else{l+=\"(?:\".concat(w,\"(\").concat(E.pattern,\")\").concat(y,\")\").concat(E.modifier)}}else{if(E.modifier===\"+\"||E.modifier===\"*\"){throw new TypeError('Can not repeat \"'.concat(E.name,'\" without a prefix and suffix'))}l+=\"(\".concat(E.pattern,\")\").concat(E.modifier)}}else{l+=\"(?:\".concat(w).concat(y,\")\").concat(E.modifier)}}}if(f){if(!a)l+=\"\".concat(h,\"?\");l+=!r.endsWith?\"$\":\"(?=\".concat(x,\")\")}else{var A=e[e.length-1];var _=typeof A===\"string\"?h.indexOf(A[A.length-1])>-1:A===undefined;if(!a){l+=\"(?:\".concat(h,\"(?=\").concat(x,\"))?\")}if(!_){l+=\"(?=\".concat(h,\"|\").concat(x,\")\")}}return new RegExp(l,flags(r))}n.tokensToRegexp=tokensToRegexp;function pathToRegexp(e,n,r){if(e instanceof RegExp)return regexpToRegexp(e,n);if(Array.isArray(e))return arrayToRegexp(e,n,r);return stringToRegexp(e,n,r)}n.pathToRegexp=pathToRegexp})();module.exports=e})();","import type { ServerRuntime } from '../types'\n\nexport const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain'\nexport const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8'\nexport const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8'\nexport const NEXT_QUERY_PARAM_PREFIX = 'nxtP'\nexport const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI'\n\nexport const MATCHED_PATH_HEADER = 'x-matched-path'\nexport const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate'\nexport const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER =\n 'x-prerender-revalidate-if-generated'\n\nexport const RSC_PREFETCH_SUFFIX = '.prefetch.rsc'\nexport const RSC_SEGMENTS_DIR_SUFFIX = '.segments'\nexport const RSC_SEGMENT_SUFFIX = '.segment.rsc'\nexport const RSC_SUFFIX = '.rsc'\nexport const ACTION_SUFFIX = '.action'\nexport const NEXT_DATA_SUFFIX = '.json'\nexport const NEXT_META_SUFFIX = '.meta'\nexport const NEXT_BODY_SUFFIX = '.body'\n\nexport const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags'\nexport const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags'\nexport const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER =\n 'x-next-revalidate-tag-token'\n\nexport const NEXT_RESUME_HEADER = 'next-resume'\n\n// if these change make sure we update the related\n// documentation as well\nexport const NEXT_CACHE_TAG_MAX_ITEMS = 128\nexport const NEXT_CACHE_TAG_MAX_LENGTH = 256\nexport const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024\nexport const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_'\n\n// in seconds\nexport const CACHE_ONE_YEAR = 31536000\n\n// in seconds, represents revalidate=false. I.e. never revaliate.\n// We use this value since it can be represented as a V8 SMI for optimal performance.\n// It can also be serialized as JSON if it ever leaks accidentally as an actual value.\nexport const INFINITE_CACHE = 0xfffffffe\n\n// Patterns to detect middleware files\nexport const MIDDLEWARE_FILENAME = 'middleware'\nexport const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`\n\n// Pattern to detect instrumentation hooks file\nexport const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation'\n\n// Because on Windows absolute paths in the generated code can break because of numbers, eg 1 in the path,\n// we have to use a private alias\nexport const PAGES_DIR_ALIAS = 'private-next-pages'\nexport const DOT_NEXT_ALIAS = 'private-dot-next'\nexport const ROOT_DIR_ALIAS = 'private-next-root-dir'\nexport const APP_DIR_ALIAS = 'private-next-app-dir'\nexport const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy'\nexport const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate'\nexport const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference'\nexport const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper'\nexport const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS =\n 'private-next-rsc-track-dynamic-import'\nexport const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption'\nexport const RSC_ACTION_CLIENT_WRAPPER_ALIAS =\n 'private-next-rsc-action-client-wrapper'\n\nexport const PUBLIC_DIR_MIDDLEWARE_CONFLICT = `You can not have a '_next' folder inside of your public folder. This conflicts with the internal '/_next' route. https://nextjs.org/docs/messages/public-next-folder-conflict`\n\nexport const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`\n\nexport const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`\n\nexport const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`\n\nexport const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`\n\nexport const SERVER_PROPS_EXPORT_ERROR = `pages with \\`getServerSideProps\\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`\n\nexport const GSP_NO_RETURNED_VALUE =\n 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?'\nexport const GSSP_NO_RETURNED_VALUE =\n 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?'\n\nexport const UNSTABLE_REVALIDATE_RENAME_ERROR =\n 'The `unstable_revalidate` property is available for general use.\\n' +\n 'Please use `revalidate` instead.'\n\nexport const GSSP_COMPONENT_MEMBER_ERROR = `can not be attached to a page's component and must be exported from the page. See more info here: https://nextjs.org/docs/messages/gssp-component-member`\n\nexport const NON_STANDARD_NODE_ENV = `You are using a non-standard \"NODE_ENV\" value in your environment. This creates inconsistencies in the project and is strongly advised against. Read more: https://nextjs.org/docs/messages/non-standard-node-env`\n\nexport const SSG_FALLBACK_EXPORT_ERROR = `Pages with \\`fallback\\` enabled in \\`getStaticPaths\\` can not be exported. See more info here: https://nextjs.org/docs/messages/ssg-fallback-true-export`\n\nexport const ESLINT_DEFAULT_DIRS = ['app', 'pages', 'components', 'lib', 'src']\n\nexport const SERVER_RUNTIME: Record<string, ServerRuntime> = {\n edge: 'edge',\n experimentalEdge: 'experimental-edge',\n nodejs: 'nodejs',\n}\n\n/**\n * The names of the webpack layers. These layers are the primitives for the\n * webpack chunks.\n */\nconst WEBPACK_LAYERS_NAMES = {\n /**\n * The layer for the shared code between the client and server bundles.\n */\n shared: 'shared',\n /**\n * The layer for server-only runtime and picking up `react-server` export conditions.\n * Including app router RSC pages and app router custom routes and metadata routes.\n */\n reactServerComponents: 'rsc',\n /**\n * Server Side Rendering layer for app (ssr).\n */\n serverSideRendering: 'ssr',\n /**\n * The browser client bundle layer for actions.\n */\n actionBrowser: 'action-browser',\n /**\n * The Node.js bundle layer for the API routes.\n */\n apiNode: 'api-node',\n /**\n * The Edge Lite bundle layer for the API routes.\n */\n apiEdge: 'api-edge',\n /**\n * The layer for the middleware code.\n */\n middleware: 'middleware',\n /**\n * The layer for the instrumentation hooks.\n */\n instrument: 'instrument',\n /**\n * The layer for assets on the edge.\n */\n edgeAsset: 'edge-asset',\n /**\n * The browser client bundle layer for App directory.\n */\n appPagesBrowser: 'app-pages-browser',\n /**\n * The browser client bundle layer for Pages directory.\n */\n pagesDirBrowser: 'pages-dir-browser',\n /**\n * The Edge Lite bundle layer for Pages directory.\n */\n pagesDirEdge: 'pages-dir-edge',\n /**\n * The Node.js bundle layer for Pages directory.\n */\n pagesDirNode: 'pages-dir-node',\n} as const\n\nexport type WebpackLayerName =\n (typeof WEBPACK_LAYERS_NAMES)[keyof typeof WEBPACK_LAYERS_NAMES]\n\nconst WEBPACK_LAYERS = {\n ...WEBPACK_LAYERS_NAMES,\n GROUP: {\n builtinReact: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n serverOnly: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n neutralTarget: [\n // pages api\n WEBPACK_LAYERS_NAMES.apiNode,\n WEBPACK_LAYERS_NAMES.apiEdge,\n ],\n clientOnly: [\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n ],\n bundled: [\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.shared,\n WEBPACK_LAYERS_NAMES.instrument,\n WEBPACK_LAYERS_NAMES.middleware,\n ],\n appPages: [\n // app router pages and layouts\n WEBPACK_LAYERS_NAMES.reactServerComponents,\n WEBPACK_LAYERS_NAMES.serverSideRendering,\n WEBPACK_LAYERS_NAMES.appPagesBrowser,\n WEBPACK_LAYERS_NAMES.actionBrowser,\n ],\n },\n}\n\nconst WEBPACK_RESOURCE_QUERIES = {\n edgeSSREntry: '__next_edge_ssr_entry__',\n metadata: '__next_metadata__',\n metadataRoute: '__next_metadata_route__',\n metadataImageMeta: '__next_metadata_image_meta__',\n}\n\nexport { WEBPACK_LAYERS, WEBPACK_RESOURCE_QUERIES }\n","import path from 'path'\nimport { pathToFileURL } from 'url'\n\n/**\n * The path for a dynamic route must be URLs with a valid scheme.\n *\n * When an absolute Windows path is passed to it, it interprets the beginning of the path as a protocol (`C:`).\n * Therefore, it is important to always construct a complete path.\n * @param dir File directory\n * @param filePath Absolute or relative path\n */\nexport const formatDynamicImportPath = (dir: string, filePath: string) => {\n const absoluteFilePath = path.isAbsolute(filePath)\n ? filePath\n : path.join(dir, filePath)\n const formattedFilePath = pathToFileURL(absoluteFilePath).toString()\n\n return formattedFilePath\n}\n","import type { IncomingMessage } from 'http'\nimport type { BaseNextRequest } from '../base-http'\nimport type { CookieSerializeOptions } from 'next/dist/compiled/cookie'\nimport type { NextApiResponse } from '../../shared/lib/utils'\n\nimport { HeadersAdapter } from '../web/spec-extension/adapters/headers'\nimport {\n PRERENDER_REVALIDATE_HEADER,\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,\n} from '../../lib/constants'\nimport { getTracer } from '../lib/trace/tracer'\nimport { NodeSpan } from '../lib/trace/constants'\n\nexport type NextApiRequestCookies = Partial<{ [key: string]: string }>\nexport type NextApiRequestQuery = Partial<{ [key: string]: string | string[] }>\n\nexport type __ApiPreviewProps = {\n previewModeId: string\n previewModeEncryptionKey: string\n previewModeSigningKey: string\n}\n\nexport function wrapApiHandler<T extends (...args: any[]) => any>(\n page: string,\n handler: T\n): T {\n return ((...args) => {\n getTracer().setRootSpanAttribute('next.route', page)\n // Call API route method\n return getTracer().trace(\n NodeSpan.runHandler,\n {\n spanName: `executing api route (pages) ${page}`,\n },\n () => handler(...args)\n )\n }) as T\n}\n\n/**\n *\n * @param res response object\n * @param statusCode `HTTP` status code of response\n */\nexport function sendStatusCode(\n res: NextApiResponse,\n statusCode: number\n): NextApiResponse<any> {\n res.statusCode = statusCode\n return res\n}\n\n/**\n *\n * @param res response object\n * @param [statusOrUrl] `HTTP` status code of redirect\n * @param url URL of redirect\n */\nexport function redirect(\n res: NextApiResponse,\n statusOrUrl: string | number,\n url?: string\n): NextApiResponse<any> {\n if (typeof statusOrUrl === 'string') {\n url = statusOrUrl\n statusOrUrl = 307\n }\n if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {\n throw new Error(\n `Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`\n )\n }\n res.writeHead(statusOrUrl, { Location: url })\n res.write(url)\n res.end()\n return res\n}\n\nexport function checkIsOnDemandRevalidate(\n req: Request | IncomingMessage | BaseNextRequest,\n previewProps: __ApiPreviewProps\n): {\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n} {\n const headers = HeadersAdapter.from(req.headers)\n\n const previewModeId = headers.get(PRERENDER_REVALIDATE_HEADER)\n const isOnDemandRevalidate = previewModeId === previewProps.previewModeId\n\n const revalidateOnlyGenerated = headers.has(\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER\n )\n\n return { isOnDemandRevalidate, revalidateOnlyGenerated }\n}\n\nexport const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`\nexport const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`\n\nexport const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024\n\nexport const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA)\nexport const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS)\n\nexport function clearPreviewData<T>(\n res: NextApiResponse<T>,\n options: {\n path?: string\n } = {}\n): NextApiResponse<T> {\n if (SYMBOL_CLEARED_COOKIES in res) {\n return res\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, '', {\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n expires: new Date(0),\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n\n Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {\n value: true,\n enumerable: false,\n })\n return res\n}\n\n/**\n * Custom error class\n */\nexport class ApiError extends Error {\n readonly statusCode: number\n\n constructor(statusCode: number, message: string) {\n super(message)\n this.statusCode = statusCode\n }\n}\n\n/**\n * Sends error in `response`\n * @param res response object\n * @param statusCode of response\n * @param message of response\n */\nexport function sendError(\n res: NextApiResponse,\n statusCode: number,\n message: string\n): void {\n res.statusCode = statusCode\n res.statusMessage = message\n res.end(message)\n}\n\ninterface LazyProps {\n req: IncomingMessage\n}\n\n/**\n * Execute getter function only if its needed\n * @param LazyProps `req` and `params` for lazyProp\n * @param prop name of property\n * @param getter function to get data\n */\nexport function setLazyProp<T>(\n { req }: LazyProps,\n prop: string,\n getter: () => T\n): void {\n const opts = { configurable: true, enumerable: true }\n const optsReset = { ...opts, writable: true }\n\n Object.defineProperty(req, prop, {\n ...opts,\n get: () => {\n const value = getter()\n // we set the property on the object to avoid recalculating it\n Object.defineProperty(req, prop, { ...optsReset, value })\n return value\n },\n set: (value) => {\n Object.defineProperty(req, prop, { ...optsReset, value })\n },\n })\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextApiResponse } from '../../../shared/lib/utils'\nimport { checkIsOnDemandRevalidate } from '../.'\nimport type { __ApiPreviewProps } from '../.'\nimport type { BaseNextRequest, BaseNextResponse } from '../../base-http'\nimport type { PreviewData } from '../../../types'\n\nimport {\n clearPreviewData,\n COOKIE_NAME_PRERENDER_BYPASS,\n COOKIE_NAME_PRERENDER_DATA,\n SYMBOL_PREVIEW_DATA,\n} from '../index'\nimport { RequestCookies } from '../../web/spec-extension/cookies'\nimport { HeadersAdapter } from '../../web/spec-extension/adapters/headers'\n\nexport function tryGetPreviewData(\n req: IncomingMessage | BaseNextRequest | Request,\n res: ServerResponse | BaseNextResponse,\n options: __ApiPreviewProps,\n multiZoneDraftMode: boolean\n): PreviewData {\n // if an On-Demand revalidation is being done preview mode\n // is disabled\n if (options && checkIsOnDemandRevalidate(req, options).isOnDemandRevalidate) {\n return false\n }\n\n // Read cached preview data if present\n // TODO: use request metadata instead of a symbol\n if (SYMBOL_PREVIEW_DATA in req) {\n return (req as any)[SYMBOL_PREVIEW_DATA] as any\n }\n\n const headers = HeadersAdapter.from(req.headers)\n const cookies = new RequestCookies(headers)\n\n const previewModeId = cookies.get(COOKIE_NAME_PRERENDER_BYPASS)?.value\n const tokenPreviewData = cookies.get(COOKIE_NAME_PRERENDER_DATA)?.value\n\n // Case: preview mode cookie set but data cookie is not set\n if (\n previewModeId &&\n !tokenPreviewData &&\n previewModeId === options.previewModeId\n ) {\n // This is \"Draft Mode\" which doesn't use\n // previewData, so we return an empty object\n // for backwards compat with \"Preview Mode\".\n const data = {}\n Object.defineProperty(req, SYMBOL_PREVIEW_DATA, {\n value: data,\n enumerable: false,\n })\n return data\n }\n\n // Case: neither cookie is set.\n if (!previewModeId && !tokenPreviewData) {\n return false\n }\n\n // Case: one cookie is set, but not the other.\n if (!previewModeId || !tokenPreviewData) {\n if (!multiZoneDraftMode) {\n clearPreviewData(res as NextApiResponse)\n }\n return false\n }\n\n // Case: preview session is for an old build.\n if (previewModeId !== options.previewModeId) {\n if (!multiZoneDraftMode) {\n clearPreviewData(res as NextApiResponse)\n }\n return false\n }\n\n let encryptedPreviewData: {\n data: string\n }\n try {\n const jsonwebtoken =\n require('next/dist/compiled/jsonwebtoken') as typeof import('next/dist/compiled/jsonwebtoken')\n encryptedPreviewData = jsonwebtoken.verify(\n tokenPreviewData,\n options.previewModeSigningKey\n ) as typeof encryptedPreviewData\n } catch {\n // TODO: warn\n clearPreviewData(res as NextApiResponse)\n return false\n }\n\n const { decryptWithSecret } =\n require('../../crypto-utils') as typeof import('../../crypto-utils')\n const decryptedPreviewData = decryptWithSecret(\n Buffer.from(options.previewModeEncryptionKey),\n encryptedPreviewData.data\n )\n\n try {\n // TODO: strict runtime type checking\n const data = JSON.parse(decryptedPreviewData)\n // Cache lookup\n Object.defineProperty(req, SYMBOL_PREVIEW_DATA, {\n value: data,\n enumerable: false,\n })\n return data\n } catch {\n return false\n }\n}\n","import crypto from 'crypto'\n\n// Background:\n// https://security.stackexchange.com/questions/184305/why-would-i-ever-use-aes-256-cbc-if-aes-256-gcm-is-more-secure\n\nconst CIPHER_ALGORITHM = `aes-256-gcm`,\n CIPHER_KEY_LENGTH = 32, // https://stackoverflow.com/a/28307668/4397028\n CIPHER_IV_LENGTH = 16, // https://stackoverflow.com/a/28307668/4397028\n CIPHER_TAG_LENGTH = 16,\n CIPHER_SALT_LENGTH = 64\n\nconst PBKDF2_ITERATIONS = 100_000 // https://support.1password.com/pbkdf2/\n\nexport function encryptWithSecret(secret: Buffer, data: string): string {\n const iv = crypto.randomBytes(CIPHER_IV_LENGTH)\n const salt = crypto.randomBytes(CIPHER_SALT_LENGTH)\n\n // https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest\n const key = crypto.pbkdf2Sync(\n secret,\n salt,\n PBKDF2_ITERATIONS,\n CIPHER_KEY_LENGTH,\n `sha512`\n )\n\n const cipher = crypto.createCipheriv(CIPHER_ALGORITHM, key, iv)\n const encrypted = Buffer.concat([cipher.update(data, `utf8`), cipher.final()])\n\n // https://nodejs.org/api/crypto.html#crypto_cipher_getauthtag\n const tag = cipher.getAuthTag()\n\n return Buffer.concat([\n // Data as required by:\n // Salt for Key: https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest\n // IV: https://nodejs.org/api/crypto.html#crypto_class_decipher\n // Tag: https://nodejs.org/api/crypto.html#crypto_decipher_setauthtag_buffer\n salt,\n iv,\n tag,\n encrypted,\n ]).toString(`hex`)\n}\n\nexport function decryptWithSecret(\n secret: Buffer,\n encryptedData: string\n): string {\n const buffer = Buffer.from(encryptedData, `hex`)\n\n const salt = buffer.slice(0, CIPHER_SALT_LENGTH)\n const iv = buffer.slice(\n CIPHER_SALT_LENGTH,\n CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH\n )\n const tag = buffer.slice(\n CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH,\n CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH + CIPHER_TAG_LENGTH\n )\n const encrypted = buffer.slice(\n CIPHER_SALT_LENGTH + CIPHER_IV_LENGTH + CIPHER_TAG_LENGTH\n )\n\n // https://nodejs.org/api/crypto.html#crypto_crypto_pbkdf2sync_password_salt_iterations_keylen_digest\n const key = crypto.pbkdf2Sync(\n secret,\n salt,\n PBKDF2_ITERATIONS,\n CIPHER_KEY_LENGTH,\n `sha512`\n )\n\n const decipher = crypto.createDecipheriv(CIPHER_ALGORITHM, key, iv)\n decipher.setAuthTag(tag)\n\n return decipher.update(encrypted) + decipher.final(`utf8`)\n}\n","import type { CacheFs } from '../../shared/lib/utils'\n\nimport fs from 'fs'\n\nexport const nodeFs: CacheFs = {\n existsSync: fs.existsSync,\n readFile: fs.promises.readFile,\n readFileSync: fs.readFileSync,\n writeFile: (f, d) => fs.promises.writeFile(f, d),\n mkdir: (dir) => fs.promises.mkdir(dir, { recursive: true }),\n stat: (f) => fs.promises.stat(f),\n}\n","/**\n * Contains predefined constants for the trace span name in next/server.\n *\n * Currently, next/server/tracer is internal implementation only for tracking\n * next.js's implementation only with known span names defined here.\n **/\n\n// eslint typescript has a bug with TS enums\n/* eslint-disable no-shadow */\n\nenum BaseServerSpan {\n handleRequest = 'BaseServer.handleRequest',\n run = 'BaseServer.run',\n pipe = 'BaseServer.pipe',\n getStaticHTML = 'BaseServer.getStaticHTML',\n render = 'BaseServer.render',\n renderToResponseWithComponents = 'BaseServer.renderToResponseWithComponents',\n renderToResponse = 'BaseServer.renderToResponse',\n renderToHTML = 'BaseServer.renderToHTML',\n renderError = 'BaseServer.renderError',\n renderErrorToResponse = 'BaseServer.renderErrorToResponse',\n renderErrorToHTML = 'BaseServer.renderErrorToHTML',\n render404 = 'BaseServer.render404',\n}\n\nenum LoadComponentsSpan {\n loadDefaultErrorComponents = 'LoadComponents.loadDefaultErrorComponents',\n loadComponents = 'LoadComponents.loadComponents',\n}\n\nenum NextServerSpan {\n getRequestHandler = 'NextServer.getRequestHandler',\n getServer = 'NextServer.getServer',\n getServerRequestHandler = 'NextServer.getServerRequestHandler',\n createServer = 'createServer.createServer',\n}\n\nenum NextNodeServerSpan {\n compression = 'NextNodeServer.compression',\n getBuildId = 'NextNodeServer.getBuildId',\n createComponentTree = 'NextNodeServer.createComponentTree',\n clientComponentLoading = 'NextNodeServer.clientComponentLoading',\n getLayoutOrPageModule = 'NextNodeServer.getLayoutOrPageModule',\n generateStaticRoutes = 'NextNodeServer.generateStaticRoutes',\n generateFsStaticRoutes = 'NextNodeServer.generateFsStaticRoutes',\n generatePublicRoutes = 'NextNodeServer.generatePublicRoutes',\n generateImageRoutes = 'NextNodeServer.generateImageRoutes.route',\n sendRenderResult = 'NextNodeServer.sendRenderResult',\n proxyRequest = 'NextNodeServer.proxyRequest',\n runApi = 'NextNodeServer.runApi',\n render = 'NextNodeServer.render',\n renderHTML = 'NextNodeServer.renderHTML',\n imageOptimizer = 'NextNodeServer.imageOptimizer',\n getPagePath = 'NextNodeServer.getPagePath',\n getRoutesManifest = 'NextNodeServer.getRoutesManifest',\n findPageComponents = 'NextNodeServer.findPageComponents',\n getFontManifest = 'NextNodeServer.getFontManifest',\n getServerComponentManifest = 'NextNodeServer.getServerComponentManifest',\n getRequestHandler = 'NextNodeServer.getRequestHandler',\n renderToHTML = 'NextNodeServer.renderToHTML',\n renderError = 'NextNodeServer.renderError',\n renderErrorToHTML = 'NextNodeServer.renderErrorToHTML',\n render404 = 'NextNodeServer.render404',\n startResponse = 'NextNodeServer.startResponse',\n\n // nested inner span, does not require parent scope name\n route = 'route',\n onProxyReq = 'onProxyReq',\n apiResolver = 'apiResolver',\n internalFetch = 'internalFetch',\n}\n\nenum StartServerSpan {\n startServer = 'startServer.startServer',\n}\n\nenum RenderSpan {\n getServerSideProps = 'Render.getServerSideProps',\n getStaticProps = 'Render.getStaticProps',\n renderToString = 'Render.renderToString',\n renderDocument = 'Render.renderDocument',\n createBodyResult = 'Render.createBodyResult',\n}\n\nenum AppRenderSpan {\n renderToString = 'AppRender.renderToString',\n renderToReadableStream = 'AppRender.renderToReadableStream',\n getBodyResult = 'AppRender.getBodyResult',\n fetch = 'AppRender.fetch',\n}\n\nenum RouterSpan {\n executeRoute = 'Router.executeRoute',\n}\n\nenum NodeSpan {\n runHandler = 'Node.runHandler',\n}\n\nenum AppRouteRouteHandlersSpan {\n runHandler = 'AppRouteRouteHandlers.runHandler',\n}\n\nenum ResolveMetadataSpan {\n generateMetadata = 'ResolveMetadata.generateMetadata',\n generateViewport = 'ResolveMetadata.generateViewport',\n}\n\nenum MiddlewareSpan {\n execute = 'Middleware.execute',\n}\n\ntype SpanTypes =\n | `${BaseServerSpan}`\n | `${LoadComponentsSpan}`\n | `${NextServerSpan}`\n | `${StartServerSpan}`\n | `${NextNodeServerSpan}`\n | `${RenderSpan}`\n | `${RouterSpan}`\n | `${AppRenderSpan}`\n | `${NodeSpan}`\n | `${AppRouteRouteHandlersSpan}`\n | `${ResolveMetadataSpan}`\n | `${MiddlewareSpan}`\n\n// This list is used to filter out spans that are not relevant to the user\nexport const NextVanillaSpanAllowlist = [\n MiddlewareSpan.execute,\n BaseServerSpan.handleRequest,\n RenderSpan.getServerSideProps,\n RenderSpan.getStaticProps,\n AppRenderSpan.fetch,\n AppRenderSpan.getBodyResult,\n RenderSpan.renderDocument,\n NodeSpan.runHandler,\n AppRouteRouteHandlersSpan.runHandler,\n ResolveMetadataSpan.generateMetadata,\n ResolveMetadataSpan.generateViewport,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.getLayoutOrPageModule,\n NextNodeServerSpan.startResponse,\n NextNodeServerSpan.clientComponentLoading,\n]\n\n// These Spans are allowed to be always logged\n// when the otel log prefix env is set\nexport const LogSpanAllowList = [\n NextNodeServerSpan.findPageComponents,\n NextNodeServerSpan.createComponentTree,\n NextNodeServerSpan.clientComponentLoading,\n]\n\nexport {\n BaseServerSpan,\n LoadComponentsSpan,\n NextServerSpan,\n NextNodeServerSpan,\n StartServerSpan,\n RenderSpan,\n RouterSpan,\n AppRenderSpan,\n NodeSpan,\n AppRouteRouteHandlersSpan,\n ResolveMetadataSpan,\n MiddlewareSpan,\n}\n\nexport type { SpanTypes }\n","export class ReflectAdapter {\n static get<T extends object>(\n target: T,\n prop: string | symbol,\n receiver: unknown\n ): any {\n const value = Reflect.get(target, prop, receiver)\n if (typeof value === 'function') {\n return value.bind(target)\n }\n\n return value\n }\n\n static set<T extends object>(\n target: T,\n prop: string | symbol,\n value: any,\n receiver: any\n ): boolean {\n return Reflect.set(target, prop, value, receiver)\n }\n\n static has<T extends object>(target: T, prop: string | symbol): boolean {\n return Reflect.has(target, prop)\n }\n\n static deleteProperty<T extends object>(\n target: T,\n prop: string | symbol\n ): boolean {\n return Reflect.deleteProperty(target, prop)\n }\n}\n","import type { IncomingHttpHeaders } from 'http'\n\nimport { ReflectAdapter } from './reflect'\n\n/**\n * @internal\n */\nexport class ReadonlyHeadersError extends Error {\n constructor() {\n super(\n 'Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers'\n )\n }\n\n public static callable() {\n throw new ReadonlyHeadersError()\n }\n}\n\nexport type ReadonlyHeaders = Headers & {\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n append(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n set(...args: any[]): void\n /** @deprecated Method unavailable on `ReadonlyHeaders`. Read more: https://nextjs.org/docs/app/api-reference/functions/headers */\n delete(...args: any[]): void\n}\nexport class HeadersAdapter extends Headers {\n private readonly headers: IncomingHttpHeaders\n\n constructor(headers: IncomingHttpHeaders) {\n // We've already overridden the methods that would be called, so we're just\n // calling the super constructor to ensure that the instanceof check works.\n super()\n\n this.headers = new Proxy(headers, {\n get(target, prop, receiver) {\n // Because this is just an object, we expect that all \"get\" operations\n // are for properties. If it's a \"get\" for a symbol, we'll just return\n // the symbol.\n if (typeof prop === 'symbol') {\n return ReflectAdapter.get(target, prop, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return undefined.\n if (typeof original === 'undefined') return\n\n // If the original casing exists, return the value.\n return ReflectAdapter.get(target, original, receiver)\n },\n set(target, prop, value, receiver) {\n if (typeof prop === 'symbol') {\n return ReflectAdapter.set(target, prop, value, receiver)\n }\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, use the prop as the key.\n return ReflectAdapter.set(target, original ?? prop, value, receiver)\n },\n has(target, prop) {\n if (typeof prop === 'symbol') return ReflectAdapter.has(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return false.\n if (typeof original === 'undefined') return false\n\n // If the original casing exists, return true.\n return ReflectAdapter.has(target, original)\n },\n deleteProperty(target, prop) {\n if (typeof prop === 'symbol')\n return ReflectAdapter.deleteProperty(target, prop)\n\n const lowercased = prop.toLowerCase()\n\n // Let's find the original casing of the key. This assumes that there is\n // no mixed case keys (e.g. \"Content-Type\" and \"content-type\") in the\n // headers object.\n const original = Object.keys(headers).find(\n (o) => o.toLowerCase() === lowercased\n )\n\n // If the original casing doesn't exist, return true.\n if (typeof original === 'undefined') return true\n\n // If the original casing exists, delete the property.\n return ReflectAdapter.deleteProperty(target, original)\n },\n })\n }\n\n /**\n * Seals a Headers instance to prevent modification by throwing an error when\n * any mutating method is called.\n */\n public static seal(headers: Headers): ReadonlyHeaders {\n return new Proxy<ReadonlyHeaders>(headers, {\n get(target, prop, receiver) {\n switch (prop) {\n case 'append':\n case 'delete':\n case 'set':\n return ReadonlyHeadersError.callable\n default:\n return ReflectAdapter.get(target, prop, receiver)\n }\n },\n })\n }\n\n /**\n * Merges a header value into a string. This stores multiple values as an\n * array, so we need to merge them into a string.\n *\n * @param value a header value\n * @returns a merged header value (a string)\n */\n private merge(value: string | string[]): string {\n if (Array.isArray(value)) return value.join(', ')\n\n return value\n }\n\n /**\n * Creates a Headers instance from a plain object or a Headers instance.\n *\n * @param headers a plain object or a Headers instance\n * @returns a headers instance\n */\n public static from(headers: IncomingHttpHeaders | Headers): Headers {\n if (headers instanceof Headers) return headers\n\n return new HeadersAdapter(headers)\n }\n\n public append(name: string, value: string): void {\n const existing = this.headers[name]\n if (typeof existing === 'string') {\n this.headers[name] = [existing, value]\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n this.headers[name] = value\n }\n }\n\n public delete(name: string): void {\n delete this.headers[name]\n }\n\n public get(name: string): string | null {\n const value = this.headers[name]\n if (typeof value !== 'undefined') return this.merge(value)\n\n return null\n }\n\n public has(name: string): boolean {\n return typeof this.headers[name] !== 'undefined'\n }\n\n public set(name: string, value: string): void {\n this.headers[name] = value\n }\n\n public forEach(\n callbackfn: (value: string, name: string, parent: Headers) => void,\n thisArg?: any\n ): void {\n for (const [name, value] of this.entries()) {\n callbackfn.call(thisArg, value, name, this)\n }\n }\n\n public *entries(): HeadersIterator<[string, string]> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(name) as string\n\n yield [name, value] as [string, string]\n }\n }\n\n public *keys(): HeadersIterator<string> {\n for (const key of Object.keys(this.headers)) {\n const name = key.toLowerCase()\n yield name\n }\n }\n\n public *values(): HeadersIterator<string> {\n for (const key of Object.keys(this.headers)) {\n // We assert here that this is a string because we got it from the\n // Object.keys() call above.\n const value = this.get(key) as string\n\n yield value\n }\n }\n\n public [Symbol.iterator](): HeadersIterator<[string, string]> {\n return this.entries()\n }\n}\n","/**\n * This module is for next.js server internal usage of path module.\n * It will use native path module for nodejs runtime.\n * It will use path-browserify polyfill for edge runtime.\n */\nlet path\n\nif (process.env.NEXT_RUNTIME === 'edge') {\n path = require('next/dist/compiled/path-browserify')\n} else {\n path = require('path')\n}\n\nmodule.exports = path\n","// Note: This file is JS because it's used by the taskfile-swc.js file, which is JS.\n// Keep file changes in sync with the corresponding `.d.ts` files.\n/**\n * These are the browser versions that support all of the following:\n * static import: https://caniuse.com/es6-module\n * dynamic import: https://caniuse.com/es6-module-dynamic-import\n * import.meta: https://caniuse.com/mdn-javascript_operators_import_meta\n */\nconst MODERN_BROWSERSLIST_TARGET = [\n 'chrome 64',\n 'edge 79',\n 'firefox 67',\n 'opera 51',\n 'safari 12',\n]\n\nmodule.exports = MODERN_BROWSERSLIST_TARGET\n","(()=>{var e={318:function(e,t){(function(e,n){true?n(t):0})(this,(function(e){\"use strict\";class StructError extends TypeError{constructor(e,t){let n;const{message:r,explanation:i,...c}=e;const{path:o}=e;const a=o.length===0?r:`At path: ${o.join(\".\")} -- ${r}`;super(i??a);if(i!=null)this.cause=a;Object.assign(this,c);this.name=this.constructor.name;this.failures=()=>n??(n=[e,...t()])}}function isIterable(e){return isObject(e)&&typeof e[Symbol.iterator]===\"function\"}function isObject(e){return typeof e===\"object\"&&e!=null}function isPlainObject(e){if(Object.prototype.toString.call(e)!==\"[object Object]\"){return false}const t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function print(e){if(typeof e===\"symbol\"){return e.toString()}return typeof e===\"string\"?JSON.stringify(e):`${e}`}function shiftIterator(e){const{done:t,value:n}=e.next();return t?undefined:n}function toFailure(e,t,n,r){if(e===true){return}else if(e===false){e={}}else if(typeof e===\"string\"){e={message:e}}const{path:i,branch:c}=t;const{type:o}=n;const{refinement:a,message:s=`Expected a value of type \\`${o}\\`${a?` with refinement \\`${a}\\``:\"\"}, but received: \\`${print(r)}\\``}=e;return{value:r,type:o,refinement:a,key:i[i.length-1],path:i,branch:c,...e,message:s}}function*toFailures(e,t,n,r){if(!isIterable(e)){e=[e]}for(const i of e){const e=toFailure(i,t,n,r);if(e){yield e}}}function*run(e,t,n={}){const{path:r=[],branch:i=[e],coerce:c=false,mask:o=false}=n;const a={path:r,branch:i};if(c){e=t.coercer(e,a);if(o&&t.type!==\"type\"&&isObject(t.schema)&&isObject(e)&&!Array.isArray(e)){for(const n in e){if(t.schema[n]===undefined){delete e[n]}}}}let s=\"valid\";for(const r of t.validator(e,a)){r.explanation=n.message;s=\"not_valid\";yield[r,undefined]}for(let[u,f,l]of t.entries(e,a)){const t=run(f,l,{path:u===undefined?r:[...r,u],branch:u===undefined?i:[...i,f],coerce:c,mask:o,message:n.message});for(const n of t){if(n[0]){s=n[0].refinement!=null?\"not_refined\":\"not_valid\";yield[n[0],undefined]}else if(c){f=n[1];if(u===undefined){e=f}else if(e instanceof Map){e.set(u,f)}else if(e instanceof Set){e.add(f)}else if(isObject(e)){if(f!==undefined||u in e)e[u]=f}}}}if(s!==\"not_valid\"){for(const r of t.refiner(e,a)){r.explanation=n.message;s=\"not_refined\";yield[r,undefined]}}if(s===\"valid\"){yield[undefined,e]}}class Struct{constructor(e){const{type:t,schema:n,validator:r,refiner:i,coercer:c=(e=>e),entries:o=function*(){}}=e;this.type=t;this.schema=n;this.entries=o;this.coercer=c;if(r){this.validator=(e,t)=>{const n=r(e,t);return toFailures(n,t,this,e)}}else{this.validator=()=>[]}if(i){this.refiner=(e,t)=>{const n=i(e,t);return toFailures(n,t,this,e)}}else{this.refiner=()=>[]}}assert(e,t){return assert(e,this,t)}create(e,t){return create(e,this,t)}is(e){return is(e,this)}mask(e,t){return mask(e,this,t)}validate(e,t={}){return validate(e,this,t)}}function assert(e,t,n){const r=validate(e,t,{message:n});if(r[0]){throw r[0]}}function create(e,t,n){const r=validate(e,t,{coerce:true,message:n});if(r[0]){throw r[0]}else{return r[1]}}function mask(e,t,n){const r=validate(e,t,{coerce:true,mask:true,message:n});if(r[0]){throw r[0]}else{return r[1]}}function is(e,t){const n=validate(e,t);return!n[0]}function validate(e,t,n={}){const r=run(e,t,n);const i=shiftIterator(r);if(i[0]){const e=new StructError(i[0],(function*(){for(const e of r){if(e[0]){yield e[0]}}}));return[e,undefined]}else{const e=i[1];return[undefined,e]}}function assign(...e){const t=e[0].type===\"type\";const n=e.map((e=>e.schema));const r=Object.assign({},...n);return t?type(r):object(r)}function define(e,t){return new Struct({type:e,schema:null,validator:t})}function deprecated(e,t){return new Struct({...e,refiner:(t,n)=>t===undefined||e.refiner(t,n),validator(n,r){if(n===undefined){return true}else{t(n,r);return e.validator(n,r)}}})}function dynamic(e){return new Struct({type:\"dynamic\",schema:null,*entries(t,n){const r=e(t,n);yield*r.entries(t,n)},validator(t,n){const r=e(t,n);return r.validator(t,n)},coercer(t,n){const r=e(t,n);return r.coercer(t,n)},refiner(t,n){const r=e(t,n);return r.refiner(t,n)}})}function lazy(e){let t;return new Struct({type:\"lazy\",schema:null,*entries(n,r){t??(t=e());yield*t.entries(n,r)},validator(n,r){t??(t=e());return t.validator(n,r)},coercer(n,r){t??(t=e());return t.coercer(n,r)},refiner(n,r){t??(t=e());return t.refiner(n,r)}})}function omit(e,t){const{schema:n}=e;const r={...n};for(const e of t){delete r[e]}switch(e.type){case\"type\":return type(r);default:return object(r)}}function partial(e){const t=e instanceof Struct?{...e.schema}:{...e};for(const e in t){t[e]=optional(t[e])}return object(t)}function pick(e,t){const{schema:n}=e;const r={};for(const e of t){r[e]=n[e]}return object(r)}function struct(e,t){console.warn(\"superstruct@0.11 - The `struct` helper has been renamed to `define`.\");return define(e,t)}function any(){return define(\"any\",(()=>true))}function array(e){return new Struct({type:\"array\",schema:e,*entries(t){if(e&&Array.isArray(t)){for(const[n,r]of t.entries()){yield[n,r,e]}}},coercer(e){return Array.isArray(e)?e.slice():e},validator(e){return Array.isArray(e)||`Expected an array value, but received: ${print(e)}`}})}function bigint(){return define(\"bigint\",(e=>typeof e===\"bigint\"))}function boolean(){return define(\"boolean\",(e=>typeof e===\"boolean\"))}function date(){return define(\"date\",(e=>e instanceof Date&&!isNaN(e.getTime())||`Expected a valid \\`Date\\` object, but received: ${print(e)}`))}function enums(e){const t={};const n=e.map((e=>print(e))).join();for(const n of e){t[n]=n}return new Struct({type:\"enums\",schema:t,validator(t){return e.includes(t)||`Expected one of \\`${n}\\`, but received: ${print(t)}`}})}function func(){return define(\"func\",(e=>typeof e===\"function\"||`Expected a function, but received: ${print(e)}`))}function instance(e){return define(\"instance\",(t=>t instanceof e||`Expected a \\`${e.name}\\` instance, but received: ${print(t)}`))}function integer(){return define(\"integer\",(e=>typeof e===\"number\"&&!isNaN(e)&&Number.isInteger(e)||`Expected an integer, but received: ${print(e)}`))}function intersection(e){return new Struct({type:\"intersection\",schema:null,*entries(t,n){for(const r of e){yield*r.entries(t,n)}},*validator(t,n){for(const r of e){yield*r.validator(t,n)}},*refiner(t,n){for(const r of e){yield*r.refiner(t,n)}}})}function literal(e){const t=print(e);const n=typeof e;return new Struct({type:\"literal\",schema:n===\"string\"||n===\"number\"||n===\"boolean\"?e:null,validator(n){return n===e||`Expected the literal \\`${t}\\`, but received: ${print(n)}`}})}function map(e,t){return new Struct({type:\"map\",schema:null,*entries(n){if(e&&t&&n instanceof Map){for(const[r,i]of n.entries()){yield[r,r,e];yield[r,i,t]}}},coercer(e){return e instanceof Map?new Map(e):e},validator(e){return e instanceof Map||`Expected a \\`Map\\` object, but received: ${print(e)}`}})}function never(){return define(\"never\",(()=>false))}function nullable(e){return new Struct({...e,validator:(t,n)=>t===null||e.validator(t,n),refiner:(t,n)=>t===null||e.refiner(t,n)})}function number(){return define(\"number\",(e=>typeof e===\"number\"&&!isNaN(e)||`Expected a number, but received: ${print(e)}`))}function object(e){const t=e?Object.keys(e):[];const n=never();return new Struct({type:\"object\",schema:e?e:null,*entries(r){if(e&&isObject(r)){const i=new Set(Object.keys(r));for(const n of t){i.delete(n);yield[n,r[n],e[n]]}for(const e of i){yield[e,r[e],n]}}},validator(e){return isObject(e)||`Expected an object, but received: ${print(e)}`},coercer(e){return isObject(e)?{...e}:e}})}function optional(e){return new Struct({...e,validator:(t,n)=>t===undefined||e.validator(t,n),refiner:(t,n)=>t===undefined||e.refiner(t,n)})}function record(e,t){return new Struct({type:\"record\",schema:null,*entries(n){if(isObject(n)){for(const r in n){const i=n[r];yield[r,r,e];yield[r,i,t]}}},validator(e){return isObject(e)||`Expected an object, but received: ${print(e)}`}})}function regexp(){return define(\"regexp\",(e=>e instanceof RegExp))}function set(e){return new Struct({type:\"set\",schema:null,*entries(t){if(e&&t instanceof Set){for(const n of t){yield[n,n,e]}}},coercer(e){return e instanceof Set?new Set(e):e},validator(e){return e instanceof Set||`Expected a \\`Set\\` object, but received: ${print(e)}`}})}function string(){return define(\"string\",(e=>typeof e===\"string\"||`Expected a string, but received: ${print(e)}`))}function tuple(e){const t=never();return new Struct({type:\"tuple\",schema:null,*entries(n){if(Array.isArray(n)){const r=Math.max(e.length,n.length);for(let i=0;i<r;i++){yield[i,n[i],e[i]||t]}}},validator(e){return Array.isArray(e)||`Expected an array, but received: ${print(e)}`}})}function type(e){const t=Object.keys(e);return new Struct({type:\"type\",schema:e,*entries(n){if(isObject(n)){for(const r of t){yield[r,n[r],e[r]]}}},validator(e){return isObject(e)||`Expected an object, but received: ${print(e)}`},coercer(e){return isObject(e)?{...e}:e}})}function union(e){const t=e.map((e=>e.type)).join(\" | \");return new Struct({type:\"union\",schema:null,coercer(t){for(const n of e){const[e,r]=n.validate(t,{coerce:true});if(!e){return r}}return t},validator(n,r){const i=[];for(const t of e){const[...e]=run(n,t,r);const[c]=e;if(!c[0]){return[]}else{for(const[t]of e){if(t){i.push(t)}}}}return[`Expected the value to satisfy a union of \\`${t}\\`, but received: ${print(n)}`,...i]}})}function unknown(){return define(\"unknown\",(()=>true))}function coerce(e,t,n){return new Struct({...e,coercer:(r,i)=>is(r,t)?e.coercer(n(r,i),i):e.coercer(r,i)})}function defaulted(e,t,n={}){return coerce(e,unknown(),(e=>{const r=typeof t===\"function\"?t():t;if(e===undefined){return r}if(!n.strict&&isPlainObject(e)&&isPlainObject(r)){const t={...e};let n=false;for(const e in r){if(t[e]===undefined){t[e]=r[e];n=true}}if(n){return t}}return e}))}function trimmed(e){return coerce(e,string(),(e=>e.trim()))}function empty(e){return refine(e,\"empty\",(t=>{const n=getSize(t);return n===0||`Expected an empty ${e.type} but received one with a size of \\`${n}\\``}))}function getSize(e){if(e instanceof Map||e instanceof Set){return e.size}else{return e.length}}function max(e,t,n={}){const{exclusive:r}=n;return refine(e,\"max\",(n=>r?n<t:n<=t||`Expected a ${e.type} less than ${r?\"\":\"or equal to \"}${t} but received \\`${n}\\``))}function min(e,t,n={}){const{exclusive:r}=n;return refine(e,\"min\",(n=>r?n>t:n>=t||`Expected a ${e.type} greater than ${r?\"\":\"or equal to \"}${t} but received \\`${n}\\``))}function nonempty(e){return refine(e,\"nonempty\",(t=>{const n=getSize(t);return n>0||`Expected a nonempty ${e.type} but received an empty one`}))}function pattern(e,t){return refine(e,\"pattern\",(n=>t.test(n)||`Expected a ${e.type} matching \\`/${t.source}/\\` but received \"${n}\"`))}function size(e,t,n=t){const r=`Expected a ${e.type}`;const i=t===n?`of \\`${t}\\``:`between \\`${t}\\` and \\`${n}\\``;return refine(e,\"size\",(e=>{if(typeof e===\"number\"||e instanceof Date){return t<=e&&e<=n||`${r} ${i} but received \\`${e}\\``}else if(e instanceof Map||e instanceof Set){const{size:c}=e;return t<=c&&c<=n||`${r} with a size ${i} but received one with a size of \\`${c}\\``}else{const{length:c}=e;return t<=c&&c<=n||`${r} with a length ${i} but received one with a length of \\`${c}\\``}}))}function refine(e,t,n){return new Struct({...e,*refiner(r,i){yield*e.refiner(r,i);const c=n(r,i);const o=toFailures(c,i,e,r);for(const e of o){yield{...e,refinement:t}}}})}e.Struct=Struct;e.StructError=StructError;e.any=any;e.array=array;e.assert=assert;e.assign=assign;e.bigint=bigint;e.boolean=boolean;e.coerce=coerce;e.create=create;e.date=date;e.defaulted=defaulted;e.define=define;e.deprecated=deprecated;e.dynamic=dynamic;e.empty=empty;e.enums=enums;e.func=func;e.instance=instance;e.integer=integer;e.intersection=intersection;e.is=is;e.lazy=lazy;e.literal=literal;e.map=map;e.mask=mask;e.max=max;e.min=min;e.never=never;e.nonempty=nonempty;e.nullable=nullable;e.number=number;e.object=object;e.omit=omit;e.optional=optional;e.partial=partial;e.pattern=pattern;e.pick=pick;e.record=record;e.refine=refine;e.regexp=regexp;e.set=set;e.size=size;e.string=string;e.struct=struct;e.trimmed=trimmed;e.tuple=tuple;e.type=type;e.union=union;e.unknown=unknown;e.validate=validate}))}};if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t={};e[318](0,t);module.exports=t})();","// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n __webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => { def[key] = () => (value[key]) });\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import MODERN_BROWSERSLIST_TARGET from './modern-browserslist-target'\n\nexport { MODERN_BROWSERSLIST_TARGET }\n\nexport type ValueOf<T> = Required<T>[keyof T]\n\nexport const COMPILER_NAMES = {\n client: 'client',\n server: 'server',\n edgeServer: 'edge-server',\n} as const\n\nexport type CompilerNameValues = ValueOf<typeof COMPILER_NAMES>\n\nexport const COMPILER_INDEXES: {\n [compilerKey in CompilerNameValues]: number\n} = {\n [COMPILER_NAMES.client]: 0,\n [COMPILER_NAMES.server]: 1,\n [COMPILER_NAMES.edgeServer]: 2,\n} as const\n\nexport const UNDERSCORE_NOT_FOUND_ROUTE = '/_not-found'\nexport const UNDERSCORE_NOT_FOUND_ROUTE_ENTRY = `${UNDERSCORE_NOT_FOUND_ROUTE}/page`\nexport const PHASE_EXPORT = 'phase-export'\nexport const PHASE_PRODUCTION_BUILD = 'phase-production-build'\nexport const PHASE_PRODUCTION_SERVER = 'phase-production-server'\nexport const PHASE_DEVELOPMENT_SERVER = 'phase-development-server'\nexport const PHASE_TEST = 'phase-test'\nexport const PHASE_INFO = 'phase-info'\nexport const PAGES_MANIFEST = 'pages-manifest.json'\nexport const WEBPACK_STATS = 'webpack-stats.json'\nexport const APP_PATHS_MANIFEST = 'app-paths-manifest.json'\nexport const APP_PATH_ROUTES_MANIFEST = 'app-path-routes-manifest.json'\nexport const BUILD_MANIFEST = 'build-manifest.json'\nexport const APP_BUILD_MANIFEST = 'app-build-manifest.json'\nexport const FUNCTIONS_CONFIG_MANIFEST = 'functions-config-manifest.json'\nexport const SUBRESOURCE_INTEGRITY_MANIFEST = 'subresource-integrity-manifest'\nexport const NEXT_FONT_MANIFEST = 'next-font-manifest'\nexport const EXPORT_MARKER = 'export-marker.json'\nexport const EXPORT_DETAIL = 'export-detail.json'\nexport const PRERENDER_MANIFEST = 'prerender-manifest.json'\nexport const ROUTES_MANIFEST = 'routes-manifest.json'\nexport const IMAGES_MANIFEST = 'images-manifest.json'\nexport const SERVER_FILES_MANIFEST = 'required-server-files.json'\nexport const DEV_CLIENT_PAGES_MANIFEST = '_devPagesManifest.json'\nexport const MIDDLEWARE_MANIFEST = 'middleware-manifest.json'\nexport const TURBOPACK_CLIENT_MIDDLEWARE_MANIFEST =\n '_clientMiddlewareManifest.json'\nexport const TURBOPACK_CLIENT_BUILD_MANIFEST = 'client-build-manifest.json'\nexport const DEV_CLIENT_MIDDLEWARE_MANIFEST = '_devMiddlewareManifest.json'\nexport const REACT_LOADABLE_MANIFEST = 'react-loadable-manifest.json'\nexport const SERVER_DIRECTORY = 'server'\nexport const CONFIG_FILES = [\n 'next.config.js',\n 'next.config.mjs',\n 'next.config.ts',\n]\nexport const BUILD_ID_FILE = 'BUILD_ID'\nexport const BLOCKED_PAGES = ['/_document', '/_app', '/_error']\nexport const CLIENT_PUBLIC_FILES_PATH = 'public'\nexport const CLIENT_STATIC_FILES_PATH = 'static'\nexport const STRING_LITERAL_DROP_BUNDLE = '__NEXT_DROP_CLIENT_FILE__'\nexport const NEXT_BUILTIN_DOCUMENT = '__NEXT_BUILTIN_DOCUMENT__'\nexport const BARREL_OPTIMIZATION_PREFIX = '__barrel_optimize__'\n\n// server/[entry]/page_client-reference-manifest.js\nexport const CLIENT_REFERENCE_MANIFEST = 'client-reference-manifest'\n// server/server-reference-manifest\nexport const SERVER_REFERENCE_MANIFEST = 'server-reference-manifest'\n// server/middleware-build-manifest.js\nexport const MIDDLEWARE_BUILD_MANIFEST = 'middleware-build-manifest'\n// server/middleware-react-loadable-manifest.js\nexport const MIDDLEWARE_REACT_LOADABLE_MANIFEST =\n 'middleware-react-loadable-manifest'\n// server/interception-route-rewrite-manifest.js\nexport const INTERCEPTION_ROUTE_REWRITE_MANIFEST =\n 'interception-route-rewrite-manifest'\n// server/dynamic-css-manifest.js\nexport const DYNAMIC_CSS_MANIFEST = 'dynamic-css-manifest'\n\n// static/runtime/main.js\nexport const CLIENT_STATIC_FILES_RUNTIME_MAIN = `main`\nexport const CLIENT_STATIC_FILES_RUNTIME_MAIN_APP = `${CLIENT_STATIC_FILES_RUNTIME_MAIN}-app`\n// next internal client components chunk for layouts\nexport const APP_CLIENT_INTERNALS = 'app-pages-internals'\n// static/runtime/react-refresh.js\nexport const CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH = `react-refresh`\n// static/runtime/amp.js\nexport const CLIENT_STATIC_FILES_RUNTIME_AMP = `amp`\n// static/runtime/webpack.js\nexport const CLIENT_STATIC_FILES_RUNTIME_WEBPACK = `webpack`\n// static/runtime/polyfills.js\nexport const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS = 'polyfills'\nexport const CLIENT_STATIC_FILES_RUNTIME_POLYFILLS_SYMBOL = Symbol(\n CLIENT_STATIC_FILES_RUNTIME_POLYFILLS\n)\nexport const DEFAULT_RUNTIME_WEBPACK = 'webpack-runtime'\nexport const EDGE_RUNTIME_WEBPACK = 'edge-runtime-webpack'\nexport const STATIC_PROPS_ID = '__N_SSG'\nexport const SERVER_PROPS_ID = '__N_SSP'\nexport const DEFAULT_SERIF_FONT = {\n name: 'Times New Roman',\n xAvgCharWidth: 821,\n azAvgWidth: 854.3953488372093,\n unitsPerEm: 2048,\n}\nexport const DEFAULT_SANS_SERIF_FONT = {\n name: 'Arial',\n xAvgCharWidth: 904,\n azAvgWidth: 934.5116279069767,\n unitsPerEm: 2048,\n}\nexport const STATIC_STATUS_PAGES = ['/500']\nexport const TRACE_OUTPUT_VERSION = 1\n// in `MB`\nexport const TURBO_TRACE_DEFAULT_MEMORY_LIMIT = 6000\n\nexport const RSC_MODULE_TYPES = {\n client: 'client',\n server: 'server',\n} as const\n\n// comparing\n// https://nextjs.org/docs/api-reference/edge-runtime\n// with\n// https://nodejs.org/docs/latest/api/globals.html\nexport const EDGE_UNSUPPORTED_NODE_APIS = [\n 'clearImmediate',\n 'setImmediate',\n 'BroadcastChannel',\n 'ByteLengthQueuingStrategy',\n 'CompressionStream',\n 'CountQueuingStrategy',\n 'DecompressionStream',\n 'DomException',\n 'MessageChannel',\n 'MessageEvent',\n 'MessagePort',\n 'ReadableByteStreamController',\n 'ReadableStreamBYOBRequest',\n 'ReadableStreamDefaultController',\n 'TransformStreamDefaultController',\n 'WritableStreamDefaultController',\n]\n\nexport const SYSTEM_ENTRYPOINTS = new Set<string>([\n CLIENT_STATIC_FILES_RUNTIME_MAIN,\n CLIENT_STATIC_FILES_RUNTIME_REACT_REFRESH,\n CLIENT_STATIC_FILES_RUNTIME_AMP,\n CLIENT_STATIC_FILES_RUNTIME_MAIN_APP,\n])\n","import type { UrlWithParsedQuery } from 'url'\nimport { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'\n\nconst DUMMY_ORIGIN = 'http://n'\n\nexport function isFullStringUrl(url: string) {\n return /https?:\\/\\//.test(url)\n}\n\nexport function parseUrl(url: string): URL | undefined {\n let parsed: URL | undefined = undefined\n try {\n parsed = new URL(url, DUMMY_ORIGIN)\n } catch {}\n return parsed\n}\n\nexport function parseReqUrl(url: string): UrlWithParsedQuery | undefined {\n const parsedUrl: URL | undefined = parseUrl(url)\n\n if (!parsedUrl) {\n return\n }\n\n const query: Record<string, string | string[]> = {}\n\n for (const key of parsedUrl.searchParams.keys()) {\n const values = parsedUrl.searchParams.getAll(key)\n query[key] = values.length > 1 ? values : values[0]\n }\n\n const legacyUrl: UrlWithParsedQuery = {\n query,\n hash: parsedUrl.hash,\n search: parsedUrl.search,\n path: parsedUrl.pathname,\n pathname: parsedUrl.pathname,\n href: `${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`,\n host: '',\n hostname: '',\n auth: '',\n protocol: '',\n slashes: null,\n port: '',\n }\n return legacyUrl\n}\n\nexport function stripNextRscUnionQuery(relativeUrl: string): string {\n const urlInstance = new URL(relativeUrl, DUMMY_ORIGIN)\n urlInstance.searchParams.delete(NEXT_RSC_UNION_QUERY)\n\n return urlInstance.pathname + urlInstance.search\n}\n","export interface PathLocale {\n detectedLocale?: string\n pathname: string\n}\n\n/**\n * A cache of lowercased locales for each list of locales. This is stored as a\n * WeakMap so if the locales are garbage collected, the cache entry will be\n * removed as well.\n */\nconst cache = new WeakMap<readonly string[], readonly string[]>()\n\n/**\n * For a pathname that may include a locale from a list of locales, it\n * removes the locale from the pathname returning it alongside with the\n * detected locale.\n *\n * @param pathname A pathname that may include a locale.\n * @param locales A list of locales.\n * @returns The detected locale and pathname without locale\n */\nexport function normalizeLocalePath(\n pathname: string,\n locales?: readonly string[]\n): PathLocale {\n // If locales is undefined, return the pathname as is.\n if (!locales) return { pathname }\n\n // Get the cached lowercased locales or create a new cache entry.\n let lowercasedLocales = cache.get(locales)\n if (!lowercasedLocales) {\n lowercasedLocales = locales.map((locale) => locale.toLowerCase())\n cache.set(locales, lowercasedLocales)\n }\n\n let detectedLocale: string | undefined\n\n // The first segment will be empty, because it has a leading `/`. If\n // there is no further segment, there is no locale (or it's the default).\n const segments = pathname.split('/', 2)\n\n // If there's no second segment (ie, the pathname is just `/`), there's no\n // locale.\n if (!segments[1]) return { pathname }\n\n // The second segment will contain the locale part if any.\n const segment = segments[1].toLowerCase()\n\n // See if the segment matches one of the locales. If it doesn't, there is\n // no locale (or it's the default).\n const index = lowercasedLocales.indexOf(segment)\n if (index < 0) return { pathname }\n\n // Return the case-sensitive locale.\n detectedLocale = locales[index]\n\n // Remove the `/${locale}` part of the pathname.\n pathname = pathname.slice(detectedLocale.length + 1) || '/'\n\n return { pathname, detectedLocale }\n}\n","/**\n * For a given page path, this function ensures that there is a leading slash.\n * If there is not a leading slash, one is added, otherwise it is noop.\n */\nexport function ensureLeadingSlash(path: string) {\n return path.startsWith('/') ? path : `/${path}`\n}\n","import { ensureLeadingSlash } from '../../page-path/ensure-leading-slash'\nimport { isGroupSegment } from '../../segment'\n\n/**\n * Normalizes an app route so it represents the actual request path. Essentially\n * performing the following transformations:\n *\n * - `/(dashboard)/user/[id]/page` to `/user/[id]`\n * - `/(dashboard)/account/page` to `/account`\n * - `/user/[id]/page` to `/user/[id]`\n * - `/account/page` to `/account`\n * - `/page` to `/`\n * - `/(dashboard)/user/[id]/route` to `/user/[id]`\n * - `/(dashboard)/account/route` to `/account`\n * - `/user/[id]/route` to `/user/[id]`\n * - `/account/route` to `/account`\n * - `/route` to `/`\n * - `/` to `/`\n *\n * @param route the app route to normalize\n * @returns the normalized pathname\n */\nexport function normalizeAppPath(route: string) {\n return ensureLeadingSlash(\n route.split('/').reduce((pathname, segment, index, segments) => {\n // Empty segments are ignored.\n if (!segment) {\n return pathname\n }\n\n // Groups are ignored.\n if (isGroupSegment(segment)) {\n return pathname\n }\n\n // Parallel segments are ignored.\n if (segment[0] === '@') {\n return pathname\n }\n\n // The last segment (if it's a leaf) should be ignored.\n if (\n (segment === 'page' || segment === 'route') &&\n index === segments.length - 1\n ) {\n return pathname\n }\n\n return `${pathname}/${segment}`\n }, '')\n )\n}\n\n/**\n * Strips the `.rsc` extension if it's in the pathname.\n * Since this function is used on full urls it checks `?` for searchParams handling.\n */\nexport function normalizeRscURL(url: string) {\n return url.replace(\n /\\.rsc($|\\?)/,\n // $1 ensures `?` is preserved\n '$1'\n )\n}\n","import type { Segment } from '../../server/app-render/types'\n\nexport function isGroupSegment(segment: string) {\n // Use array[0] for performant purpose\n return segment[0] === '(' && segment.endsWith(')')\n}\n\nexport function isParallelRouteSegment(segment: string) {\n return segment.startsWith('@') && segment !== '@children'\n}\n\nexport function addSearchParamsIfPageSegment(\n segment: Segment,\n searchParams: Record<string, string | string[] | undefined>\n) {\n const isPageSegment = segment.includes(PAGE_SEGMENT_KEY)\n\n if (isPageSegment) {\n const stringifiedQuery = JSON.stringify(searchParams)\n return stringifiedQuery !== '{}'\n ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery\n : PAGE_SEGMENT_KEY\n }\n\n return segment\n}\n\nexport const PAGE_SEGMENT_KEY = '__PAGE__'\nexport const DEFAULT_SEGMENT_KEY = '__DEFAULT__'\n","import { normalizeAppPath } from './app-paths'\n\n// order matters here, the first match will be used\nexport const INTERCEPTION_ROUTE_MARKERS = [\n '(..)(..)',\n '(.)',\n '(..)',\n '(...)',\n] as const\n\nexport function isInterceptionRouteAppPath(path: string): boolean {\n // TODO-APP: add more serious validation\n return (\n path\n .split('/')\n .find((segment) =>\n INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n ) !== undefined\n )\n}\n\nexport function extractInterceptionRouteInformation(path: string) {\n let interceptingRoute: string | undefined,\n marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined,\n interceptedRoute: string | undefined\n\n for (const segment of path.split('/')) {\n marker = INTERCEPTION_ROUTE_MARKERS.find((m) => segment.startsWith(m))\n if (marker) {\n ;[interceptingRoute, interceptedRoute] = path.split(marker, 2)\n break\n }\n }\n\n if (!interceptingRoute || !marker || !interceptedRoute) {\n throw new Error(\n `Invalid interception route: ${path}. Must be in the format /<intercepting route>/(..|...|..)(..)/<intercepted route>`\n )\n }\n\n interceptingRoute = normalizeAppPath(interceptingRoute) // normalize the path, e.g. /(blog)/feed -> /feed\n\n switch (marker) {\n case '(.)':\n // (.) indicates that we should match with sibling routes, so we just need to append the intercepted route to the intercepting route\n if (interceptingRoute === '/') {\n interceptedRoute = `/${interceptedRoute}`\n } else {\n interceptedRoute = interceptingRoute + '/' + interceptedRoute\n }\n break\n case '(..)':\n // (..) indicates that we should match at one level up, so we need to remove the last segment of the intercepting route\n if (interceptingRoute === '/') {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..) marker at the root level, use (.) instead.`\n )\n }\n interceptedRoute = interceptingRoute\n .split('/')\n .slice(0, -1)\n .concat(interceptedRoute)\n .join('/')\n break\n case '(...)':\n // (...) will match the route segment in the root directory, so we need to use the root directory to prepend the intercepted route\n interceptedRoute = '/' + interceptedRoute\n break\n case '(..)(..)':\n // (..)(..) indicates that we should match at two levels up, so we need to remove the last two segments of the intercepting route\n\n const splitInterceptingRoute = interceptingRoute.split('/')\n if (splitInterceptingRoute.length <= 2) {\n throw new Error(\n `Invalid interception route: ${path}. Cannot use (..)(..) marker at the root level or one level up.`\n )\n }\n\n interceptedRoute = splitInterceptingRoute\n .slice(0, -2)\n .concat(interceptedRoute)\n .join('/')\n break\n default:\n throw new Error('Invariant: unexpected marker')\n }\n\n return { interceptingRoute, interceptedRoute }\n}\n","import {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from './interception-routes'\n\n// Identify /.*[param].*/ in route string\nconst TEST_ROUTE = /\\/[^/]*\\[[^/]+\\][^/]*(?=\\/|$)/\n\n// Identify /[param]/ in route string\nconst TEST_STRICT_ROUTE = /\\/\\[[^/]+\\](?=\\/|$)/\n\n/**\n * Check if a route is dynamic.\n *\n * @param route - The route to check.\n * @param strict - Whether to use strict mode which prohibits segments with prefixes/suffixes (default: true).\n * @returns Whether the route is dynamic.\n */\nexport function isDynamicRoute(route: string, strict: boolean = true): boolean {\n if (isInterceptionRouteAppPath(route)) {\n route = extractInterceptionRouteInformation(route).interceptedRoute\n }\n\n if (strict) {\n return TEST_STRICT_ROUTE.test(route)\n }\n\n return TEST_ROUTE.test(route)\n}\n","/**\n * Given a path this function will find the pathname, query and hash and return\n * them. This is useful to parse full paths on the client side.\n * @param path A path to parse e.g. /foo/bar?id=1#hash\n */\nexport function parsePath(path: string) {\n const hashIndex = path.indexOf('#')\n const queryIndex = path.indexOf('?')\n const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex)\n\n if (hasQuery || hashIndex > -1) {\n return {\n pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),\n query: hasQuery\n ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined)\n : '',\n hash: hashIndex > -1 ? path.slice(hashIndex) : '',\n }\n }\n\n return { pathname: path, query: '', hash: '' }\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Checks if a given path starts with a given prefix. It ensures it matches\n * exactly without containing extra chars. e.g. prefix /docs should replace\n * for /docs, /docs/, /docs/a but not /docsss\n * @param path The path to check.\n * @param prefix The prefix to check against.\n */\nexport function pathHasPrefix(path: string, prefix: string) {\n if (typeof path !== 'string') {\n return false\n }\n\n const { pathname } = parsePath(path)\n return pathname === prefix || pathname.startsWith(prefix + '/')\n}\n","import { pathHasPrefix } from './path-has-prefix'\n\n/**\n * Given a path and a prefix it will remove the prefix when it exists in the\n * given path. It ensures it matches exactly without containing extra chars\n * and if the prefix is not there it will be noop.\n *\n * @param path The path to remove the prefix from.\n * @param prefix The prefix to be removed.\n */\nexport function removePathPrefix(path: string, prefix: string): string {\n // If the path doesn't start with the prefix we can return it as is. This\n // protects us from situations where the prefix is a substring of the path\n // prefix such as:\n //\n // For prefix: /blog\n //\n // /blog -> true\n // /blog/ -> true\n // /blog/1 -> true\n // /blogging -> false\n // /blogging/ -> false\n // /blogging/1 -> false\n if (!pathHasPrefix(path, prefix)) {\n return path\n }\n\n // Remove the prefix from the path via slicing.\n const withoutPrefix = path.slice(prefix.length)\n\n // If the path without the prefix starts with a `/` we can return it as is.\n if (withoutPrefix.startsWith('/')) {\n return withoutPrefix\n }\n\n // If the path without the prefix doesn't start with a `/` we need to add it\n // back to the path to make sure it's a valid path.\n return `/${withoutPrefix}`\n}\n","// regexp is based on https://github.com/sindresorhus/escape-string-regexp\nconst reHasRegExp = /[|\\\\{}()[\\]^$+*?.-]/\nconst reReplaceRegExp = /[|\\\\{}()[\\]^$+*?.-]/g\n\nexport function escapeStringRegexp(str: string) {\n // see also: https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/escapeRegExp.js#L23\n if (reHasRegExp.test(str)) {\n return str.replace(reReplaceRegExp, '\\\\$&')\n }\n return str\n}\n","/**\n * Removes the trailing slash for a given route or page path. Preserves the\n * root page. Examples:\n * - `/foo/bar/` -> `/foo/bar`\n * - `/foo/bar` -> `/foo/bar`\n * - `/` -> `/`\n */\nexport function removeTrailingSlash(route: string) {\n return route.replace(/\\/$/, '') || '/'\n}\n","import {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../../../lib/constants'\nimport { INTERCEPTION_ROUTE_MARKERS } from './interception-routes'\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { removeTrailingSlash } from './remove-trailing-slash'\n\nexport interface Group {\n pos: number\n repeat: boolean\n optional: boolean\n}\n\nexport interface RouteRegex {\n groups: { [groupName: string]: Group }\n re: RegExp\n}\n\ntype GetNamedRouteRegexOptions = {\n /**\n * Whether to prefix the route keys with the NEXT_INTERCEPTION_MARKER_PREFIX\n * or NEXT_QUERY_PARAM_PREFIX. This is only relevant when creating the\n * routes-manifest during the build.\n */\n prefixRouteKeys: boolean\n\n /**\n * Whether to include the suffix in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n\n /**\n * Whether to backtrack duplicate keys. This is only relevant when creating\n * the routes-manifest during the build.\n */\n backreferenceDuplicateKeys?: boolean\n}\n\ntype GetRouteRegexOptions = {\n /**\n * Whether to include extra parts in the route regex. This means that when you\n * have something like `/[...slug].json` the `.json` part will be included\n * in the regex, yielding `/(.*).json` as the regex.\n */\n includeSuffix?: boolean\n\n /**\n * Whether to include the prefix in the route regex. This means that when you\n * have something like `/[...slug].json` the `/` part will be included\n * in the regex, yielding `^/(.*).json$` as the regex.\n *\n * Note that interception markers will already be included without the need\n * of adding this option.\n */\n includePrefix?: boolean\n\n /**\n * Whether to exclude the optional trailing slash from the route regex.\n */\n excludeOptionalTrailingSlash?: boolean\n}\n\n/**\n * Regular expression pattern used to match route parameters.\n * Matches both single parameters and parameter groups.\n * Examples:\n * - `[[...slug]]` matches parameter group with key 'slug', repeat: true, optional: true\n * - `[...slug]` matches parameter group with key 'slug', repeat: true, optional: false\n * - `[[foo]]` matches parameter with key 'foo', repeat: false, optional: true\n * - `[bar]` matches parameter with key 'bar', repeat: false, optional: false\n */\nconst PARAMETER_PATTERN = /^([^[]*)\\[((?:\\[[^\\]]*\\])|[^\\]]+)\\](.*)$/\n\n/**\n * Parses a given parameter from a route to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[[...slug]]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[[foo]]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `[bar]` -> `{ key: 'bar', repeat: false, optional: false }`\n * - `fizz` -> `{ key: 'fizz', repeat: false, optional: false }`\n * @param param - The parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nexport function parseParameter(param: string) {\n const match = param.match(PARAMETER_PATTERN)\n\n if (!match) {\n return parseMatchedParameter(param)\n }\n\n return parseMatchedParameter(match[2])\n}\n\n/**\n * Parses a matched parameter from the PARAMETER_PATTERN regex to a data structure that can be used\n * to generate the parametrized route.\n * Examples:\n * - `[...slug]` -> `{ key: 'slug', repeat: true, optional: true }`\n * - `...slug` -> `{ key: 'slug', repeat: true, optional: false }`\n * - `[foo]` -> `{ key: 'foo', repeat: false, optional: true }`\n * - `bar` -> `{ key: 'bar', repeat: false, optional: false }`\n * @param param - The matched parameter to parse.\n * @returns The parsed parameter as a data structure.\n */\nfunction parseMatchedParameter(param: string) {\n const optional = param.startsWith('[') && param.endsWith(']')\n if (optional) {\n param = param.slice(1, -1)\n }\n const repeat = param.startsWith('...')\n if (repeat) {\n param = param.slice(3)\n }\n return { key: param, repeat, optional }\n}\n\nfunction getParametrizedRoute(\n route: string,\n includeSuffix: boolean,\n includePrefix: boolean\n) {\n const groups: { [groupName: string]: Group } = {}\n let groupIndex = 1\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const markerMatch = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (markerMatch && paramMatches && paramMatches[2]) {\n const { key, optional, repeat } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n segments.push(`/${escapeStringRegexp(markerMatch)}([^/]+?)`)\n } else if (paramMatches && paramMatches[2]) {\n const { key, repeat, optional } = parseMatchedParameter(paramMatches[2])\n groups[key] = { pos: groupIndex++, repeat, optional }\n\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = repeat ? (optional ? '(?:/(.+?))?' : '/(.+?)') : '/([^/]+?)'\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n parameterizedRoute: segments.join(''),\n groups,\n }\n}\n\n/**\n * From a normalized route this function generates a regular expression and\n * a corresponding groups object intended to be used to store matching groups\n * from the regular expression.\n */\nexport function getRouteRegex(\n normalizedRoute: string,\n {\n includeSuffix = false,\n includePrefix = false,\n excludeOptionalTrailingSlash = false,\n }: GetRouteRegexOptions = {}\n): RouteRegex {\n const { parameterizedRoute, groups } = getParametrizedRoute(\n normalizedRoute,\n includeSuffix,\n includePrefix\n )\n\n let re = parameterizedRoute\n if (!excludeOptionalTrailingSlash) {\n re += '(?:/)?'\n }\n\n return {\n re: new RegExp(`^${re}$`),\n groups: groups,\n }\n}\n\n/**\n * Builds a function to generate a minimal routeKey using only a-z and minimal\n * number of characters.\n */\nfunction buildGetSafeRouteKey() {\n let i = 0\n\n return () => {\n let routeKey = ''\n let j = ++i\n while (j > 0) {\n routeKey += String.fromCharCode(97 + ((j - 1) % 26))\n j = Math.floor((j - 1) / 26)\n }\n return routeKey\n }\n}\n\nfunction getSafeKeyFromSegment({\n interceptionMarker,\n getSafeRouteKey,\n segment,\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n}: {\n interceptionMarker?: string\n getSafeRouteKey: () => string\n segment: string\n routeKeys: Record<string, string>\n keyPrefix?: string\n backreferenceDuplicateKeys: boolean\n}) {\n const { key, optional, repeat } = parseMatchedParameter(segment)\n\n // replace any non-word characters since they can break\n // the named regex\n let cleanedKey = key.replace(/\\W/g, '')\n\n if (keyPrefix) {\n cleanedKey = `${keyPrefix}${cleanedKey}`\n }\n let invalidKey = false\n\n // check if the key is still invalid and fallback to using a known\n // safe key\n if (cleanedKey.length === 0 || cleanedKey.length > 30) {\n invalidKey = true\n }\n if (!isNaN(parseInt(cleanedKey.slice(0, 1)))) {\n invalidKey = true\n }\n\n if (invalidKey) {\n cleanedKey = getSafeRouteKey()\n }\n\n const duplicateKey = cleanedKey in routeKeys\n\n if (keyPrefix) {\n routeKeys[cleanedKey] = `${keyPrefix}${key}`\n } else {\n routeKeys[cleanedKey] = key\n }\n\n // if the segment has an interception marker, make sure that's part of the regex pattern\n // this is to ensure that the route with the interception marker doesn't incorrectly match\n // the non-intercepted route (ie /app/(.)[username] should not match /app/[username])\n const interceptionPrefix = interceptionMarker\n ? escapeStringRegexp(interceptionMarker)\n : ''\n\n let pattern: string\n if (duplicateKey && backreferenceDuplicateKeys) {\n // Use a backreference to the key to ensure that the key is the same value\n // in each of the placeholders.\n pattern = `\\\\k<${cleanedKey}>`\n } else if (repeat) {\n pattern = `(?<${cleanedKey}>.+?)`\n } else {\n pattern = `(?<${cleanedKey}>[^/]+?)`\n }\n\n return optional\n ? `(?:/${interceptionPrefix}${pattern})?`\n : `/${interceptionPrefix}${pattern}`\n}\n\nfunction getNamedParametrizedRoute(\n route: string,\n prefixRouteKeys: boolean,\n includeSuffix: boolean,\n includePrefix: boolean,\n backreferenceDuplicateKeys: boolean\n) {\n const getSafeRouteKey = buildGetSafeRouteKey()\n const routeKeys: { [named: string]: string } = {}\n\n const segments: string[] = []\n for (const segment of removeTrailingSlash(route).slice(1).split('/')) {\n const hasInterceptionMarker = INTERCEPTION_ROUTE_MARKERS.some((m) =>\n segment.startsWith(m)\n )\n\n const paramMatches = segment.match(PARAMETER_PATTERN) // Check for parameters\n\n if (hasInterceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n segments.push(\n getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker: paramMatches[1],\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys\n ? NEXT_INTERCEPTION_MARKER_PREFIX\n : undefined,\n backreferenceDuplicateKeys,\n })\n )\n } else if (paramMatches && paramMatches[2]) {\n // If there's a prefix, add it to the segments if it's enabled.\n if (includePrefix && paramMatches[1]) {\n segments.push(`/${escapeStringRegexp(paramMatches[1])}`)\n }\n\n let s = getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix: prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined,\n backreferenceDuplicateKeys,\n })\n\n // Remove the leading slash if includePrefix already added it.\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n }\n\n // If there's a suffix, add it to the segments if it's enabled.\n if (includeSuffix && paramMatches && paramMatches[3]) {\n segments.push(escapeStringRegexp(paramMatches[3]))\n }\n }\n\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys,\n }\n}\n\n/**\n * This function extends `getRouteRegex` generating also a named regexp where\n * each group is named along with a routeKeys object that indexes the assigned\n * named group with its corresponding key. When the routeKeys need to be\n * prefixed to uniquely identify internally the \"prefixRouteKey\" arg should\n * be \"true\" currently this is only the case when creating the routes-manifest\n * during the build\n */\nexport function getNamedRouteRegex(\n normalizedRoute: string,\n options: GetNamedRouteRegexOptions\n) {\n const result = getNamedParametrizedRoute(\n normalizedRoute,\n options.prefixRouteKeys,\n options.includeSuffix ?? false,\n options.includePrefix ?? false,\n options.backreferenceDuplicateKeys ?? false\n )\n\n let namedRegex = result.namedParameterizedRoute\n if (!options.excludeOptionalTrailingSlash) {\n namedRegex += '(?:/)?'\n }\n\n return {\n ...getRouteRegex(normalizedRoute, options),\n namedRegex: `^${namedRegex}$`,\n routeKeys: result.routeKeys,\n }\n}\n\n/**\n * Generates a named regexp.\n * This is intended to be using for build time only.\n */\nexport function getNamedMiddlewareRegex(\n normalizedRoute: string,\n options: {\n catchAll?: boolean\n }\n) {\n const { parameterizedRoute } = getParametrizedRoute(\n normalizedRoute,\n false,\n false\n )\n const { catchAll = true } = options\n if (parameterizedRoute === '/') {\n let catchAllRegex = catchAll ? '.*' : ''\n return {\n namedRegex: `^/${catchAllRegex}$`,\n }\n }\n\n const { namedParameterizedRoute } = getNamedParametrizedRoute(\n normalizedRoute,\n false,\n false,\n false,\n false\n )\n let catchAllGroupedRegex = catchAll ? '(?:(/.*)?)' : ''\n return {\n namedRegex: `^${namedParameterizedRoute}${catchAllGroupedRegex}$`,\n }\n}\n","import type { HtmlProps } from './html-context.shared-runtime'\nimport type { ComponentType, JSX } from 'react'\nimport type { DomainLocale } from '../../server/config'\nimport type { Env } from '@next/env'\nimport type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextRouter } from './router/router'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { PreviewData } from '../../types'\nimport type { COMPILER_NAMES } from './constants'\nimport type fs from 'fs'\n\nexport type NextComponentType<\n Context extends BaseContext = NextPageContext,\n InitialProps = {},\n Props = {},\n> = ComponentType<Props> & {\n /**\n * Used for initial page load data population. Data returned from `getInitialProps` is serialized when server rendered.\n * Make sure to return plain `Object` without using `Date`, `Map`, `Set`.\n * @param context Context of `page`\n */\n getInitialProps?(context: Context): InitialProps | Promise<InitialProps>\n}\n\nexport type DocumentType = NextComponentType<\n DocumentContext,\n DocumentInitialProps,\n DocumentProps\n>\n\nexport type AppType<P = {}> = NextComponentType<\n AppContextType,\n P,\n AppPropsType<any, P>\n>\n\nexport type AppTreeType = ComponentType<\n AppInitialProps & { [name: string]: any }\n>\n\n/**\n * Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team.\n * https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting\n */\nexport const WEB_VITALS = ['CLS', 'FCP', 'FID', 'INP', 'LCP', 'TTFB'] as const\nexport type NextWebVitalsMetric = {\n id: string\n startTime: number\n value: number\n attribution?: { [key: string]: unknown }\n} & (\n | {\n label: 'web-vital'\n name: (typeof WEB_VITALS)[number]\n }\n | {\n label: 'custom'\n name:\n | 'Next.js-hydration'\n | 'Next.js-route-change-to-render'\n | 'Next.js-render'\n }\n)\n\nexport type Enhancer<C> = (Component: C) => C\n\nexport type ComponentsEnhancer =\n | {\n enhanceApp?: Enhancer<AppType>\n enhanceComponent?: Enhancer<NextComponentType>\n }\n | Enhancer<NextComponentType>\n\nexport type RenderPageResult = {\n html: string\n head?: Array<JSX.Element | null>\n}\n\nexport type RenderPage = (\n options?: ComponentsEnhancer\n) => DocumentInitialProps | Promise<DocumentInitialProps>\n\nexport type BaseContext = {\n res?: ServerResponse\n [k: string]: any\n}\n\nexport type NEXT_DATA = {\n props: Record<string, any>\n page: string\n query: ParsedUrlQuery\n buildId: string\n assetPrefix?: string\n runtimeConfig?: { [key: string]: any }\n nextExport?: boolean\n autoExport?: boolean\n isFallback?: boolean\n isExperimentalCompile?: boolean\n dynamicIds?: (string | number)[]\n err?: Error & {\n statusCode?: number\n source?: typeof COMPILER_NAMES.server | typeof COMPILER_NAMES.edgeServer\n }\n gsp?: boolean\n gssp?: boolean\n customServer?: boolean\n gip?: boolean\n appGip?: boolean\n locale?: string\n locales?: readonly string[]\n defaultLocale?: string\n domainLocales?: readonly DomainLocale[]\n scriptLoader?: any[]\n isPreview?: boolean\n notFoundSrcPage?: string\n}\n\n/**\n * `Next` context\n */\nexport interface NextPageContext {\n /**\n * Error object if encountered during rendering\n */\n err?: (Error & { statusCode?: number }) | null\n /**\n * `HTTP` request object.\n */\n req?: IncomingMessage\n /**\n * `HTTP` response object.\n */\n res?: ServerResponse\n /**\n * Path section of `URL`.\n */\n pathname: string\n /**\n * Query string section of `URL` parsed as an object.\n */\n query: ParsedUrlQuery\n /**\n * `String` of the actual path including query.\n */\n asPath?: string\n /**\n * The currently active locale\n */\n locale?: string\n /**\n * All configured locales\n */\n locales?: readonly string[]\n /**\n * The configured default locale\n */\n defaultLocale?: string\n /**\n * `Component` the tree of the App to use if needing to render separately\n */\n AppTree: AppTreeType\n}\n\nexport type AppContextType<Router extends NextRouter = NextRouter> = {\n Component: NextComponentType<NextPageContext>\n AppTree: AppTreeType\n ctx: NextPageContext\n router: Router\n}\n\nexport type AppInitialProps<PageProps = any> = {\n pageProps: PageProps\n}\n\nexport type AppPropsType<\n Router extends NextRouter = NextRouter,\n PageProps = {},\n> = AppInitialProps<PageProps> & {\n Component: NextComponentType<NextPageContext, any, any>\n router: Router\n __N_SSG?: boolean\n __N_SSP?: boolean\n}\n\nexport type DocumentContext = NextPageContext & {\n renderPage: RenderPage\n defaultGetInitialProps(\n ctx: DocumentContext,\n options?: { nonce?: string }\n ): Promise<DocumentInitialProps>\n}\n\nexport type DocumentInitialProps = RenderPageResult & {\n styles?: React.ReactElement[] | Iterable<React.ReactNode> | JSX.Element\n}\n\nexport type DocumentProps = DocumentInitialProps & HtmlProps\n\n/**\n * Next `API` route request\n */\nexport interface NextApiRequest extends IncomingMessage {\n /**\n * Object of `query` values from url\n */\n query: Partial<{\n [key: string]: string | string[]\n }>\n /**\n * Object of `cookies` from header\n */\n cookies: Partial<{\n [key: string]: string\n }>\n\n body: any\n\n env: Env\n\n draftMode?: boolean\n\n preview?: boolean\n /**\n * Preview data set on the request, if any\n * */\n previewData?: PreviewData\n}\n\n/**\n * Send body of response\n */\ntype Send<T> = (body: T) => void\n\n/**\n * Next `API` route response\n */\nexport type NextApiResponse<Data = any> = ServerResponse & {\n /**\n * Send data `any` data in response\n */\n send: Send<Data>\n /**\n * Send data `json` data in response\n */\n json: Send<Data>\n status: (statusCode: number) => NextApiResponse<Data>\n redirect(url: string): NextApiResponse<Data>\n redirect(status: number, url: string): NextApiResponse<Data>\n\n /**\n * Set draft mode\n */\n setDraftMode: (options: { enable: boolean }) => NextApiResponse<Data>\n\n /**\n * Set preview data for Next.js' prerender mode\n */\n setPreviewData: (\n data: object | string,\n options?: {\n /**\n * Specifies the number (in seconds) for the preview session to last for.\n * The given number will be converted to an integer by rounding down.\n * By default, no maximum age is set and the preview session finishes\n * when the client shuts down (browser is closed).\n */\n maxAge?: number\n /**\n * Specifies the path for the preview session to work under. By default,\n * the path is considered the \"default path\", i.e., any pages under \"/\".\n */\n path?: string\n }\n ) => NextApiResponse<Data>\n\n /**\n * Clear preview data for Next.js' prerender mode\n */\n clearPreviewData: (options?: { path?: string }) => NextApiResponse<Data>\n\n /**\n * Revalidate a specific page and regenerate it using On-Demand Incremental\n * Static Regeneration.\n * The path should be an actual path, not a rewritten path. E.g. for\n * \"/blog/[slug]\" this should be \"/blog/post-1\".\n * @link https://nextjs.org/docs/app/building-your-application/data-fetching/incremental-static-regeneration#on-demand-revalidation-with-revalidatepath\n */\n revalidate: (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => Promise<void>\n}\n\n/**\n * Next `API` route handler\n */\nexport type NextApiHandler<T = any> = (\n req: NextApiRequest,\n res: NextApiResponse<T>\n) => unknown | Promise<unknown>\n\n/**\n * Utils\n */\nexport function execOnce<T extends (...args: any[]) => ReturnType<T>>(\n fn: T\n): T {\n let used = false\n let result: ReturnType<T>\n\n return ((...args: any[]) => {\n if (!used) {\n used = true\n result = fn(...args)\n }\n return result\n }) as T\n}\n\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/\nexport const isAbsoluteUrl = (url: string) => ABSOLUTE_URL_REGEX.test(url)\n\nexport function getLocationOrigin() {\n const { protocol, hostname, port } = window.location\n return `${protocol}//${hostname}${port ? ':' + port : ''}`\n}\n\nexport function getURL() {\n const { href } = window.location\n const origin = getLocationOrigin()\n return href.substring(origin.length)\n}\n\nexport function getDisplayName<P>(Component: ComponentType<P>) {\n return typeof Component === 'string'\n ? Component\n : Component.displayName || Component.name || 'Unknown'\n}\n\nexport function isResSent(res: ServerResponse) {\n return res.finished || res.headersSent\n}\n\nexport function normalizeRepeatedSlashes(url: string) {\n const urlParts = url.split('?')\n const urlNoQuery = urlParts[0]\n\n return (\n urlNoQuery\n // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/')\n .replace(/\\/\\/+/g, '/') +\n (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '')\n )\n}\n\nexport async function loadGetInitialProps<\n C extends BaseContext,\n IP = {},\n P = {},\n>(App: NextComponentType<C, IP, P>, ctx: C): Promise<IP> {\n if (process.env.NODE_ENV !== 'production') {\n if (App.prototype?.getInitialProps) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`\n throw new Error(message)\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || (ctx.ctx && ctx.ctx.res)\n\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx),\n }\n }\n return {} as IP\n }\n\n const props = await App.getInitialProps(ctx)\n\n if (res && isResSent(res)) {\n return props\n }\n\n if (!props) {\n const message = `\"${getDisplayName(\n App\n )}.getInitialProps()\" should resolve to an object. But found \"${props}\" instead.`\n throw new Error(message)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\n `${getDisplayName(\n App\n )} returned an empty object from \\`getInitialProps\\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`\n )\n }\n }\n\n return props\n}\n\nexport const SP = typeof performance !== 'undefined'\nexport const ST =\n SP &&\n (['mark', 'measure', 'getEntriesByName'] as const).every(\n (method) => typeof performance[method] === 'function'\n )\n\nexport class DecodeError extends Error {}\nexport class NormalizeError extends Error {}\nexport class PageNotFoundError extends Error {\n code: string\n\n constructor(page: string) {\n super()\n this.code = 'ENOENT'\n this.name = 'PageNotFoundError'\n this.message = `Cannot find module for page: ${page}`\n }\n}\n\nexport class MissingStaticPage extends Error {\n constructor(page: string, message: string) {\n super()\n this.message = `Failed to load static file for page: ${page} ${message}`\n }\n}\n\nexport class MiddlewareNotFoundError extends Error {\n code: string\n constructor() {\n super()\n this.code = 'ENOENT'\n this.message = `Cannot find the middleware module`\n }\n}\n\nexport interface CacheFs {\n existsSync: typeof fs.existsSync\n readFile: typeof fs.promises.readFile\n readFileSync: typeof fs.readFileSync\n writeFile(f: string, d: any): Promise<void>\n mkdir(dir: string): Promise<void | string>\n stat(f: string): Promise<{ mtime: Date }>\n}\n\nexport function stringifyError(error: Error) {\n return JSON.stringify({ message: error.message, stack: error.stack })\n}\n","import type { Token } from 'next/dist/compiled/path-to-regexp'\n\n/**\n * Route pattern normalization utilities for path-to-regexp compatibility.\n *\n * path-to-regexp 6.3.0+ introduced stricter validation that rejects certain\n * patterns commonly used in Next.js interception routes. This module provides\n * normalization functions to make Next.js route patterns compatible with the\n * updated library while preserving all functionality.\n */\n\n/**\n * Internal separator used to normalize adjacent parameter patterns.\n * This unique marker is inserted between adjacent parameters and stripped out\n * during parameter extraction to avoid conflicts with real URL content.\n */\nconst PARAM_SEPARATOR = '_NEXTSEP_'\n\n/**\n * Detects if a route pattern needs normalization for path-to-regexp compatibility.\n */\nexport function hasAdjacentParameterIssues(route: string): boolean {\n if (typeof route !== 'string') return false\n\n // Check for interception route markers followed immediately by parameters\n // Pattern: /(.):param, /(..):param, /(...):param, /(.)(.):param etc.\n // These patterns cause \"Must have text between two parameters\" errors\n if (/\\/\\(\\.{1,3}\\):[^/\\s]+/.test(route)) {\n return true\n }\n\n // Check for basic adjacent parameters without separators\n // Pattern: :param1:param2 (but not :param* or other URL patterns)\n if (/:[a-zA-Z_][a-zA-Z0-9_]*:[a-zA-Z_][a-zA-Z0-9_]*/.test(route)) {\n return true\n }\n\n return false\n}\n\n/**\n * Normalizes route patterns that have adjacent parameters without text between them.\n * Inserts a unique separator that can be safely stripped out later.\n */\nexport function normalizeAdjacentParameters(route: string): string {\n let normalized = route\n\n // Handle interception route patterns: (.):param -> (.)_NEXTSEP_:param\n normalized = normalized.replace(\n /(\\([^)]*\\)):([^/\\s]+)/g,\n `$1${PARAM_SEPARATOR}:$2`\n )\n\n // Handle other adjacent parameter patterns: :param1:param2 -> :param1_NEXTSEP_:param2\n normalized = normalized.replace(/:([^:/\\s)]+)(?=:)/g, `:$1${PARAM_SEPARATOR}`)\n\n return normalized\n}\n\n/**\n * Normalizes tokens that have repeating modifiers (* or +) but empty prefix and suffix.\n *\n * path-to-regexp 6.3.0+ introduced validation that throws:\n * \"Can not repeat without prefix/suffix\"\n *\n * This occurs when a token has modifier: '*' or '+' with both prefix: '' and suffix: ''\n */\nexport function normalizeTokensForRegexp(tokens: Token[]): Token[] {\n return tokens.map((token) => {\n // Token union type: Token = string | TokenObject\n // Literal path segments are strings, parameters/wildcards are objects\n if (\n typeof token === 'object' &&\n token !== null &&\n // Not all token objects have 'modifier' property (e.g., simple text tokens)\n 'modifier' in token &&\n // Only repeating modifiers (* or +) cause the validation error\n // Other modifiers like '?' (optional) are fine\n (token.modifier === '*' || token.modifier === '+') &&\n // Token objects can have different shapes depending on route pattern\n 'prefix' in token &&\n 'suffix' in token &&\n // Both prefix and suffix must be empty strings\n // This is what causes the validation error in path-to-regexp\n token.prefix === '' &&\n token.suffix === ''\n ) {\n // Add minimal prefix to satisfy path-to-regexp validation\n // We use '/' as it's the most common path delimiter and won't break route matching\n // The prefix gets used in regex generation but doesn't affect parameter extraction\n return {\n ...token,\n prefix: '/',\n }\n }\n return token\n })\n}\n\n/**\n * Strips normalization separators from extracted route parameters.\n * Used by both server and client code to clean up parameters after route matching.\n */\nexport function stripParameterSeparators(\n params: Record<string, any>\n): Record<string, any> {\n const cleaned: Record<string, any> = {}\n\n for (const [key, value] of Object.entries(params)) {\n if (typeof value === 'string') {\n // Remove the separator if it appears at the start of parameter values\n cleaned[key] = value.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n } else if (Array.isArray(value)) {\n // Handle array parameters (from repeated route segments)\n cleaned[key] = value.map((item) =>\n typeof item === 'string'\n ? item.replace(new RegExp(`^${PARAM_SEPARATOR}`), '')\n : item\n )\n } else {\n cleaned[key] = value\n }\n }\n\n return cleaned\n}\n","/**\n * Client-safe utilities for route matching that don't import server-side\n * utilities to avoid bundling issues with Turbopack\n */\n\nimport type {\n Key,\n TokensToRegexpOptions,\n ParseOptions,\n TokensToFunctionOptions,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n pathToRegexp,\n compile,\n regexpToFunction,\n} from 'next/dist/compiled/path-to-regexp'\nimport {\n hasAdjacentParameterIssues,\n normalizeAdjacentParameters,\n stripParameterSeparators,\n} from '../../../../lib/route-pattern-normalizer'\n\n/**\n * Client-safe wrapper around pathToRegexp that handles path-to-regexp 6.3.0+ validation errors.\n * This includes both \"Can not repeat without prefix/suffix\" and \"Must have text between parameters\" errors.\n */\nexport function safePathToRegexp(\n route: string | RegExp | Array<string | RegExp>,\n keys?: Key[],\n options?: TokensToRegexpOptions & ParseOptions\n): RegExp {\n if (typeof route !== 'string') {\n return pathToRegexp(route, keys, options)\n }\n\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return pathToRegexp(routeToUse, keys, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return pathToRegexp(normalizedRoute, keys, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around compile that handles path-to-regexp 6.3.0+ validation errors.\n * No server-side error reporting to avoid bundling issues.\n */\nexport function safeCompile(\n route: string,\n options?: TokensToFunctionOptions & ParseOptions\n) {\n // Check if normalization is needed and cache the result\n const needsNormalization = hasAdjacentParameterIssues(route)\n const routeToUse = needsNormalization\n ? normalizeAdjacentParameters(route)\n : route\n\n try {\n return compile(routeToUse, options)\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n return compile(normalizedRoute, options)\n } catch (retryError) {\n // If that doesn't work, fall back to original error\n throw error\n }\n }\n throw error\n }\n}\n\n/**\n * Client-safe wrapper around regexpToFunction that automatically cleans parameters.\n */\nexport function safeRegexpToFunction<\n T extends Record<string, any> = Record<string, any>,\n>(regexp: RegExp, keys?: Key[]): (pathname: string) => { params: T } | false {\n const originalMatcher = regexpToFunction<T>(regexp, keys || [])\n\n return (pathname: string) => {\n const result = originalMatcher(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return {\n ...result,\n params: stripParameterSeparators(result.params as any) as T,\n }\n }\n}\n\n/**\n * Safe wrapper for route matcher functions that automatically cleans parameters.\n * This is client-safe and doesn't import path-to-regexp.\n */\nexport function safeRouteMatcher<T extends Record<string, any>>(\n matcherFn: (pathname: string) => false | T\n): (pathname: string) => false | T {\n return (pathname: string) => {\n const result = matcherFn(pathname)\n if (!result) return false\n\n // Clean parameters before returning\n return stripParameterSeparators(result) as T\n }\n}\n","import type { Group } from './route-regex'\nimport { DecodeError } from '../../utils'\nimport type { Params } from '../../../../server/request/params'\nimport { safeRouteMatcher } from './route-match-utils'\n\nexport interface RouteMatchFn {\n (pathname: string): false | Params\n}\n\ntype RouteMatcherOptions = {\n // We only use the exec method of the RegExp object. This helps us avoid using\n // type assertions that the passed in properties are of the correct type.\n re: Pick<RegExp, 'exec'>\n groups: Record<string, Group>\n}\n\nexport function getRouteMatcher({\n re,\n groups,\n}: RouteMatcherOptions): RouteMatchFn {\n const rawMatcher = (pathname: string) => {\n const routeMatch = re.exec(pathname)\n if (!routeMatch) return false\n\n const decode = (param: string) => {\n try {\n return decodeURIComponent(param)\n } catch {\n throw new DecodeError('failed to decode param')\n }\n }\n\n const params: Params = {}\n for (const [key, group] of Object.entries(groups)) {\n const match = routeMatch[group.pos]\n if (match !== undefined) {\n if (group.repeat) {\n params[key] = match.split('/').map((entry) => decode(entry))\n } else {\n params[key] = decode(match)\n }\n }\n }\n\n return params\n }\n\n // Wrap with safe matcher to handle parameter cleaning\n return safeRouteMatcher(rawMatcher)\n}\n","import type { ParsedUrlQuery } from 'querystring'\n\nexport function searchParamsToUrlQuery(\n searchParams: URLSearchParams\n): ParsedUrlQuery {\n const query: ParsedUrlQuery = {}\n for (const [key, value] of searchParams.entries()) {\n const existing = query[key]\n if (typeof existing === 'undefined') {\n query[key] = value\n } else if (Array.isArray(existing)) {\n existing.push(value)\n } else {\n query[key] = [existing, value]\n }\n }\n return query\n}\n\nfunction stringifyUrlQueryParam(param: unknown): string {\n if (typeof param === 'string') {\n return param\n }\n\n if (\n (typeof param === 'number' && !isNaN(param)) ||\n typeof param === 'boolean'\n ) {\n return String(param)\n } else {\n return ''\n }\n}\n\nexport function urlQueryToSearchParams(query: ParsedUrlQuery): URLSearchParams {\n const searchParams = new URLSearchParams()\n for (const [key, value] of Object.entries(query)) {\n if (Array.isArray(value)) {\n for (const item of value) {\n searchParams.append(key, stringifyUrlQueryParam(item))\n }\n } else {\n searchParams.set(key, stringifyUrlQueryParam(value))\n }\n }\n return searchParams\n}\n\nexport function assign(\n target: URLSearchParams,\n ...searchParamsList: URLSearchParams[]\n): URLSearchParams {\n for (const searchParams of searchParamsList) {\n for (const key of searchParams.keys()) {\n target.delete(key)\n }\n\n for (const [key, value] of searchParams.entries()) {\n target.append(key, value)\n }\n }\n\n return target\n}\n","import type { NextApiRequestCookies } from '.'\n\n/**\n * Parse cookies from the `headers` of request\n * @param req request object\n */\n\nexport function getCookieParser(headers: {\n [key: string]: string | string[] | null | undefined\n}): () => NextApiRequestCookies {\n return function parseCookie(): NextApiRequestCookies {\n const { cookie } = headers\n\n if (!cookie) {\n return {}\n }\n\n const { parse: parseCookieFn } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie)\n }\n}\n","import type { IncomingMessage } from 'http'\nimport type { Key } from 'next/dist/compiled/path-to-regexp'\nimport type { NextParsedUrlQuery } from '../../../../server/request-meta'\nimport type { RouteHas } from '../../../../lib/load-custom-routes'\nimport type { BaseNextRequest } from '../../../../server/base-http'\n\nimport { escapeStringRegexp } from '../../escape-regexp'\nimport { parseUrl } from './parse-url'\nimport {\n INTERCEPTION_ROUTE_MARKERS,\n isInterceptionRouteAppPath,\n} from './interception-routes'\nimport { getCookieParser } from '../../../../server/api-utils/get-cookie-parser'\nimport type { Params } from '../../../../server/request/params'\nimport { safePathToRegexp, safeCompile } from './route-match-utils'\n\n/**\n * Ensure only a-zA-Z are used for param names for proper interpolating\n * with path-to-regexp\n */\nfunction getSafeParamName(paramName: string) {\n let newParamName = ''\n\n for (let i = 0; i < paramName.length; i++) {\n const charCode = paramName.charCodeAt(i)\n\n if (\n (charCode > 64 && charCode < 91) || // A-Z\n (charCode > 96 && charCode < 123) // a-z\n ) {\n newParamName += paramName[i]\n }\n }\n return newParamName\n}\n\nfunction escapeSegment(str: string, segmentName: string) {\n return str.replace(\n new RegExp(`:${escapeStringRegexp(segmentName)}`, 'g'),\n `__ESC_COLON_${segmentName}`\n )\n}\n\nfunction unescapeSegments(str: string) {\n return str.replace(/__ESC_COLON_/gi, ':')\n}\n\nexport function matchHas(\n req: BaseNextRequest | IncomingMessage,\n query: Params,\n has: RouteHas[] = [],\n missing: RouteHas[] = []\n): false | Params {\n const params: Params = {}\n\n const hasMatch = (hasItem: RouteHas) => {\n let value\n let key = hasItem.key\n\n switch (hasItem.type) {\n case 'header': {\n key = key!.toLowerCase()\n value = req.headers[key] as string\n break\n }\n case 'cookie': {\n if ('cookies' in req) {\n value = req.cookies[hasItem.key]\n } else {\n const cookies = getCookieParser(req.headers)()\n value = cookies[hasItem.key]\n }\n\n break\n }\n case 'query': {\n value = query[key!]\n break\n }\n case 'host': {\n const { host } = req?.headers || {}\n // remove port from host if present\n const hostname = host?.split(':', 1)[0].toLowerCase()\n value = hostname\n break\n }\n default: {\n break\n }\n }\n\n if (!hasItem.value && value) {\n params[getSafeParamName(key!)] = value\n return true\n } else if (value) {\n const matcher = new RegExp(`^${hasItem.value}$`)\n const matches = Array.isArray(value)\n ? value.slice(-1)[0].match(matcher)\n : value.match(matcher)\n\n if (matches) {\n if (Array.isArray(matches)) {\n if (matches.groups) {\n Object.keys(matches.groups).forEach((groupKey) => {\n params[groupKey] = matches.groups![groupKey]\n })\n } else if (hasItem.type === 'host' && matches[0]) {\n params.host = matches[0]\n }\n }\n return true\n }\n }\n return false\n }\n\n const allMatch =\n has.every((item) => hasMatch(item)) &&\n !missing.some((item) => hasMatch(item))\n\n if (allMatch) {\n return params\n }\n return false\n}\n\nexport function compileNonPath(value: string, params: Params): string {\n if (!value.includes(':')) {\n return value\n }\n\n for (const key of Object.keys(params)) {\n if (value.includes(`:${key}`)) {\n value = value\n .replace(\n new RegExp(`:${key}\\\\*`, 'g'),\n `:${key}--ESCAPED_PARAM_ASTERISKS`\n )\n .replace(\n new RegExp(`:${key}\\\\?`, 'g'),\n `:${key}--ESCAPED_PARAM_QUESTION`\n )\n .replace(new RegExp(`:${key}\\\\+`, 'g'), `:${key}--ESCAPED_PARAM_PLUS`)\n .replace(\n new RegExp(`:${key}(?!\\\\w)`, 'g'),\n `--ESCAPED_PARAM_COLON${key}`\n )\n }\n }\n value = value\n .replace(/(:|\\*|\\?|\\+|\\(|\\)|\\{|\\})/g, '\\\\$1')\n .replace(/--ESCAPED_PARAM_PLUS/g, '+')\n .replace(/--ESCAPED_PARAM_COLON/g, ':')\n .replace(/--ESCAPED_PARAM_QUESTION/g, '?')\n .replace(/--ESCAPED_PARAM_ASTERISKS/g, '*')\n\n // the value needs to start with a forward-slash to be compiled\n // correctly\n return safeCompile(`/${value}`, { validate: false })(params).slice(1)\n}\n\nexport function parseDestination(args: {\n destination: string\n params: Readonly<Params>\n query: Readonly<NextParsedUrlQuery>\n}) {\n let escaped = args.destination\n for (const param of Object.keys({ ...args.params, ...args.query })) {\n if (!param) continue\n\n escaped = escapeSegment(escaped, param)\n }\n\n const parsed = parseUrl(escaped)\n\n let pathname = parsed.pathname\n if (pathname) {\n pathname = unescapeSegments(pathname)\n }\n\n let href = parsed.href\n if (href) {\n href = unescapeSegments(href)\n }\n\n let hostname = parsed.hostname\n if (hostname) {\n hostname = unescapeSegments(hostname)\n }\n\n let hash = parsed.hash\n if (hash) {\n hash = unescapeSegments(hash)\n }\n\n return {\n ...parsed,\n pathname,\n hostname,\n href,\n hash,\n }\n}\n\nexport function prepareDestination(args: {\n appendParamsToQuery: boolean\n destination: string\n params: Params\n query: NextParsedUrlQuery\n}) {\n const parsedDestination = parseDestination(args)\n\n const { hostname: destHostname, query: destQuery } = parsedDestination\n\n // The following code assumes that the pathname here includes the hash if it's\n // present.\n let destPath = parsedDestination.pathname\n if (parsedDestination.hash) {\n destPath = `${destPath}${parsedDestination.hash}`\n }\n\n const destParams: (string | number)[] = []\n\n const destPathParamKeys: Key[] = []\n safePathToRegexp(destPath, destPathParamKeys)\n for (const key of destPathParamKeys) {\n destParams.push(key.name)\n }\n\n if (destHostname) {\n const destHostnameParamKeys: Key[] = []\n safePathToRegexp(destHostname, destHostnameParamKeys)\n for (const key of destHostnameParamKeys) {\n destParams.push(key.name)\n }\n }\n\n const destPathCompiler = safeCompile(\n destPath,\n // we don't validate while compiling the destination since we should\n // have already validated before we got to this point and validating\n // breaks compiling destinations with named pattern params from the source\n // e.g. /something:hello(.*) -> /another/:hello is broken with validation\n // since compile validation is meant for reversing and not for inserting\n // params from a separate path-regex into another\n { validate: false }\n )\n\n let destHostnameCompiler\n if (destHostname) {\n destHostnameCompiler = safeCompile(destHostname, { validate: false })\n }\n\n // update any params in query values\n for (const [key, strOrArray] of Object.entries(destQuery)) {\n // the value needs to start with a forward-slash to be compiled\n // correctly\n if (Array.isArray(strOrArray)) {\n destQuery[key] = strOrArray.map((value) =>\n compileNonPath(unescapeSegments(value), args.params)\n )\n } else if (typeof strOrArray === 'string') {\n destQuery[key] = compileNonPath(unescapeSegments(strOrArray), args.params)\n }\n }\n\n // add path params to query if it's not a redirect and not\n // already defined in destination query or path\n let paramKeys = Object.keys(args.params).filter(\n (name) => name !== 'nextInternalLocale'\n )\n\n if (\n args.appendParamsToQuery &&\n !paramKeys.some((key) => destParams.includes(key))\n ) {\n for (const key of paramKeys) {\n if (!(key in destQuery)) {\n destQuery[key] = args.params[key]\n }\n }\n }\n\n let newUrl\n\n // The compiler also that the interception route marker is an unnamed param, hence '0',\n // so we need to add it to the params object.\n if (isInterceptionRouteAppPath(destPath)) {\n for (const segment of destPath.split('/')) {\n const marker = INTERCEPTION_ROUTE_MARKERS.find((m) =>\n segment.startsWith(m)\n )\n if (marker) {\n if (marker === '(..)(..)') {\n args.params['0'] = '(..)'\n args.params['1'] = '(..)'\n } else {\n args.params['0'] = marker\n }\n break\n }\n }\n }\n\n try {\n newUrl = destPathCompiler(args.params)\n\n const [pathname, hash] = newUrl.split('#', 2)\n if (destHostnameCompiler) {\n parsedDestination.hostname = destHostnameCompiler(args.params)\n }\n parsedDestination.pathname = pathname\n parsedDestination.hash = `${hash ? '#' : ''}${hash || ''}`\n delete (parsedDestination as any).search\n } catch (err: any) {\n if (err.message.match(/Expected .*? to not repeat, but got an array/)) {\n throw new Error(\n `To use a multi-match in the destination you must add \\`*\\` at the end of the param name to signify it should repeat. https://nextjs.org/docs/messages/invalid-multi-match`\n )\n }\n throw err\n }\n\n // Query merge order lowest priority to highest\n // 1. initial URL query values\n // 2. path segment values\n // 3. destination specified query values\n parsedDestination.query = {\n ...args.query,\n ...parsedDestination.query,\n }\n\n return {\n newUrl,\n destQuery,\n parsedDestination,\n }\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../../lib/constants'\n\n/**\n * Converts a Node.js IncomingHttpHeaders object to a Headers object. Any\n * headers with multiple values will be joined with a comma and space. Any\n * headers that have an undefined value will be ignored and others will be\n * coerced to strings.\n *\n * @param nodeHeaders the headers object to convert\n * @returns the converted headers object\n */\nexport function fromNodeOutgoingHttpHeaders(\n nodeHeaders: OutgoingHttpHeaders\n): Headers {\n const headers = new Headers()\n for (let [key, value] of Object.entries(nodeHeaders)) {\n const values = Array.isArray(value) ? value : [value]\n for (let v of values) {\n if (typeof v === 'undefined') continue\n if (typeof v === 'number') {\n v = v.toString()\n }\n\n headers.append(key, v)\n }\n }\n return headers\n}\n\n/*\n Set-Cookie header field-values are sometimes comma joined in one string. This splits them without choking on commas\n that are within a single set-cookie field-value, such as in the Expires portion.\n This is uncommon, but explicitly allowed - see https://tools.ietf.org/html/rfc2616#section-4.2\n Node.js does this for every header *except* set-cookie - see https://github.com/nodejs/node/blob/d5e363b77ebaf1caf67cd7528224b651c86815c1/lib/_http_incoming.js#L128\n React Native's fetch does this for *every* header, including set-cookie.\n \n Based on: https://github.com/google/j2objc/commit/16820fdbc8f76ca0c33472810ce0cb03d20efe25\n Credits to: https://github.com/tomball for original and https://github.com/chrusart for JavaScript implementation\n*/\nexport function splitCookiesString(cookiesString: string) {\n var cookiesStrings = []\n var pos = 0\n var start\n var ch\n var lastComma\n var nextStart\n var cookiesSeparatorFound\n\n function skipWhitespace() {\n while (pos < cookiesString.length && /\\s/.test(cookiesString.charAt(pos))) {\n pos += 1\n }\n return pos < cookiesString.length\n }\n\n function notSpecialChar() {\n ch = cookiesString.charAt(pos)\n\n return ch !== '=' && ch !== ';' && ch !== ','\n }\n\n while (pos < cookiesString.length) {\n start = pos\n cookiesSeparatorFound = false\n\n while (skipWhitespace()) {\n ch = cookiesString.charAt(pos)\n if (ch === ',') {\n // ',' is a cookie separator if we have later first '=', not ';' or ','\n lastComma = pos\n pos += 1\n\n skipWhitespace()\n nextStart = pos\n\n while (pos < cookiesString.length && notSpecialChar()) {\n pos += 1\n }\n\n // currently special character\n if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {\n // we found cookies separator\n cookiesSeparatorFound = true\n // pos is inside the next cookie, so back up and return it.\n pos = nextStart\n cookiesStrings.push(cookiesString.substring(start, lastComma))\n start = pos\n } else {\n // in param ',' or param separator ';',\n // we continue from that comma\n pos = lastComma + 1\n }\n } else {\n pos += 1\n }\n }\n\n if (!cookiesSeparatorFound || pos >= cookiesString.length) {\n cookiesStrings.push(cookiesString.substring(start, cookiesString.length))\n }\n }\n\n return cookiesStrings\n}\n\n/**\n * Converts a Headers object to a Node.js OutgoingHttpHeaders object. This is\n * required to support the set-cookie header, which may have multiple values.\n *\n * @param headers the headers object to convert\n * @returns the converted headers object\n */\nexport function toNodeOutgoingHttpHeaders(\n headers: Headers\n): OutgoingHttpHeaders {\n const nodeHeaders: OutgoingHttpHeaders = {}\n const cookies: string[] = []\n if (headers) {\n for (const [key, value] of headers.entries()) {\n if (key.toLowerCase() === 'set-cookie') {\n // We may have gotten a comma joined string of cookies, or multiple\n // set-cookie headers. We need to merge them into one header array\n // to represent all the cookies.\n cookies.push(...splitCookiesString(value))\n nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies\n } else {\n nodeHeaders[key] = value\n }\n }\n }\n return nodeHeaders\n}\n\n/**\n * Validate the correctness of a user-provided URL.\n */\nexport function validateURL(url: string | URL): string {\n try {\n return String(new URL(String(url)))\n } catch (error: any) {\n throw new Error(\n `URL is malformed \"${String(\n url\n )}\". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`,\n { cause: error }\n )\n }\n}\n\n/**\n * Normalizes `nxtP` and `nxtI` query param values to remove the prefix.\n * This function does not mutate the input key.\n */\nexport function normalizeNextQueryParam(key: string): null | string {\n const prefixes = [NEXT_QUERY_PARAM_PREFIX, NEXT_INTERCEPTION_MARKER_PREFIX]\n for (const prefix of prefixes) {\n if (key !== prefix && key.startsWith(prefix)) {\n return key.substring(prefix.length)\n }\n }\n return null\n}\n","/**\n * Decodes a query path parameter.\n *\n * @param value - The value to decode.\n * @returns The decoded value.\n */\nexport function decodeQueryPathParameter(value: string) {\n // When deployed to Vercel, the value may be encoded, so this attempts to\n // decode it and returns the original value if it fails.\n try {\n return decodeURIComponent(value)\n } catch {\n return value\n }\n}\n","// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nimport type { UrlObject } from 'url'\nimport type { ParsedUrlQuery } from 'querystring'\nimport * as querystring from './querystring'\n\nconst slashedProtocols = /https?|ftp|gopher|file/\n\nexport function formatUrl(urlObj: UrlObject) {\n let { auth, hostname } = urlObj\n let protocol = urlObj.protocol || ''\n let pathname = urlObj.pathname || ''\n let hash = urlObj.hash || ''\n let query = urlObj.query || ''\n let host: string | false = false\n\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : ''\n\n if (urlObj.host) {\n host = auth + urlObj.host\n } else if (hostname) {\n host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname)\n if (urlObj.port) {\n host += ':' + urlObj.port\n }\n }\n\n if (query && typeof query === 'object') {\n query = String(querystring.urlQueryToSearchParams(query as ParsedUrlQuery))\n }\n\n let search = urlObj.search || (query && `?${query}`) || ''\n\n if (protocol && !protocol.endsWith(':')) protocol += ':'\n\n if (\n urlObj.slashes ||\n ((!protocol || slashedProtocols.test(protocol)) && host !== false)\n ) {\n host = '//' + (host || '')\n if (pathname && pathname[0] !== '/') pathname = '/' + pathname\n } else if (!host) {\n host = ''\n }\n\n if (hash && hash[0] !== '#') hash = '#' + hash\n if (search && search[0] !== '?') search = '?' + search\n\n pathname = pathname.replace(/[?#]/g, encodeURIComponent)\n search = search.replace('#', '%23')\n\n return `${protocol}${host}${pathname}${search}${hash}`\n}\n\nexport const urlObjectKeys = [\n 'auth',\n 'hash',\n 'host',\n 'hostname',\n 'href',\n 'path',\n 'pathname',\n 'port',\n 'protocol',\n 'query',\n 'search',\n 'slashes',\n]\n\nexport function formatWithValidation(url: UrlObject): string {\n if (process.env.NODE_ENV === 'development') {\n if (url !== null && typeof url === 'object') {\n Object.keys(url).forEach((key) => {\n if (!urlObjectKeys.includes(key)) {\n console.warn(\n `Unknown key passed via urlObject into url.format: ${key}`\n )\n }\n })\n }\n }\n\n return formatUrl(url)\n}\n","import type { LoadComponentsReturnType } from '../load-components'\nimport type { ServerRuntime, SizeLimit } from '../../types'\nimport type {\n ExperimentalConfig,\n NextConfigComplete,\n} from '../../server/config-shared'\nimport type { ClientReferenceManifest } from '../../build/webpack/plugins/flight-manifest-plugin'\nimport type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { AppPageModule } from '../route-modules/app-page/module'\nimport type {\n HeadData,\n LoadingModuleData,\n} from '../../shared/lib/app-router-context.shared-runtime'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport type { __ApiPreviewProps } from '../api-utils'\n\nimport s from 'next/dist/compiled/superstruct'\nimport type { RequestLifecycleOpts } from '../base-server'\nimport type { InstrumentationOnRequestError } from '../instrumentation/types'\nimport type { NextRequestHint } from '../web/adapter'\nimport type { BaseNextRequest } from '../base-http'\nimport type { IncomingMessage } from 'http'\nimport type { RenderResumeDataCache } from '../resume-data-cache/resume-data-cache'\n\nexport type DynamicParamTypes =\n | 'catchall'\n | 'catchall-intercepted'\n | 'optional-catchall'\n | 'dynamic'\n | 'dynamic-intercepted'\n\nconst dynamicParamTypesSchema = s.enums(['c', 'ci', 'oc', 'd', 'di'])\n\nexport type DynamicParamTypesShort = s.Infer<typeof dynamicParamTypesSchema>\n\nconst segmentSchema = s.union([\n s.string(),\n s.tuple([s.string(), s.string(), dynamicParamTypesSchema]),\n])\n\nexport type Segment = s.Infer<typeof segmentSchema>\n\n// unfortunately the tuple is not understood well by Describe so we have to\n// use any here. This does not have any impact on the runtime type since the validation\n// does work correctly.\nexport const flightRouterStateSchema: s.Describe<any> = s.tuple([\n segmentSchema,\n s.record(\n s.string(),\n s.lazy(() => flightRouterStateSchema)\n ),\n s.optional(s.nullable(s.string())),\n s.optional(\n s.nullable(\n s.union([\n s.literal('refetch'),\n s.literal('refresh'),\n s.literal('inside-shared-layout'),\n ])\n )\n ),\n s.optional(s.boolean()),\n])\n\n/**\n * Router state\n */\nexport type FlightRouterState = [\n segment: Segment,\n parallelRoutes: { [parallelRouterKey: string]: FlightRouterState },\n url?: string | null,\n /**\n * \"refresh\" and \"refetch\", despite being similarly named, have different\n * semantics:\n * - \"refetch\" is used during a request to inform the server where rendering\n * should start from.\n *\n * - \"refresh\" is used by the client to mark that a segment should re-fetch the\n * data from the server for the current segment. It uses the \"url\" property\n * above to determine where to fetch from.\n *\n * - \"inside-shared-layout\" is used during a prefetch request to inform the\n * server that even if the segment matches, it should be treated as if it's\n * within the \"new\" part of a navigation — inside the shared layout. If\n * the segment doesn't match, then it has no effect, since it would be\n * treated as new regardless. If it does match, though, the server does not\n * need to render it, because the client already has it.\n *\n * A bit confusing, but that's because it has only one extremely narrow use\n * case — during a non-PPR prefetch, the server uses it to find the first\n * loading boundary beneath a shared layout.\n *\n * TODO: We should rethink the protocol for dynamic requests. It might not\n * make sense for the client to send a FlightRouterState, since this type is\n * overloaded with concerns.\n */\n refresh?: 'refetch' | 'refresh' | 'inside-shared-layout' | null,\n isRootLayout?: boolean,\n /**\n * Only present when responding to a tree prefetch request. Indicates whether\n * there is a loading boundary somewhere in the tree. The client cache uses\n * this to determine if it can skip the data prefetch request.\n */\n hasLoadingBoundary?: HasLoadingBoundary,\n]\n\nexport const enum HasLoadingBoundary {\n // There is a loading boundary in this particular segment\n SegmentHasLoadingBoundary = 1,\n // There is a loading boundary somewhere in the subtree (but not in\n // this segment)\n SubtreeHasLoadingBoundary = 2,\n // There is no loading boundary in this segment or any of its descendants\n SubtreeHasNoLoadingBoundary = 3,\n}\n\n/**\n * Individual Flight response path\n */\nexport type FlightSegmentPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n segment: Segment,\n parallelRouterKey: string,\n ]\n\n/**\n * Represents a tree of segments and the Flight data (i.e. React nodes) that\n * correspond to each one. The tree is isomorphic to the FlightRouterState;\n * however in the future we want to be able to fetch arbitrary partial segments\n * without having to fetch all its children. So this response format will\n * likely change.\n */\nexport type CacheNodeSeedData = [\n segment: Segment,\n node: React.ReactNode | null,\n parallelRoutes: {\n [parallelRouterKey: string]: CacheNodeSeedData | null\n },\n loading: LoadingModuleData | Promise<LoadingModuleData>,\n isPartial: boolean,\n]\n\nexport type FlightDataSegment = [\n /* segment of the rendered slice: */ Segment,\n /* treePatch */ FlightRouterState,\n /* cacheNodeSeedData */ CacheNodeSeedData | null, // Can be null during prefetch if there's no loading component\n /* head: viewport */ HeadData,\n /* isHeadPartial */ boolean,\n]\n\nexport type FlightDataPath =\n // Uses `any` as repeating pattern can't be typed.\n | any[]\n // Looks somewhat like this\n | [\n // Holds full path to the segment.\n ...FlightSegmentPath[],\n ...FlightDataSegment,\n ]\n\n/**\n * The Flight response data\n */\nexport type FlightData = Array<FlightDataPath> | string\n\nexport type ActionResult = Promise<any>\n\nexport type ServerOnInstrumentationRequestError = (\n error: unknown,\n // The request could be middleware, node server or web server request,\n // we normalized them into an aligned format to `onRequestError` API later.\n request: NextRequestHint | BaseNextRequest | IncomingMessage,\n errorContext: Parameters<InstrumentationOnRequestError>[2]\n) => void | Promise<void>\n\nexport interface RenderOptsPartial {\n dir?: string\n previewProps: __ApiPreviewProps | undefined\n err?: Error | null\n dev?: boolean\n basePath: string\n trailingSlash: boolean\n clientReferenceManifest?: DeepReadonly<ClientReferenceManifest>\n supportsDynamicResponse: boolean\n runtime?: ServerRuntime\n serverComponents?: boolean\n enableTainting?: boolean\n assetPrefix?: string\n crossOrigin?: '' | 'anonymous' | 'use-credentials' | undefined\n nextFontManifest?: DeepReadonly<NextFontManifest>\n botType?: 'dom' | 'html' | undefined\n serveStreamingMetadata?: boolean\n incrementalCache?: import('../lib/incremental-cache').IncrementalCache\n cacheLifeProfiles?: {\n [profile: string]: import('../use-cache/cache-life').CacheLife\n }\n isOnDemandRevalidate?: boolean\n isPossibleServerAction?: boolean\n setIsrStatus?: (key: string, value: boolean | null) => void\n isRevalidate?: boolean\n nextExport?: boolean\n nextConfigOutput?: 'standalone' | 'export'\n onInstrumentationRequestError?: ServerOnInstrumentationRequestError\n isDraftMode?: boolean\n deploymentId?: string\n onUpdateCookies?: (cookies: string[]) => void\n loadConfig?: (\n phase: string,\n dir: string,\n customConfig?: object | null,\n rawConfig?: boolean,\n silent?: boolean\n ) => Promise<NextConfigComplete>\n serverActions?: {\n bodySizeLimit?: SizeLimit\n allowedOrigins?: string[]\n }\n params?: ParsedUrlQuery\n isPrefetch?: boolean\n htmlLimitedBots: string | undefined\n experimental: {\n /**\n * When true, it indicates that the current page supports partial\n * prerendering.\n */\n isRoutePPREnabled?: boolean\n expireTime: number | undefined\n staleTimes: ExperimentalConfig['staleTimes'] | undefined\n clientTraceMetadata: string[] | undefined\n cacheComponents: boolean\n clientSegmentCache: boolean | 'client-only'\n dynamicOnHover: boolean\n inlineCss: boolean\n authInterrupts: boolean\n }\n postponed?: string\n\n /**\n * Should wait for react stream allReady to resolve all suspense boundaries,\n * in order to perform a full page render.\n */\n shouldWaitOnAllReady?: boolean\n\n /**\n * A prefilled resume data cache. This was either generated for this page\n * during dev warmup, or when a page with defined params was previously\n * prerendered, and now its matching optional fallback shell is prerendered.\n */\n renderResumeDataCache?: RenderResumeDataCache\n\n /**\n * When true, the page will be rendered using the static rendering to detect\n * any dynamic API's that would have stopped the page from being fully\n * statically generated.\n */\n isDebugDynamicAccesses?: boolean\n\n /**\n * This is true when:\n * - source maps are generated\n * - source maps are applied\n * - minification is disabled\n */\n hasReadableErrorStacks?: boolean\n\n /**\n * The maximum length of the headers that are emitted by React and added to\n * the response.\n */\n reactMaxHeadersLength: number | undefined\n\n isStaticGeneration?: boolean\n\n /**\n * When true, the page is prerendered as a fallback shell, while allowing any\n * dynamic accesses to result in an empty shell. This is the case when there\n * are also routes prerendered with a more complete set of params.\n * Prerendering those routes would catch any invalid dynamic accesses.\n */\n allowEmptyStaticShell?: boolean\n\n /**\n * next config experimental.devtoolSegmentExplorer\n */\n devtoolSegmentExplorer?: boolean\n}\n\nexport type RenderOpts = LoadComponentsReturnType<AppPageModule> &\n RenderOptsPartial &\n RequestLifecycleOpts\n\nexport type PreloadCallbacks = (() => void)[]\n\nexport type InitialRSCPayload = {\n /** buildId */\n b: string\n /** assetPrefix */\n p: string\n /** initialCanonicalUrlParts */\n c: string[]\n /** couldBeIntercepted */\n i: boolean\n /** initialFlightData */\n f: FlightDataPath[]\n /** missingSlots */\n m: Set<string> | undefined\n /** GlobalError */\n G: [React.ComponentType<any>, React.ReactNode | undefined]\n /** postponed */\n s: boolean\n /** prerendered */\n S: boolean\n}\n\n// Response from `createFromFetch` for normal rendering\nexport type NavigationFlightResponse = {\n /** buildId */\n b: string\n /** flightData */\n f: FlightData\n /** prerendered */\n S: boolean\n}\n\n// Response from `createFromFetch` for server actions. Action's flight data can be null\nexport type ActionFlightResponse = {\n /** actionResult */\n a: ActionResult\n /** buildId */\n b: string\n /** flightData */\n f: FlightData\n}\n\nexport type RSCPayload =\n | InitialRSCPayload\n | NavigationFlightResponse\n | ActionFlightResponse\n","import { NEXT_URL } from '../client/components/app-router-headers'\nimport {\n extractInterceptionRouteInformation,\n isInterceptionRouteAppPath,\n} from '../shared/lib/router/utils/interception-routes'\nimport type { Rewrite } from './load-custom-routes'\nimport { safePathToRegexp } from '../shared/lib/router/utils/route-match-utils'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\n\n// a function that converts normalised paths (e.g. /foo/[bar]/[baz]) to the format expected by pathToRegexp (e.g. /foo/:bar/:baz)\nfunction toPathToRegexpPath(path: string): string {\n return path.replace(/\\[\\[?([^\\]]+)\\]\\]?/g, (_, capture) => {\n // path-to-regexp only supports word characters, so we replace any non-word characters with underscores\n const paramName = capture.replace(/\\W+/g, '_')\n\n // handle catch-all segments (e.g. /foo/bar/[...baz] or /foo/bar/[[...baz]])\n if (capture.startsWith('...')) {\n return `:${capture.slice(3)}*`\n }\n return ':' + paramName\n })\n}\n\nexport function generateInterceptionRoutesRewrites(\n appPaths: string[],\n basePath = ''\n): Rewrite[] {\n const rewrites: Rewrite[] = []\n\n for (const appPath of appPaths) {\n if (isInterceptionRouteAppPath(appPath)) {\n const { interceptingRoute, interceptedRoute } =\n extractInterceptionRouteInformation(appPath)\n\n const normalizedInterceptingRoute = `${\n interceptingRoute !== '/' ? toPathToRegexpPath(interceptingRoute) : ''\n }/(.*)?`\n\n const normalizedInterceptedRoute = toPathToRegexpPath(interceptedRoute)\n const normalizedAppPath = toPathToRegexpPath(appPath)\n\n // pathToRegexp returns a regex that matches the path, but we need to\n // convert it to a string that can be used in a header value\n // to the format that Next/the proxy expects\n let interceptingRouteRegex = safePathToRegexp(normalizedInterceptingRoute)\n .toString()\n .slice(2, -3)\n\n rewrites.push({\n source: `${basePath}${normalizedInterceptedRoute}`,\n destination: `${basePath}${normalizedAppPath}`,\n has: [\n {\n type: 'header',\n key: NEXT_URL,\n value: interceptingRouteRegex,\n },\n ],\n })\n }\n }\n\n return rewrites\n}\n\nexport function isInterceptionRouteRewrite(route: DeepReadonly<Rewrite>) {\n // When we generate interception rewrites in the above implementation, we always do so with only a single `has` condition.\n return route.has?.[0]?.key === NEXT_URL\n}\n","export const RSC_HEADER = 'RSC' as const\nexport const ACTION_HEADER = 'Next-Action' as const\n// TODO: Instead of sending the full router state, we only need to send the\n// segment path. Saves bytes. Then we could also use this field for segment\n// prefetches, which also need to specify a particular segment.\nexport const NEXT_ROUTER_STATE_TREE_HEADER = 'Next-Router-State-Tree' as const\nexport const NEXT_ROUTER_PREFETCH_HEADER = 'Next-Router-Prefetch' as const\n// This contains the path to the segment being prefetched.\n// TODO: If we change Next-Router-State-Tree to be a segment path, we can use\n// that instead. Then Next-Router-Prefetch and Next-Router-Segment-Prefetch can\n// be merged into a single enum.\nexport const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER =\n 'Next-Router-Segment-Prefetch' as const\nexport const NEXT_HMR_REFRESH_HEADER = 'Next-HMR-Refresh' as const\nexport const NEXT_HMR_REFRESH_HASH_COOKIE = '__next_hmr_refresh_hash__' as const\nexport const NEXT_URL = 'Next-Url' as const\nexport const RSC_CONTENT_TYPE_HEADER = 'text/x-component' as const\n\nexport const FLIGHT_HEADERS = [\n RSC_HEADER,\n NEXT_ROUTER_STATE_TREE_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_HMR_REFRESH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n] as const\n\nexport const NEXT_RSC_UNION_QUERY = '_rsc' as const\n\nexport const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time' as const\nexport const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed' as const\nexport const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path' as const\nexport const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query' as const\nexport const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender' as const\nexport const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found' as const\n","import type { Rewrite } from '../lib/load-custom-routes'\nimport type { RouteMatchFn } from '../shared/lib/router/utils/route-matcher'\nimport type { NextConfig } from './config'\nimport type { BaseNextRequest } from './base-http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\n\nimport { normalizeLocalePath } from '../shared/lib/i18n/normalize-locale-path'\nimport { getPathMatch } from '../shared/lib/router/utils/path-match'\nimport { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex'\nimport { getRouteMatcher } from '../shared/lib/router/utils/route-matcher'\nimport {\n matchHas,\n prepareDestination,\n} from '../shared/lib/router/utils/prepare-destination'\nimport { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { normalizeRscURL } from '../shared/lib/router/utils/app-paths'\nimport {\n NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER,\n NEXT_CACHE_REVALIDATED_TAGS_HEADER,\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../lib/constants'\nimport { normalizeNextQueryParam } from './web/utils'\nimport type { IncomingHttpHeaders, IncomingMessage } from 'http'\nimport { decodeQueryPathParameter } from './lib/decode-query-path-parameter'\nimport type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { parseReqUrl } from '../lib/url'\nimport { formatUrl } from '../shared/lib/router/utils/format-url'\nimport { parseAndValidateFlightRouterState } from './app-render/parse-and-validate-flight-router-state'\nimport { isInterceptionRouteRewrite } from '../lib/generate-interception-routes-rewrites'\nimport { NEXT_ROUTER_STATE_TREE_HEADER } from '../client/components/app-router-headers'\nimport { getSelectedParams } from '../client/components/router-reducer/compute-changed-path'\n\nfunction filterInternalQuery(\n query: Record<string, undefined | string | string[]>,\n paramKeys: string[]\n) {\n // this is used to pass query information in rewrites\n // but should not be exposed in final query\n delete query['nextInternalLocale']\n\n for (const key in query) {\n const isNextQueryPrefix =\n key !== NEXT_QUERY_PARAM_PREFIX && key.startsWith(NEXT_QUERY_PARAM_PREFIX)\n\n const isNextInterceptionMarkerPrefix =\n key !== NEXT_INTERCEPTION_MARKER_PREFIX &&\n key.startsWith(NEXT_INTERCEPTION_MARKER_PREFIX)\n\n if (\n isNextQueryPrefix ||\n isNextInterceptionMarkerPrefix ||\n paramKeys.includes(key)\n ) {\n delete query[key]\n }\n }\n}\n\nexport function normalizeCdnUrl(\n req: BaseNextRequest | IncomingMessage,\n paramKeys: string[]\n) {\n // make sure to normalize req.url from CDNs to strip dynamic and rewrite\n // params from the query which are added during routing\n const _parsedUrl = parseReqUrl(req.url!)\n\n // we can't normalize if we can't parse\n if (!_parsedUrl) {\n return req.url\n }\n delete (_parsedUrl as any).search\n filterInternalQuery(_parsedUrl.query, paramKeys)\n\n req.url = formatUrl(_parsedUrl)\n}\n\nexport function interpolateDynamicPath(\n pathname: string,\n params: ParsedUrlQuery,\n defaultRouteRegex?: ReturnType<typeof getNamedRouteRegex> | undefined\n) {\n if (!defaultRouteRegex) return pathname\n\n for (const param of Object.keys(defaultRouteRegex.groups)) {\n const { optional, repeat } = defaultRouteRegex.groups[param]\n let builtParam = `[${repeat ? '...' : ''}${param}]`\n\n if (optional) {\n builtParam = `[${builtParam}]`\n }\n\n let paramValue: string\n const value = params[param]\n\n if (Array.isArray(value)) {\n paramValue = value.map((v) => v && encodeURIComponent(v)).join('/')\n } else if (value) {\n paramValue = encodeURIComponent(value)\n } else {\n paramValue = ''\n }\n\n if (paramValue || optional) {\n pathname = pathname.replaceAll(builtParam, paramValue)\n }\n }\n\n return pathname\n}\n\nexport function normalizeDynamicRouteParams(\n query: ParsedUrlQuery,\n defaultRouteRegex: ReturnType<typeof getNamedRouteRegex>,\n defaultRouteMatches: ParsedUrlQuery,\n ignoreMissingOptional: boolean\n) {\n let hasValidParams = true\n let params: ParsedUrlQuery = {}\n\n for (const key of Object.keys(defaultRouteRegex.groups)) {\n let value: string | string[] | undefined = query[key]\n\n if (typeof value === 'string') {\n value = normalizeRscURL(value)\n } else if (Array.isArray(value)) {\n value = value.map(normalizeRscURL)\n }\n\n // if the value matches the default value we can't rely\n // on the parsed params, this is used to signal if we need\n // to parse x-now-route-matches or not\n const defaultValue = defaultRouteMatches![key]\n const isOptional = defaultRouteRegex!.groups[key].optional\n\n const isDefaultValue = Array.isArray(defaultValue)\n ? defaultValue.some((defaultVal) => {\n return Array.isArray(value)\n ? value.some((val) => val.includes(defaultVal))\n : value?.includes(defaultVal)\n })\n : value?.includes(defaultValue as string)\n\n if (\n isDefaultValue ||\n (typeof value === 'undefined' && !(isOptional && ignoreMissingOptional))\n ) {\n return { params: {}, hasValidParams: false }\n }\n\n // non-provided optional values should be undefined so normalize\n // them to undefined\n if (\n isOptional &&\n (!value ||\n (Array.isArray(value) &&\n value.length === 1 &&\n // fallback optional catch-all SSG pages have\n // [[...paramName]] for the root path on Vercel\n (value[0] === 'index' || value[0] === `[[...${key}]]`)))\n ) {\n value = undefined\n delete query[key]\n }\n\n // query values from the proxy aren't already split into arrays\n // so make sure to normalize catch-all values\n if (\n value &&\n typeof value === 'string' &&\n defaultRouteRegex!.groups[key].repeat\n ) {\n value = value.split('/')\n }\n\n if (value) {\n params[key] = value\n }\n }\n\n return {\n params,\n hasValidParams,\n }\n}\n\nexport function getServerUtils({\n page,\n i18n,\n basePath,\n rewrites,\n pageIsDynamic,\n trailingSlash,\n caseSensitive,\n}: {\n page: string\n i18n?: NextConfig['i18n']\n basePath: string\n rewrites: DeepReadonly<{\n fallback?: ReadonlyArray<Rewrite>\n afterFiles?: ReadonlyArray<Rewrite>\n beforeFiles?: ReadonlyArray<Rewrite>\n }>\n pageIsDynamic: boolean\n trailingSlash?: boolean\n caseSensitive: boolean\n}) {\n let defaultRouteRegex: ReturnType<typeof getNamedRouteRegex> | undefined\n let dynamicRouteMatcher: RouteMatchFn | undefined\n let defaultRouteMatches: ParsedUrlQuery | undefined\n\n if (pageIsDynamic) {\n defaultRouteRegex = getNamedRouteRegex(page, {\n prefixRouteKeys: false,\n })\n dynamicRouteMatcher = getRouteMatcher(defaultRouteRegex)\n defaultRouteMatches = dynamicRouteMatcher(page) as ParsedUrlQuery\n }\n\n function handleRewrites(\n req: BaseNextRequest | IncomingMessage,\n parsedUrl: UrlWithParsedQuery\n ) {\n const rewriteParams: Record<string, string> = {}\n let fsPathname = parsedUrl.pathname\n\n const matchesPage = () => {\n const fsPathnameNoSlash = removeTrailingSlash(fsPathname || '')\n return (\n fsPathnameNoSlash === removeTrailingSlash(page) ||\n dynamicRouteMatcher?.(fsPathnameNoSlash)\n )\n }\n\n const checkRewrite = (rewrite: DeepReadonly<Rewrite>): boolean => {\n const matcher = getPathMatch(\n rewrite.source + (trailingSlash ? '(/)?' : ''),\n {\n removeUnnamedParams: true,\n strict: true,\n sensitive: !!caseSensitive,\n }\n )\n\n if (!parsedUrl.pathname) return false\n\n let params = matcher(parsedUrl.pathname)\n\n if ((rewrite.has || rewrite.missing) && params) {\n const hasParams = matchHas(\n req,\n parsedUrl.query,\n rewrite.has as Rewrite['has'],\n rewrite.missing as Rewrite['missing']\n )\n\n if (hasParams) {\n Object.assign(params, hasParams)\n } else {\n params = false\n }\n }\n\n if (params) {\n try {\n // An interception rewrite might reference a dynamic param for a route the user\n // is currently on, which wouldn't be extractable from the matched route params.\n // This attempts to extract the dynamic params from the provided router state.\n if (isInterceptionRouteRewrite(rewrite as Rewrite)) {\n const stateHeader =\n req.headers[NEXT_ROUTER_STATE_TREE_HEADER.toLowerCase()]\n\n if (stateHeader) {\n params = {\n ...getSelectedParams(\n parseAndValidateFlightRouterState(stateHeader)\n ),\n ...params,\n }\n }\n }\n } catch (err) {\n // this is a no-op -- we couldn't extract dynamic params from the provided router state,\n // so we'll just use the params from the route matcher\n }\n\n const { parsedDestination, destQuery } = prepareDestination({\n appendParamsToQuery: true,\n destination: rewrite.destination,\n params: params,\n query: parsedUrl.query,\n })\n\n // if the rewrite destination is external break rewrite chain\n if (parsedDestination.protocol) {\n return true\n }\n\n Object.assign(rewriteParams, destQuery, params)\n Object.assign(parsedUrl.query, parsedDestination.query)\n delete (parsedDestination as any).query\n\n // for each property in parsedUrl.query, if the value is parametrized (eg :foo), look up the value\n // in rewriteParams and replace the parametrized value with the actual value\n // this is used when the rewrite destination does not contain the original source param\n // and so the value is still parametrized and needs to be replaced with the actual rewrite param\n Object.entries(parsedUrl.query).forEach(([key, value]) => {\n if (value && typeof value === 'string' && value.startsWith(':')) {\n const paramName = value.slice(1)\n const actualValue = rewriteParams[paramName]\n if (actualValue) {\n parsedUrl.query[key] = actualValue\n }\n }\n })\n\n Object.assign(parsedUrl, parsedDestination)\n\n fsPathname = parsedUrl.pathname\n if (!fsPathname) return false\n\n if (basePath) {\n fsPathname = fsPathname.replace(new RegExp(`^${basePath}`), '') || '/'\n }\n\n if (i18n) {\n const result = normalizeLocalePath(fsPathname, i18n.locales)\n fsPathname = result.pathname\n parsedUrl.query.nextInternalLocale =\n result.detectedLocale || params.nextInternalLocale\n }\n\n if (fsPathname === page) {\n return true\n }\n\n if (pageIsDynamic && dynamicRouteMatcher) {\n const dynamicParams = dynamicRouteMatcher(fsPathname)\n if (dynamicParams) {\n parsedUrl.query = {\n ...parsedUrl.query,\n ...dynamicParams,\n }\n return true\n }\n }\n }\n return false\n }\n\n for (const rewrite of rewrites.beforeFiles || []) {\n checkRewrite(rewrite)\n }\n\n if (fsPathname !== page) {\n let finished = false\n\n for (const rewrite of rewrites.afterFiles || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n\n if (!finished && !matchesPage()) {\n for (const rewrite of rewrites.fallback || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n }\n }\n return rewriteParams\n }\n\n function getParamsFromRouteMatches(routeMatchesHeader: string) {\n // If we don't have a default route regex, we can't get params from route\n // matches\n if (!defaultRouteRegex) return null\n\n const { groups, routeKeys } = defaultRouteRegex\n\n const matcher = getRouteMatcher({\n re: {\n // Simulate a RegExp match from the \\`req.url\\` input\n exec: (str: string) => {\n // Normalize all the prefixed query params.\n const obj: Record<string, string> = Object.fromEntries(\n new URLSearchParams(str)\n )\n for (const [key, value] of Object.entries(obj)) {\n const normalizedKey = normalizeNextQueryParam(key)\n if (!normalizedKey) continue\n\n obj[normalizedKey] = value\n delete obj[key]\n }\n\n // Use all the named route keys.\n const result = {} as RegExpExecArray\n for (const keyName of Object.keys(routeKeys)) {\n const paramName = routeKeys[keyName]\n\n // If this param name is not a valid parameter name, then skip it.\n if (!paramName) continue\n\n const group = groups[paramName]\n const value = obj[keyName]\n\n // When we're missing a required param, we can't match the route.\n if (!group.optional && !value) return null\n\n result[group.pos] = value\n }\n\n return result\n },\n },\n groups,\n })\n\n const routeMatches = matcher(routeMatchesHeader)\n if (!routeMatches) return null\n\n return routeMatches\n }\n\n function normalizeQueryParams(\n query: Record<string, string | string[] | undefined>,\n routeParamKeys: Set<string>\n ) {\n // this is used to pass query information in rewrites\n // but should not be exposed in final query\n delete query['nextInternalLocale']\n\n for (const [key, value] of Object.entries(query)) {\n const normalizedKey = normalizeNextQueryParam(key)\n if (!normalizedKey) continue\n\n // Remove the prefixed key from the query params because we want\n // to consume it for the dynamic route matcher.\n delete query[key]\n routeParamKeys.add(normalizedKey)\n\n if (typeof value === 'undefined') continue\n\n query[normalizedKey] = Array.isArray(value)\n ? value.map((v) => decodeQueryPathParameter(v))\n : decodeQueryPathParameter(value)\n }\n }\n\n return {\n handleRewrites,\n defaultRouteRegex,\n dynamicRouteMatcher,\n defaultRouteMatches,\n normalizeQueryParams,\n getParamsFromRouteMatches,\n /**\n * Normalize dynamic route params.\n *\n * @param query - The query params to normalize.\n * @param ignoreMissingOptional - Whether to ignore missing optional params.\n * @returns The normalized params and whether they are valid.\n */\n normalizeDynamicRouteParams: (\n query: ParsedUrlQuery,\n ignoreMissingOptional: boolean\n ) => {\n if (!defaultRouteRegex || !defaultRouteMatches) {\n return { params: {}, hasValidParams: false }\n }\n\n return normalizeDynamicRouteParams(\n query,\n defaultRouteRegex,\n defaultRouteMatches,\n ignoreMissingOptional\n )\n },\n\n normalizeCdnUrl: (\n req: BaseNextRequest | IncomingMessage,\n paramKeys: string[]\n ) => normalizeCdnUrl(req, paramKeys),\n\n interpolateDynamicPath: (\n pathname: string,\n params: Record<string, undefined | string | string[]>\n ) => interpolateDynamicPath(pathname, params, defaultRouteRegex),\n\n filterInternalQuery: (query: ParsedUrlQuery, paramKeys: string[]) =>\n filterInternalQuery(query, paramKeys),\n }\n}\n\nexport function getPreviouslyRevalidatedTags(\n headers: IncomingHttpHeaders,\n previewModeId: string | undefined\n): string[] {\n return typeof headers[NEXT_CACHE_REVALIDATED_TAGS_HEADER] === 'string' &&\n headers[NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER] === previewModeId\n ? headers[NEXT_CACHE_REVALIDATED_TAGS_HEADER].split(',')\n : []\n}\n","import type { DomainLocale } from '../../../server/config-shared'\n\nexport function detectDomainLocale(\n domainItems?: readonly DomainLocale[],\n hostname?: string,\n detectedLocale?: string\n) {\n if (!domainItems) return\n\n if (detectedLocale) {\n detectedLocale = detectedLocale.toLowerCase()\n }\n\n for (const item of domainItems) {\n // remove port if present\n const domainHostname = item.domain?.split(':', 1)[0].toLowerCase()\n if (\n hostname === domainHostname ||\n detectedLocale === item.defaultLocale.toLowerCase() ||\n item.locales?.some((locale) => locale.toLowerCase() === detectedLocale)\n ) {\n return item\n }\n }\n}\n","import type { OutgoingHttpHeaders } from 'http'\n\n/**\n * Takes an object with a hostname property (like a parsed URL) and some\n * headers that may contain Host and returns the preferred hostname.\n * @param parsed An object containing a hostname property.\n * @param headers A dictionary with headers containing a `host`.\n */\nexport function getHostname(\n parsed: { hostname?: string | null },\n headers?: OutgoingHttpHeaders\n): string | undefined {\n // Get the hostname from the headers if it exists, otherwise use the parsed\n // hostname.\n let hostname: string\n if (headers?.host && !Array.isArray(headers.host)) {\n hostname = headers.host.toString().split(':', 1)[0]\n } else if (parsed.hostname) {\n hostname = parsed.hostname\n } else return\n\n return hostname.toLowerCase()\n}\n","/**\n * strip _next/data/<build-id>/ prefix and .json suffix\n */\nexport function normalizeDataPath(pathname: string) {\n pathname = pathname\n .replace(/\\/_next\\/data\\/[^/]{1,}/, '')\n .replace(/\\.json$/, '')\n\n if (pathname === '/index') {\n return '/'\n }\n return pathname\n}\n","/* eslint-disable no-redeclare */\nimport type { IncomingMessage } from 'http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\nimport type { BaseNextRequest } from './base-http'\nimport type { CloneableBody } from './body-streams'\nimport type { RouteMatch } from './route-matches/route-match'\nimport type { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'\nimport type { ServerComponentsHmrCache } from './response-cache'\nimport type { PagesDevOverlayBridgeType } from '../next-devtools/userspace/pages/pages-dev-overlay-setup'\n\n// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules\nexport const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta')\n\nexport type NextIncomingMessage = (BaseNextRequest | IncomingMessage) & {\n [NEXT_REQUEST_META]?: RequestMeta\n}\n\nexport interface RequestMeta {\n /**\n * The query that was used to make the request.\n */\n initQuery?: ParsedUrlQuery\n\n /**\n * The URL that was used to make the request.\n */\n initURL?: string\n\n /**\n * The protocol that was used to make the request.\n */\n initProtocol?: string\n\n /**\n * The body that was read from the request. This is used to allow the body to\n * be read multiple times.\n */\n clonableBody?: CloneableBody\n\n /**\n * True when the request matched a locale domain that was configured in the\n * next.config.js file.\n */\n isLocaleDomain?: boolean\n\n /**\n * True when the request had locale information stripped from the pathname\n * part of the URL.\n */\n didStripLocale?: boolean\n\n /**\n * If the request had it's URL rewritten, this is the URL it was rewritten to.\n */\n rewroteURL?: string\n\n /**\n * The cookies that were added by middleware and were added to the response.\n */\n middlewareCookie?: string[]\n\n /**\n * The match on the request for a given route.\n */\n match?: RouteMatch\n\n /**\n * The incremental cache to use for the request.\n */\n incrementalCache?: any\n\n /**\n * The server components HMR cache, only for dev.\n */\n serverComponentsHmrCache?: ServerComponentsHmrCache\n\n /**\n * Equals the segment path that was used for the prefetch RSC request.\n */\n segmentPrefetchRSCRequest?: string\n\n /**\n * True when the request is for the prefetch flight data.\n */\n isPrefetchRSCRequest?: true\n\n /**\n * True when the request is for the flight data.\n */\n isRSCRequest?: true\n\n /**\n * A search param set by the Next.js client when performing RSC requests.\n * Because some CDNs do not vary their cache entries on our custom headers,\n * this search param represents a hash of the header values. For any cached\n * RSC request, we should verify that the hash matches before responding.\n * Otherwise this can lead to cache poisoning.\n * TODO: Consider not using custom request headers at all, and instead encode\n * everything into the search param.\n */\n cacheBustingSearchParam?: string\n\n /**\n * True when the request is for the `/_next/data` route using the pages\n * router.\n */\n isNextDataReq?: true\n\n /**\n * Postponed state to use for resumption. If present it's assumed that the\n * request is for a page that has postponed (there are no guarantees that the\n * page actually has postponed though as it would incur an additional cache\n * lookup).\n */\n postponed?: string\n\n /**\n * If provided, this will be called when a response cache entry was generated\n * or looked up in the cache.\n */\n onCacheEntry?: (\n cacheEntry: any,\n requestMeta: any\n ) => Promise<boolean | void> | boolean | void\n\n /**\n * The previous revalidate before rendering 404 page for notFound: true\n */\n notFoundRevalidate?: number | false\n\n /**\n * In development, the original source page that returned a 404.\n */\n developmentNotFoundSourcePage?: string\n\n /**\n * The path we routed to and should be invoked\n */\n invokePath?: string\n\n /**\n * The specific page output we should be matching\n */\n invokeOutput?: string\n\n /**\n * The status we are invoking the request with from routing\n */\n invokeStatus?: number\n\n /**\n * The routing error we are invoking with\n */\n invokeError?: Error\n\n /**\n * The query parsed for the invocation\n */\n invokeQuery?: Record<string, undefined | string | string[]>\n\n /**\n * Whether the request is a middleware invocation\n */\n middlewareInvoke?: boolean\n\n /**\n * Whether the request should render the fallback shell or not.\n */\n renderFallbackShell?: boolean\n\n /**\n * Whether the request is for the custom error page.\n */\n customErrorRender?: true\n\n /**\n * Whether to bubble up the NoFallbackError to the caller when a 404 is\n * returned.\n */\n bubbleNoFallback?: true\n\n /**\n * True when the request had locale information inferred from the default\n * locale.\n */\n localeInferredFromDefault?: true\n\n /**\n * The locale that was inferred or explicitly set for the request.\n */\n locale?: string\n\n /**\n * The default locale that was inferred or explicitly set for the request.\n */\n defaultLocale?: string\n\n /**\n * The project dir the server is running in\n */\n projectDir?: string\n\n /**\n * The dist directory the server is currently using\n */\n distDir?: string\n\n /**\n * Whether we are generating the fallback version of the page in dev mode\n */\n isIsrFallback?: boolean\n\n /**\n * The query after resolving routes\n */\n query?: ParsedUrlQuery\n\n /**\n * The params after resolving routes\n */\n params?: ParsedUrlQuery\n\n /**\n * The AMP validator to use in development\n */\n ampValidator?: (html: string, pathname: string) => Promise<void>\n\n /**\n * ErrorOverlay component to use in development for pages router\n */\n PagesErrorDebug?: PagesDevOverlayBridgeType\n\n /**\n * Whether server is in minimal mode (this will be replaced with more\n * specific flags in future)\n */\n minimalMode?: boolean\n}\n\n/**\n * Gets the request metadata. If no key is provided, the entire metadata object\n * is returned.\n *\n * @param req the request to get the metadata from\n * @param key the key to get from the metadata (optional)\n * @returns the value for the key or the entire metadata object\n */\nexport function getRequestMeta(\n req: NextIncomingMessage,\n key?: undefined\n): RequestMeta\nexport function getRequestMeta<K extends keyof RequestMeta>(\n req: NextIncomingMessage,\n key: K\n): RequestMeta[K]\nexport function getRequestMeta<K extends keyof RequestMeta>(\n req: NextIncomingMessage,\n key?: K\n): RequestMeta | RequestMeta[K] {\n const meta = req[NEXT_REQUEST_META] || {}\n return typeof key === 'string' ? meta[key] : meta\n}\n\n/**\n * Sets the request metadata.\n *\n * @param req the request to set the metadata on\n * @param meta the metadata to set\n * @returns the mutated request metadata\n */\nexport function setRequestMeta(req: NextIncomingMessage, meta: RequestMeta) {\n req[NEXT_REQUEST_META] = meta\n return meta\n}\n\n/**\n * Adds a value to the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to set\n * @param value the value to set\n * @returns the mutated request metadata\n */\nexport function addRequestMeta<K extends keyof RequestMeta>(\n request: NextIncomingMessage,\n key: K,\n value: RequestMeta[K]\n) {\n const meta = getRequestMeta(request)\n meta[key] = value\n return setRequestMeta(request, meta)\n}\n\n/**\n * Removes a key from the request metadata.\n *\n * @param request the request to mutate\n * @param key the key to remove\n * @returns the mutated request metadata\n */\nexport function removeRequestMeta<K extends keyof RequestMeta>(\n request: NextIncomingMessage,\n key: K\n) {\n const meta = getRequestMeta(request)\n delete meta[key]\n return setRequestMeta(request, meta)\n}\n\ntype NextQueryMetadata = {\n /**\n * The `_rsc` query parameter used for cache busting to ensure that the RSC\n * requests do not get cached by the browser explicitly.\n */\n [NEXT_RSC_UNION_QUERY]?: string\n}\n\nexport type NextParsedUrlQuery = ParsedUrlQuery &\n NextQueryMetadata & {\n amp?: '1'\n }\n\nexport interface NextUrlWithParsedQuery extends UrlWithParsedQuery {\n query: NextParsedUrlQuery\n}\n","import { ensureLeadingSlash } from './ensure-leading-slash'\nimport { isDynamicRoute } from '../router/utils'\nimport { NormalizeError } from '../utils'\n\n/**\n * Takes a page and transforms it into its file counterpart ensuring that the\n * output is normalized. Note this function is not idempotent because a page\n * `/index` can be referencing `/index/index.js` and `/index/index` could be\n * referencing `/index/index/index.js`. Examples:\n * - `/` -> `/index`\n * - `/index/foo` -> `/index/index/foo`\n * - `/index` -> `/index/index`\n */\nexport function normalizePagePath(page: string): string {\n const normalized =\n /^\\/index(\\/|$)/.test(page) && !isDynamicRoute(page)\n ? `/index${page}`\n : page === '/'\n ? '/index'\n : ensureLeadingSlash(page)\n\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { posix } = require('path') as typeof import('path')\n const resolvedPage = posix.normalize(normalized)\n if (resolvedPage !== normalized) {\n throw new NormalizeError(\n `Requested and resolved page mismatch: ${normalized} ${resolvedPage}`\n )\n }\n }\n\n return normalized\n}\n","import type { PageExtensions } from '../../build/page-extensions-type'\nimport { normalizePathSep } from '../../shared/lib/page-path/normalize-path-sep'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport { isAppRouteRoute } from '../is-app-route-route'\n\nexport const STATIC_METADATA_IMAGES = {\n icon: {\n filename: 'icon',\n extensions: ['ico', 'jpg', 'jpeg', 'png', 'svg'],\n },\n apple: {\n filename: 'apple-icon',\n extensions: ['jpg', 'jpeg', 'png'],\n },\n favicon: {\n filename: 'favicon',\n extensions: ['ico'],\n },\n openGraph: {\n filename: 'opengraph-image',\n extensions: ['jpg', 'jpeg', 'png', 'gif'],\n },\n twitter: {\n filename: 'twitter-image',\n extensions: ['jpg', 'jpeg', 'png', 'gif'],\n },\n} as const\n\n// Match routes that are metadata routes, e.g. /sitemap.xml, /favicon.<ext>, /<icon>.<ext>, etc.\n// TODO-METADATA: support more metadata routes with more extensions\nexport const DEFAULT_METADATA_ROUTE_EXTENSIONS = ['js', 'jsx', 'ts', 'tsx']\n\n// Match the file extension with the dynamic multi-routes extensions\n// e.g. ([xml, js], null) -> can match `/sitemap.xml/route`, `sitemap.js/route`\n// e.g. ([png], [ts]) -> can match `/opengrapg-image.png`, `/opengraph-image.ts`\nexport const getExtensionRegexString = (\n staticExtensions: readonly string[],\n dynamicExtensions: readonly string[] | null\n) => {\n // If there's no possible multi dynamic routes, will not match any <name>[].<ext> files\n if (!dynamicExtensions || dynamicExtensions.length === 0) {\n return `(\\\\.(?:${staticExtensions.join('|')}))`\n }\n return `(?:\\\\.(${staticExtensions.join('|')})|(\\\\.(${dynamicExtensions.join('|')})))`\n}\n\n/**\n * Determine if the file is a metadata route file entry\n * @param appDirRelativePath the relative file path to app/\n * @param pageExtensions the js extensions, such as ['js', 'jsx', 'ts', 'tsx']\n * @param strictlyMatchExtensions if it's true, match the file with page extension, otherwise match the file with default corresponding extension\n * @returns if the file is a metadata route file\n */\nexport function isMetadataRouteFile(\n appDirRelativePath: string,\n pageExtensions: PageExtensions,\n strictlyMatchExtensions: boolean\n) {\n // End with the extension or optional to have the extension\n // When strictlyMatchExtensions is true, it's used for match file path;\n // When strictlyMatchExtensions, the dynamic extension is skipped but\n // static extension is kept, which is usually used for matching route path.\n const trailingMatcher = (strictlyMatchExtensions ? '' : '?') + '$'\n // Match the optional variants like /opengraph-image2, /icon-a102f4.png, etc.\n const variantsMatcher = '\\\\d?'\n // The -\\w{6} is the suffix that normalized from group routes;\n const groupSuffix = strictlyMatchExtensions ? '' : '(-\\\\w{6})?'\n\n const suffixMatcher = `${variantsMatcher}${groupSuffix}`\n\n const metadataRouteFilesRegex = [\n new RegExp(\n `^[\\\\\\\\/]robots${getExtensionRegexString(\n pageExtensions.concat('txt'),\n null\n )}${trailingMatcher}`\n ),\n new RegExp(\n `^[\\\\\\\\/]manifest${getExtensionRegexString(\n pageExtensions.concat('webmanifest', 'json'),\n null\n )}${trailingMatcher}`\n ),\n new RegExp(`^[\\\\\\\\/]favicon\\\\.ico$`),\n new RegExp(\n `[\\\\\\\\/]sitemap${getExtensionRegexString(['xml'], pageExtensions)}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]${STATIC_METADATA_IMAGES.icon.filename}${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.icon.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]${STATIC_METADATA_IMAGES.apple.filename}${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.apple.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]${STATIC_METADATA_IMAGES.openGraph.filename}${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.openGraph.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]${STATIC_METADATA_IMAGES.twitter.filename}${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.twitter.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n ]\n\n const normalizedAppDirRelativePath = normalizePathSep(appDirRelativePath)\n const matched = metadataRouteFilesRegex.some((r) =>\n r.test(normalizedAppDirRelativePath)\n )\n\n return matched\n}\n\n// Check if the route is a static metadata route, with /route suffix\n// e.g. /favicon.ico/route, /icon.png/route, etc.\n// But skip the text routes like robots.txt since they might also be dynamic.\n// Checking route path is not enough to determine if text routes is dynamic.\nexport function isStaticMetadataRoute(route: string) {\n // extract ext with regex\n const pathname = route.replace(/\\/route$/, '')\n\n const matched =\n isAppRouteRoute(route) &&\n isMetadataRouteFile(pathname, [], true) &&\n // These routes can either be built by static or dynamic entrypoints,\n // so we assume they're dynamic\n pathname !== '/robots.txt' &&\n pathname !== '/manifest.webmanifest' &&\n !pathname.endsWith('/sitemap.xml')\n\n return matched\n}\n\n/**\n * Determine if a page or pathname is a metadata page.\n *\n * The input is a page or pathname, which can be with or without page suffix /foo/page or /foo.\n * But it will not contain the /route suffix.\n *\n * .e.g\n * /robots -> true\n * /sitemap -> true\n * /foo -> false\n */\nexport function isMetadataPage(page: string) {\n const matched = !isAppRouteRoute(page) && isMetadataRouteFile(page, [], false)\n\n return matched\n}\n\n/*\n * Determine if a Next.js route is a metadata route.\n * `route` will has a route suffix.\n *\n * e.g.\n * /app/robots/route -> true\n * /robots/route -> true\n * /sitemap/[__metadata_id__]/route -> true\n * /app/sitemap/page -> false\n * /icon-a102f4/route -> true\n */\nexport function isMetadataRoute(route: string): boolean {\n let page = normalizeAppPath(route)\n .replace(/^\\/?app\\//, '')\n // Remove the dynamic route id\n .replace('/[__metadata_id__]', '')\n // Remove the /route suffix\n .replace(/\\/route$/, '')\n\n if (page[0] !== '/') page = '/' + page\n\n const matched = isAppRouteRoute(route) && isMetadataRouteFile(page, [], false)\n\n return matched\n}\n","/**\n * A `Promise.withResolvers` implementation that exposes the `resolve` and\n * `reject` functions on a `Promise`.\n *\n * @see https://tc39.es/proposal-promise-with-resolvers/\n */\nexport class DetachedPromise<T = any> {\n public readonly resolve: (value: T | PromiseLike<T>) => void\n public readonly reject: (reason: any) => void\n public readonly promise: Promise<T>\n\n constructor() {\n let resolve: (value: T | PromiseLike<T>) => void\n let reject: (reason: any) => void\n\n // Create the promise and assign the resolvers to the object.\n this.promise = new Promise<T>((res, rej) => {\n resolve = res\n reject = rej\n })\n\n // We know that resolvers is defined because the Promise constructor runs\n // synchronously.\n this.resolve = resolve!\n this.reject = reject!\n }\n}\n","import type { SchedulerFn } from './scheduler'\n\nimport { DetachedPromise } from './detached-promise'\n\ntype CacheKeyFn<K, C extends string | number | null> = (\n key: K\n) => PromiseLike<C> | C\n\ntype BatcherOptions<K, C extends string | number | null> = {\n cacheKeyFn?: CacheKeyFn<K, C>\n schedulerFn?: SchedulerFn<void>\n}\n\ntype WorkFn<V, C> = (\n key: C,\n resolve: (value: V | PromiseLike<V>) => void\n) => Promise<V>\n\n/**\n * A wrapper for a function that will only allow one call to the function to\n * execute at a time.\n */\nexport class Batcher<K, V, C extends string | number | null> {\n private readonly pending = new Map<C, Promise<V>>()\n\n protected constructor(\n private readonly cacheKeyFn?: CacheKeyFn<K, C>,\n /**\n * A function that will be called to schedule the wrapped function to be\n * executed. This defaults to a function that will execute the function\n * immediately.\n */\n private readonly schedulerFn: SchedulerFn<void> = (fn) => fn()\n ) {}\n\n /**\n * Creates a new instance of PendingWrapper. If the key extends a string or\n * number, the key will be used as the cache key. If the key is an object, a\n * cache key function must be provided.\n */\n public static create<K extends string | number | null, V>(\n options?: BatcherOptions<K, K>\n ): Batcher<K, V, K>\n public static create<K, V, C extends string | number | null>(\n options: BatcherOptions<K, C> &\n Required<Pick<BatcherOptions<K, C>, 'cacheKeyFn'>>\n ): Batcher<K, V, C>\n public static create<K, V, C extends string | number | null>(\n options?: BatcherOptions<K, C>\n ): Batcher<K, V, C> {\n return new Batcher<K, V, C>(options?.cacheKeyFn, options?.schedulerFn)\n }\n\n /**\n * Wraps a function in a promise that will be resolved or rejected only once\n * for a given key. This will allow multiple calls to the function to be\n * made, but only one will be executed at a time. The result of the first\n * call will be returned to all callers.\n *\n * @param key the key to use for the cache\n * @param fn the function to wrap\n * @returns a promise that resolves to the result of the function\n */\n public async batch(key: K, fn: WorkFn<V, C>): Promise<V> {\n const cacheKey = (this.cacheKeyFn ? await this.cacheKeyFn(key) : key) as C\n if (cacheKey === null) {\n return fn(cacheKey, Promise.resolve)\n }\n\n const pending = this.pending.get(cacheKey)\n if (pending) return pending\n\n const { promise, resolve, reject } = new DetachedPromise<V>()\n this.pending.set(cacheKey, promise)\n\n this.schedulerFn(async () => {\n try {\n const result = await fn(cacheKey, resolve)\n\n // Resolving a promise multiple times is a no-op, so we can safely\n // resolve all pending promises with the same result.\n resolve(result)\n } catch (err) {\n reject(err)\n } finally {\n this.pending.delete(cacheKey)\n }\n })\n\n return promise\n }\n}\n","export type ScheduledFn<T = void> = () => T | PromiseLike<T>\nexport type SchedulerFn<T = void> = (cb: ScheduledFn<T>) => void\n\n/**\n * Schedules a function to be called on the next tick after the other promises\n * have been resolved.\n *\n * @param cb the function to schedule\n */\nexport const scheduleOnNextTick = (cb: ScheduledFn<void>) => {\n // We use Promise.resolve().then() here so that the operation is scheduled at\n // the end of the promise job queue, we then add it to the next process tick\n // to ensure it's evaluated afterwards.\n //\n // This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255\n //\n Promise.resolve().then(() => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n process.nextTick(cb)\n }\n })\n}\n\n/**\n * Schedules a function to be called using `setImmediate` or `setTimeout` if\n * `setImmediate` is not available (like in the Edge runtime).\n *\n * @param cb the function to schedule\n */\nexport const scheduleImmediate = (cb: ScheduledFn<void>): void => {\n if (process.env.NEXT_RUNTIME === 'edge') {\n setTimeout(cb, 0)\n } else {\n setImmediate(cb)\n }\n}\n\n/**\n * returns a promise than resolves in a future task. There is no guarantee that the task it resolves in\n * will be the next task but if you await it you can at least be sure that the current task is over and\n * most usefully that the entire microtask queue of the current task has been emptied.\n */\nexport function atLeastOneTask() {\n return new Promise<void>((resolve) => scheduleImmediate(resolve))\n}\n\n/**\n * This utility function is extracted to make it easier to find places where we are doing\n * specific timing tricks to try to schedule work after React has rendered. This is especially\n * important at the moment because Next.js uses the edge builds of React which use setTimeout to\n * schedule work when you might expect that something like setImmediate would do the trick.\n *\n * Long term we should switch to the node versions of React rendering when possible and then\n * update this to use setImmediate rather than setTimeout\n */\nexport function waitAtLeastOneReactRenderTask(): Promise<void> {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return new Promise((r) => setTimeout(r, 0))\n } else {\n return new Promise((r) => setImmediate(r))\n }\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport type RenderResult from '../render-result'\nimport type { CacheControl, Revalidate } from '../lib/cache-control'\nimport type { RouteKind } from '../route-kind'\n\nexport interface ResponseCacheBase {\n get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalCache\n /**\n * This is a hint to the cache to help it determine what kind of route\n * this is so it knows where to look up the cache entry from. If not\n * provided it will test the filesystem to check.\n */\n routeKind: RouteKind\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n }\n ): Promise<ResponseCacheEntry | null>\n}\n\n// The server components HMR cache might store other data as well in the future,\n// at which point this should be refactored to a discriminated union type.\nexport interface ServerComponentsHmrCache {\n get(key: string): CachedFetchData | undefined\n set(key: string, data: CachedFetchData): void\n}\n\nexport type CachedFetchData = {\n headers: Record<string, string>\n body: string\n url: string\n status?: number\n}\n\nexport const enum CachedRouteKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n REDIRECT = 'REDIRECT',\n IMAGE = 'IMAGE',\n}\n\nexport interface CachedFetchValue {\n kind: CachedRouteKind.FETCH\n data: CachedFetchData\n // tags are only present with file-system-cache\n // fetch cache stores tags outside of cache entry\n tags?: string[]\n revalidate: number\n}\n\nexport interface CachedRedirectValue {\n kind: CachedRouteKind.REDIRECT\n props: Object\n}\n\nexport interface CachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n rscData: Buffer | undefined\n status: number | undefined\n postponed: string | undefined\n headers: OutgoingHttpHeaders | undefined\n segmentData: Map<string, Buffer> | undefined\n}\n\nexport interface CachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n html: RenderResult\n pageData: Object\n status: number | undefined\n headers: OutgoingHttpHeaders | undefined\n}\n\nexport interface CachedRouteValue {\n kind: CachedRouteKind.APP_ROUTE\n // this needs to be a RenderResult so since renderResponse\n // expects that type instead of a string\n body: Buffer\n status: number\n headers: OutgoingHttpHeaders\n}\n\nexport interface CachedImageValue {\n kind: CachedRouteKind.IMAGE\n etag: string\n upstreamEtag: string\n buffer: Buffer\n extension: string\n isMiss?: boolean\n isStale?: boolean\n}\n\nexport interface IncrementalCachedAppPageValue {\n kind: CachedRouteKind.APP_PAGE\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n rscData: Buffer | undefined\n headers: OutgoingHttpHeaders | undefined\n postponed: string | undefined\n status: number | undefined\n segmentData: Map<string, Buffer> | undefined\n}\n\nexport interface IncrementalCachedPageValue {\n kind: CachedRouteKind.PAGES\n // this needs to be a string since the cache expects to store\n // the string value\n html: string\n pageData: Object\n headers: OutgoingHttpHeaders | undefined\n status: number | undefined\n}\n\nexport interface IncrementalResponseCacheEntry {\n cacheControl?: CacheControl\n /**\n * timestamp in milliseconds to revalidate after\n */\n revalidateAfter?: Revalidate\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n isMiss?: boolean\n value: Exclude<IncrementalCacheValue, CachedFetchValue> | null\n}\n\nexport interface IncrementalFetchCacheEntry {\n /**\n * `-1` here dictates a blocking revalidate should be used\n */\n isStale?: boolean | -1\n value: CachedFetchValue\n}\n\nexport type IncrementalCacheEntry =\n | IncrementalResponseCacheEntry\n | IncrementalFetchCacheEntry\n\nexport type IncrementalCacheValue =\n | CachedRedirectValue\n | IncrementalCachedPageValue\n | IncrementalCachedAppPageValue\n | CachedImageValue\n | CachedFetchValue\n | CachedRouteValue\n\nexport type ResponseCacheValue =\n | CachedRedirectValue\n | CachedPageValue\n | CachedAppPageValue\n | CachedImageValue\n | CachedRouteValue\n\nexport type ResponseCacheEntry = {\n cacheControl?: CacheControl\n value: ResponseCacheValue | null\n isStale?: boolean | -1\n isMiss?: boolean\n}\n\n/**\n * @param hasResolved whether the responseGenerator has resolved it's promise\n * @param previousCacheEntry the previous cache entry if it exists or the current\n */\nexport type ResponseGenerator = (state: {\n hasResolved: boolean\n previousCacheEntry?: IncrementalResponseCacheEntry | null\n isRevalidating?: boolean\n span?: any\n}) => Promise<ResponseCacheEntry | null>\n\nexport const enum IncrementalCacheKind {\n APP_PAGE = 'APP_PAGE',\n APP_ROUTE = 'APP_ROUTE',\n PAGES = 'PAGES',\n FETCH = 'FETCH',\n IMAGE = 'IMAGE',\n}\n\nexport interface GetIncrementalFetchCacheContext {\n kind: IncrementalCacheKind.FETCH\n revalidate?: Revalidate\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n softTags?: string[]\n}\n\nexport interface GetIncrementalResponseCacheContext {\n kind: Exclude<IncrementalCacheKind, IncrementalCacheKind.FETCH>\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback: boolean\n}\n\nexport interface SetIncrementalFetchCacheContext {\n fetchCache: true\n fetchUrl?: string\n fetchIdx?: number\n tags?: string[]\n isImplicitBuildTimeCache?: boolean\n}\n\nexport interface SetIncrementalResponseCacheContext {\n fetchCache?: false\n cacheControl?: CacheControl\n\n /**\n * True if the route is enabled for PPR.\n */\n isRoutePPREnabled?: boolean\n\n /**\n * True if this is a fallback request.\n */\n isFallback?: boolean\n}\n\nexport interface IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext\n ): Promise<IncrementalResponseCacheEntry | null>\n set(\n key: string,\n data: Exclude<IncrementalCacheValue, CachedFetchValue> | null,\n ctx: SetIncrementalResponseCacheContext\n ): Promise<void>\n}\n\nexport interface IncrementalCache extends IncrementalResponseCache {\n get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext\n ): Promise<IncrementalFetchCacheEntry | null>\n get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext\n ): Promise<IncrementalResponseCacheEntry | null>\n set(\n key: string,\n data: CachedFetchValue | null,\n ctx: SetIncrementalFetchCacheContext\n ): Promise<void>\n set(\n key: string,\n data: Exclude<IncrementalCacheValue, CachedFetchValue> | null,\n ctx: SetIncrementalResponseCacheContext\n ): Promise<void>\n}\n","import { getTracer } from '../lib/trace/tracer'\nimport { AppRenderSpan } from '../lib/trace/constants'\nimport { DetachedPromise } from '../../lib/detached-promise'\nimport { scheduleImmediate, atLeastOneTask } from '../../lib/scheduler'\nimport { ENCODED_TAGS } from './encoded-tags'\nimport {\n indexOfUint8Array,\n isEquivalentUint8Arrays,\n removeFromUint8Array,\n} from './uint8array-helpers'\nimport { MISSING_ROOT_TAGS_ERROR } from '../../shared/lib/errors/constants'\nimport { insertBuildIdComment } from '../../shared/lib/segment-cache/output-export-prefetch-encoding'\n\nfunction voidCatch() {\n // this catcher is designed to be used with pipeTo where we expect the underlying\n // pipe implementation to forward errors but we don't want the pipeTo promise to reject\n // and be unhandled\n}\n\nexport type ReactReadableStream = ReadableStream<Uint8Array> & {\n allReady?: Promise<void> | undefined\n}\n\n// We can share the same encoder instance everywhere\n// Notably we cannot do the same for TextDecoder because it is stateful\n// when handling streaming data\nconst encoder = new TextEncoder()\n\nexport function chainStreams<T>(\n ...streams: ReadableStream<T>[]\n): ReadableStream<T> {\n // If we have no streams, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n if (streams.length === 0) {\n return new ReadableStream<T>({\n start(controller) {\n controller.close()\n },\n })\n }\n\n // If we only have 1 stream we fast path it by returning just this stream\n if (streams.length === 1) {\n return streams[0]\n }\n\n const { readable, writable } = new TransformStream()\n\n // We always initiate pipeTo immediately. We know we have at least 2 streams\n // so we need to avoid closing the writable when this one finishes.\n let promise = streams[0].pipeTo(writable, { preventClose: true })\n\n let i = 1\n for (; i < streams.length - 1; i++) {\n const nextStream = streams[i]\n promise = promise.then(() =>\n nextStream.pipeTo(writable, { preventClose: true })\n )\n }\n\n // We can omit the length check because we halted before the last stream and there\n // is at least two streams so the lastStream here will always be defined\n const lastStream = streams[i]\n promise = promise.then(() => lastStream.pipeTo(writable))\n\n // Catch any errors from the streams and ignore them, they will be handled\n // by whatever is consuming the readable stream.\n promise.catch(voidCatch)\n\n return readable\n}\n\nexport function streamFromString(str: string): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(encoder.encode(str))\n controller.close()\n },\n })\n}\n\nexport function streamFromBuffer(chunk: Buffer): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(chunk)\n controller.close()\n },\n })\n}\n\nexport async function streamToBuffer(\n stream: ReadableStream<Uint8Array>\n): Promise<Buffer> {\n const reader = stream.getReader()\n const chunks: Uint8Array[] = []\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n break\n }\n\n chunks.push(value)\n }\n\n return Buffer.concat(chunks)\n}\n\nexport async function streamToString(\n stream: ReadableStream<Uint8Array>,\n signal?: AbortSignal\n): Promise<string> {\n const decoder = new TextDecoder('utf-8', { fatal: true })\n let string = ''\n\n for await (const chunk of stream) {\n if (signal?.aborted) {\n return string\n }\n\n string += decoder.decode(chunk, { stream: true })\n }\n\n string += decoder.decode()\n\n return string\n}\n\nexport function createBufferedTransformStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let bufferedChunks: Array<Uint8Array> = []\n let bufferByteLength: number = 0\n let pending: DetachedPromise<void> | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n // If we already have a pending flush, then return early.\n if (pending) return\n\n const detached = new DetachedPromise<void>()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n const chunk = new Uint8Array(bufferByteLength)\n let copiedBytes = 0\n\n for (let i = 0; i < bufferedChunks.length; i++) {\n const bufferedChunk = bufferedChunks[i]\n chunk.set(bufferedChunk, copiedBytes)\n copiedBytes += bufferedChunk.byteLength\n }\n // We just wrote all the buffered chunks so we need to reset the bufferedChunks array\n // and our bufferByteLength to prepare for the next round of buffered chunks\n bufferedChunks.length = 0\n bufferByteLength = 0\n controller.enqueue(chunk)\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n // Combine the previous buffer with the new chunk.\n bufferedChunks.push(chunk)\n bufferByteLength += chunk.byteLength\n\n // Flush the buffer to the controller.\n flush(controller)\n },\n flush() {\n if (!pending) return\n\n return pending.promise\n },\n })\n}\n\nfunction createPrefetchCommentStream(\n isBuildTimePrerendering: boolean,\n buildId: string\n): TransformStream<Uint8Array, Uint8Array> {\n // Insert an extra comment at the beginning of the HTML document. This must\n // come after the DOCTYPE, which is inserted by React.\n //\n // The first chunk sent by React will contain the doctype. After that, we can\n // pass through the rest of the chunks as-is.\n let didTransformFirstChunk = false\n return new TransformStream({\n transform(chunk, controller) {\n if (isBuildTimePrerendering && !didTransformFirstChunk) {\n didTransformFirstChunk = true\n const decoder = new TextDecoder('utf-8', { fatal: true })\n const chunkStr = decoder.decode(chunk, {\n stream: true,\n })\n const updatedChunkStr = insertBuildIdComment(chunkStr, buildId)\n controller.enqueue(encoder.encode(updatedChunkStr))\n return\n }\n controller.enqueue(chunk)\n },\n })\n}\n\nexport function renderToInitialFizzStream({\n ReactDOMServer,\n element,\n streamOptions,\n}: {\n ReactDOMServer: {\n renderToReadableStream: typeof import('react-dom/server').renderToReadableStream\n }\n element: React.ReactElement\n streamOptions?: Parameters<typeof ReactDOMServer.renderToReadableStream>[1]\n}): Promise<ReactReadableStream> {\n return getTracer().trace(AppRenderSpan.renderToReadableStream, async () =>\n ReactDOMServer.renderToReadableStream(element, streamOptions)\n )\n}\n\nfunction createMetadataTransformStream(\n insert: () => Promise<string> | string\n): TransformStream<Uint8Array, Uint8Array> {\n let chunkIndex = -1\n let isMarkRemoved = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n let iconMarkIndex = -1\n let closedHeadIndex = -1\n chunkIndex++\n\n if (isMarkRemoved) {\n controller.enqueue(chunk)\n return\n }\n let iconMarkLength = 0\n // Only search for the closed head tag once\n if (iconMarkIndex === -1) {\n iconMarkIndex = indexOfUint8Array(chunk, ENCODED_TAGS.META.ICON_MARK)\n if (iconMarkIndex === -1) {\n controller.enqueue(chunk)\n return\n } else {\n // When we found the `<meta name=\"«nxt-icon»\"` tag prefix, we will remove it from the chunk.\n // Its close tag could either be `/>` or `>`, checking the next char to ensure we cover both cases.\n iconMarkLength = ENCODED_TAGS.META.ICON_MARK.length\n // Check if next char is /, this is for xml mode.\n if (chunk[iconMarkIndex + iconMarkLength] === 47) {\n iconMarkLength += 2\n } else {\n // The last char is `>`\n iconMarkLength++\n }\n }\n }\n\n // Check if icon mark is inside <head> tag in the first chunk.\n if (chunkIndex === 0) {\n closedHeadIndex = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n if (iconMarkIndex !== -1) {\n // The mark icon is located in the 1st chunk before the head tag.\n // We do not need to insert the script tag in this case because it's in the head.\n // Just remove the icon mark from the chunk.\n if (iconMarkIndex < closedHeadIndex) {\n const replaced = new Uint8Array(chunk.length - iconMarkLength)\n\n // Remove the icon mark from the chunk.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex\n )\n chunk = replaced\n } else {\n // The icon mark is after the head tag, replace and insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n replaced.set(chunk.subarray(0, iconMarkIndex))\n replaced.set(encodedInsertion, iconMarkIndex)\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n }\n isMarkRemoved = true\n }\n // If there's no icon mark located, it will be handled later when if present in the following chunks.\n } else {\n // When it's appeared in the following chunks, we'll need to\n // remove the mark and then insert the script tag at that position.\n const insertion = await insert()\n const encodedInsertion = encoder.encode(insertion)\n const insertionLength = encodedInsertion.length\n // Replace the icon mark with the hoist script or empty string.\n const replaced = new Uint8Array(\n chunk.length - iconMarkLength + insertionLength\n )\n // Set the first part of the chunk, before the icon mark.\n replaced.set(chunk.subarray(0, iconMarkIndex))\n // Set the insertion after the icon mark.\n replaced.set(encodedInsertion, iconMarkIndex)\n\n // Set the rest of the chunk after the icon mark.\n replaced.set(\n chunk.subarray(iconMarkIndex + iconMarkLength),\n iconMarkIndex + insertionLength\n )\n chunk = replaced\n isMarkRemoved = true\n }\n controller.enqueue(chunk)\n },\n })\n}\n\nfunction createHeadInsertionTransformStream(\n insert: () => Promise<string>\n): TransformStream<Uint8Array, Uint8Array> {\n let inserted = false\n\n // We need to track if this transform saw any bytes because if it didn't\n // we won't want to insert any server HTML at all\n let hasBytes = false\n\n return new TransformStream({\n async transform(chunk, controller) {\n hasBytes = true\n\n const insertion = await insert()\n if (inserted) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n controller.enqueue(encodedInsertion)\n }\n controller.enqueue(chunk)\n } else {\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.HEAD)\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n if (index !== -1) {\n if (insertion) {\n const encodedInsertion = encoder.encode(insertion)\n // Get the total count of the bytes in the chunk and the insertion\n // e.g.\n // chunk = <head><meta charset=\"utf-8\"></head>\n // insertion = <script>...</script>\n // output = <head><meta charset=\"utf-8\"> [ <script>...</script> ] </head>\n const insertedHeadContent = new Uint8Array(\n chunk.length + encodedInsertion.length\n )\n // Append the first part of the chunk, before the head tag\n insertedHeadContent.set(chunk.slice(0, index))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, index)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(index),\n index + encodedInsertion.length\n )\n controller.enqueue(insertedHeadContent)\n } else {\n controller.enqueue(chunk)\n }\n inserted = true\n } else {\n // This will happens in PPR rendering during next start, when the page is partially rendered.\n // When the page resumes, the head tag will be found in the middle of the chunk.\n // Where we just need to append the insertion and chunk to the current stream.\n // e.g.\n // PPR-static: <head>...</head><body> [ resume content ] </body>\n // PPR-resume: [ insertion ] [ rest content ]\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n controller.enqueue(chunk)\n inserted = true\n }\n }\n },\n async flush(controller) {\n // Check before closing if there's anything remaining to insert.\n if (hasBytes) {\n const insertion = await insert()\n if (insertion) {\n controller.enqueue(encoder.encode(insertion))\n }\n }\n },\n })\n}\n\n// Suffix after main body content - scripts before </body>,\n// but wait for the major chunks to be enqueued.\nfunction createDeferredSuffixStream(\n suffix: string\n): TransformStream<Uint8Array, Uint8Array> {\n let flushed = false\n let pending: DetachedPromise<void> | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n const detached = new DetachedPromise<void>()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n controller.enqueue(encoder.encode(suffix))\n } catch {\n // If an error occurs while enqueuing it can't be due to this\n // transformers fault. It's likely due to the controller being\n // errored due to the stream being cancelled.\n } finally {\n pending = undefined\n detached.resolve()\n }\n })\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // If we've already flushed, we're done.\n if (flushed) return\n\n // Schedule the flush to happen.\n flushed = true\n flush(controller)\n },\n flush(controller) {\n if (pending) return pending.promise\n if (flushed) return\n\n // Flush now.\n controller.enqueue(encoder.encode(suffix))\n },\n })\n}\n\n// Merge two streams into one. Ensure the final transform stream is closed\n// when both are finished.\nfunction createMergedTransformStream(\n stream: ReadableStream<Uint8Array>\n): TransformStream<Uint8Array, Uint8Array> {\n let pull: Promise<void> | null = null\n let donePulling = false\n\n async function startPulling(controller: TransformStreamDefaultController) {\n if (pull) {\n return\n }\n\n const reader = stream.getReader()\n\n // NOTE: streaming flush\n // We are buffering here for the inlined data stream because the\n // \"shell\" stream might be chunkenized again by the underlying stream\n // implementation, e.g. with a specific high-water mark. To ensure it's\n // the safe timing to pipe the data stream, this extra tick is\n // necessary.\n\n // We don't start reading until we've left the current Task to ensure\n // that it's inserted after flushing the shell. Note that this implementation\n // might get stale if impl details of Fizz change in the future.\n await atLeastOneTask()\n\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n donePulling = true\n return\n }\n\n controller.enqueue(value)\n }\n } catch (err) {\n controller.error(err)\n }\n }\n\n return new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // Start the streaming if it hasn't already been started yet.\n if (!pull) {\n pull = startPulling(controller)\n }\n },\n flush(controller) {\n if (donePulling) {\n return\n }\n return pull || startPulling(controller)\n },\n })\n}\n\nconst CLOSE_TAG = '</body></html>'\n\n/**\n * This transform stream moves the suffix to the end of the stream, so results\n * like `</body></html><script>...</script>` will be transformed to\n * `<script>...</script></body></html>`.\n */\nfunction createMoveSuffixStream(): TransformStream<Uint8Array, Uint8Array> {\n let foundSuffix = false\n\n return new TransformStream({\n transform(chunk, controller) {\n if (foundSuffix) {\n return controller.enqueue(chunk)\n }\n\n const index = indexOfUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n if (index > -1) {\n foundSuffix = true\n\n // If the whole chunk is the suffix, then don't write anything, it will\n // be written in the flush.\n if (chunk.length === ENCODED_TAGS.CLOSED.BODY_AND_HTML.length) {\n return\n }\n\n // Write out the part before the suffix.\n const before = chunk.slice(0, index)\n controller.enqueue(before)\n\n // In the case where the suffix is in the middle of the chunk, we need\n // to split the chunk into two parts.\n if (chunk.length > ENCODED_TAGS.CLOSED.BODY_AND_HTML.length + index) {\n // Write out the part after the suffix.\n const after = chunk.slice(\n index + ENCODED_TAGS.CLOSED.BODY_AND_HTML.length\n )\n controller.enqueue(after)\n }\n } else {\n controller.enqueue(chunk)\n }\n },\n flush(controller) {\n // Even if we didn't find the suffix, the HTML is not valid if we don't\n // add it, so insert it at the end.\n controller.enqueue(ENCODED_TAGS.CLOSED.BODY_AND_HTML)\n },\n })\n}\n\nfunction createStripDocumentClosingTagsTransform(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n return new TransformStream({\n transform(chunk, controller) {\n // We rely on the assumption that chunks will never break across a code unit.\n // This is reasonable because we currently concat all of React's output from a single\n // flush into one chunk before streaming it forward which means the chunk will represent\n // a single coherent utf-8 string. This is not safe to use if we change our streaming to no\n // longer do this large buffered chunk\n if (\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY_AND_HTML) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.BODY) ||\n isEquivalentUint8Arrays(chunk, ENCODED_TAGS.CLOSED.HTML)\n ) {\n // the entire chunk is the closing tags; return without enqueueing anything.\n return\n }\n\n // We assume these tags will go at together at the end of the document and that\n // they won't appear anywhere else in the document. This is not really a safe assumption\n // but until we revamp our streaming infra this is a performant way to string the tags\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.BODY)\n chunk = removeFromUint8Array(chunk, ENCODED_TAGS.CLOSED.HTML)\n\n controller.enqueue(chunk)\n },\n })\n}\n\n/*\n * Checks if the root layout is missing the html or body tags\n * and if so, it will inject a script tag to throw an error in the browser, showing the user\n * the error message in the error overlay.\n */\nexport function createRootLayoutValidatorStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n let foundHtml = false\n let foundBody = false\n return new TransformStream({\n async transform(chunk, controller) {\n // Peek into the streamed chunk to see if the tags are present.\n if (\n !foundHtml &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.HTML) > -1\n ) {\n foundHtml = true\n }\n\n if (\n !foundBody &&\n indexOfUint8Array(chunk, ENCODED_TAGS.OPENING.BODY) > -1\n ) {\n foundBody = true\n }\n\n controller.enqueue(chunk)\n },\n flush(controller) {\n const missingTags: ('html' | 'body')[] = []\n if (!foundHtml) missingTags.push('html')\n if (!foundBody) missingTags.push('body')\n\n if (!missingTags.length) return\n\n controller.enqueue(\n encoder.encode(\n `<html id=\"__next_error__\">\n <template\n data-next-error-message=\"Missing ${missingTags\n .map((c) => `<${c}>`)\n .join(\n missingTags.length > 1 ? ' and ' : ''\n )} tags in the root layout.\\nRead more at https://nextjs.org/docs/messages/missing-root-layout-tags\"\"\n data-next-error-digest=\"${MISSING_ROOT_TAGS_ERROR}\"\n data-next-error-stack=\"\"\n ></template>\n `\n )\n )\n },\n })\n}\n\nfunction chainTransformers<T>(\n readable: ReadableStream<T>,\n transformers: ReadonlyArray<TransformStream<T, T> | null>\n): ReadableStream<T> {\n let stream = readable\n for (const transformer of transformers) {\n if (!transformer) continue\n\n stream = stream.pipeThrough(transformer)\n }\n return stream\n}\n\nexport type ContinueStreamOptions = {\n inlinedDataStream: ReadableStream<Uint8Array> | undefined\n isStaticGeneration: boolean\n isBuildTimePrerendering: boolean\n buildId: string\n getServerInsertedHTML: () => Promise<string>\n getServerInsertedMetadata: () => Promise<string>\n validateRootLayout?: boolean\n /**\n * Suffix to inject after the buffered data, but before the close tags.\n */\n suffix?: string | undefined\n}\n\nexport async function continueFizzStream(\n renderStream: ReactReadableStream,\n {\n suffix,\n inlinedDataStream,\n isStaticGeneration,\n isBuildTimePrerendering,\n buildId,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n validateRootLayout,\n }: ContinueStreamOptions\n): Promise<ReadableStream<Uint8Array>> {\n // Suffix itself might contain close tags at the end, so we need to split it.\n const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null\n\n // If we're generating static HTML and there's an `allReady` promise on the\n // stream, we need to wait for it to resolve before continuing.\n if (isStaticGeneration && 'allReady' in renderStream) {\n await renderStream.allReady\n }\n\n return chainTransformers(renderStream, [\n // Buffer everything to avoid flushing too frequently\n createBufferedTransformStream(),\n\n // Add build id comment to start of the HTML document (in export mode)\n createPrefetchCommentStream(isBuildTimePrerendering, buildId),\n\n // Transform metadata\n createMetadataTransformStream(getServerInsertedMetadata),\n\n // Insert suffix content\n suffixUnclosed != null && suffixUnclosed.length > 0\n ? createDeferredSuffixStream(suffixUnclosed)\n : null,\n\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n inlinedDataStream ? createMergedTransformStream(inlinedDataStream) : null,\n\n // Validate the root layout for missing html or body tags\n validateRootLayout ? createRootLayoutValidatorStream() : null,\n\n // Close tags should always be deferred to the end\n createMoveSuffixStream(),\n\n // Special head insertions\n // TODO-APP: Insert server side html to end of head in app layout rendering, to avoid\n // hydration errors. Remove this once it's ready to be handled by react itself.\n createHeadInsertionTransformStream(getServerInsertedHTML),\n ])\n}\n\ntype ContinueDynamicPrerenderOptions = {\n getServerInsertedHTML: () => Promise<string>\n getServerInsertedMetadata: () => Promise<string>\n}\n\nexport async function continueDynamicPrerender(\n prerenderStream: ReadableStream<Uint8Array>,\n {\n getServerInsertedHTML,\n getServerInsertedMetadata,\n }: ContinueDynamicPrerenderOptions\n) {\n return (\n prerenderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n .pipeThrough(createStripDocumentClosingTagsTransform())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Transform metadata\n .pipeThrough(createMetadataTransformStream(getServerInsertedMetadata))\n )\n}\n\ntype ContinueStaticPrerenderOptions = {\n inlinedDataStream: ReadableStream<Uint8Array>\n getServerInsertedHTML: () => Promise<string>\n getServerInsertedMetadata: () => Promise<string>\n isBuildTimePrerendering: boolean\n buildId: string\n}\n\nexport async function continueStaticPrerender(\n prerenderStream: ReadableStream<Uint8Array>,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n isBuildTimePrerendering,\n buildId,\n }: ContinueStaticPrerenderOptions\n) {\n return (\n prerenderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n // Add build id comment to start of the HTML document (in export mode)\n .pipeThrough(\n createPrefetchCommentStream(isBuildTimePrerendering, buildId)\n )\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Transform metadata\n .pipeThrough(createMetadataTransformStream(getServerInsertedMetadata))\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n .pipeThrough(createMergedTransformStream(inlinedDataStream))\n // Close tags should always be deferred to the end\n .pipeThrough(createMoveSuffixStream())\n )\n}\n\ntype ContinueResumeOptions = {\n inlinedDataStream: ReadableStream<Uint8Array>\n getServerInsertedHTML: () => Promise<string>\n getServerInsertedMetadata: () => Promise<string>\n}\n\nexport async function continueDynamicHTMLResume(\n renderStream: ReadableStream<Uint8Array>,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n }: ContinueResumeOptions\n) {\n return (\n renderStream\n // Buffer everything to avoid flushing too frequently\n .pipeThrough(createBufferedTransformStream())\n // Insert generated tags to head\n .pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML))\n // Transform metadata\n .pipeThrough(createMetadataTransformStream(getServerInsertedMetadata))\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n .pipeThrough(createMergedTransformStream(inlinedDataStream))\n // Close tags should always be deferred to the end\n .pipeThrough(createMoveSuffixStream())\n )\n}\n\nexport function createDocumentClosingStream(): ReadableStream<Uint8Array> {\n return streamFromString(CLOSE_TAG)\n}\n","export const ENCODED_TAGS = {\n // opening tags do not have the closing `>` since they can contain other attributes such as `<body className=''>`\n OPENING: {\n // <html\n HTML: new Uint8Array([60, 104, 116, 109, 108]),\n // <body\n BODY: new Uint8Array([60, 98, 111, 100, 121]),\n },\n CLOSED: {\n // </head>\n HEAD: new Uint8Array([60, 47, 104, 101, 97, 100, 62]),\n // </body>\n BODY: new Uint8Array([60, 47, 98, 111, 100, 121, 62]),\n // </html>\n HTML: new Uint8Array([60, 47, 104, 116, 109, 108, 62]),\n // </body></html>\n BODY_AND_HTML: new Uint8Array([\n 60, 47, 98, 111, 100, 121, 62, 60, 47, 104, 116, 109, 108, 62,\n ]),\n },\n META: {\n // Only the match the prefix cause the suffix can be different wether it's xml compatible or not \">\" or \"/>\"\n // <meta name=\"«nxt-icon»\"\n // This is a special mark that will be replaced by the icon insertion script tag.\n ICON_MARK: new Uint8Array([\n 60, 109, 101, 116, 97, 32, 110, 97, 109, 101, 61, 34, 194, 171, 110, 120,\n 116, 45, 105, 99, 111, 110, 194, 187, 34,\n ]),\n },\n} as const\n","import { parsePath } from './parse-path'\n\n/**\n * Adds the provided prefix to the given path. It first ensures that the path\n * is indeed starting with a slash.\n */\nexport function addPathPrefix(path: string, prefix?: string) {\n if (!path.startsWith('/') || !prefix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${prefix}${pathname}${query}${hash}`\n}\n","import { parsePath } from './parse-path'\n\n/**\n * Similarly to `addPathPrefix`, this function adds a suffix at the end on the\n * provided path. It also works only for paths ensuring the argument starts\n * with a slash.\n */\nexport function addPathSuffix(path: string, suffix?: string) {\n if (!path.startsWith('/') || !suffix) {\n return path\n }\n\n const { pathname, query, hash } = parsePath(path)\n return `${pathname}${suffix}${query}${hash}`\n}\n","import type { OutgoingHttpHeaders } from 'http'\nimport type { DomainLocale, I18NConfig } from '../config-shared'\nimport type { I18NProvider } from '../lib/i18n-provider'\n\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { formatNextPathnameInfo } from '../../shared/lib/router/utils/format-next-pathname-info'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { getNextPathnameInfo } from '../../shared/lib/router/utils/get-next-pathname-info'\n\ninterface Options {\n base?: string | URL\n headers?: OutgoingHttpHeaders\n forceLocale?: boolean\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n i18nProvider?: I18NProvider\n}\n\nconst REGEX_LOCALHOST_HOSTNAME =\n /(?!^https?:\\/\\/)(127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\\[::1\\]|localhost)/\n\nfunction parseURL(url: string | URL, base?: string | URL) {\n return new URL(\n String(url).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'),\n base && String(base).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost')\n )\n}\n\nconst Internal = Symbol('NextURLInternal')\n\nexport class NextURL {\n private [Internal]: {\n basePath: string\n buildId?: string\n flightSearchParameters?: Record<string, string>\n defaultLocale?: string\n domainLocale?: DomainLocale\n locale?: string\n options: Options\n trailingSlash?: boolean\n url: URL\n }\n\n constructor(input: string | URL, base?: string | URL, opts?: Options)\n constructor(input: string | URL, opts?: Options)\n constructor(\n input: string | URL,\n baseOrOpts?: string | URL | Options,\n opts?: Options\n ) {\n let base: undefined | string | URL\n let options: Options\n\n if (\n (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts) ||\n typeof baseOrOpts === 'string'\n ) {\n base = baseOrOpts\n options = opts || {}\n } else {\n options = opts || baseOrOpts || {}\n }\n\n this[Internal] = {\n url: parseURL(input, base ?? options.base),\n options: options,\n basePath: '',\n }\n\n this.analyze()\n }\n\n private analyze() {\n const info = getNextPathnameInfo(this[Internal].url.pathname, {\n nextConfig: this[Internal].options.nextConfig,\n parseData: !process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE,\n i18nProvider: this[Internal].options.i18nProvider,\n })\n\n const hostname = getHostname(\n this[Internal].url,\n this[Internal].options.headers\n )\n this[Internal].domainLocale = this[Internal].options.i18nProvider\n ? this[Internal].options.i18nProvider.detectDomainLocale(hostname)\n : detectDomainLocale(\n this[Internal].options.nextConfig?.i18n?.domains,\n hostname\n )\n\n const defaultLocale =\n this[Internal].domainLocale?.defaultLocale ||\n this[Internal].options.nextConfig?.i18n?.defaultLocale\n\n this[Internal].url.pathname = info.pathname\n this[Internal].defaultLocale = defaultLocale\n this[Internal].basePath = info.basePath ?? ''\n this[Internal].buildId = info.buildId\n this[Internal].locale = info.locale ?? defaultLocale\n this[Internal].trailingSlash = info.trailingSlash\n }\n\n private formatPathname() {\n return formatNextPathnameInfo({\n basePath: this[Internal].basePath,\n buildId: this[Internal].buildId,\n defaultLocale: !this[Internal].options.forceLocale\n ? this[Internal].defaultLocale\n : undefined,\n locale: this[Internal].locale,\n pathname: this[Internal].url.pathname,\n trailingSlash: this[Internal].trailingSlash,\n })\n }\n\n private formatSearch() {\n return this[Internal].url.search\n }\n\n public get buildId() {\n return this[Internal].buildId\n }\n\n public set buildId(buildId: string | undefined) {\n this[Internal].buildId = buildId\n }\n\n public get locale() {\n return this[Internal].locale ?? ''\n }\n\n public set locale(locale: string) {\n if (\n !this[Internal].locale ||\n !this[Internal].options.nextConfig?.i18n?.locales.includes(locale)\n ) {\n throw new TypeError(\n `The NextURL configuration includes no locale \"${locale}\"`\n )\n }\n\n this[Internal].locale = locale\n }\n\n get defaultLocale() {\n return this[Internal].defaultLocale\n }\n\n get domainLocale() {\n return this[Internal].domainLocale\n }\n\n get searchParams() {\n return this[Internal].url.searchParams\n }\n\n get host() {\n return this[Internal].url.host\n }\n\n set host(value: string) {\n this[Internal].url.host = value\n }\n\n get hostname() {\n return this[Internal].url.hostname\n }\n\n set hostname(value: string) {\n this[Internal].url.hostname = value\n }\n\n get port() {\n return this[Internal].url.port\n }\n\n set port(value: string) {\n this[Internal].url.port = value\n }\n\n get protocol() {\n return this[Internal].url.protocol\n }\n\n set protocol(value: string) {\n this[Internal].url.protocol = value\n }\n\n get href() {\n const pathname = this.formatPathname()\n const search = this.formatSearch()\n return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`\n }\n\n set href(url: string) {\n this[Internal].url = parseURL(url)\n this.analyze()\n }\n\n get origin() {\n return this[Internal].url.origin\n }\n\n get pathname() {\n return this[Internal].url.pathname\n }\n\n set pathname(value: string) {\n this[Internal].url.pathname = value\n }\n\n get hash() {\n return this[Internal].url.hash\n }\n\n set hash(value: string) {\n this[Internal].url.hash = value\n }\n\n get search() {\n return this[Internal].url.search\n }\n\n set search(value: string) {\n this[Internal].url.search = value\n }\n\n get password() {\n return this[Internal].url.password\n }\n\n set password(value: string) {\n this[Internal].url.password = value\n }\n\n get username() {\n return this[Internal].url.username\n }\n\n set username(value: string) {\n this[Internal].url.username = value\n }\n\n get basePath() {\n return this[Internal].basePath\n }\n\n set basePath(value: string) {\n this[Internal].basePath = value.startsWith('/') ? value : `/${value}`\n }\n\n toString() {\n return this.href\n }\n\n toJSON() {\n return this.href\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n href: this.href,\n origin: this.origin,\n protocol: this.protocol,\n username: this.username,\n password: this.password,\n host: this.host,\n hostname: this.hostname,\n port: this.port,\n pathname: this.pathname,\n search: this.search,\n searchParams: this.searchParams,\n hash: this.hash,\n }\n }\n\n clone() {\n return new NextURL(String(this), this[Internal].options)\n }\n}\n","import { normalizeLocalePath } from '../../i18n/normalize-locale-path'\nimport { removePathPrefix } from './remove-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\nimport type { I18NProvider } from '../../../../server/lib/i18n-provider'\n\nexport interface NextPathnameInfo {\n /**\n * The base path in case the pathname included it.\n */\n basePath?: string\n /**\n * The buildId for when the parsed URL is a data URL. Parsing it can be\n * disabled with the `parseData` option.\n */\n buildId?: string\n /**\n * If there was a locale in the pathname, this will hold its value.\n */\n locale?: string\n /**\n * The processed pathname without a base path, locale, or data URL elements\n * when parsing it is enabled.\n */\n pathname: string\n /**\n * A boolean telling if the pathname had a trailingSlash. This can be only\n * true if trailingSlash is enabled.\n */\n trailingSlash?: boolean\n}\n\ninterface Options {\n /**\n * When passed to true, this function will also parse Nextjs data URLs.\n */\n parseData?: boolean\n /**\n * A partial of the Next.js configuration to parse the URL.\n */\n nextConfig?: {\n basePath?: string\n i18n?: { locales?: readonly string[] } | null\n trailingSlash?: boolean\n }\n\n /**\n * If provided, this normalizer will be used to detect the locale instead of\n * the default locale detection.\n */\n i18nProvider?: I18NProvider\n}\n\nexport function getNextPathnameInfo(\n pathname: string,\n options: Options\n): NextPathnameInfo {\n const { basePath, i18n, trailingSlash } = options.nextConfig ?? {}\n const info: NextPathnameInfo = {\n pathname,\n trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash,\n }\n\n if (basePath && pathHasPrefix(info.pathname, basePath)) {\n info.pathname = removePathPrefix(info.pathname, basePath)\n info.basePath = basePath\n }\n let pathnameNoDataPrefix = info.pathname\n\n if (\n info.pathname.startsWith('/_next/data/') &&\n info.pathname.endsWith('.json')\n ) {\n const paths = info.pathname\n .replace(/^\\/_next\\/data\\//, '')\n .replace(/\\.json$/, '')\n .split('/')\n\n const buildId = paths[0]\n info.buildId = buildId\n pathnameNoDataPrefix =\n paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/'\n\n // update pathname with normalized if enabled although\n // we use normalized to populate locale info still\n if (options.parseData === true) {\n info.pathname = pathnameNoDataPrefix\n }\n }\n\n // If provided, use the locale route normalizer to detect the locale instead\n // of the function below.\n if (i18n) {\n let result = options.i18nProvider\n ? options.i18nProvider.analyze(info.pathname)\n : normalizeLocalePath(info.pathname, i18n.locales)\n\n info.locale = result.detectedLocale\n info.pathname = result.pathname ?? info.pathname\n\n if (!result.detectedLocale && info.buildId) {\n result = options.i18nProvider\n ? options.i18nProvider.analyze(pathnameNoDataPrefix)\n : normalizeLocalePath(pathnameNoDataPrefix, i18n.locales)\n\n if (result.detectedLocale) {\n info.locale = result.detectedLocale\n }\n }\n }\n return info\n}\n","import type { NextPathnameInfo } from './get-next-pathname-info'\nimport { removeTrailingSlash } from './remove-trailing-slash'\nimport { addPathPrefix } from './add-path-prefix'\nimport { addPathSuffix } from './add-path-suffix'\nimport { addLocale } from './add-locale'\n\ninterface ExtendedInfo extends NextPathnameInfo {\n defaultLocale?: string\n ignorePrefix?: boolean\n}\n\nexport function formatNextPathnameInfo(info: ExtendedInfo) {\n let pathname = addLocale(\n info.pathname,\n info.locale,\n info.buildId ? undefined : info.defaultLocale,\n info.ignorePrefix\n )\n\n if (info.buildId || !info.trailingSlash) {\n pathname = removeTrailingSlash(pathname)\n }\n\n if (info.buildId) {\n pathname = addPathSuffix(\n addPathPrefix(pathname, `/_next/data/${info.buildId}`),\n info.pathname === '/' ? 'index.json' : '.json'\n )\n }\n\n pathname = addPathPrefix(pathname, info.basePath)\n return !info.buildId && info.trailingSlash\n ? !pathname.endsWith('/')\n ? addPathSuffix(pathname, '/')\n : pathname\n : removeTrailingSlash(pathname)\n}\n","import { addPathPrefix } from './add-path-prefix'\nimport { pathHasPrefix } from './path-has-prefix'\n\n/**\n * For a given path and a locale, if the locale is given, it will prefix the\n * locale. The path shouldn't be an API path. If a default locale is given the\n * prefix will be omitted if the locale is already the default locale.\n */\nexport function addLocale(\n path: string,\n locale?: string | false,\n defaultLocale?: string,\n ignorePrefix?: boolean\n) {\n // If no locale was given or the locale is the default locale, we don't need\n // to prefix the path.\n if (!locale || locale === defaultLocale) return path\n\n const lower = path.toLowerCase()\n\n // If the path is an API path or the path already has the locale prefix, we\n // don't need to prefix the path.\n if (!ignorePrefix) {\n if (pathHasPrefix(lower, '/api')) return path\n if (pathHasPrefix(lower, `/${locale.toLowerCase()}`)) return path\n }\n\n // Add the locale prefix to the path.\n return addPathPrefix(path, `/${locale}`)\n}\n","import type { I18NConfig } from '../../config-shared'\nimport { NextURL } from '../next-url'\nimport { toNodeOutgoingHttpHeaders, validateURL } from '../utils'\nimport { RemovedUAError, RemovedPageError } from '../error'\nimport { RequestCookies } from './cookies'\n\nexport const INTERNALS = Symbol('internal request')\n\n/**\n * This class extends the [Web `Request` API](https://developer.mozilla.org/docs/Web/API/Request) with additional convenience methods.\n *\n * Read more: [Next.js Docs: `NextRequest`](https://nextjs.org/docs/app/api-reference/functions/next-request)\n */\nexport class NextRequest extends Request {\n [INTERNALS]: {\n cookies: RequestCookies\n url: string\n nextUrl: NextURL\n }\n\n constructor(input: URL | RequestInfo, init: RequestInit = {}) {\n const url =\n typeof input !== 'string' && 'url' in input ? input.url : String(input)\n\n validateURL(url)\n\n // node Request instance requires duplex option when a body\n // is present or it errors, we don't handle this for\n // Request being passed in since it would have already\n // errored if this wasn't configured\n if (process.env.NEXT_RUNTIME !== 'edge') {\n if (init.body && init.duplex !== 'half') {\n init.duplex = 'half'\n }\n }\n\n if (input instanceof Request) super(input, init)\n else super(url, init)\n\n const nextUrl = new NextURL(url, {\n headers: toNodeOutgoingHttpHeaders(this.headers),\n nextConfig: init.nextConfig,\n })\n this[INTERNALS] = {\n cookies: new RequestCookies(this.headers),\n nextUrl,\n url: process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ? url\n : nextUrl.toString(),\n }\n }\n\n [Symbol.for('edge-runtime.inspect.custom')]() {\n return {\n cookies: this.cookies,\n nextUrl: this.nextUrl,\n url: this.url,\n // rest of props come from Request\n bodyUsed: this.bodyUsed,\n cache: this.cache,\n credentials: this.credentials,\n destination: this.destination,\n headers: Object.fromEntries(this.headers),\n integrity: this.integrity,\n keepalive: this.keepalive,\n method: this.method,\n mode: this.mode,\n redirect: this.redirect,\n referrer: this.referrer,\n referrerPolicy: this.referrerPolicy,\n signal: this.signal,\n }\n }\n\n public get cookies() {\n return this[INTERNALS].cookies\n }\n\n public get nextUrl() {\n return this[INTERNALS].nextUrl\n }\n\n /**\n * @deprecated\n * `page` has been deprecated in favour of `URLPattern`.\n * Read more: https://nextjs.org/docs/messages/middleware-request-page\n */\n public get page() {\n throw new RemovedPageError()\n }\n\n /**\n * @deprecated\n * `ua` has been removed in favour of \\`userAgent\\` function.\n * Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent\n */\n public get ua() {\n throw new RemovedUAError()\n }\n\n public get url() {\n return this[INTERNALS].url\n }\n}\n\nexport interface RequestInit extends globalThis.RequestInit {\n nextConfig?: {\n basePath?: string\n i18n?: I18NConfig | null\n trailingSlash?: boolean\n }\n signal?: AbortSignal\n // see https://github.com/whatwg/fetch/pull/1457\n duplex?: 'half'\n}\n","import type { BaseNextRequest } from '../../../base-http'\nimport type { NodeNextRequest } from '../../../base-http/node'\nimport type { WebNextRequest } from '../../../base-http/web'\nimport type { Writable } from 'node:stream'\n\nimport { getRequestMeta } from '../../../request-meta'\nimport { fromNodeOutgoingHttpHeaders } from '../../utils'\nimport { NextRequest } from '../request'\nimport { isNodeNextRequest, isWebNextRequest } from '../../../base-http/helpers'\n\nexport const ResponseAbortedName = 'ResponseAborted'\nexport class ResponseAborted extends Error {\n public readonly name = ResponseAbortedName\n}\n\n/**\n * Creates an AbortController tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * If the `close` event is fired before the `finish` event, then we'll send the\n * `abort` signal.\n */\nexport function createAbortController(response: Writable): AbortController {\n const controller = new AbortController()\n\n // If `finish` fires first, then `res.end()` has been called and the close is\n // just us finishing the stream on our side. If `close` fires first, then we\n // know the client disconnected before we finished.\n response.once('close', () => {\n if (response.writableFinished) return\n\n controller.abort(new ResponseAborted())\n })\n\n return controller\n}\n\n/**\n * Creates an AbortSignal tied to the closing of a ServerResponse (or other\n * appropriate Writable).\n *\n * This cannot be done with the request (IncomingMessage or Readable) because\n * the `abort` event will not fire if to data has been fully read (because that\n * will \"close\" the readable stream and nothing fires after that).\n */\nexport function signalFromNodeResponse(response: Writable): AbortSignal {\n const { errored, destroyed } = response\n if (errored || destroyed) {\n return AbortSignal.abort(errored ?? new ResponseAborted())\n }\n\n const { signal } = createAbortController(response)\n return signal\n}\n\nexport class NextRequestAdapter {\n public static fromBaseNextRequest(\n request: BaseNextRequest,\n signal: AbortSignal\n ): NextRequest {\n if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME === 'edge' &&\n isWebNextRequest(request)\n ) {\n return NextRequestAdapter.fromWebNextRequest(request)\n } else if (\n // The type check here ensures that `req` is correctly typed, and the\n // environment variable check provides dead code elimination.\n process.env.NEXT_RUNTIME !== 'edge' &&\n isNodeNextRequest(request)\n ) {\n return NextRequestAdapter.fromNodeNextRequest(request, signal)\n } else {\n throw new Error('Invariant: Unsupported NextRequest type')\n }\n }\n\n public static fromNodeNextRequest(\n request: NodeNextRequest,\n signal: AbortSignal\n ): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: BodyInit | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) {\n // @ts-expect-error - this is handled by undici, when streams/web land use it instead\n body = request.body\n }\n\n let url: URL\n if (request.url.startsWith('http')) {\n url = new URL(request.url)\n } else {\n // Grab the full URL from the request metadata.\n const base = getRequestMeta(request, 'initURL')\n if (!base || !base.startsWith('http')) {\n // Because the URL construction relies on the fact that the URL provided\n // is absolute, we need to provide a base URL. We can't use the request\n // URL because it's relative, so we use a dummy URL instead.\n url = new URL(request.url, 'http://n')\n } else {\n url = new URL(request.url, base)\n }\n }\n\n return new NextRequest(url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n\n public static fromWebNextRequest(request: WebNextRequest): NextRequest {\n // HEAD and GET requests can not have a body.\n let body: ReadableStream | null = null\n if (request.method !== 'GET' && request.method !== 'HEAD') {\n body = request.body\n }\n\n return new NextRequest(request.url, {\n method: request.method,\n headers: fromNodeOutgoingHttpHeaders(request.headers),\n duplex: 'half',\n signal: request.request.signal,\n // geo\n // ip\n // nextConfig\n\n // body can not be passed if request was aborted\n // or we get a Request body was disturbed error\n ...(request.request.signal.aborted\n ? {}\n : {\n body,\n }),\n })\n }\n}\n","import type { AppPageModule } from './route-modules/app-page/module'\n\n// Combined load times for loading client components\nlet clientComponentLoadStart = 0\nlet clientComponentLoadTimes = 0\nlet clientComponentLoadCount = 0\n\nexport function wrapClientComponentLoader(\n ComponentMod: AppPageModule\n): AppPageModule['__next_app__'] {\n if (!('performance' in globalThis)) {\n return ComponentMod.__next_app__\n }\n\n return {\n require: (...args) => {\n const startTime = performance.now()\n\n if (clientComponentLoadStart === 0) {\n clientComponentLoadStart = startTime\n }\n\n try {\n clientComponentLoadCount += 1\n return ComponentMod.__next_app__.require(...args)\n } finally {\n clientComponentLoadTimes += performance.now() - startTime\n }\n },\n loadChunk: (...args) => {\n const startTime = performance.now()\n const result = ComponentMod.__next_app__.loadChunk(...args)\n // Avoid wrapping `loadChunk`'s result in an extra promise in case something like React depends on its identity.\n // We only need to know when it's settled.\n result.finally(() => {\n clientComponentLoadTimes += performance.now() - startTime\n })\n return result\n },\n }\n}\n\nexport function getClientComponentLoaderMetrics(\n options: { reset?: boolean } = {}\n) {\n const metrics =\n clientComponentLoadStart === 0\n ? undefined\n : {\n clientComponentLoadStart,\n clientComponentLoadTimes,\n clientComponentLoadCount,\n }\n\n if (options.reset) {\n clientComponentLoadStart = 0\n clientComponentLoadTimes = 0\n clientComponentLoadCount = 0\n }\n\n return metrics\n}\n","import type { ServerResponse } from 'node:http'\n\nimport {\n ResponseAbortedName,\n createAbortController,\n} from './web/spec-extension/adapters/next-request'\nimport { DetachedPromise } from '../lib/detached-promise'\nimport { getTracer } from './lib/trace/tracer'\nimport { NextNodeServerSpan } from './lib/trace/constants'\nimport { getClientComponentLoaderMetrics } from './client-component-renderer-logger'\n\nexport function isAbortError(e: any): e is Error & { name: 'AbortError' } {\n return e?.name === 'AbortError' || e?.name === ResponseAbortedName\n}\n\nfunction createWriterFromResponse(\n res: ServerResponse,\n waitUntilForEnd?: Promise<unknown>\n): WritableStream<Uint8Array> {\n let started = false\n\n // Create a promise that will resolve once the response has drained. See\n // https://nodejs.org/api/stream.html#stream_event_drain\n let drained = new DetachedPromise<void>()\n function onDrain() {\n drained.resolve()\n }\n res.on('drain', onDrain)\n\n // If the finish event fires, it means we shouldn't block and wait for the\n // drain event.\n res.once('close', () => {\n res.off('drain', onDrain)\n drained.resolve()\n })\n\n // Create a promise that will resolve once the response has finished. See\n // https://nodejs.org/api/http.html#event-finish_1\n const finished = new DetachedPromise<void>()\n res.once('finish', () => {\n finished.resolve()\n })\n\n // Create a writable stream that will write to the response.\n return new WritableStream<Uint8Array>({\n write: async (chunk) => {\n // You'd think we'd want to use `start` instead of placing this in `write`\n // but this ensures that we don't actually flush the headers until we've\n // started writing chunks.\n if (!started) {\n started = true\n\n if (\n 'performance' in globalThis &&\n process.env.NEXT_OTEL_PERFORMANCE_PREFIX\n ) {\n const metrics = getClientComponentLoaderMetrics()\n if (metrics) {\n performance.measure(\n `${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`,\n {\n start: metrics.clientComponentLoadStart,\n end:\n metrics.clientComponentLoadStart +\n metrics.clientComponentLoadTimes,\n }\n )\n }\n }\n\n res.flushHeaders()\n getTracer().trace(\n NextNodeServerSpan.startResponse,\n {\n spanName: 'start response',\n },\n () => undefined\n )\n }\n\n try {\n const ok = res.write(chunk)\n\n // Added by the `compression` middleware, this is a function that will\n // flush the partially-compressed response to the client.\n if ('flush' in res && typeof res.flush === 'function') {\n res.flush()\n }\n\n // If the write returns false, it means there's some backpressure, so\n // wait until it's streamed before continuing.\n if (!ok) {\n await drained.promise\n\n // Reset the drained promise so that we can wait for the next drain event.\n drained = new DetachedPromise<void>()\n }\n } catch (err) {\n res.end()\n throw new Error('failed to write chunk to response', { cause: err })\n }\n },\n abort: (err) => {\n if (res.writableFinished) return\n\n res.destroy(err)\n },\n close: async () => {\n // if a waitUntil promise was passed, wait for it to resolve before\n // ending the response.\n if (waitUntilForEnd) {\n await waitUntilForEnd\n }\n\n if (res.writableFinished) return\n\n res.end()\n return finished.promise\n },\n })\n}\n\nexport async function pipeToNodeResponse(\n readable: ReadableStream<Uint8Array>,\n res: ServerResponse,\n waitUntilForEnd?: Promise<unknown>\n) {\n try {\n // If the response has already errored, then just return now.\n const { errored, destroyed } = res\n if (errored || destroyed) return\n\n // Create a new AbortController so that we can abort the readable if the\n // client disconnects.\n const controller = createAbortController(res)\n\n const writer = createWriterFromResponse(res, waitUntilForEnd)\n\n await readable.pipeTo(writer, { signal: controller.signal })\n } catch (err: any) {\n // If this isn't related to an abort error, re-throw it.\n if (isAbortError(err)) return\n\n throw new Error('failed to pipe response', { cause: err })\n }\n}\n","export class InvariantError extends Error {\n constructor(message: string, options?: ErrorOptions) {\n super(\n `Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`,\n options\n )\n this.name = 'InvariantError'\n }\n}\n","import type { OutgoingHttpHeaders, ServerResponse } from 'http'\nimport type { CacheControl } from './lib/cache-control'\nimport type { FetchMetrics } from './base-http'\n\nimport {\n chainStreams,\n streamFromBuffer,\n streamFromString,\n streamToString,\n} from './stream-utils/node-web-streams-helper'\nimport { isAbortError, pipeToNodeResponse } from './pipe-readable'\nimport type { RenderResumeDataCache } from './resume-data-cache/resume-data-cache'\nimport { InvariantError } from '../shared/lib/invariant-error'\nimport type {\n HTML_CONTENT_TYPE_HEADER,\n JSON_CONTENT_TYPE_HEADER,\n TEXT_PLAIN_CONTENT_TYPE_HEADER,\n} from '../lib/constants'\nimport type { RSC_CONTENT_TYPE_HEADER } from '../client/components/app-router-headers'\n\ntype ContentTypeOption =\n | typeof RSC_CONTENT_TYPE_HEADER // For App Page RSC responses\n | typeof HTML_CONTENT_TYPE_HEADER // For App Page, Pages HTML responses\n | typeof JSON_CONTENT_TYPE_HEADER // For API routes, Next.js data requests\n | typeof TEXT_PLAIN_CONTENT_TYPE_HEADER // For simplified errors\n\nexport type AppPageRenderResultMetadata = {\n flightData?: Buffer\n cacheControl?: CacheControl\n staticBailoutInfo?: {\n stack?: string\n description?: string\n }\n\n /**\n * The postponed state if the render had postponed and needs to be resumed.\n */\n postponed?: string\n\n /**\n * The headers to set on the response that were added by the render.\n */\n headers?: OutgoingHttpHeaders\n statusCode?: number\n fetchTags?: string\n fetchMetrics?: FetchMetrics\n\n segmentData?: Map<string, Buffer>\n\n /**\n * In development, the resume data cache is warmed up before the render. This\n * is attached to the metadata so that it can be used during the render. When\n * prerendering, the filled resume data cache is also attached to the metadata\n * so that it can be used when prerendering matching fallback shells.\n */\n renderResumeDataCache?: RenderResumeDataCache\n}\n\nexport type PagesRenderResultMetadata = {\n pageData?: any\n cacheControl?: CacheControl\n assetQueryString?: string\n isNotFound?: boolean\n isRedirect?: boolean\n}\n\nexport type StaticRenderResultMetadata = {}\n\nexport type RenderResultMetadata = AppPageRenderResultMetadata &\n PagesRenderResultMetadata &\n StaticRenderResultMetadata\n\nexport type RenderResultResponse =\n | ReadableStream<Uint8Array>[]\n | ReadableStream<Uint8Array>\n | string\n | Buffer\n | null\n\nexport type RenderResultOptions<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> = {\n contentType: ContentTypeOption | null\n waitUntil?: Promise<unknown>\n metadata: Metadata\n}\n\nexport default class RenderResult<\n Metadata extends RenderResultMetadata = RenderResultMetadata,\n> {\n /**\n * The detected content type for the response. This is used to set the\n * `Content-Type` header.\n */\n public readonly contentType: ContentTypeOption | null\n\n /**\n * The metadata for the response. This is used to set the revalidation times\n * and other metadata.\n */\n public readonly metadata: Readonly<Metadata>\n\n /**\n * The response itself. This can be a string, a stream, or null. If it's a\n * string, then it's a static response. If it's a stream, then it's a\n * dynamic response. If it's null, then the response was not found or was\n * already sent.\n */\n private response: RenderResultResponse\n\n /**\n * A render result that represents an empty response. This is used to\n * represent a response that was not found or was already sent.\n */\n public static readonly EMPTY = new RenderResult<StaticRenderResultMetadata>(\n null,\n { metadata: {}, contentType: null }\n )\n\n /**\n * Creates a new RenderResult instance from a static response.\n *\n * @param value the static response value\n * @param contentType the content type of the response\n * @returns a new RenderResult instance\n */\n public static fromStatic(\n value: string | Buffer,\n contentType: ContentTypeOption\n ) {\n return new RenderResult<StaticRenderResultMetadata>(value, {\n metadata: {},\n contentType,\n })\n }\n\n private readonly waitUntil?: Promise<unknown>\n\n constructor(\n response: RenderResultResponse,\n { contentType, waitUntil, metadata }: RenderResultOptions<Metadata>\n ) {\n this.response = response\n this.contentType = contentType\n this.metadata = metadata\n this.waitUntil = waitUntil\n }\n\n public assignMetadata(metadata: Metadata) {\n Object.assign(this.metadata, metadata)\n }\n\n /**\n * Returns true if the response is null. It can be null if the response was\n * not found or was already sent.\n */\n public get isNull(): boolean {\n return this.response === null\n }\n\n /**\n * Returns false if the response is a string. It can be a string if the page\n * was prerendered. If it's not, then it was generated dynamically.\n */\n public get isDynamic(): boolean {\n return typeof this.response !== 'string'\n }\n\n /**\n * Returns the response if it is a string. If the page was dynamic, this will\n * return a promise if the `stream` option is true, or it will throw an error.\n *\n * @param stream Whether or not to return a promise if the response is dynamic\n * @returns The response as a string\n */\n public toUnchunkedString(stream?: false): string\n public toUnchunkedString(stream: true): Promise<string>\n public toUnchunkedString(stream = false): Promise<string> | string {\n if (this.response === null) {\n // If the response is null, return an empty string. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return ''\n }\n\n if (typeof this.response !== 'string') {\n if (!stream) {\n throw new InvariantError(\n 'dynamic responses cannot be unchunked. This is a bug in Next.js'\n )\n }\n\n return streamToString(this.readable)\n }\n\n return this.response\n }\n\n /**\n * Returns a readable stream of the response.\n */\n private get readable(): ReadableStream<Uint8Array> {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return new ReadableStream<Uint8Array>({\n start(controller) {\n controller.close()\n },\n })\n }\n\n if (typeof this.response === 'string') {\n return streamFromString(this.response)\n }\n\n if (Buffer.isBuffer(this.response)) {\n return streamFromBuffer(this.response)\n }\n\n // If the response is an array of streams, then chain them together.\n if (Array.isArray(this.response)) {\n return chainStreams(...this.response)\n }\n\n return this.response\n }\n\n /**\n * Coerces the response to an array of streams. This will convert the response\n * to an array of streams if it is not already one.\n *\n * @returns An array of streams\n */\n private coerce(): ReadableStream<Uint8Array>[] {\n if (this.response === null) {\n // If the response is null, return an empty stream. This behavior is\n // intentional as we're now providing the `RenderResult.EMPTY` value.\n return []\n }\n\n if (typeof this.response === 'string') {\n return [streamFromString(this.response)]\n } else if (Array.isArray(this.response)) {\n return this.response\n } else if (Buffer.isBuffer(this.response)) {\n return [streamFromBuffer(this.response)]\n } else {\n return [this.response]\n }\n }\n\n /**\n * Unshifts a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the start of the array. When this response is piped, all of the streams\n * will be piped one after the other.\n *\n * @param readable The new stream to unshift\n */\n public unshift(readable: ReadableStream<Uint8Array>): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the start of the array.\n this.response.unshift(readable)\n }\n\n /**\n * Chains a new stream to the response. This will convert the response to an\n * array of streams if it is not already one and will add the new stream to\n * the end. When this response is piped, all of the streams will be piped\n * one after the other.\n *\n * @param readable The new stream to chain\n */\n public push(readable: ReadableStream<Uint8Array>): void {\n // Coerce the response to an array of streams.\n this.response = this.coerce()\n\n // Add the new stream to the end of the array.\n this.response.push(readable)\n }\n\n /**\n * Pipes the response to a writable stream. This will close/cancel the\n * writable stream if an error is encountered. If this doesn't throw, then\n * the writable stream will be closed or aborted.\n *\n * @param writable Writable stream to pipe the response to\n */\n public async pipeTo(writable: WritableStream<Uint8Array>): Promise<void> {\n try {\n await this.readable.pipeTo(writable, {\n // We want to close the writable stream ourselves so that we can wait\n // for the waitUntil promise to resolve before closing it. If an error\n // is encountered, we'll abort the writable stream if we swallowed the\n // error.\n preventClose: true,\n })\n\n // If there is a waitUntil promise, wait for it to resolve before\n // closing the writable stream.\n if (this.waitUntil) await this.waitUntil\n\n // Close the writable stream.\n await writable.close()\n } catch (err) {\n // If this is an abort error, we should abort the writable stream (as we\n // took ownership of it when we started piping). We don't need to re-throw\n // because we handled the error.\n if (isAbortError(err)) {\n // Abort the writable stream if an error is encountered.\n await writable.abort(err)\n\n return\n }\n\n // We're not aborting the writer here as when this method throws it's not\n // clear as to how so the caller should assume it's their responsibility\n // to clean up the writer.\n throw err\n }\n }\n\n /**\n * Pipes the response to a node response. This will close/cancel the node\n * response if an error is encountered.\n *\n * @param res\n */\n public async pipeToNodeResponse(res: ServerResponse) {\n await pipeToNodeResponse(this.readable, res, this.waitUntil)\n }\n}\n","export const enum RouteKind {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */\n PAGES = 'PAGES',\n /**\n * `PAGES_API` represents all the API routes under `pages/api/`.\n */\n PAGES_API = 'PAGES_API',\n /**\n * `APP_PAGE` represents all the React pages that are under `app/` with the\n * filename of `page.{j,t}s{,x}`.\n */\n APP_PAGE = 'APP_PAGE',\n /**\n * `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the\n * filename of `route.{j,t}s{,x}`.\n */\n APP_ROUTE = 'APP_ROUTE',\n\n /**\n * `IMAGE` represents all the images that are generated by `next/image`.\n */\n IMAGE = 'IMAGE',\n}\n","import {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedAppPageValue,\n type CachedPageValue,\n type IncrementalResponseCacheEntry,\n type ResponseCacheEntry,\n} from './types'\n\nimport RenderResult from '../render-result'\nimport { RouteKind } from '../route-kind'\nimport { HTML_CONTENT_TYPE_HEADER } from '../../lib/constants'\n\nexport async function fromResponseCacheEntry(\n cacheEntry: ResponseCacheEntry\n): Promise<IncrementalResponseCacheEntry> {\n return {\n ...cacheEntry,\n value:\n cacheEntry.value?.kind === CachedRouteKind.PAGES\n ? {\n kind: CachedRouteKind.PAGES,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n pageData: cacheEntry.value.pageData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n }\n : cacheEntry.value?.kind === CachedRouteKind.APP_PAGE\n ? {\n kind: CachedRouteKind.APP_PAGE,\n html: await cacheEntry.value.html.toUnchunkedString(true),\n postponed: cacheEntry.value.postponed,\n rscData: cacheEntry.value.rscData,\n headers: cacheEntry.value.headers,\n status: cacheEntry.value.status,\n segmentData: cacheEntry.value.segmentData,\n }\n : cacheEntry.value,\n }\n}\n\nexport async function toResponseCacheEntry(\n response: IncrementalResponseCacheEntry | null\n): Promise<ResponseCacheEntry | null> {\n if (!response) return null\n\n return {\n isMiss: response.isMiss,\n isStale: response.isStale,\n cacheControl: response.cacheControl,\n value:\n response.value?.kind === CachedRouteKind.PAGES\n ? ({\n kind: CachedRouteKind.PAGES,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n pageData: response.value.pageData,\n headers: response.value.headers,\n status: response.value.status,\n } satisfies CachedPageValue)\n : response.value?.kind === CachedRouteKind.APP_PAGE\n ? ({\n kind: CachedRouteKind.APP_PAGE,\n html: RenderResult.fromStatic(\n response.value.html,\n HTML_CONTENT_TYPE_HEADER\n ),\n rscData: response.value.rscData,\n headers: response.value.headers,\n status: response.value.status,\n postponed: response.value.postponed,\n segmentData: response.value.segmentData,\n } satisfies CachedAppPageValue)\n : response.value,\n }\n}\n\nexport function routeKindToIncrementalCacheKind(\n routeKind: RouteKind\n): Exclude<IncrementalCacheKind, IncrementalCacheKind.FETCH> {\n switch (routeKind) {\n case RouteKind.PAGES:\n return IncrementalCacheKind.PAGES\n case RouteKind.APP_PAGE:\n return IncrementalCacheKind.APP_PAGE\n case RouteKind.IMAGE:\n return IncrementalCacheKind.IMAGE\n case RouteKind.APP_ROUTE:\n return IncrementalCacheKind.APP_ROUTE\n case RouteKind.PAGES_API:\n // Pages Router API routes are not cached in the incremental cache.\n throw new Error(`Unexpected route kind ${routeKind}`)\n default:\n return routeKind satisfies never\n }\n}\n","import type {\n ResponseCacheEntry,\n ResponseGenerator,\n ResponseCacheBase,\n IncrementalResponseCacheEntry,\n IncrementalResponseCache,\n} from './types'\n\nimport { Batcher } from '../../lib/batcher'\nimport { scheduleOnNextTick } from '../../lib/scheduler'\nimport {\n fromResponseCacheEntry,\n routeKindToIncrementalCacheKind,\n toResponseCacheEntry,\n} from './utils'\nimport type { RouteKind } from '../route-kind'\n\nexport * from './types'\n\nexport default class ResponseCache implements ResponseCacheBase {\n private readonly batcher = Batcher.create<\n { key: string; isOnDemandRevalidate: boolean },\n IncrementalResponseCacheEntry | null,\n string\n >({\n // Ensure on-demand revalidate doesn't block normal requests, it should be\n // safe to run an on-demand revalidate for the same key as a normal request.\n cacheKeyFn: ({ key, isOnDemandRevalidate }) =>\n `${key}-${isOnDemandRevalidate ? '1' : '0'}`,\n // We wait to do any async work until after we've added our promise to\n // `pendingResponses` to ensure that any any other calls will reuse the\n // same promise until we've fully finished our work.\n schedulerFn: scheduleOnNextTick,\n })\n\n private previousCacheItem?: {\n key: string\n entry: IncrementalResponseCacheEntry | null\n expiresAt: number\n }\n\n // we don't use minimal_mode name here as this.minimal_mode is\n // statically replace for server runtimes but we need it to\n // be dynamic here\n private minimal_mode?: boolean\n\n constructor(minimal_mode: boolean) {\n this.minimal_mode = minimal_mode\n }\n\n public async get(\n key: string | null,\n responseGenerator: ResponseGenerator,\n context: {\n routeKind: RouteKind\n isOnDemandRevalidate?: boolean\n isPrefetch?: boolean\n incrementalCache: IncrementalResponseCache\n isRoutePPREnabled?: boolean\n isFallback?: boolean\n waitUntil?: (prom: Promise<any>) => void\n }\n ): Promise<ResponseCacheEntry | null> {\n // If there is no key for the cache, we can't possibly look this up in the\n // cache so just return the result of the response generator.\n if (!key) {\n return responseGenerator({ hasResolved: false, previousCacheEntry: null })\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n waitUntil,\n } = context\n\n const response = await this.batcher.batch(\n { key, isOnDemandRevalidate },\n (cacheKey, resolve) => {\n const prom = (async () => {\n // We keep the previous cache entry around to leverage when the\n // incremental cache is disabled in minimal mode.\n if (\n this.minimal_mode &&\n this.previousCacheItem?.key === cacheKey &&\n this.previousCacheItem.expiresAt > Date.now()\n ) {\n return this.previousCacheItem.entry\n }\n\n // Coerce the kindHint into a given kind for the incremental cache.\n const kind = routeKindToIncrementalCacheKind(context.routeKind)\n\n let resolved = false\n let cachedResponse: IncrementalResponseCacheEntry | null = null\n try {\n cachedResponse = !this.minimal_mode\n ? await incrementalCache.get(key, {\n kind,\n isRoutePPREnabled: context.isRoutePPREnabled,\n isFallback,\n })\n : null\n\n if (cachedResponse && !isOnDemandRevalidate) {\n resolve(cachedResponse)\n resolved = true\n\n if (!cachedResponse.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need\n // to update it yet.\n return null\n }\n }\n\n const cacheEntry = await responseGenerator({\n hasResolved: resolved,\n previousCacheEntry: cachedResponse,\n isRevalidating: true,\n })\n\n // If the cache entry couldn't be generated, we don't want to cache\n // the result.\n if (!cacheEntry) {\n // Unset the previous cache item if it was set.\n if (this.minimal_mode) this.previousCacheItem = undefined\n return null\n }\n\n const resolveValue = await fromResponseCacheEntry({\n ...cacheEntry,\n isMiss: !cachedResponse,\n })\n if (!resolveValue) {\n // Unset the previous cache item if it was set.\n if (this.minimal_mode) this.previousCacheItem = undefined\n return null\n }\n\n // For on-demand revalidate wait to resolve until cache is set.\n // Otherwise resolve now.\n if (!isOnDemandRevalidate && !resolved) {\n resolve(resolveValue)\n resolved = true\n }\n\n // We want to persist the result only if it has a cache control value\n // defined.\n if (resolveValue.cacheControl) {\n if (this.minimal_mode) {\n this.previousCacheItem = {\n key: cacheKey,\n entry: resolveValue,\n expiresAt: Date.now() + 1000,\n }\n } else {\n await incrementalCache.set(key, resolveValue.value, {\n cacheControl: resolveValue.cacheControl,\n isRoutePPREnabled,\n isFallback,\n })\n }\n }\n\n return resolveValue\n } catch (err) {\n // When a path is erroring we automatically re-set the existing cache\n // with new revalidate and expire times to prevent non-stop retrying.\n if (cachedResponse?.cacheControl) {\n const newRevalidate = Math.min(\n Math.max(cachedResponse.cacheControl.revalidate || 3, 3),\n 30\n )\n\n const newExpire =\n cachedResponse.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n newRevalidate + 3,\n cachedResponse.cacheControl.expire\n )\n\n await incrementalCache.set(key, cachedResponse.value, {\n cacheControl: { revalidate: newRevalidate, expire: newExpire },\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n // While revalidating in the background we can't reject as we already\n // resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n // We haven't resolved yet, so let's throw to indicate an error.\n throw err\n }\n })()\n\n // we need to ensure background revalidates are\n // passed to waitUntil\n if (waitUntil) {\n waitUntil(prom)\n }\n return prom\n }\n )\n\n return toResponseCacheEntry(response)\n }\n}\n","import path from '../shared/lib/isomorphic/path'\nimport type { CacheFs } from '../shared/lib/utils'\n\n/**\n * A task to be written.\n */\ntype Task = [\n /**\n * The directory to create.\n */\n directory: string,\n\n /**\n * The promise to create the directory.\n */\n mkdir: Promise<unknown>,\n\n /**\n * The promises to write the files that are dependent on the directory being\n * created.\n */\n writeFile: Promise<unknown>[],\n]\n/**\n * MultiFileWriter is a utility for writing multiple files in parallel that\n * guarantees that all files will be written after their containing directory\n * is created, and that the directory will only be created once.\n */\nexport class MultiFileWriter {\n /**\n * The tasks to be written.\n */\n private readonly tasks: Task[] = []\n\n constructor(\n /**\n * The file system methods to use.\n */\n private readonly fs: Pick<CacheFs, 'mkdir' | 'writeFile'>\n ) {}\n\n /**\n * Finds or creates a task for a directory.\n *\n * @param directory - The directory to find or create a task for.\n * @returns The task for the directory.\n */\n private findOrCreateTask(directory: string): Task {\n // See if this directory already has a task to create it.\n for (const task of this.tasks) {\n if (task[0] === directory) {\n return task\n }\n }\n\n const promise = this.fs.mkdir(directory)\n\n // Attach a catch handler so that it doesn't throw an unhandled promise\n // rejection warning.\n promise.catch(() => {})\n\n // Otherwise, create a new task for this directory.\n const task: Task = [directory, promise, []]\n this.tasks.push(task)\n\n return task\n }\n\n /**\n * Appends a file to the writer to be written after its containing directory\n * is created. The file writer should be awaited after all the files have been\n * appended. Any async operation that occurs between appending and awaiting\n * may cause an unhandled promise rejection warning and potentially crash the\n * process.\n *\n * @param filePath - The path to the file to write.\n * @param data - The data to write to the file.\n */\n public append(filePath: string, data: Buffer | string): void {\n // Find or create a task for the directory that contains the file.\n const task = this.findOrCreateTask(path.dirname(filePath))\n\n const promise = task[1].then(() => this.fs.writeFile(filePath, data))\n\n // Attach a catch handler so that it doesn't throw an unhandled promise\n // rejection warning.\n promise.catch(() => {})\n\n // Add the file write to the task AFTER the directory promise has resolved.\n task[2].push(promise)\n }\n\n /**\n * Returns a promise that resolves when all the files have been written.\n */\n public wait(): Promise<unknown> {\n return Promise.all(this.tasks.flatMap((task) => task[2]))\n }\n}\n","import type { RouteMetadata } from '../../../export/routes/types'\nimport type { CacheHandler, CacheHandlerContext, CacheHandlerValue } from '.'\nimport type { CacheFs } from '../../../shared/lib/utils'\nimport {\n CachedRouteKind,\n IncrementalCacheKind,\n type CachedFetchValue,\n type IncrementalCacheValue,\n type SetIncrementalFetchCacheContext,\n type SetIncrementalResponseCacheContext,\n} from '../../response-cache'\n\nimport type { LRUCache } from '../lru-cache'\nimport path from '../../../shared/lib/isomorphic/path'\nimport {\n NEXT_CACHE_TAGS_HEADER,\n NEXT_DATA_SUFFIX,\n NEXT_META_SUFFIX,\n RSC_PREFETCH_SUFFIX,\n RSC_SEGMENT_SUFFIX,\n RSC_SEGMENTS_DIR_SUFFIX,\n RSC_SUFFIX,\n} from '../../../lib/constants'\nimport { isStale, tagsManifest } from './tags-manifest.external'\nimport { MultiFileWriter } from '../../../lib/multi-file-writer'\nimport { getMemoryCache } from './memory-cache.external'\n\ntype FileSystemCacheContext = Omit<\n CacheHandlerContext,\n 'fs' | 'serverDistDir'\n> & {\n fs: CacheFs\n serverDistDir: string\n}\n\nexport default class FileSystemCache implements CacheHandler {\n private fs: FileSystemCacheContext['fs']\n private flushToDisk?: FileSystemCacheContext['flushToDisk']\n private serverDistDir: FileSystemCacheContext['serverDistDir']\n private revalidatedTags: string[]\n private static debug: boolean = !!process.env.NEXT_PRIVATE_DEBUG_CACHE\n private static memoryCache: LRUCache<CacheHandlerValue> | undefined\n\n constructor(ctx: FileSystemCacheContext) {\n this.fs = ctx.fs\n this.flushToDisk = ctx.flushToDisk\n this.serverDistDir = ctx.serverDistDir\n this.revalidatedTags = ctx.revalidatedTags\n\n if (ctx.maxMemoryCacheSize) {\n if (!FileSystemCache.memoryCache) {\n if (FileSystemCache.debug) {\n console.log('using memory store for fetch cache')\n }\n\n FileSystemCache.memoryCache = getMemoryCache(ctx.maxMemoryCacheSize)\n } else if (FileSystemCache.debug) {\n console.log('memory store already initialized')\n }\n } else if (FileSystemCache.debug) {\n console.log('not using memory store for fetch cache')\n }\n }\n\n public resetRequestCache(): void {}\n\n public async revalidateTag(\n ...args: Parameters<CacheHandler['revalidateTag']>\n ) {\n let [tags] = args\n tags = typeof tags === 'string' ? [tags] : tags\n\n if (FileSystemCache.debug) {\n console.log('revalidateTag', tags)\n }\n\n if (tags.length === 0) {\n return\n }\n\n for (const tag of tags) {\n if (!tagsManifest.has(tag)) {\n tagsManifest.set(tag, Date.now())\n }\n }\n }\n\n public async get(...args: Parameters<CacheHandler['get']>) {\n const [key, ctx] = args\n const { kind } = ctx\n\n let data = FileSystemCache.memoryCache?.get(key)\n\n if (FileSystemCache.debug) {\n if (kind === IncrementalCacheKind.FETCH) {\n console.log('get', key, ctx.tags, kind, !!data)\n } else {\n console.log('get', key, kind, !!data)\n }\n }\n\n // let's check the disk for seed data\n if (!data && process.env.NEXT_RUNTIME !== 'edge') {\n try {\n if (kind === IncrementalCacheKind.APP_ROUTE) {\n const filePath = this.getFilePath(\n `${key}.body`,\n IncrementalCacheKind.APP_ROUTE\n )\n const fileData = await this.fs.readFile(filePath)\n const { mtime } = await this.fs.stat(filePath)\n\n const meta = JSON.parse(\n await this.fs.readFile(\n filePath.replace(/\\.body$/, NEXT_META_SUFFIX),\n 'utf8'\n )\n )\n\n data = {\n lastModified: mtime.getTime(),\n value: {\n kind: CachedRouteKind.APP_ROUTE,\n body: fileData,\n headers: meta.headers,\n status: meta.status,\n },\n }\n } else {\n const filePath = this.getFilePath(\n kind === IncrementalCacheKind.FETCH ? key : `${key}.html`,\n kind\n )\n\n const fileData = await this.fs.readFile(filePath, 'utf8')\n const { mtime } = await this.fs.stat(filePath)\n\n if (kind === IncrementalCacheKind.FETCH) {\n const { tags, fetchIdx, fetchUrl } = ctx\n\n if (!this.flushToDisk) return null\n\n const lastModified = mtime.getTime()\n const parsedData: CachedFetchValue = JSON.parse(fileData)\n data = {\n lastModified,\n value: parsedData,\n }\n\n if (data.value?.kind === CachedRouteKind.FETCH) {\n const storedTags = data.value?.tags\n\n // update stored tags if a new one is being added\n // TODO: remove this when we can send the tags\n // via header on GET same as SET\n if (!tags?.every((tag) => storedTags?.includes(tag))) {\n if (FileSystemCache.debug) {\n console.log('tags vs storedTags mismatch', tags, storedTags)\n }\n await this.set(key, data.value, {\n fetchCache: true,\n tags,\n fetchIdx,\n fetchUrl,\n })\n }\n }\n } else if (kind === IncrementalCacheKind.APP_PAGE) {\n // We try to load the metadata file, but if it fails, we don't\n // error. We also don't load it if this is a fallback.\n let meta: RouteMetadata | undefined\n try {\n meta = JSON.parse(\n await this.fs.readFile(\n filePath.replace(/\\.html$/, NEXT_META_SUFFIX),\n 'utf8'\n )\n )\n } catch {}\n\n let maybeSegmentData: Map<string, Buffer> | undefined\n if (meta?.segmentPaths) {\n // Collect all the segment data for this page.\n // TODO: To optimize file system reads, we should consider creating\n // separate cache entries for each segment, rather than storing them\n // all on the page's entry. Though the behavior is\n // identical regardless.\n const segmentData: Map<string, Buffer> = new Map()\n maybeSegmentData = segmentData\n const segmentsDir = key + RSC_SEGMENTS_DIR_SUFFIX\n await Promise.all(\n meta.segmentPaths.map(async (segmentPath: string) => {\n const segmentDataFilePath = this.getFilePath(\n segmentsDir + segmentPath + RSC_SEGMENT_SUFFIX,\n IncrementalCacheKind.APP_PAGE\n )\n try {\n segmentData.set(\n segmentPath,\n await this.fs.readFile(segmentDataFilePath)\n )\n } catch {\n // This shouldn't happen, but if for some reason we fail to\n // load a segment from the filesystem, treat it the same as if\n // the segment is dynamic and does not have a prefetch.\n }\n })\n )\n }\n\n let rscData: Buffer | undefined\n if (!ctx.isFallback) {\n rscData = await this.fs.readFile(\n this.getFilePath(\n `${key}${ctx.isRoutePPREnabled ? RSC_PREFETCH_SUFFIX : RSC_SUFFIX}`,\n IncrementalCacheKind.APP_PAGE\n )\n )\n }\n\n data = {\n lastModified: mtime.getTime(),\n value: {\n kind: CachedRouteKind.APP_PAGE,\n html: fileData,\n rscData,\n postponed: meta?.postponed,\n headers: meta?.headers,\n status: meta?.status,\n segmentData: maybeSegmentData,\n },\n }\n } else if (kind === IncrementalCacheKind.PAGES) {\n let meta: RouteMetadata | undefined\n let pageData: string | object = {}\n\n if (!ctx.isFallback) {\n pageData = JSON.parse(\n await this.fs.readFile(\n this.getFilePath(\n `${key}${NEXT_DATA_SUFFIX}`,\n IncrementalCacheKind.PAGES\n ),\n 'utf8'\n )\n )\n }\n\n data = {\n lastModified: mtime.getTime(),\n value: {\n kind: CachedRouteKind.PAGES,\n html: fileData,\n pageData,\n headers: meta?.headers,\n status: meta?.status,\n },\n }\n } else {\n throw new Error(\n `Invariant: Unexpected route kind ${kind} in file system cache.`\n )\n }\n }\n\n if (data) {\n FileSystemCache.memoryCache?.set(key, data)\n }\n } catch {\n return null\n }\n }\n\n if (\n data?.value?.kind === CachedRouteKind.APP_PAGE ||\n data?.value?.kind === CachedRouteKind.APP_ROUTE ||\n data?.value?.kind === CachedRouteKind.PAGES\n ) {\n let cacheTags: undefined | string[]\n const tagsHeader = data.value.headers?.[NEXT_CACHE_TAGS_HEADER]\n\n if (typeof tagsHeader === 'string') {\n cacheTags = tagsHeader.split(',')\n }\n\n if (cacheTags?.length) {\n // we trigger a blocking validation if an ISR page\n // had a tag revalidated, if we want to be a background\n // revalidation instead we return data.lastModified = -1\n if (isStale(cacheTags, data?.lastModified || Date.now())) {\n return null\n }\n }\n } else if (data?.value?.kind === CachedRouteKind.FETCH) {\n const combinedTags =\n ctx.kind === IncrementalCacheKind.FETCH\n ? [...(ctx.tags || []), ...(ctx.softTags || [])]\n : []\n\n const wasRevalidated = combinedTags.some((tag) => {\n if (this.revalidatedTags.includes(tag)) {\n return true\n }\n\n return isStale([tag], data?.lastModified || Date.now())\n })\n // When revalidate tag is called we don't return\n // stale data so it's updated right away\n if (wasRevalidated) {\n data = undefined\n }\n }\n\n return data ?? null\n }\n\n public async set(\n key: string,\n data: IncrementalCacheValue | null,\n ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ) {\n FileSystemCache.memoryCache?.set(key, {\n value: data,\n lastModified: Date.now(),\n })\n\n if (FileSystemCache.debug) {\n console.log('set', key)\n }\n\n if (!this.flushToDisk || !data) return\n\n // Create a new writer that will prepare to write all the files to disk\n // after their containing directory is created.\n const writer = new MultiFileWriter(this.fs)\n\n if (data.kind === CachedRouteKind.APP_ROUTE) {\n const filePath = this.getFilePath(\n `${key}.body`,\n IncrementalCacheKind.APP_ROUTE\n )\n\n writer.append(filePath, data.body)\n\n const meta: RouteMetadata = {\n headers: data.headers,\n status: data.status,\n postponed: undefined,\n segmentPaths: undefined,\n }\n\n writer.append(\n filePath.replace(/\\.body$/, NEXT_META_SUFFIX),\n JSON.stringify(meta, null, 2)\n )\n } else if (\n data.kind === CachedRouteKind.PAGES ||\n data.kind === CachedRouteKind.APP_PAGE\n ) {\n const isAppPath = data.kind === CachedRouteKind.APP_PAGE\n const htmlPath = this.getFilePath(\n `${key}.html`,\n isAppPath ? IncrementalCacheKind.APP_PAGE : IncrementalCacheKind.PAGES\n )\n\n writer.append(htmlPath, data.html)\n\n // Fallbacks don't generate a data file.\n if (!ctx.fetchCache && !ctx.isFallback) {\n writer.append(\n this.getFilePath(\n `${key}${\n isAppPath\n ? ctx.isRoutePPREnabled\n ? RSC_PREFETCH_SUFFIX\n : RSC_SUFFIX\n : NEXT_DATA_SUFFIX\n }`,\n isAppPath\n ? IncrementalCacheKind.APP_PAGE\n : IncrementalCacheKind.PAGES\n ),\n isAppPath ? data.rscData! : JSON.stringify(data.pageData)\n )\n }\n\n if (data?.kind === CachedRouteKind.APP_PAGE) {\n let segmentPaths: string[] | undefined\n if (data.segmentData) {\n segmentPaths = []\n const segmentsDir = htmlPath.replace(\n /\\.html$/,\n RSC_SEGMENTS_DIR_SUFFIX\n )\n\n for (const [segmentPath, buffer] of data.segmentData) {\n segmentPaths.push(segmentPath)\n const segmentDataFilePath =\n segmentsDir + segmentPath + RSC_SEGMENT_SUFFIX\n writer.append(segmentDataFilePath, buffer)\n }\n }\n\n const meta: RouteMetadata = {\n headers: data.headers,\n status: data.status,\n postponed: data.postponed,\n segmentPaths,\n }\n\n writer.append(\n htmlPath.replace(/\\.html$/, NEXT_META_SUFFIX),\n JSON.stringify(meta)\n )\n }\n } else if (data.kind === CachedRouteKind.FETCH) {\n const filePath = this.getFilePath(key, IncrementalCacheKind.FETCH)\n writer.append(\n filePath,\n JSON.stringify({\n ...data,\n tags: ctx.fetchCache ? ctx.tags : [],\n })\n )\n }\n\n // Wait for all FS operations to complete.\n await writer.wait()\n }\n\n private getFilePath(pathname: string, kind: IncrementalCacheKind): string {\n switch (kind) {\n case IncrementalCacheKind.FETCH:\n // we store in .next/cache/fetch-cache so it can be persisted\n // across deploys\n return path.join(\n this.serverDistDir,\n '..',\n 'cache',\n 'fetch-cache',\n pathname\n )\n case IncrementalCacheKind.PAGES:\n return path.join(this.serverDistDir, 'pages', pathname)\n case IncrementalCacheKind.IMAGE:\n case IncrementalCacheKind.APP_PAGE:\n case IncrementalCacheKind.APP_ROUTE:\n return path.join(this.serverDistDir, 'app', pathname)\n default:\n throw new Error(`Unexpected file path kind: ${kind}`)\n }\n }\n}\n","/**\n * This transforms a URL pathname into a route. It removes any trailing slashes\n * and the `/index` suffix.\n *\n * @param pathname - The URL path that needs to be optimized.\n * @returns - The route\n *\n * @example\n * // returns '/example'\n * toRoute('/example/index/');\n *\n * @example\n * // returns '/example'\n * toRoute('/example/');\n *\n * @example\n * // returns '/'\n * toRoute('/index/');\n *\n * @example\n * // returns '/'\n * toRoute('/');\n */\nexport function toRoute(pathname: string): string {\n return pathname.replace(/(?:\\/index)?\\/?$/, '') || '/'\n}\n","import type { CacheFs } from '../../../shared/lib/utils'\nimport type { PrerenderManifest } from '../../../build'\nimport {\n type IncrementalCacheValue,\n type IncrementalCacheEntry,\n type IncrementalCache as IncrementalCacheType,\n IncrementalCacheKind,\n CachedRouteKind,\n type IncrementalResponseCacheEntry,\n type IncrementalFetchCacheEntry,\n type GetIncrementalFetchCacheContext,\n type GetIncrementalResponseCacheContext,\n type CachedFetchValue,\n type SetIncrementalFetchCacheContext,\n type SetIncrementalResponseCacheContext,\n} from '../../response-cache'\nimport type { DeepReadonly } from '../../../shared/lib/deep-readonly'\n\nimport FileSystemCache from './file-system-cache'\nimport { normalizePagePath } from '../../../shared/lib/page-path/normalize-page-path'\n\nimport {\n CACHE_ONE_YEAR,\n PRERENDER_REVALIDATE_HEADER,\n} from '../../../lib/constants'\nimport { toRoute } from '../to-route'\nimport { SharedCacheControls } from './shared-cache-controls.external'\nimport {\n getPrerenderResumeDataCache,\n getRenderResumeDataCache,\n workUnitAsyncStorage,\n} from '../../app-render/work-unit-async-storage.external'\nimport { InvariantError } from '../../../shared/lib/invariant-error'\nimport type { Revalidate } from '../cache-control'\nimport { getPreviouslyRevalidatedTags } from '../../server-utils'\nimport { workAsyncStorage } from '../../app-render/work-async-storage.external'\nimport { DetachedPromise } from '../../../lib/detached-promise'\n\nexport interface CacheHandlerContext {\n fs?: CacheFs\n dev?: boolean\n flushToDisk?: boolean\n serverDistDir?: string\n maxMemoryCacheSize?: number\n fetchCacheKeyPrefix?: string\n prerenderManifest?: PrerenderManifest\n revalidatedTags: string[]\n _requestHeaders: IncrementalCache['requestHeaders']\n}\n\nexport interface CacheHandlerValue {\n lastModified?: number\n age?: number\n cacheState?: string\n value: IncrementalCacheValue | null\n}\n\nexport class CacheHandler {\n // eslint-disable-next-line\n constructor(_ctx: CacheHandlerContext) {}\n\n public async get(\n _cacheKey: string,\n _ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext\n ): Promise<CacheHandlerValue | null> {\n return {} as any\n }\n\n public async set(\n _cacheKey: string,\n _data: IncrementalCacheValue | null,\n _ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ): Promise<void> {}\n\n public async revalidateTag(\n ..._args: Parameters<IncrementalCache['revalidateTag']>\n ): Promise<void> {}\n\n public resetRequestCache(): void {}\n}\n\nexport class IncrementalCache implements IncrementalCacheType {\n readonly dev?: boolean\n readonly disableForTestmode?: boolean\n readonly cacheHandler?: CacheHandler\n readonly hasCustomCacheHandler: boolean\n readonly prerenderManifest: DeepReadonly<PrerenderManifest>\n readonly requestHeaders: Record<string, undefined | string | string[]>\n readonly allowedRevalidateHeaderKeys?: string[]\n readonly minimalMode?: boolean\n readonly fetchCacheKeyPrefix?: string\n readonly revalidatedTags?: string[]\n readonly isOnDemandRevalidate?: boolean\n\n private static readonly debug: boolean =\n !!process.env.NEXT_PRIVATE_DEBUG_CACHE\n private readonly locks = new Map<string, Promise<void>>()\n\n /**\n * The cache controls for routes. This will source the values from the\n * prerender manifest until the in-memory cache is updated with new values.\n */\n private readonly cacheControls: SharedCacheControls\n\n constructor({\n fs,\n dev,\n flushToDisk,\n minimalMode,\n serverDistDir,\n requestHeaders,\n maxMemoryCacheSize,\n getPrerenderManifest,\n fetchCacheKeyPrefix,\n CurCacheHandler,\n allowedRevalidateHeaderKeys,\n }: {\n fs?: CacheFs\n dev: boolean\n minimalMode?: boolean\n serverDistDir?: string\n flushToDisk?: boolean\n allowedRevalidateHeaderKeys?: string[]\n requestHeaders: IncrementalCache['requestHeaders']\n maxMemoryCacheSize?: number\n getPrerenderManifest: () => DeepReadonly<PrerenderManifest>\n fetchCacheKeyPrefix?: string\n CurCacheHandler?: typeof CacheHandler\n }) {\n this.hasCustomCacheHandler = Boolean(CurCacheHandler)\n\n const cacheHandlersSymbol = Symbol.for('@next/cache-handlers')\n const _globalThis: typeof globalThis & {\n [cacheHandlersSymbol]?: {\n FetchCache?: typeof CacheHandler\n }\n } = globalThis\n\n if (!CurCacheHandler) {\n // if we have a global cache handler available leverage it\n const globalCacheHandler = _globalThis[cacheHandlersSymbol]\n\n if (globalCacheHandler?.FetchCache) {\n CurCacheHandler = globalCacheHandler.FetchCache\n } else {\n if (fs && serverDistDir) {\n if (IncrementalCache.debug) {\n console.log('using filesystem cache handler')\n }\n CurCacheHandler = FileSystemCache\n }\n }\n } else if (IncrementalCache.debug) {\n console.log('using custom cache handler', CurCacheHandler.name)\n }\n\n if (process.env.__NEXT_TEST_MAX_ISR_CACHE) {\n // Allow cache size to be overridden for testing purposes\n maxMemoryCacheSize = parseInt(process.env.__NEXT_TEST_MAX_ISR_CACHE, 10)\n }\n this.dev = dev\n this.disableForTestmode = process.env.NEXT_PRIVATE_TEST_PROXY === 'true'\n // this is a hack to avoid Webpack knowing this is equal to this.minimalMode\n // because we replace this.minimalMode to true in production bundles.\n const minimalModeKey = 'minimalMode'\n this[minimalModeKey] = minimalMode\n this.requestHeaders = requestHeaders\n this.allowedRevalidateHeaderKeys = allowedRevalidateHeaderKeys\n this.prerenderManifest = getPrerenderManifest()\n this.cacheControls = new SharedCacheControls(this.prerenderManifest)\n this.fetchCacheKeyPrefix = fetchCacheKeyPrefix\n let revalidatedTags: string[] = []\n\n if (\n requestHeaders[PRERENDER_REVALIDATE_HEADER] ===\n this.prerenderManifest?.preview?.previewModeId\n ) {\n this.isOnDemandRevalidate = true\n }\n\n if (minimalMode) {\n revalidatedTags = getPreviouslyRevalidatedTags(\n requestHeaders,\n this.prerenderManifest?.preview?.previewModeId\n )\n }\n\n if (CurCacheHandler) {\n this.cacheHandler = new CurCacheHandler({\n dev,\n fs,\n flushToDisk,\n serverDistDir,\n revalidatedTags,\n maxMemoryCacheSize,\n _requestHeaders: requestHeaders,\n fetchCacheKeyPrefix,\n })\n }\n }\n\n private calculateRevalidate(\n pathname: string,\n fromTime: number,\n dev: boolean,\n isFallback: boolean | undefined\n ): Revalidate {\n // in development we don't have a prerender-manifest\n // and default to always revalidating to allow easier debugging\n if (dev)\n return Math.floor(performance.timeOrigin + performance.now() - 1000)\n\n const cacheControl = this.cacheControls.get(toRoute(pathname))\n\n // if an entry isn't present in routes we fallback to a default\n // of revalidating after 1 second unless it's a fallback request.\n const initialRevalidateSeconds = cacheControl\n ? cacheControl.revalidate\n : isFallback\n ? false\n : 1\n\n const revalidateAfter =\n typeof initialRevalidateSeconds === 'number'\n ? initialRevalidateSeconds * 1000 + fromTime\n : initialRevalidateSeconds\n\n return revalidateAfter\n }\n\n _getPathname(pathname: string, fetchCache?: boolean) {\n return fetchCache ? pathname : normalizePagePath(pathname)\n }\n\n resetRequestCache() {\n this.cacheHandler?.resetRequestCache?.()\n }\n\n async lock(cacheKey: string): Promise<() => Promise<void> | void> {\n // Wait for any existing lock on this cache key to be released\n // This implements a simple queue-based locking mechanism\n while (true) {\n const lock = this.locks.get(cacheKey)\n\n if (IncrementalCache.debug) {\n console.log('lock get', cacheKey, !!lock)\n }\n\n // If no lock exists, we can proceed to acquire it\n if (!lock) break\n\n // Wait for the existing lock to be released before trying again\n await lock\n }\n\n // Create a new detached promise that will represent this lock\n // The resolve function (unlock) will be returned to the caller\n const { resolve, promise } = new DetachedPromise<void>()\n\n if (IncrementalCache.debug) {\n console.log('successfully locked', cacheKey)\n }\n\n // Store the lock promise in the locks map\n this.locks.set(cacheKey, promise)\n\n return () => {\n // Resolve the promise to release the lock.\n resolve()\n\n // Remove the lock from the map once it's released so that future gets\n // can acquire the lock.\n this.locks.delete(cacheKey)\n }\n }\n\n async revalidateTag(tags: string | string[]): Promise<void> {\n return this.cacheHandler?.revalidateTag(tags)\n }\n\n // x-ref: https://github.com/facebook/react/blob/2655c9354d8e1c54ba888444220f63e836925caa/packages/react/src/ReactFetch.js#L23\n async generateCacheKey(\n url: string,\n init: RequestInit | Request = {}\n ): Promise<string> {\n // this should be bumped anytime a fix is made to cache entries\n // that should bust the cache\n const MAIN_KEY_PREFIX = 'v3'\n\n const bodyChunks: string[] = []\n\n const encoder = new TextEncoder()\n const decoder = new TextDecoder()\n\n if (init.body) {\n // handle Uint8Array body\n if (init.body instanceof Uint8Array) {\n bodyChunks.push(decoder.decode(init.body))\n ;(init as any)._ogBody = init.body\n } // handle ReadableStream body\n else if (typeof (init.body as any).getReader === 'function') {\n const readableBody = init.body as ReadableStream<Uint8Array | string>\n\n const chunks: Uint8Array[] = []\n\n try {\n await readableBody.pipeTo(\n new WritableStream({\n write(chunk) {\n if (typeof chunk === 'string') {\n chunks.push(encoder.encode(chunk))\n bodyChunks.push(chunk)\n } else {\n chunks.push(chunk)\n bodyChunks.push(decoder.decode(chunk, { stream: true }))\n }\n },\n })\n )\n\n // Flush the decoder.\n bodyChunks.push(decoder.decode())\n\n // Create a new buffer with all the chunks.\n const length = chunks.reduce((total, arr) => total + arr.length, 0)\n const arrayBuffer = new Uint8Array(length)\n\n // Push each of the chunks into the new array buffer.\n let offset = 0\n for (const chunk of chunks) {\n arrayBuffer.set(chunk, offset)\n offset += chunk.length\n }\n\n ;(init as any)._ogBody = arrayBuffer\n } catch (err) {\n console.error('Problem reading body', err)\n }\n } // handle FormData or URLSearchParams bodies\n else if (typeof (init.body as any).keys === 'function') {\n const formData = init.body as FormData\n ;(init as any)._ogBody = init.body\n for (const key of new Set([...formData.keys()])) {\n const values = formData.getAll(key)\n bodyChunks.push(\n `${key}=${(\n await Promise.all(\n values.map(async (val) => {\n if (typeof val === 'string') {\n return val\n } else {\n return await val.text()\n }\n })\n )\n ).join(',')}`\n )\n }\n // handle blob body\n } else if (typeof (init.body as any).arrayBuffer === 'function') {\n const blob = init.body as Blob\n const arrayBuffer = await blob.arrayBuffer()\n bodyChunks.push(await blob.text())\n ;(init as any)._ogBody = new Blob([arrayBuffer], { type: blob.type })\n } else if (typeof init.body === 'string') {\n bodyChunks.push(init.body)\n ;(init as any)._ogBody = init.body\n }\n }\n\n const headers =\n typeof (init.headers || {}).keys === 'function'\n ? Object.fromEntries(init.headers as Headers)\n : Object.assign({}, init.headers)\n\n // w3c trace context headers can break request caching and deduplication\n // so we remove them from the cache key\n if ('traceparent' in headers) delete headers['traceparent']\n if ('tracestate' in headers) delete headers['tracestate']\n\n const cacheString = JSON.stringify([\n MAIN_KEY_PREFIX,\n this.fetchCacheKeyPrefix || '',\n url,\n init.method,\n headers,\n init.mode,\n init.redirect,\n init.credentials,\n init.referrer,\n init.referrerPolicy,\n init.integrity,\n init.cache,\n bodyChunks,\n ])\n\n if (process.env.NEXT_RUNTIME === 'edge') {\n function bufferToHex(buffer: ArrayBuffer): string {\n return Array.prototype.map\n .call(new Uint8Array(buffer), (b) => b.toString(16).padStart(2, '0'))\n .join('')\n }\n const buffer = encoder.encode(cacheString)\n return bufferToHex(await crypto.subtle.digest('SHA-256', buffer))\n } else {\n const crypto = require('crypto') as typeof import('crypto')\n return crypto.createHash('sha256').update(cacheString).digest('hex')\n }\n }\n\n async get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext\n ): Promise<IncrementalFetchCacheEntry | null>\n async get(\n cacheKey: string,\n ctx: GetIncrementalResponseCacheContext\n ): Promise<IncrementalResponseCacheEntry | null>\n async get(\n cacheKey: string,\n ctx: GetIncrementalFetchCacheContext | GetIncrementalResponseCacheContext\n ): Promise<IncrementalCacheEntry | null> {\n // Unlike other caches if we have a resume data cache, we use it even if\n // testmode would normally disable it or if requestHeaders say 'no-cache'.\n if (ctx.kind === IncrementalCacheKind.FETCH) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n const resumeDataCache = workUnitStore\n ? getRenderResumeDataCache(workUnitStore)\n : null\n if (resumeDataCache) {\n const memoryCacheData = resumeDataCache.fetch.get(cacheKey)\n if (memoryCacheData?.kind === CachedRouteKind.FETCH) {\n return { isStale: false, value: memoryCacheData }\n }\n }\n }\n\n // we don't leverage the prerender cache in dev mode\n // so that getStaticProps is always called for easier debugging\n if (\n this.disableForTestmode ||\n (this.dev &&\n (ctx.kind !== IncrementalCacheKind.FETCH ||\n this.requestHeaders['cache-control'] === 'no-cache'))\n ) {\n return null\n }\n\n cacheKey = this._getPathname(\n cacheKey,\n ctx.kind === IncrementalCacheKind.FETCH\n )\n\n const cacheData = await this.cacheHandler?.get(cacheKey, ctx)\n\n if (ctx.kind === IncrementalCacheKind.FETCH) {\n if (!cacheData) {\n return null\n }\n\n if (cacheData.value?.kind !== CachedRouteKind.FETCH) {\n throw new InvariantError(\n `Expected cached value for cache key ${JSON.stringify(cacheKey)} to be a \"FETCH\" kind, got ${JSON.stringify(cacheData.value?.kind)} instead.`\n )\n }\n\n const workStore = workAsyncStorage.getStore()\n const combinedTags = [...(ctx.tags || []), ...(ctx.softTags || [])]\n // if a tag was revalidated we don't return stale data\n if (\n combinedTags.some(\n (tag) =>\n this.revalidatedTags?.includes(tag) ||\n workStore?.pendingRevalidatedTags?.includes(tag)\n )\n ) {\n return null\n }\n\n const revalidate = ctx.revalidate || cacheData.value.revalidate\n const age =\n (performance.timeOrigin +\n performance.now() -\n (cacheData.lastModified || 0)) /\n 1000\n\n const isStale = age > revalidate\n const data = cacheData.value.data\n\n return {\n isStale,\n value: { kind: CachedRouteKind.FETCH, data, revalidate },\n }\n } else if (cacheData?.value?.kind === CachedRouteKind.FETCH) {\n throw new InvariantError(\n `Expected cached value for cache key ${JSON.stringify(cacheKey)} not to be a ${JSON.stringify(ctx.kind)} kind, got \"FETCH\" instead.`\n )\n }\n\n let entry: IncrementalResponseCacheEntry | null = null\n const cacheControl = this.cacheControls.get(toRoute(cacheKey))\n\n let isStale: boolean | -1 | undefined\n let revalidateAfter: Revalidate\n\n if (cacheData?.lastModified === -1) {\n isStale = -1\n revalidateAfter = -1 * CACHE_ONE_YEAR\n } else {\n revalidateAfter = this.calculateRevalidate(\n cacheKey,\n cacheData?.lastModified || performance.timeOrigin + performance.now(),\n this.dev ?? false,\n ctx.isFallback\n )\n isStale =\n revalidateAfter !== false &&\n revalidateAfter < performance.timeOrigin + performance.now()\n ? true\n : undefined\n }\n\n if (cacheData) {\n entry = {\n isStale,\n cacheControl,\n revalidateAfter,\n value: cacheData.value,\n }\n }\n\n if (\n !cacheData &&\n this.prerenderManifest.notFoundRoutes.includes(cacheKey)\n ) {\n // for the first hit after starting the server the cache\n // may not have a way to save notFound: true so if\n // the prerender-manifest marks this as notFound then we\n // return that entry and trigger a cache set to give it a\n // chance to update in-memory entries\n entry = {\n isStale,\n value: null,\n cacheControl,\n revalidateAfter,\n }\n this.set(cacheKey, entry.value, { ...ctx, cacheControl })\n }\n return entry\n }\n\n async set(\n pathname: string,\n data: CachedFetchValue | null,\n ctx: SetIncrementalFetchCacheContext\n ): Promise<void>\n async set(\n pathname: string,\n data: Exclude<IncrementalCacheValue, CachedFetchValue> | null,\n ctx: SetIncrementalResponseCacheContext\n ): Promise<void>\n async set(\n pathname: string,\n data: IncrementalCacheValue | null,\n ctx: SetIncrementalFetchCacheContext | SetIncrementalResponseCacheContext\n ): Promise<void> {\n // Even if we otherwise disable caching for testMode or if no fetchCache is\n // configured we still always stash results in the resume data cache if one\n // exists. This is because this is a transient in memory cache that\n // populates caches ahead of a dynamic render in dev mode to allow the RSC\n // debug info to have the right environment associated to it.\n if (data?.kind === CachedRouteKind.FETCH) {\n const workUnitStore = workUnitAsyncStorage.getStore()\n const prerenderResumeDataCache = workUnitStore\n ? getPrerenderResumeDataCache(workUnitStore)\n : null\n if (prerenderResumeDataCache) {\n prerenderResumeDataCache.fetch.set(pathname, data)\n }\n }\n\n if (this.disableForTestmode || (this.dev && !ctx.fetchCache)) return\n\n pathname = this._getPathname(pathname, ctx.fetchCache)\n\n // FetchCache has upper limit of 2MB per-entry currently\n const itemSize = JSON.stringify(data).length\n if (\n ctx.fetchCache &&\n itemSize > 2 * 1024 * 1024 &&\n // We ignore the size limit when custom cache handler is being used, as it\n // might not have this limit\n !this.hasCustomCacheHandler &&\n // We also ignore the size limit when it's an implicit build-time-only\n // caching that the user isn't even aware of.\n !ctx.isImplicitBuildTimeCache\n ) {\n const warningText = `Failed to set Next.js data cache for ${ctx.fetchUrl || pathname}, items over 2MB can not be cached (${itemSize} bytes)`\n\n if (this.dev) {\n throw new Error(warningText)\n }\n console.warn(warningText)\n return\n }\n\n try {\n if (!ctx.fetchCache && ctx.cacheControl) {\n this.cacheControls.set(toRoute(pathname), ctx.cacheControl)\n }\n\n await this.cacheHandler?.set(pathname, data, ctx)\n } catch (error) {\n console.warn('Failed to update prerender cache for', pathname, error)\n }\n }\n}\n","import DefaultCacheHandler from '../lib/cache-handlers/default.external'\nimport type { CacheHandlerCompat } from '../lib/cache-handlers/types'\n\nconst debug = process.env.NEXT_PRIVATE_DEBUG_CACHE\n ? (message: string, ...args: any[]) => {\n console.log(`use-cache: ${message}`, ...args)\n }\n : undefined\n\nconst handlersSymbol = Symbol.for('@next/cache-handlers')\nconst handlersMapSymbol = Symbol.for('@next/cache-handlers-map')\nconst handlersSetSymbol = Symbol.for('@next/cache-handlers-set')\n\n/**\n * The reference to the cache handlers. We store the cache handlers on the\n * global object so that we can access the same instance across different\n * boundaries (such as different copies of the same module).\n */\nconst reference: typeof globalThis & {\n [handlersSymbol]?: {\n RemoteCache?: CacheHandlerCompat\n DefaultCache?: CacheHandlerCompat\n }\n [handlersMapSymbol]?: Map<string, CacheHandlerCompat>\n [handlersSetSymbol]?: Set<CacheHandlerCompat>\n} = globalThis\n\n/**\n * Initialize the cache handlers.\n * @returns `true` if the cache handlers were initialized, `false` if they were already initialized.\n */\nexport function initializeCacheHandlers(): boolean {\n // If the cache handlers have already been initialized, don't do it again.\n if (reference[handlersMapSymbol]) {\n debug?.('cache handlers already initialized')\n return false\n }\n\n debug?.('initializing cache handlers')\n reference[handlersMapSymbol] = new Map<string, CacheHandlerCompat>()\n\n // Initialize the cache from the symbol contents first.\n if (reference[handlersSymbol]) {\n let fallback: CacheHandlerCompat\n if (reference[handlersSymbol].DefaultCache) {\n debug?.('setting \"default\" cache handler from symbol')\n fallback = reference[handlersSymbol].DefaultCache\n } else {\n debug?.('setting \"default\" cache handler from default')\n fallback = DefaultCacheHandler\n }\n\n reference[handlersMapSymbol].set('default', fallback)\n\n if (reference[handlersSymbol].RemoteCache) {\n debug?.('setting \"remote\" cache handler from symbol')\n reference[handlersMapSymbol].set(\n 'remote',\n reference[handlersSymbol].RemoteCache\n )\n } else {\n debug?.('setting \"remote\" cache handler from default')\n reference[handlersMapSymbol].set('remote', fallback)\n }\n } else {\n debug?.('setting \"default\" cache handler from default')\n reference[handlersMapSymbol].set('default', DefaultCacheHandler)\n debug?.('setting \"remote\" cache handler from default')\n reference[handlersMapSymbol].set('remote', DefaultCacheHandler)\n }\n\n // Create a set of the cache handlers.\n reference[handlersSetSymbol] = new Set(reference[handlersMapSymbol].values())\n\n return true\n}\n\n/**\n * Get a cache handler by kind.\n * @param kind - The kind of cache handler to get.\n * @returns The cache handler, or `undefined` if it does not exist.\n * @throws If the cache handlers are not initialized.\n */\nexport function getCacheHandler(kind: string): CacheHandlerCompat | undefined {\n // This should never be called before initializeCacheHandlers.\n if (!reference[handlersMapSymbol]) {\n throw new Error('Cache handlers not initialized')\n }\n\n return reference[handlersMapSymbol].get(kind)\n}\n\n/**\n * Get a set iterator over the cache handlers.\n * @returns An iterator over the cache handlers, or `undefined` if they are not\n * initialized.\n */\nexport function getCacheHandlers():\n | SetIterator<CacheHandlerCompat>\n | undefined {\n if (!reference[handlersSetSymbol]) {\n return undefined\n }\n\n return reference[handlersSetSymbol].values()\n}\n\n/**\n * Get a map iterator over the cache handlers (keyed by kind).\n * @returns An iterator over the cache handler entries, or `undefined` if they\n * are not initialized.\n * @throws If the cache handlers are not initialized.\n */\nexport function getCacheHandlerEntries():\n | MapIterator<[string, CacheHandlerCompat]>\n | undefined {\n if (!reference[handlersMapSymbol]) {\n return undefined\n }\n\n return reference[handlersMapSymbol].entries()\n}\n\n/**\n * Set a cache handler by kind.\n * @param kind - The kind of cache handler to set.\n * @param cacheHandler - The cache handler to set.\n */\nexport function setCacheHandler(\n kind: string,\n cacheHandler: CacheHandlerCompat\n): void {\n // This should never be called before initializeCacheHandlers.\n if (!reference[handlersMapSymbol] || !reference[handlersSetSymbol]) {\n throw new Error('Cache handlers not initialized')\n }\n\n debug?.('setting cache handler for \"%s\"', kind)\n reference[handlersMapSymbol].set(kind, cacheHandler)\n reference[handlersSetSymbol].add(cacheHandler)\n}\n","/**\n * Interop between \"export default\" and \"module.exports\".\n */\nexport function interopDefault(mod: any) {\n return mod.default || mod\n}\n","import type { IncomingMessage, ServerResponse } from 'node:http'\nimport type { NextConfigComplete } from '../../config-shared'\nimport type { UrlWithParsedQuery } from 'node:url'\n\nexport type RevalidateFn = (config: {\n urlPath: string\n revalidateHeaders: { [key: string]: string | string[] }\n opts: { unstable_onlyGenerated?: boolean }\n}) => Promise<void>\n\n// The RouterServerContext contains instance specific\n// information that isn't available/relevant when\n// deployed in serverless environments, the key is\n// the relative project dir this allows separate contexts\n// when running multiple next instances in same process\nexport type RouterServerContext = Record<\n string,\n {\n // hostname the server is started with\n hostname?: string\n // revalidate function to bypass going through network\n // to invoke revalidate request (uses mocked req/res)\n revalidate?: RevalidateFn\n // function to render the 404 page\n render404?: (\n req: IncomingMessage,\n res: ServerResponse,\n parsedUrl?: UrlWithParsedQuery,\n setHeaders?: boolean\n ) => Promise<void>\n // current loaded public runtime config\n publicRuntimeConfig?: NextConfigComplete['publicRuntimeConfig']\n // exposing nextConfig for dev mode specifically\n nextConfig?: NextConfigComplete\n // whether running in custom server mode\n isCustomServer?: boolean\n // whether test proxy is enabled\n experimentalTestProxy?: boolean\n // allow dev server to log with original stack\n logErrorWithOriginalStack?: (err: unknown, type: string) => void\n // allow setting ISR status in dev\n setIsrStatus?: (key: string, value: boolean | null) => void\n }\n>\n\nexport const RouterServerContextSymbol = Symbol.for(\n '@next/router-server-methods'\n)\n\nexport const routerServerGlobal = globalThis as typeof globalThis & {\n [RouterServerContextSymbol]?: RouterServerContext\n}\n","import type { IncomingMessage, ServerResponse } from 'node:http'\nimport type {\n InstrumentationOnRequestError,\n RequestErrorContext,\n} from '../instrumentation/types'\nimport type { ParsedUrlQuery } from 'node:querystring'\nimport type { UrlWithParsedQuery } from 'node:url'\nimport type {\n PrerenderManifest,\n RequiredServerFilesManifest,\n} from '../../build'\nimport type { DevRoutesManifest } from '../lib/router-utils/setup-dev-bundler'\nimport type { RouteDefinition } from '../route-definitions/route-definition'\nimport type { DeepReadonly } from '../../shared/lib/deep-readonly'\nimport {\n BUILD_ID_FILE,\n BUILD_MANIFEST,\n CLIENT_REFERENCE_MANIFEST,\n DYNAMIC_CSS_MANIFEST,\n NEXT_FONT_MANIFEST,\n PRERENDER_MANIFEST,\n REACT_LOADABLE_MANIFEST,\n ROUTES_MANIFEST,\n SERVER_FILES_MANIFEST,\n SERVER_REFERENCE_MANIFEST,\n SUBRESOURCE_INTEGRITY_MANIFEST,\n} from '../../shared/lib/constants'\nimport { parseReqUrl } from '../../lib/url'\nimport {\n normalizeLocalePath,\n type PathLocale,\n} from '../../shared/lib/i18n/normalize-locale-path'\nimport { isDynamicRoute } from '../../shared/lib/router/utils'\nimport { removePathPrefix } from '../../shared/lib/router/utils/remove-path-prefix'\nimport { getServerUtils } from '../server-utils'\nimport { detectDomainLocale } from '../../shared/lib/i18n/detect-domain-locale'\nimport { getHostname } from '../../shared/lib/get-hostname'\nimport { checkIsOnDemandRevalidate } from '../api-utils'\nimport type { PreviewData } from '../../types'\nimport type { BuildManifest } from '../get-page-files'\nimport type { ReactLoadableManifest } from '../load-components'\nimport type { NextFontManifest } from '../../build/webpack/plugins/next-font-manifest-plugin'\nimport { normalizeDataPath } from '../../shared/lib/page-path/normalize-data-path'\nimport { pathHasPrefix } from '../../shared/lib/router/utils/path-has-prefix'\nimport { addRequestMeta, getRequestMeta } from '../request-meta'\nimport { normalizePagePath } from '../../shared/lib/page-path/normalize-page-path'\nimport { isStaticMetadataRoute } from '../../lib/metadata/is-metadata-route'\nimport { IncrementalCache } from '../lib/incremental-cache'\nimport { initializeCacheHandlers, setCacheHandler } from '../use-cache/handlers'\nimport { interopDefault } from '../app-render/interop-default'\nimport type { RouteKind } from '../route-kind'\nimport type { BaseNextRequest } from '../base-http'\nimport type { I18NConfig, NextConfigComplete } from '../config-shared'\nimport ResponseCache, { type ResponseGenerator } from '../response-cache'\nimport { normalizeAppPath } from '../../shared/lib/router/utils/app-paths'\nimport {\n RouterServerContextSymbol,\n routerServerGlobal,\n type RouterServerContext,\n} from '../lib/router-utils/router-server-context'\nimport { decodePathParams } from '../lib/router-utils/decode-path-params'\nimport { removeTrailingSlash } from '../../shared/lib/router/utils/remove-trailing-slash'\nimport { isInterceptionRouteRewrite } from '../../lib/generate-interception-routes-rewrites'\n\n/**\n * RouteModuleOptions is the options that are passed to the route module, other\n * route modules should extend this class to add specific options for their\n * route.\n */\nexport interface RouteModuleOptions<\n D extends RouteDefinition = RouteDefinition,\n U = unknown,\n> {\n readonly definition: Readonly<D>\n readonly userland: Readonly<U>\n readonly distDir: string\n readonly projectDir: string\n}\n\n/**\n * RouteHandlerContext is the base context for a route handler.\n */\nexport interface RouteModuleHandleContext {\n /**\n * Any matched parameters for the request. This is only defined for dynamic\n * routes.\n */\n params: Record<string, string | string[] | undefined> | undefined\n}\n\nconst dynamicImportEsmDefault = (id: string) =>\n import(/* webpackIgnore: true */ /* turbopackIgnore: true */ id).then(\n (mod) => mod.default || mod\n )\n\n/**\n * RouteModule is the base class for all route modules. This class should be\n * extended by all route modules.\n */\nexport abstract class RouteModule<\n D extends RouteDefinition = RouteDefinition,\n U = unknown,\n> {\n /**\n * The userland module. This is the module that is exported from the user's\n * code. This is marked as readonly to ensure that the module is not mutated\n * because the module (when compiled) only provides getters.\n */\n public readonly userland: Readonly<U>\n\n /**\n * The definition of the route.\n */\n public readonly definition: Readonly<D>\n\n /**\n * The shared modules that are exposed and required for the route module.\n */\n public static readonly sharedModules: any\n\n public isDev: boolean\n public distDir: string\n public projectDir: string\n public isAppRouter?: boolean\n public incrementCache?: IncrementalCache\n public responseCache?: ResponseCache\n\n constructor({\n userland,\n definition,\n distDir,\n projectDir,\n }: RouteModuleOptions<D, U>) {\n this.userland = userland\n this.definition = definition\n this.isDev = process.env.NODE_ENV === 'development'\n this.distDir = distDir\n this.projectDir = projectDir\n }\n\n public async instrumentationOnRequestError(\n req: IncomingMessage | BaseNextRequest,\n ...args: Parameters<InstrumentationOnRequestError>\n ) {\n if (process.env.NEXT_RUNTIME === 'edge') {\n const { getEdgeInstrumentationModule } = await import('../web/globals')\n const instrumentation = await getEdgeInstrumentationModule()\n\n if (instrumentation) {\n await instrumentation.onRequestError?.(...args)\n }\n } else {\n const { join } = require('node:path') as typeof import('node:path')\n const absoluteProjectDir =\n getRequestMeta(req, 'projectDir') ||\n join(process.cwd(), this.projectDir)\n\n const { instrumentationOnRequestError } = await import(\n '../lib/router-utils/instrumentation-globals.external'\n )\n\n return instrumentationOnRequestError(\n absoluteProjectDir,\n this.distDir,\n ...args\n )\n }\n }\n\n private loadManifests(\n srcPage: string,\n projectDir?: string\n ): {\n buildId: string\n buildManifest: BuildManifest\n routesManifest: DeepReadonly<DevRoutesManifest>\n nextFontManifest: DeepReadonly<NextFontManifest>\n prerenderManifest: DeepReadonly<PrerenderManifest>\n serverFilesManifest: RequiredServerFilesManifest\n reactLoadableManifest: DeepReadonly<ReactLoadableManifest>\n subresourceIntegrityManifest: any\n clientReferenceManifest: any\n serverActionsManifest: any\n dynamicCssManifest: any\n interceptionRoutePatterns: RegExp[]\n } {\n if (process.env.NEXT_RUNTIME === 'edge') {\n const { getEdgePreviewProps } =\n require('../web/get-edge-preview-props') as typeof import('../web/get-edge-preview-props')\n\n const maybeJSONParse = (str?: string) =>\n str ? JSON.parse(str) : undefined\n\n return {\n buildId: process.env.__NEXT_BUILD_ID || '',\n buildManifest: self.__BUILD_MANIFEST as any,\n reactLoadableManifest: maybeJSONParse(self.__REACT_LOADABLE_MANIFEST),\n nextFontManifest: maybeJSONParse(self.__NEXT_FONT_MANIFEST),\n prerenderManifest: {\n routes: {},\n dynamicRoutes: {},\n notFoundRoutes: [],\n version: 4,\n preview: getEdgePreviewProps(),\n },\n routesManifest: {\n version: 4,\n caseSensitive: Boolean(process.env.__NEXT_CASE_SENSITIVE_ROUTES),\n basePath: process.env.__NEXT_BASE_PATH || '',\n rewrites: (process.env.__NEXT_REWRITES as any) || {\n beforeFiles: [],\n afterFiles: [],\n fallback: [],\n },\n redirects: [],\n headers: [],\n i18n:\n (process.env.__NEXT_I18N_CONFIG as any as I18NConfig) || undefined,\n skipMiddlewareUrlNormalize: Boolean(\n process.env.__NEXT_NO_MIDDLEWARE_URL_NORMALIZE\n ),\n },\n serverFilesManifest: {\n config: (globalThis as any).nextConfig || {},\n } as any,\n clientReferenceManifest: self.__RSC_MANIFEST?.[srcPage],\n serverActionsManifest: maybeJSONParse(self.__RSC_SERVER_MANIFEST),\n subresourceIntegrityManifest: maybeJSONParse(\n self.__SUBRESOURCE_INTEGRITY_MANIFEST\n ),\n dynamicCssManifest: maybeJSONParse(self.__DYNAMIC_CSS_MANIFEST),\n interceptionRoutePatterns: (\n maybeJSONParse(self.__INTERCEPTION_ROUTE_REWRITE_MANIFEST) ?? []\n ).map((rewrite: any) => new RegExp(rewrite.regex)),\n }\n } else {\n if (!projectDir) {\n throw new Error('Invariant: projectDir is required for node runtime')\n }\n const { loadManifestFromRelativePath } =\n require('../load-manifest.external') as typeof import('../load-manifest.external')\n const normalizedPagePath = normalizePagePath(srcPage)\n\n const [\n routesManifest,\n prerenderManifest,\n buildManifest,\n reactLoadableManifest,\n nextFontManifest,\n clientReferenceManifest,\n serverActionsManifest,\n subresourceIntegrityManifest,\n serverFilesManifest,\n buildId,\n dynamicCssManifest,\n ] = [\n loadManifestFromRelativePath<DevRoutesManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: ROUTES_MANIFEST,\n shouldCache: !this.isDev,\n }),\n loadManifestFromRelativePath<PrerenderManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: PRERENDER_MANIFEST,\n shouldCache: !this.isDev,\n }),\n loadManifestFromRelativePath<BuildManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: BUILD_MANIFEST,\n shouldCache: !this.isDev,\n }),\n loadManifestFromRelativePath<ReactLoadableManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: process.env.TURBOPACK\n ? `server/${this.isAppRouter ? 'app' : 'pages'}${normalizedPagePath}/${REACT_LOADABLE_MANIFEST}`\n : REACT_LOADABLE_MANIFEST,\n handleMissing: true,\n shouldCache: !this.isDev,\n }),\n loadManifestFromRelativePath<NextFontManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: `server/${NEXT_FONT_MANIFEST}.json`,\n shouldCache: !this.isDev,\n }),\n this.isAppRouter && !isStaticMetadataRoute(srcPage)\n ? loadManifestFromRelativePath({\n distDir: this.distDir,\n projectDir,\n useEval: true,\n handleMissing: true,\n manifest: `server/app${srcPage.replace(/%5F/g, '_') + '_' + CLIENT_REFERENCE_MANIFEST}.js`,\n shouldCache: !this.isDev,\n })\n : undefined,\n this.isAppRouter\n ? loadManifestFromRelativePath<any>({\n distDir: this.distDir,\n projectDir,\n manifest: `server/${SERVER_REFERENCE_MANIFEST}.json`,\n handleMissing: true,\n shouldCache: !this.isDev,\n })\n : {},\n loadManifestFromRelativePath<Record<string, string>>({\n projectDir,\n distDir: this.distDir,\n manifest: `server/${SUBRESOURCE_INTEGRITY_MANIFEST}.json`,\n handleMissing: true,\n shouldCache: !this.isDev,\n }),\n this.isDev\n ? ({} as any)\n : loadManifestFromRelativePath<RequiredServerFilesManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: SERVER_FILES_MANIFEST,\n }),\n this.isDev\n ? 'development'\n : loadManifestFromRelativePath<any>({\n projectDir,\n distDir: this.distDir,\n manifest: BUILD_ID_FILE,\n skipParse: true,\n }),\n loadManifestFromRelativePath<any>({\n projectDir,\n distDir: this.distDir,\n manifest: DYNAMIC_CSS_MANIFEST,\n handleMissing: true,\n }),\n ]\n\n return {\n buildId,\n buildManifest,\n routesManifest,\n nextFontManifest,\n prerenderManifest,\n serverFilesManifest,\n reactLoadableManifest,\n clientReferenceManifest: (clientReferenceManifest as any)\n ?.__RSC_MANIFEST?.[srcPage.replace(/%5F/g, '_')],\n serverActionsManifest,\n subresourceIntegrityManifest,\n dynamicCssManifest,\n interceptionRoutePatterns: routesManifest.rewrites.beforeFiles\n .filter(isInterceptionRouteRewrite)\n .map((rewrite) => new RegExp(rewrite.regex)),\n }\n }\n }\n\n public async loadCustomCacheHandlers(\n req: IncomingMessage | BaseNextRequest,\n nextConfig: NextConfigComplete\n ) {\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { cacheHandlers } = nextConfig.experimental\n if (!cacheHandlers) return\n\n // If we've already initialized the cache handlers interface, don't do it\n // again.\n if (!initializeCacheHandlers()) return\n\n for (const [kind, handler] of Object.entries(cacheHandlers)) {\n if (!handler) continue\n\n const { formatDynamicImportPath } =\n require('../../lib/format-dynamic-import-path') as typeof import('../../lib/format-dynamic-import-path')\n\n const { join } = require('node:path') as typeof import('node:path')\n const absoluteProjectDir =\n getRequestMeta(req, 'projectDir') ||\n join(process.cwd(), this.projectDir)\n\n setCacheHandler(\n kind,\n interopDefault(\n await dynamicImportEsmDefault(\n formatDynamicImportPath(\n `${absoluteProjectDir}/${this.distDir}`,\n handler\n )\n )\n )\n )\n }\n }\n }\n\n public async getIncrementalCache(\n req: IncomingMessage | BaseNextRequest,\n nextConfig: NextConfigComplete,\n prerenderManifest: DeepReadonly<PrerenderManifest>\n ): Promise<IncrementalCache> {\n if (process.env.NEXT_RUNTIME === 'edge') {\n return (globalThis as any).__incrementalCache\n } else {\n let CacheHandler: any\n const { cacheHandler } = nextConfig\n\n if (cacheHandler) {\n const { formatDynamicImportPath } =\n require('../../lib/format-dynamic-import-path') as typeof import('../../lib/format-dynamic-import-path')\n\n CacheHandler = interopDefault(\n await dynamicImportEsmDefault(\n formatDynamicImportPath(this.distDir, cacheHandler)\n )\n )\n }\n const { join } = require('node:path') as typeof import('node:path')\n const projectDir =\n getRequestMeta(req, 'projectDir') ||\n join(process.cwd(), this.projectDir)\n\n await this.loadCustomCacheHandlers(req, nextConfig)\n\n // incremental-cache is request specific\n // although can have shared caches in module scope\n // per-cache handler\n return new IncrementalCache({\n fs: (\n require('../lib/node-fs-methods') as typeof import('../lib/node-fs-methods')\n ).nodeFs,\n dev: this.isDev,\n requestHeaders: req.headers,\n allowedRevalidateHeaderKeys:\n nextConfig.experimental.allowedRevalidateHeaderKeys,\n minimalMode: getRequestMeta(req, 'minimalMode'),\n serverDistDir: `${projectDir}/${this.distDir}/server`,\n fetchCacheKeyPrefix: nextConfig.experimental.fetchCacheKeyPrefix,\n maxMemoryCacheSize: nextConfig.cacheMaxMemorySize,\n flushToDisk: nextConfig.experimental.isrFlushToDisk,\n getPrerenderManifest: () => prerenderManifest,\n CurCacheHandler: CacheHandler,\n })\n }\n }\n\n public async onRequestError(\n req: IncomingMessage | BaseNextRequest,\n err: unknown,\n errorContext: RequestErrorContext,\n routerServerContext?: RouterServerContext[string]\n ) {\n if (routerServerContext?.logErrorWithOriginalStack) {\n routerServerContext.logErrorWithOriginalStack(err, 'app-dir')\n } else {\n console.error(err)\n }\n await this.instrumentationOnRequestError(\n req,\n err,\n {\n path: req.url || '/',\n headers: req.headers,\n method: req.method || 'GET',\n },\n errorContext\n )\n }\n\n public async prepare(\n req: IncomingMessage | BaseNextRequest,\n res: ServerResponse | null,\n {\n srcPage,\n multiZoneDraftMode,\n }: {\n srcPage: string\n multiZoneDraftMode?: boolean\n }\n ): Promise<\n | {\n buildId: string\n locale?: string\n locales?: readonly string[]\n defaultLocale?: string\n query: ParsedUrlQuery\n originalQuery: ParsedUrlQuery\n originalPathname: string\n params?: ParsedUrlQuery\n parsedUrl: UrlWithParsedQuery\n previewData: PreviewData\n pageIsDynamic: boolean\n isDraftMode: boolean\n resolvedPathname: string\n isNextDataRequest: boolean\n buildManifest: DeepReadonly<BuildManifest>\n nextFontManifest: DeepReadonly<NextFontManifest>\n serverFilesManifest: DeepReadonly<RequiredServerFilesManifest>\n reactLoadableManifest: DeepReadonly<ReactLoadableManifest>\n routesManifest: DeepReadonly<DevRoutesManifest>\n prerenderManifest: DeepReadonly<PrerenderManifest>\n // we can't pull in the client reference type or it causes issues with\n // our pre-compiled types\n clientReferenceManifest?: any\n serverActionsManifest?: any\n dynamicCssManifest?: any\n subresourceIntegrityManifest?: DeepReadonly<Record<string, string>>\n isOnDemandRevalidate: boolean\n revalidateOnlyGenerated: boolean\n nextConfig: NextConfigComplete\n routerServerContext?: RouterServerContext[string]\n interceptionRoutePatterns?: any\n }\n | undefined\n > {\n let projectDir: string | undefined\n\n // edge runtime handles loading instrumentation at the edge adapter level\n if (process.env.NEXT_RUNTIME !== 'edge') {\n const { join, relative } =\n require('node:path') as typeof import('node:path')\n\n projectDir =\n getRequestMeta(req, 'projectDir') ||\n join(process.cwd(), this.projectDir)\n\n const absoluteDistDir = getRequestMeta(req, 'distDir')\n\n if (absoluteDistDir) {\n this.distDir = relative(projectDir, absoluteDistDir)\n }\n const { ensureInstrumentationRegistered } = await import(\n '../lib/router-utils/instrumentation-globals.external'\n )\n // ensure instrumentation is registered and pass\n // onRequestError below\n ensureInstrumentationRegistered(projectDir, this.distDir)\n }\n const manifests = await this.loadManifests(srcPage, projectDir)\n const { routesManifest, prerenderManifest, serverFilesManifest } = manifests\n\n const { basePath, i18n, rewrites } = routesManifest\n\n if (basePath) {\n req.url = removePathPrefix(req.url || '/', basePath)\n }\n\n const parsedUrl = parseReqUrl(req.url || '/')\n // if we couldn't parse the URL we can't continue\n if (!parsedUrl) {\n return\n }\n let isNextDataRequest = false\n\n if (pathHasPrefix(parsedUrl.pathname || '/', '/_next/data')) {\n isNextDataRequest = true\n parsedUrl.pathname = normalizeDataPath(parsedUrl.pathname || '/')\n }\n let originalPathname = parsedUrl.pathname || '/'\n const originalQuery = { ...parsedUrl.query }\n const pageIsDynamic = isDynamicRoute(srcPage)\n\n let localeResult: PathLocale | undefined\n let detectedLocale: string | undefined\n\n if (i18n) {\n localeResult = normalizeLocalePath(\n parsedUrl.pathname || '/',\n i18n.locales\n )\n\n if (localeResult.detectedLocale) {\n req.url = `${localeResult.pathname}${parsedUrl.search}`\n originalPathname = localeResult.pathname\n\n if (!detectedLocale) {\n detectedLocale = localeResult.detectedLocale\n }\n }\n }\n\n const serverUtils = getServerUtils({\n page: srcPage,\n i18n,\n basePath,\n rewrites,\n pageIsDynamic,\n trailingSlash: process.env.__NEXT_TRAILING_SLASH as any as boolean,\n caseSensitive: Boolean(routesManifest.caseSensitive),\n })\n\n const domainLocale = detectDomainLocale(\n i18n?.domains,\n getHostname(parsedUrl, req.headers),\n detectedLocale\n )\n addRequestMeta(req, 'isLocaleDomain', Boolean(domainLocale))\n\n const defaultLocale = domainLocale?.defaultLocale || i18n?.defaultLocale\n\n // Ensure parsedUrl.pathname includes locale before processing\n // rewrites or they won't match correctly.\n if (defaultLocale && !detectedLocale) {\n parsedUrl.pathname = `/${defaultLocale}${parsedUrl.pathname === '/' ? '' : parsedUrl.pathname}`\n }\n const locale =\n getRequestMeta(req, 'locale') || detectedLocale || defaultLocale\n\n const rewriteParamKeys = Object.keys(\n serverUtils.handleRewrites(req, parsedUrl)\n )\n\n // after processing rewrites we want to remove locale\n // from parsedUrl pathname\n if (i18n) {\n parsedUrl.pathname = normalizeLocalePath(\n parsedUrl.pathname || '/',\n i18n.locales\n ).pathname\n }\n\n let params: Record<string, undefined | string | string[]> | undefined =\n getRequestMeta(req, 'params')\n\n // attempt parsing from pathname\n if (!params && serverUtils.dynamicRouteMatcher) {\n const paramsMatch = serverUtils.dynamicRouteMatcher(\n normalizeDataPath(localeResult?.pathname || parsedUrl.pathname || '/')\n )\n const paramsResult = serverUtils.normalizeDynamicRouteParams(\n paramsMatch || {},\n true\n )\n\n if (paramsResult.hasValidParams) {\n params = paramsResult.params\n }\n }\n\n // Local \"next start\" expects the routing parsed query values\n // to not be present in the URL although when deployed proxies\n // will add query values from resolving the routes to pass to function.\n\n // TODO: do we want to change expectations for \"next start\"\n // to include these query values in the URL which affects asPath\n // but would match deployed behavior, e.g. a rewrite from middleware\n // that adds a query param would be in asPath as query but locally\n // it won't be in the asPath but still available in the query object\n const query = getRequestMeta(req, 'query') || {\n ...parsedUrl.query,\n }\n\n const routeParamKeys = new Set<string>()\n const combinedParamKeys = []\n\n // we don't include rewriteParamKeys in the combinedParamKeys\n // for app router since the searchParams is populated from the\n // URL so we don't want to strip the rewrite params from the URL\n // so that searchParams can include them\n if (!this.isAppRouter) {\n for (const key of [\n ...rewriteParamKeys,\n ...Object.keys(serverUtils.defaultRouteMatches || {}),\n ]) {\n // We only want to filter rewrite param keys from the URL\n // if they are matches from the URL e.g. the key/value matches\n // before and after applying the rewrites /:path for /hello and\n // { path: 'hello' } but not for { path: 'another' } and /hello\n // TODO: we should prefix rewrite param keys the same as we do\n // for dynamic routes so we can identify them properly\n const originalValue = Array.isArray(originalQuery[key])\n ? originalQuery[key].join('')\n : originalQuery[key]\n\n const queryValue = Array.isArray(query[key])\n ? query[key].join('')\n : query[key]\n\n if (!(key in originalQuery) || originalValue === queryValue) {\n combinedParamKeys.push(key)\n }\n }\n }\n\n serverUtils.normalizeCdnUrl(req, combinedParamKeys)\n serverUtils.normalizeQueryParams(query, routeParamKeys)\n serverUtils.filterInternalQuery(originalQuery, combinedParamKeys)\n\n if (pageIsDynamic) {\n const queryResult = serverUtils.normalizeDynamicRouteParams(query, true)\n\n const paramsResult = serverUtils.normalizeDynamicRouteParams(\n params || {},\n true\n )\n const paramsToInterpolate: ParsedUrlQuery =\n paramsResult.hasValidParams && params\n ? params\n : queryResult.hasValidParams\n ? query\n : {}\n\n req.url = serverUtils.interpolateDynamicPath(\n req.url || '/',\n paramsToInterpolate\n )\n parsedUrl.pathname = serverUtils.interpolateDynamicPath(\n parsedUrl.pathname || '/',\n paramsToInterpolate\n )\n originalPathname = serverUtils.interpolateDynamicPath(\n originalPathname,\n paramsToInterpolate\n )\n\n // try pulling from query if valid\n if (!params) {\n if (queryResult.hasValidParams) {\n params = Object.assign({}, queryResult.params)\n\n // If we pulled from query remove it so it's\n // only in params\n for (const key in serverUtils.defaultRouteMatches) {\n delete query[key]\n }\n } else {\n // use final params from URL matching\n const paramsMatch = serverUtils.dynamicRouteMatcher?.(\n normalizeDataPath(\n localeResult?.pathname || parsedUrl.pathname || '/'\n )\n )\n // we don't normalize these as they are allowed to be\n // the literal slug matches here e.g. /blog/[slug]\n // actually being requested\n if (paramsMatch) {\n params = Object.assign({}, paramsMatch)\n }\n }\n }\n }\n\n // Remove any normalized params from the query if they\n // weren't present as non-prefixed query key e.g.\n // ?search=1&nxtPsearch=hello we don't delete search\n for (const key of routeParamKeys) {\n if (!(key in originalQuery)) {\n delete query[key]\n }\n }\n\n const { isOnDemandRevalidate, revalidateOnlyGenerated } =\n checkIsOnDemandRevalidate(req, prerenderManifest.preview)\n\n let isDraftMode = false\n let previewData: PreviewData\n\n // preview data relies on non-edge utils\n if (process.env.NEXT_RUNTIME !== 'edge' && res) {\n const { tryGetPreviewData } =\n require('../api-utils/node/try-get-preview-data') as typeof import('../api-utils/node/try-get-preview-data')\n\n previewData = tryGetPreviewData(\n req,\n res,\n prerenderManifest.preview,\n Boolean(multiZoneDraftMode)\n )\n isDraftMode = previewData !== false\n }\n\n const routerServerContext =\n routerServerGlobal[RouterServerContextSymbol]?.[this.projectDir]\n const nextConfig =\n routerServerContext?.nextConfig || serverFilesManifest.config\n\n const normalizedSrcPage = normalizeAppPath(srcPage)\n let resolvedPathname =\n getRequestMeta(req, 'rewroteURL') || normalizedSrcPage\n\n if (isDynamicRoute(resolvedPathname) && params) {\n resolvedPathname = serverUtils.interpolateDynamicPath(\n resolvedPathname,\n params\n )\n }\n\n if (resolvedPathname === '/index') {\n resolvedPathname = '/'\n }\n try {\n resolvedPathname = decodePathParams(resolvedPathname)\n } catch (_) {}\n\n resolvedPathname = removeTrailingSlash(resolvedPathname)\n\n return {\n query,\n originalQuery,\n originalPathname,\n params,\n parsedUrl,\n locale,\n isNextDataRequest,\n locales: i18n?.locales,\n defaultLocale,\n isDraftMode,\n previewData,\n pageIsDynamic,\n resolvedPathname,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n ...manifests,\n serverActionsManifest: manifests.serverActionsManifest,\n clientReferenceManifest: manifests.clientReferenceManifest,\n nextConfig,\n routerServerContext,\n }\n }\n\n public getResponseCache(req: IncomingMessage | BaseNextRequest) {\n if (!this.responseCache) {\n const minimalMode = getRequestMeta(req, 'minimalMode') ?? false\n this.responseCache = new ResponseCache(minimalMode)\n }\n return this.responseCache\n }\n\n public async handleResponse({\n req,\n nextConfig,\n cacheKey,\n routeKind,\n isFallback,\n prerenderManifest,\n isRoutePPREnabled,\n isOnDemandRevalidate,\n revalidateOnlyGenerated,\n responseGenerator,\n waitUntil,\n }: {\n req: IncomingMessage | BaseNextRequest\n nextConfig: NextConfigComplete\n cacheKey: string | null\n routeKind: RouteKind\n isFallback?: boolean\n prerenderManifest: DeepReadonly<PrerenderManifest>\n isRoutePPREnabled?: boolean\n isOnDemandRevalidate?: boolean\n revalidateOnlyGenerated?: boolean\n responseGenerator: ResponseGenerator\n waitUntil?: (prom: Promise<any>) => void\n }) {\n const responseCache = this.getResponseCache(req)\n const cacheEntry = await responseCache.get(cacheKey, responseGenerator, {\n routeKind,\n isFallback,\n isRoutePPREnabled,\n isOnDemandRevalidate,\n isPrefetch: req.headers.purpose === 'prefetch',\n incrementalCache: await this.getIncrementalCache(\n req,\n nextConfig,\n prerenderManifest\n ),\n waitUntil,\n })\n\n if (!cacheEntry) {\n if (\n cacheKey &&\n // revalidate only generated can bail even if cacheKey is provided\n !(isOnDemandRevalidate && revalidateOnlyGenerated)\n ) {\n // A cache entry might not be generated if a response is written\n // in `getInitialProps` or `getServerSideProps`, but those shouldn't\n // have a cache key. If we do have a cache key but we don't end up\n // with a cache entry, then either Next.js or the application has a\n // bug that needs fixing.\n throw new Error('invariant: cache entry required but not generated')\n }\n }\n return cacheEntry\n }\n}\n","export function isAppRouteRoute(route: string): boolean {\n return route.endsWith('/route')\n}\n","/**\n * For a given page path, this function ensures that there is no backslash\n * escaping slashes in the path. Example:\n * - `foo\\/bar\\/baz` -> `foo/bar/baz`\n */\nexport function normalizePathSep(path: string): string {\n return path.replace(/\\\\/g, '/')\n}\n","import type { Key } from 'next/dist/compiled/path-to-regexp'\nimport { regexpToFunction } from 'next/dist/compiled/path-to-regexp'\nimport { pathToRegexp } from 'next/dist/compiled/path-to-regexp'\n\ninterface Options {\n /**\n * A transformer function that will be applied to the regexp generated\n * from the provided path and path-to-regexp.\n */\n regexModifier?: (regex: string) => string\n /**\n * When true the function will remove all unnamed parameters\n * from the matched parameters.\n */\n removeUnnamedParams?: boolean\n /**\n * When true the regexp won't allow an optional trailing delimiter\n * to match.\n */\n strict?: boolean\n\n /**\n * When true the matcher will be case-sensitive, defaults to false\n */\n sensitive?: boolean\n}\n\nexport type PatchMatcher = (\n pathname: string,\n params?: Record<string, any>\n) => Record<string, any> | false\n\n/**\n * Generates a path matcher function for a given path and options based on\n * path-to-regexp. By default the match will be case insensitive, non strict\n * and delimited by `/`.\n */\nexport function getPathMatch(path: string, options?: Options): PatchMatcher {\n const keys: Key[] = []\n const regexp = pathToRegexp(path, keys, {\n delimiter: '/',\n sensitive:\n typeof options?.sensitive === 'boolean' ? options.sensitive : false,\n strict: options?.strict,\n })\n\n const matcher = regexpToFunction<Record<string, any>>(\n options?.regexModifier\n ? new RegExp(options.regexModifier(regexp.source), regexp.flags)\n : regexp,\n keys\n )\n\n /**\n * A matcher function that will check if a given pathname matches the path\n * given in the builder function. When the path does not match it will return\n * `false` but if it does it will return an object with the matched params\n * merged with the params provided in the second argument.\n */\n return (pathname, params) => {\n // If no pathname is provided it's not a match.\n if (typeof pathname !== 'string') return false\n\n const match = matcher(pathname)\n\n // If the path did not match `false` will be returned.\n if (!match) return false\n\n /**\n * If unnamed params are not allowed they must be removed from\n * the matched parameters. path-to-regexp uses \"string\" for named and\n * \"number\" for unnamed parameters.\n */\n if (options?.removeUnnamedParams) {\n for (const key of keys) {\n if (typeof key.name === 'number') {\n delete match.params[key.name]\n }\n }\n }\n\n return { ...params, ...match.params }\n }\n}\n","import type {\n FlightRouterState,\n Segment,\n} from '../../../server/app-render/types'\nimport { INTERCEPTION_ROUTE_MARKERS } from '../../../shared/lib/router/utils/interception-routes'\nimport type { Params } from '../../../server/request/params'\nimport {\n isGroupSegment,\n DEFAULT_SEGMENT_KEY,\n PAGE_SEGMENT_KEY,\n} from '../../../shared/lib/segment'\nimport { matchSegment } from '../match-segments'\n\nconst removeLeadingSlash = (segment: string): string => {\n return segment[0] === '/' ? segment.slice(1) : segment\n}\n\nconst segmentToPathname = (segment: Segment): string => {\n if (typeof segment === 'string') {\n // 'children' is not a valid path -- it's technically a parallel route that corresponds with the current segment's page\n // if we don't skip it, then the computed pathname might be something like `/children` which doesn't make sense.\n if (segment === 'children') return ''\n\n return segment\n }\n\n return segment[1]\n}\n\nfunction normalizeSegments(segments: string[]): string {\n return (\n segments.reduce((acc, segment) => {\n segment = removeLeadingSlash(segment)\n if (segment === '' || isGroupSegment(segment)) {\n return acc\n }\n\n return `${acc}/${segment}`\n }, '') || '/'\n )\n}\n\nexport function extractPathFromFlightRouterState(\n flightRouterState: FlightRouterState\n): string | undefined {\n const segment = Array.isArray(flightRouterState[0])\n ? flightRouterState[0][1]\n : flightRouterState[0]\n\n if (\n segment === DEFAULT_SEGMENT_KEY ||\n INTERCEPTION_ROUTE_MARKERS.some((m) => segment.startsWith(m))\n )\n return undefined\n\n if (segment.startsWith(PAGE_SEGMENT_KEY)) return ''\n\n const segments = [segmentToPathname(segment)]\n const parallelRoutes = flightRouterState[1] ?? {}\n\n const childrenPath = parallelRoutes.children\n ? extractPathFromFlightRouterState(parallelRoutes.children)\n : undefined\n\n if (childrenPath !== undefined) {\n segments.push(childrenPath)\n } else {\n for (const [key, value] of Object.entries(parallelRoutes)) {\n if (key === 'children') continue\n\n const childPath = extractPathFromFlightRouterState(value)\n\n if (childPath !== undefined) {\n segments.push(childPath)\n }\n }\n }\n\n return normalizeSegments(segments)\n}\n\nfunction computeChangedPathImpl(\n treeA: FlightRouterState,\n treeB: FlightRouterState\n): string | null {\n const [segmentA, parallelRoutesA] = treeA\n const [segmentB, parallelRoutesB] = treeB\n\n const normalizedSegmentA = segmentToPathname(segmentA)\n const normalizedSegmentB = segmentToPathname(segmentB)\n\n if (\n INTERCEPTION_ROUTE_MARKERS.some(\n (m) =>\n normalizedSegmentA.startsWith(m) || normalizedSegmentB.startsWith(m)\n )\n ) {\n return ''\n }\n\n if (!matchSegment(segmentA, segmentB)) {\n // once we find where the tree changed, we compute the rest of the path by traversing the tree\n return extractPathFromFlightRouterState(treeB) ?? ''\n }\n\n for (const parallelRouterKey in parallelRoutesA) {\n if (parallelRoutesB[parallelRouterKey]) {\n const changedPath = computeChangedPathImpl(\n parallelRoutesA[parallelRouterKey],\n parallelRoutesB[parallelRouterKey]\n )\n if (changedPath !== null) {\n return `${segmentToPathname(segmentB)}/${changedPath}`\n }\n }\n }\n\n return null\n}\n\nexport function computeChangedPath(\n treeA: FlightRouterState,\n treeB: FlightRouterState\n): string | null {\n const changedPath = computeChangedPathImpl(treeA, treeB)\n\n if (changedPath == null || changedPath === '/') {\n return changedPath\n }\n\n // lightweight normalization to remove route groups\n return normalizeSegments(changedPath.split('/'))\n}\n\n/**\n * Recursively extracts dynamic parameters from FlightRouterState.\n */\nexport function getSelectedParams(\n currentTree: FlightRouterState,\n params: Params = {}\n): Params {\n const parallelRoutes = currentTree[1]\n\n for (const parallelRoute of Object.values(parallelRoutes)) {\n const segment = parallelRoute[0]\n const isDynamicParameter = Array.isArray(segment)\n const segmentValue = isDynamicParameter ? segment[1] : segment\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) continue\n\n // Ensure catchAll and optional catchall are turned into an array\n const isCatchAll =\n isDynamicParameter && (segment[2] === 'c' || segment[2] === 'oc')\n\n if (isCatchAll) {\n params[segment[0]] = segment[1].split('/')\n } else if (isDynamicParameter) {\n params[segment[0]] = segment[1]\n }\n\n params = getSelectedParams(parallelRoute, params)\n }\n\n return params\n}\n","import type { FlightRouterState } from './types'\nimport { flightRouterStateSchema } from './types'\nimport { assert } from 'next/dist/compiled/superstruct'\n\nexport function parseAndValidateFlightRouterState(\n stateHeader: string | string[]\n): FlightRouterState\nexport function parseAndValidateFlightRouterState(\n stateHeader: undefined\n): undefined\nexport function parseAndValidateFlightRouterState(\n stateHeader: string | string[] | undefined\n): FlightRouterState | undefined\nexport function parseAndValidateFlightRouterState(\n stateHeader: string | string[] | undefined\n): FlightRouterState | undefined {\n if (typeof stateHeader === 'undefined') {\n return undefined\n }\n if (Array.isArray(stateHeader)) {\n throw new Error(\n 'Multiple router state headers were sent. This is not allowed.'\n )\n }\n\n // We limit the size of the router state header to ~40kb. This is to prevent\n // a malicious user from sending a very large header and slowing down the\n // resolving of the router state.\n // This is around 2,000 nested or parallel route segment states:\n // '{\"children\":[\"\",{}]}'.length === 20.\n if (stateHeader.length > 20 * 2000) {\n throw new Error('The router state header was too large.')\n }\n\n try {\n const state = JSON.parse(decodeURIComponent(stateHeader))\n assert(state, flightRouterStateSchema)\n return state\n } catch {\n throw new Error('The router state header was sent but could not be parsed.')\n }\n}\n","import type { ParsedUrlQuery } from 'querystring'\n\nimport { searchParamsToUrlQuery } from './querystring'\nimport { parseRelativeUrl } from './parse-relative-url'\n\nexport interface ParsedUrl {\n hash: string\n hostname?: string | null\n href: string\n pathname: string\n port?: string | null\n protocol?: string | null\n query: ParsedUrlQuery\n search: string\n slashes: boolean | undefined\n}\n\nexport function parseUrl(url: string): ParsedUrl {\n if (url.startsWith('/')) {\n return parseRelativeUrl(url)\n }\n\n const parsedURL = new URL(url)\n return {\n hash: parsedURL.hash,\n hostname: parsedURL.hostname,\n href: parsedURL.href,\n pathname: parsedURL.pathname,\n port: parsedURL.port,\n protocol: parsedURL.protocol,\n query: searchParamsToUrlQuery(parsedURL.searchParams),\n search: parsedURL.search,\n slashes:\n parsedURL.href.slice(\n parsedURL.protocol.length,\n parsedURL.protocol.length + 2\n ) === '//',\n }\n}\n","import type { ParsedUrlQuery } from 'querystring'\nimport { getLocationOrigin } from '../../utils'\nimport { searchParamsToUrlQuery } from './querystring'\n\nexport interface ParsedRelativeUrl {\n hash: string\n href: string\n pathname: string\n query: ParsedUrlQuery\n search: string\n slashes: undefined\n}\n\n/**\n * Parses path-relative urls (e.g. `/hello/world?foo=bar`). If url isn't path-relative\n * (e.g. `./hello`) then at least base must be.\n * Absolute urls are rejected with one exception, in the browser, absolute urls that are on\n * the current origin will be parsed as relative\n */\nexport function parseRelativeUrl(\n url: string,\n base?: string,\n parseQuery?: true\n): ParsedRelativeUrl\nexport function parseRelativeUrl(\n url: string,\n base: string | undefined,\n parseQuery: false\n): Omit<ParsedRelativeUrl, 'query'>\nexport function parseRelativeUrl(\n url: string,\n base?: string,\n parseQuery = true\n): ParsedRelativeUrl | Omit<ParsedRelativeUrl, 'query'> {\n const globalBase = new URL(\n typeof window === 'undefined' ? 'http://n' : getLocationOrigin()\n )\n\n const resolvedBase = base\n ? new URL(base, globalBase)\n : url.startsWith('.')\n ? new URL(\n typeof window === 'undefined' ? 'http://n' : window.location.href\n )\n : globalBase\n\n const { pathname, searchParams, search, hash, href, origin } = new URL(\n url,\n resolvedBase\n )\n\n if (origin !== globalBase.origin) {\n throw new Error(`invariant: invalid relative URL, router received ${url}`)\n }\n\n return {\n pathname,\n query: parseQuery ? searchParamsToUrlQuery(searchParams) : undefined,\n search,\n hash,\n href: href.slice(origin.length),\n // We don't know for relative URLs at this point since we set a custom, internal\n // base that isn't surfaced to users.\n slashes: undefined,\n }\n}\n","import escapePathDelimiters from '../../../shared/lib/router/utils/escape-path-delimiters'\nimport { DecodeError } from '../../../shared/lib/utils'\n\n/**\n * We only encode path delimiters for path segments from\n * getStaticPaths so we need to attempt decoding the URL\n * to match against and only escape the path delimiters\n * this allows non-ascii values to be handled e.g.\n * Japanese characters.\n * */\nfunction decodePathParams(pathname: string): string {\n // TODO: investigate adding this handling for non-SSG\n // pages so non-ascii names also work there.\n return pathname\n .split('/')\n .map((seg) => {\n try {\n seg = escapePathDelimiters(decodeURIComponent(seg), true)\n } catch (_) {\n // An improperly encoded URL was provided\n throw new DecodeError('Failed to decode path param(s).')\n }\n return seg\n })\n .join('/')\n}\n\nexport { decodePathParams }\n","// escape delimiters used by path-to-regexp\nexport default function escapePathDelimiters(\n segment: string,\n escapeEncoded?: boolean\n): string {\n return segment.replace(\n new RegExp(`([/#?]${escapeEncoded ? '|%(2f|23|3f|5c)' : ''})`, 'gi'),\n (char: string) => encodeURIComponent(char)\n )\n}\n","import { isPlainObject } from '../shared/lib/is-plain-object'\n\n// We allow some additional attached properties for Next.js errors\nexport interface NextError extends Error {\n type?: string\n page?: string\n code?: string | number\n cancelled?: boolean\n digest?: number\n}\n\n/**\n * Checks whether the given value is a NextError.\n * This can be used to print a more detailed error message with properties like `code` & `digest`.\n */\nexport default function isError(err: unknown): err is NextError {\n return (\n typeof err === 'object' && err !== null && 'name' in err && 'message' in err\n )\n}\n\nfunction safeStringify(obj: any) {\n const seen = new WeakSet()\n\n return JSON.stringify(obj, (_key, value) => {\n // If value is an object and already seen, replace with \"[Circular]\"\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]'\n }\n seen.add(value)\n }\n return value\n })\n}\n\nexport function getProperError(err: unknown): Error {\n if (isError(err)) {\n return err\n }\n\n if (process.env.NODE_ENV === 'development') {\n // provide better error for case where `throw undefined`\n // is called in development\n if (typeof err === 'undefined') {\n return new Error(\n 'An undefined error was thrown, ' +\n 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'\n )\n }\n\n if (err === null) {\n return new Error(\n 'A null error was thrown, ' +\n 'see here for more info: https://nextjs.org/docs/messages/threw-undefined'\n )\n }\n }\n\n return new Error(isPlainObject(err) ? safeStringify(err) : err + '')\n}\n","import type { IncomingMessage } from 'http'\n\nimport { parse } from 'next/dist/compiled/content-type'\nimport isError from '../../../lib/is-error'\nimport type { SizeLimit } from '../../../types'\nimport { ApiError } from '../index'\n\n/**\n * Parse `JSON` and handles invalid `JSON` strings\n * @param str `JSON` string\n */\nfunction parseJson(str: string): object {\n if (str.length === 0) {\n // special-case empty json body, as it's a common client-side mistake\n return {}\n }\n\n try {\n return JSON.parse(str)\n } catch (e) {\n throw new ApiError(400, 'Invalid JSON')\n }\n}\n\n/**\n * Parse incoming message like `json` or `urlencoded`\n * @param req request object\n */\nexport async function parseBody(\n req: IncomingMessage,\n limit: SizeLimit\n): Promise<any> {\n let contentType\n try {\n contentType = parse(req.headers['content-type'] || 'text/plain')\n } catch {\n contentType = parse('text/plain')\n }\n const { type, parameters } = contentType\n const encoding = parameters.charset || 'utf-8'\n\n let buffer\n\n try {\n const getRawBody =\n require('next/dist/compiled/raw-body') as typeof import('next/dist/compiled/raw-body')\n buffer = await getRawBody(req, { encoding, limit })\n } catch (e) {\n if (isError(e) && e.type === 'entity.too.large') {\n throw new ApiError(413, `Body exceeded ${limit} limit`)\n } else {\n throw new ApiError(400, 'Invalid body')\n }\n }\n\n const body = buffer.toString()\n\n if (type === 'application/json' || type === 'application/ld+json') {\n return parseJson(body)\n } else if (type === 'application/x-www-form-urlencoded') {\n const qs = require('querystring') as typeof import('querystring')\n return qs.decode(body)\n } else {\n return body\n }\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport type { NextApiRequest, NextApiResponse } from '../../../shared/lib/utils'\nimport type { PageConfig, ResponseLimit } from '../../../types'\nimport type { __ApiPreviewProps } from '../.'\nimport type { CookieSerializeOptions } from 'next/dist/compiled/cookie'\n\nimport bytes from 'next/dist/compiled/bytes'\nimport { generateETag } from '../../lib/etag'\nimport { sendEtagResponse } from '../../send-payload'\nimport { Stream } from 'stream'\nimport isError from '../../../lib/is-error'\nimport { isResSent } from '../../../shared/lib/utils'\nimport { interopDefault } from '../../../lib/interop-default'\nimport {\n setLazyProp,\n sendStatusCode,\n redirect,\n clearPreviewData,\n sendError,\n ApiError,\n COOKIE_NAME_PRERENDER_BYPASS,\n COOKIE_NAME_PRERENDER_DATA,\n RESPONSE_LIMIT_DEFAULT,\n} from './../index'\nimport { getCookieParser } from './../get-cookie-parser'\nimport {\n JSON_CONTENT_TYPE_HEADER,\n PRERENDER_REVALIDATE_HEADER,\n PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,\n} from '../../../lib/constants'\nimport { tryGetPreviewData } from './try-get-preview-data'\nimport { parseBody } from './parse-body'\nimport {\n RouterServerContextSymbol,\n routerServerGlobal,\n} from '../../lib/router-utils/router-server-context'\nimport type { InstrumentationOnRequestError } from '../../instrumentation/types'\n\ntype ApiContext = __ApiPreviewProps & {\n trustHostHeader?: boolean\n allowedRevalidateHeaderKeys?: string[]\n hostname?: string\n multiZoneDraftMode?: boolean\n dev: boolean\n projectDir: string\n}\n\nfunction getMaxContentLength(responseLimit?: ResponseLimit) {\n if (responseLimit && typeof responseLimit !== 'boolean') {\n return bytes.parse(responseLimit)\n }\n return RESPONSE_LIMIT_DEFAULT\n}\n\n/**\n * Send `any` body to response\n * @param req request object\n * @param res response object\n * @param body of response\n */\nfunction sendData(req: NextApiRequest, res: NextApiResponse, body: any): void {\n if (body === null || body === undefined) {\n res.end()\n return\n }\n\n // strip irrelevant headers/body\n if (res.statusCode === 204 || res.statusCode === 304) {\n res.removeHeader('Content-Type')\n res.removeHeader('Content-Length')\n res.removeHeader('Transfer-Encoding')\n\n if (process.env.NODE_ENV === 'development' && body) {\n console.warn(\n `A body was attempted to be set with a 204 statusCode for ${req.url}, this is invalid and the body was ignored.\\n` +\n `See more info here https://nextjs.org/docs/messages/invalid-api-status-body`\n )\n }\n res.end()\n return\n }\n\n const contentType = res.getHeader('Content-Type')\n\n if (body instanceof Stream) {\n if (!contentType) {\n res.setHeader('Content-Type', 'application/octet-stream')\n }\n body.pipe(res)\n return\n }\n\n const isJSONLike = ['object', 'number', 'boolean'].includes(typeof body)\n const stringifiedBody = isJSONLike ? JSON.stringify(body) : body\n const etag = generateETag(stringifiedBody)\n if (sendEtagResponse(req, res, etag)) {\n return\n }\n\n if (Buffer.isBuffer(body)) {\n if (!contentType) {\n res.setHeader('Content-Type', 'application/octet-stream')\n }\n res.setHeader('Content-Length', body.length)\n res.end(body)\n return\n }\n\n if (isJSONLike) {\n res.setHeader('Content-Type', JSON_CONTENT_TYPE_HEADER)\n }\n\n res.setHeader('Content-Length', Buffer.byteLength(stringifiedBody))\n res.end(stringifiedBody)\n}\n\n/**\n * Send `JSON` object\n * @param res response object\n * @param jsonBody of data\n */\nfunction sendJson(res: NextApiResponse, jsonBody: any): void {\n // Set header to application/json\n res.setHeader('Content-Type', JSON_CONTENT_TYPE_HEADER)\n\n // Use send to handle request\n res.send(JSON.stringify(jsonBody))\n}\n\nfunction isValidData(str: any): str is string {\n return typeof str === 'string' && str.length >= 16\n}\n\nfunction setDraftMode<T>(\n res: NextApiResponse<T>,\n options: {\n enable: boolean\n previewModeId?: string\n }\n): NextApiResponse<T> {\n if (!isValidData(options.previewModeId)) {\n throw new Error('invariant: invalid previewModeId')\n }\n const expires = options.enable ? undefined : new Date(0)\n // To delete a cookie, set `expires` to a date in the past:\n // https://tools.ietf.org/html/rfc6265#section-4.1.1\n // `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, options.previewModeId, {\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n expires,\n }),\n ])\n return res\n}\n\nfunction setPreviewData<T>(\n res: NextApiResponse<T>,\n data: object | string, // TODO: strict runtime type checking\n options: {\n maxAge?: number\n path?: string\n } & __ApiPreviewProps\n): NextApiResponse<T> {\n if (!isValidData(options.previewModeId)) {\n throw new Error('invariant: invalid previewModeId')\n }\n if (!isValidData(options.previewModeEncryptionKey)) {\n throw new Error('invariant: invalid previewModeEncryptionKey')\n }\n if (!isValidData(options.previewModeSigningKey)) {\n throw new Error('invariant: invalid previewModeSigningKey')\n }\n\n const jsonwebtoken =\n require('next/dist/compiled/jsonwebtoken') as typeof import('next/dist/compiled/jsonwebtoken')\n const { encryptWithSecret } =\n require('../../crypto-utils') as typeof import('../../crypto-utils')\n const payload = jsonwebtoken.sign(\n {\n data: encryptWithSecret(\n Buffer.from(options.previewModeEncryptionKey),\n JSON.stringify(data)\n ),\n },\n options.previewModeSigningKey,\n {\n algorithm: 'HS256',\n ...(options.maxAge !== undefined\n ? { expiresIn: options.maxAge }\n : undefined),\n }\n )\n\n // limit preview mode cookie to 2KB since we shouldn't store too much\n // data here and browsers drop cookies over 4KB\n if (payload.length > 2048) {\n throw new Error(\n `Preview data is limited to 2KB currently, reduce how much data you are storing as preview data to continue`\n )\n }\n\n const { serialize } =\n require('next/dist/compiled/cookie') as typeof import('next/dist/compiled/cookie')\n const previous = res.getHeader('Set-Cookie')\n res.setHeader(`Set-Cookie`, [\n ...(typeof previous === 'string'\n ? [previous]\n : Array.isArray(previous)\n ? previous\n : []),\n serialize(COOKIE_NAME_PRERENDER_BYPASS, options.previewModeId, {\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.maxAge !== undefined\n ? ({ maxAge: options.maxAge } as CookieSerializeOptions)\n : undefined),\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n serialize(COOKIE_NAME_PRERENDER_DATA, payload, {\n httpOnly: true,\n sameSite: process.env.NODE_ENV !== 'development' ? 'none' : 'lax',\n secure: process.env.NODE_ENV !== 'development',\n path: '/',\n ...(options.maxAge !== undefined\n ? ({ maxAge: options.maxAge } as CookieSerializeOptions)\n : undefined),\n ...(options.path !== undefined\n ? ({ path: options.path } as CookieSerializeOptions)\n : undefined),\n }),\n ])\n return res\n}\n\nasync function revalidate(\n urlPath: string,\n opts: {\n unstable_onlyGenerated?: boolean\n },\n req: IncomingMessage,\n context: ApiContext\n) {\n if (typeof urlPath !== 'string' || !urlPath.startsWith('/')) {\n throw new Error(\n `Invalid urlPath provided to revalidate(), must be a path e.g. /blog/post-1, received ${urlPath}`\n )\n }\n const revalidateHeaders: HeadersInit = {\n [PRERENDER_REVALIDATE_HEADER]: context.previewModeId,\n ...(opts.unstable_onlyGenerated\n ? {\n [PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER]: '1',\n }\n : {}),\n }\n const allowedRevalidateHeaderKeys = [\n ...(context.allowedRevalidateHeaderKeys || []),\n ]\n\n if (context.trustHostHeader || context.dev) {\n allowedRevalidateHeaderKeys.push('cookie')\n }\n\n if (context.trustHostHeader) {\n allowedRevalidateHeaderKeys.push('x-vercel-protection-bypass')\n }\n\n for (const key of Object.keys(req.headers)) {\n if (allowedRevalidateHeaderKeys.includes(key)) {\n revalidateHeaders[key] = req.headers[key] as string\n }\n }\n\n const internalRevalidate =\n routerServerGlobal[RouterServerContextSymbol]?.[context.projectDir]\n ?.revalidate\n\n try {\n // We use the revalidate in router-server if available.\n // If we are operating without router-server (serverless)\n // we must go through network layer with fetch request\n if (internalRevalidate) {\n return await internalRevalidate({\n urlPath,\n revalidateHeaders,\n opts,\n })\n }\n\n if (context.trustHostHeader) {\n const res = await fetch(`https://${req.headers.host}${urlPath}`, {\n method: 'HEAD',\n headers: revalidateHeaders,\n })\n // we use the cache header to determine successful revalidate as\n // a non-200 status code can be returned from a successful revalidate\n // e.g. notFound: true returns 404 status code but is successful\n const cacheHeader =\n res.headers.get('x-vercel-cache') || res.headers.get('x-nextjs-cache')\n\n if (\n cacheHeader?.toUpperCase() !== 'REVALIDATED' &&\n res.status !== 200 &&\n !(res.status === 404 && opts.unstable_onlyGenerated)\n ) {\n throw new Error(`Invalid response ${res.status}`)\n }\n } else {\n throw new Error(\n `Invariant: missing internal router-server-methods this is an internal bug`\n )\n }\n } catch (err: unknown) {\n throw new Error(\n `Failed to revalidate ${urlPath}: ${isError(err) ? err.message : err}`\n )\n }\n}\n\nexport async function apiResolver(\n req: IncomingMessage,\n res: ServerResponse,\n query: any,\n resolverModule: any,\n apiContext: ApiContext,\n propagateError: boolean,\n dev?: boolean,\n page?: string,\n onError?: InstrumentationOnRequestError\n): Promise<void> {\n const apiReq = req as NextApiRequest\n const apiRes = res as NextApiResponse\n\n try {\n if (!resolverModule) {\n res.statusCode = 404\n res.end('Not Found')\n return\n }\n const config: PageConfig = resolverModule.config || {}\n const bodyParser = config.api?.bodyParser !== false\n const responseLimit = config.api?.responseLimit ?? true\n const externalResolver = config.api?.externalResolver || false\n\n // Parsing of cookies\n setLazyProp({ req: apiReq }, 'cookies', getCookieParser(req.headers))\n // Parsing query string\n apiReq.query = query\n // Parsing preview data\n setLazyProp({ req: apiReq }, 'previewData', () =>\n tryGetPreviewData(req, res, apiContext, !!apiContext.multiZoneDraftMode)\n )\n // Checking if preview mode is enabled\n setLazyProp({ req: apiReq }, 'preview', () =>\n apiReq.previewData !== false ? true : undefined\n )\n // Set draftMode to the same value as preview\n setLazyProp({ req: apiReq }, 'draftMode', () => apiReq.preview)\n\n // Parsing of body\n if (bodyParser && !apiReq.body) {\n apiReq.body = await parseBody(\n apiReq,\n config.api && config.api.bodyParser && config.api.bodyParser.sizeLimit\n ? config.api.bodyParser.sizeLimit\n : '1mb'\n )\n }\n\n let contentLength = 0\n const maxContentLength = getMaxContentLength(responseLimit)\n const writeData = apiRes.write\n const endResponse = apiRes.end\n apiRes.write = (...args: any[2]) => {\n contentLength += Buffer.byteLength(args[0] || '')\n return writeData.apply(apiRes, args)\n }\n apiRes.end = (...args: any[2]) => {\n if (args.length && typeof args[0] !== 'function') {\n contentLength += Buffer.byteLength(args[0] || '')\n }\n\n if (responseLimit && contentLength >= maxContentLength) {\n console.warn(\n `API response for ${req.url} exceeds ${bytes.format(\n maxContentLength\n )}. API Routes are meant to respond quickly. https://nextjs.org/docs/messages/api-routes-response-size-limit`\n )\n }\n\n return endResponse.apply(apiRes, args)\n }\n apiRes.status = (statusCode) => sendStatusCode(apiRes, statusCode)\n apiRes.send = (data) => sendData(apiReq, apiRes, data)\n apiRes.json = (data) => sendJson(apiRes, data)\n apiRes.redirect = (statusOrUrl: number | string, url?: string) =>\n redirect(apiRes, statusOrUrl, url)\n apiRes.setDraftMode = (options = { enable: true }) =>\n setDraftMode(apiRes, Object.assign({}, apiContext, options))\n apiRes.setPreviewData = (data, options = {}) =>\n setPreviewData(apiRes, data, Object.assign({}, apiContext, options))\n apiRes.clearPreviewData = (options = {}) =>\n clearPreviewData(apiRes, options)\n apiRes.revalidate = (\n urlPath: string,\n opts?: {\n unstable_onlyGenerated?: boolean\n }\n ) => revalidate(urlPath, opts || {}, req, apiContext)\n\n const resolver = interopDefault(resolverModule)\n let wasPiped = false\n\n if (process.env.NODE_ENV !== 'production') {\n // listen for pipe event and don't show resolve warning\n res.once('pipe', () => (wasPiped = true))\n }\n\n const apiRouteResult = await resolver(req, res)\n\n if (process.env.NODE_ENV !== 'production') {\n if (typeof apiRouteResult !== 'undefined') {\n if (apiRouteResult instanceof Response) {\n throw new Error(\n 'API route returned a Response object in the Node.js runtime, this is not supported. Please use `runtime: \"edge\"` instead: https://nextjs.org/docs/api-routes/edge-api-routes'\n )\n }\n console.warn(\n `API handler should not return a value, received ${typeof apiRouteResult}.`\n )\n }\n\n if (!externalResolver && !isResSent(res) && !wasPiped) {\n console.warn(\n `API resolved without sending a response for ${req.url}, this may result in stalled requests.`\n )\n }\n }\n } catch (err) {\n await onError?.(\n err,\n {\n method: req.method || 'GET',\n headers: req.headers,\n path: req.url || '/',\n },\n {\n routerKind: 'Pages Router',\n routePath: page || '',\n routeType: 'route',\n revalidateReason: undefined,\n }\n )\n\n if (err instanceof ApiError) {\n sendError(apiRes, err.statusCode, err.message)\n } else {\n if (dev) {\n if (isError(err)) {\n err.page = page\n }\n throw err\n }\n\n console.error(err)\n if (propagateError) {\n throw err\n }\n sendError(apiRes, 500, 'Internal Server Error')\n }\n }\n}\n","/**\n * FNV-1a Hash implementation\n * @author Travis Webb (tjwebb) <me@traviswebb.com>\n *\n * Ported from https://github.com/tjwebb/fnv-plus/blob/master/index.js\n *\n * Simplified, optimized and add modified for 52 bit, which provides a larger hash space\n * and still making use of Javascript's 53-bit integer space.\n */\nexport const fnv1a52 = (str: string) => {\n const len = str.length\n let i = 0,\n t0 = 0,\n v0 = 0x2325,\n t1 = 0,\n v1 = 0x8422,\n t2 = 0,\n v2 = 0x9ce4,\n t3 = 0,\n v3 = 0xcbf2\n\n while (i < len) {\n v0 ^= str.charCodeAt(i++)\n t0 = v0 * 435\n t1 = v1 * 435\n t2 = v2 * 435\n t3 = v3 * 435\n t2 += v0 << 8\n t3 += v1 << 8\n t1 += t0 >>> 16\n v0 = t0 & 65535\n t2 += t1 >>> 16\n v1 = t1 & 65535\n v3 = (t3 + (t2 >>> 16)) & 65535\n v2 = t2 & 65535\n }\n\n return (\n (v3 & 15) * 281474976710656 +\n v2 * 4294967296 +\n v1 * 65536 +\n (v0 ^ (v3 >> 4))\n )\n}\n\nexport const generateETag = (payload: string, weak = false) => {\n const prefix = weak ? 'W/\"' : '\"'\n return (\n prefix + fnv1a52(payload).toString(36) + payload.length.toString(36) + '\"'\n )\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport type RenderResult from './render-result'\nimport type { CacheControl } from './lib/cache-control'\n\nimport { isResSent } from '../shared/lib/utils'\nimport { generateETag } from './lib/etag'\nimport fresh from 'next/dist/compiled/fresh'\nimport { getCacheControlHeader } from './lib/cache-control'\nimport { HTML_CONTENT_TYPE_HEADER } from '../lib/constants'\n\nexport function sendEtagResponse(\n req: IncomingMessage,\n res: ServerResponse,\n etag: string | undefined\n): boolean {\n if (etag) {\n /**\n * The server generating a 304 response MUST generate any of the\n * following header fields that would have been sent in a 200 (OK)\n * response to the same request: Cache-Control, Content-Location, Date,\n * ETag, Expires, and Vary. https://tools.ietf.org/html/rfc7232#section-4.1\n */\n res.setHeader('ETag', etag)\n }\n\n if (fresh(req.headers, { etag })) {\n res.statusCode = 304\n res.end()\n return true\n }\n\n return false\n}\n\nexport async function sendRenderResult({\n req,\n res,\n result,\n generateEtags,\n poweredByHeader,\n cacheControl,\n}: {\n req: IncomingMessage\n res: ServerResponse\n result: RenderResult\n generateEtags: boolean\n poweredByHeader: boolean\n cacheControl: CacheControl | undefined\n}): Promise<void> {\n if (isResSent(res)) {\n return\n }\n\n if (poweredByHeader && result.contentType === HTML_CONTENT_TYPE_HEADER) {\n res.setHeader('X-Powered-By', 'Next.js')\n }\n\n // If cache control is already set on the response we don't\n // override it to allow users to customize it via next.config\n if (cacheControl && !res.getHeader('Cache-Control')) {\n res.setHeader('Cache-Control', getCacheControlHeader(cacheControl))\n }\n\n const payload = result.isDynamic ? null : result.toUnchunkedString()\n\n if (generateEtags && payload !== null) {\n const etag = generateETag(payload)\n if (sendEtagResponse(req, res, etag)) {\n return\n }\n }\n\n if (!res.getHeader('Content-Type') && result.contentType) {\n res.setHeader('Content-Type', result.contentType)\n }\n\n if (payload) {\n res.setHeader('Content-Length', Buffer.byteLength(payload))\n }\n\n if (req.method === 'HEAD') {\n res.end(null)\n return\n }\n\n if (payload !== null) {\n res.end(payload)\n return\n }\n\n // Pipe the render result to the response after we get a writer for it.\n await result.pipeToNodeResponse(res)\n}\n","export function interopDefault(mod: any) {\n return mod.default || mod\n}\n","import type { IncomingMessage, ServerResponse } from 'http'\nimport type { PagesAPIRouteDefinition } from '../../route-definitions/pages-api-route-definition'\nimport type { PageConfig } from '../../../types'\nimport type { ParsedUrlQuery } from 'querystring'\nimport { wrapApiHandler, type __ApiPreviewProps } from '../../api-utils'\nimport type { RouteModuleOptions } from '../route-module'\n\nimport { RouteModule, type RouteModuleHandleContext } from '../route-module'\nimport { apiResolver } from '../../api-utils/node/api-resolver'\n\ntype PagesAPIHandleFn = (\n req: IncomingMessage,\n res: ServerResponse\n) => Promise<void>\n\n/**\n * The PagesAPIModule is the type of the module exported by the bundled Pages\n * API module.\n */\nexport type PagesAPIModule = typeof import('../../../build/templates/pages-api')\n\ntype PagesAPIUserlandModule = {\n /**\n * The exported handler method.\n */\n readonly default: PagesAPIHandleFn\n\n /**\n * The exported page config.\n */\n readonly config?: PageConfig\n}\n\ntype PagesAPIRouteHandlerContext = RouteModuleHandleContext & {\n /**\n * The incoming server request in non-edge runtime.\n */\n req?: IncomingMessage\n\n /**\n * The outgoing server response in non-edge runtime.\n */\n res?: ServerResponse\n\n /**\n * The hostname for the request.\n */\n hostname?: string\n\n /**\n * Keys allowed in the revalidate call.\n */\n allowedRevalidateHeaderKeys?: string[]\n\n /**\n * Whether to trust the host header.\n */\n trustHostHeader?: boolean\n\n /**\n * The query for the request.\n */\n query: ParsedUrlQuery\n\n /**\n * The preview props used by the `preview` API.\n */\n previewProps: __ApiPreviewProps\n\n /**\n * True if the server is in development mode.\n */\n dev: boolean\n\n /**\n * Whether errors should be left uncaught to handle\n * higher up\n */\n propagateError: boolean\n\n /**\n * The page that's being rendered.\n */\n page: string\n\n /**\n * The error handler for the request.\n */\n onError?: Parameters<typeof apiResolver>[8]\n\n /**\n * whether multi-zone flag is enabled for draft mode\n */\n multiZoneDraftMode?: boolean\n\n /**\n * The relative project directory\n */\n projectDir: string\n}\n\nexport type PagesAPIRouteModuleOptions = RouteModuleOptions<\n PagesAPIRouteDefinition,\n PagesAPIUserlandModule\n>\n\nexport class PagesAPIRouteModule extends RouteModule<\n PagesAPIRouteDefinition,\n PagesAPIUserlandModule\n> {\n private apiResolverWrapped: typeof apiResolver\n\n constructor(options: PagesAPIRouteModuleOptions) {\n super(options)\n\n if (typeof options.userland.default !== 'function') {\n throw new Error(\n `Page ${options.definition.page} does not export a default function.`\n )\n }\n\n this.apiResolverWrapped = wrapApiHandler(\n options.definition.page,\n apiResolver\n )\n }\n\n /**\n *\n * @param req the incoming server request\n * @param res the outgoing server response\n * @param context the context for the render\n */\n public async render(\n req: IncomingMessage,\n res: ServerResponse,\n context: PagesAPIRouteHandlerContext\n ): Promise<void> {\n const { apiResolverWrapped } = this\n await apiResolverWrapped(\n req,\n res,\n context.query,\n this.userland,\n {\n ...context.previewProps,\n trustHostHeader: context.trustHostHeader,\n allowedRevalidateHeaderKeys: context.allowedRevalidateHeaderKeys,\n hostname: context.hostname,\n multiZoneDraftMode: context.multiZoneDraftMode,\n dev: context.dev,\n projectDir: context.projectDir,\n },\n context.propagateError,\n context.dev,\n context.page,\n context.onError\n )\n }\n}\n\nexport default PagesAPIRouteModule\n"],"names":["Object","Date","Boolean","encodeURIComponent","Map","decodeURIComponent","Number","Symbol","Array","n","r","JSON","e","i","Math","isNaN","parseFloat","parseInt","__dirname","__nccwpck_require__","TypeError","u","String","s","a","isFinite","NaN","o","RegExp","h","HTML_CONTENT_TYPE_HEADER","JSON_CONTENT_TYPE_HEADER","NEXT_QUERY_PARAM_PREFIX","NEXT_INTERCEPTION_MARKER_PREFIX","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","RSC_PREFETCH_SUFFIX","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","NEXT_DATA_SUFFIX","NEXT_META_SUFFIX","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","CACHE_ONE_YEAR","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","formatDynamicImportPath","dir","filePath","absoluteFilePath","path","pathToFileURL","toString","wrapApiHandler","page","handler","args","getTracer","setRootSpanAttribute","trace","NodeSpan","spanName","sendStatusCode","res","statusCode","redirect","statusOrUrl","url","Error","writeHead","Location","write","end","checkIsOnDemandRevalidate","req","previewProps","headers","HeadersAdapter","isOnDemandRevalidate","previewModeId","get","revalidateOnlyGenerated","has","COOKIE_NAME_PRERENDER_BYPASS","COOKIE_NAME_PRERENDER_DATA","RESPONSE_LIMIT_DEFAULT","SYMBOL_PREVIEW_DATA","SYMBOL_CLEARED_COOKIES","clearPreviewData","options","serialize","require","previous","getHeader","setHeader","isArray","expires","httpOnly","sameSite","secure","process","undefined","defineProperty","value","enumerable","ApiError","constructor","message","sendError","statusMessage","setLazyProp","prop","getter","opts","configurable","optsReset","writable","set","tryGetPreviewData","multiZoneDraftMode","cookies","encryptedPreviewData","RequestCookies","tokenPreviewData","data","jsonwebtoken","verify","previewModeSigningKey","decryptWithSecret","decryptedPreviewData","Buffer","from","previewModeEncryptionKey","parse","CIPHER_ALGORITHM","encryptWithSecret","secret","iv","crypto","salt","key","cipher","encrypted","concat","update","final","tag","getAuthTag","encryptedData","buffer","slice","CIPHER_SALT_LENGTH","decipher","setAuthTag","nodeFs","existsSync","fs","readFile","readFileSync","writeFile","f","d","mkdir","recursive","stat","NextNodeServerSpan","ReflectAdapter","target","receiver","Reflect","bind","deleteProperty","ReadonlyHeadersError","callable","Headers","Proxy","lowercased","toLowerCase","original","keys","find","seal","merge","join","append","name","existing","push","delete","forEach","callbackfn","thisArg","entries","call","values","iterator","module","t","Set","c","console","COMPILER_NAMES","client","server","edgeServer","parseReqUrl","parsedUrl","parseUrl","parsed","URL","query","searchParams","getAll","length","hash","search","pathname","href","host","hostname","auth","protocol","slashes","port","cache","WeakMap","normalizeLocalePath","locales","detectedLocale","lowercasedLocales","map","locale","segments","split","segment","index","indexOf","ensureLeadingSlash","startsWith","normalizeAppPath","route","reduce","endsWith","normalizeRscURL","replace","INTERCEPTION_ROUTE_MARKERS","isInterceptionRouteAppPath","m","TEST_ROUTE","TEST_STRICT_ROUTE","isDynamicRoute","strict","extractInterceptionRouteInformation","interceptingRoute","marker","interceptedRoute","splitInterceptingRoute","test","parsePath","hashIndex","queryIndex","hasQuery","substring","pathHasPrefix","prefix","removePathPrefix","withoutPrefix","reHasRegExp","reReplaceRegExp","escapeStringRegexp","str","removeTrailingSlash","PARAMETER_PATTERN","parseMatchedParameter","param","optional","repeat","getSafeKeyFromSegment","pattern","interceptionMarker","getSafeRouteKey","routeKeys","keyPrefix","backreferenceDuplicateKeys","cleanedKey","invalidKey","duplicateKey","interceptionPrefix","SP","performance","every","method","DecodeError","NormalizeError","PARAM_SEPARATOR","hasAdjacentParameterIssues","normalizeAdjacentParameters","normalized","safePathToRegexp","pathToRegexp","needsNormalization","routeToUse","error","normalizedRoute","retryError","safeCompile","compile","getRouteMatcher","matcherFn","re","groups","routeMatch","exec","decode","params","group","match","pos","entry","result","cleaned","item","searchParamsToUrlQuery","stringifyUrlQueryParam","getCookieParser","cookie","parseCookieFn","unescapeSegments","compileNonPath","includes","validate","normalizeNextQueryParam","decodeQueryPathParameter","slashedProtocols","dynamicParamTypesSchema","segmentSchema","flightRouterStateSchema","isInterceptionRouteRewrite","filterInternalQuery","paramKeys","isNextQueryPrefix","isNextInterceptionMarkerPrefix","detectDomainLocale","domainItems","domain","defaultLocale","some","getHostname","normalizeDataPath","NEXT_REQUEST_META","for","getRequestMeta","meta","normalizePagePath","posix","resolvedPage","normalize","STATIC_METADATA_IMAGES","icon","filename","extensions","apple","openGraph","twitter","getExtensionRegexString","staticExtensions","dynamicExtensions","DetachedPromise","resolve","reject","promise","Promise","rej","Batcher","cacheKeyFn","schedulerFn","fn","pending","create","batch","cacheKey","err","scheduleOnNextTick","cb","then","nextTick","CachedRouteKind","IncrementalCacheKind","voidCatch","Uint8Array","encoder","TextEncoder","streamFromString","ReadableStream","start","controller","enqueue","encode","close","streamFromBuffer","chunk","streamToString","stream","signal","decoder","TextDecoder","fatal","string","aborted","addPathPrefix","addPathSuffix","suffix","REGEX_LOCALHOST_HOSTNAME","parseURL","base","Internal","NextURL","input","baseOrOpts","basePath","analyze","info","getNextPathnameInfo","i18n","trailingSlash","nextConfig","pathnameNoDataPrefix","paths","buildId","parseData","i18nProvider","env","__NEXT_NO_MIDDLEWARE_URL_NORMALIZE","domainLocale","domains","formatPathname","addLocale","ignorePrefix","lower","forceLocale","formatSearch","origin","password","username","toJSON","clone","Request","ResponseAbortedName","ResponseAborted","clientComponentLoadStart","clientComponentLoadTimes","clientComponentLoadCount","isAbortError","pipeToNodeResponse","readable","waitUntilForEnd","errored","destroyed","createAbortController","response","AbortController","once","writableFinished","abort","writer","createWriterFromResponse","started","drained","onDrain","on","off","finished","WritableStream","globalThis","NEXT_OTEL_PERFORMANCE_PREFIX","metrics","getClientComponentLoaderMetrics","reset","measure","flushHeaders","ok","flush","cause","destroy","pipeTo","InvariantError","RenderResult","EMPTY","metadata","contentType","fromStatic","waitUntil","assignMetadata","assign","isNull","isDynamic","toUnchunkedString","isBuffer","chainStreams","streams","TransformStream","preventClose","nextStream","lastStream","catch","coerce","unshift","RouteKind","fromResponseCacheEntry","cacheEntry","kind","html","pageData","status","postponed","rscData","segmentData","toResponseCacheEntry","isMiss","isStale","cacheControl","ResponseCache","minimal_mode","batcher","responseGenerator","context","hasResolved","previousCacheEntry","incrementalCache","isFallback","isRoutePPREnabled","prom","previousCacheItem","expiresAt","now","routeKindToIncrementalCacheKind","routeKind","resolved","cachedResponse","isPrefetch","isRevalidating","resolveValue","newRevalidate","min","max","revalidate","newExpire","expire","MultiFileWriter","tasks","findOrCreateTask","directory","task","wait","all","flatMap","FileSystemCache","debug","NEXT_PRIVATE_DEBUG_CACHE","ctx","flushToDisk","serverDistDir","revalidatedTags","maxMemoryCacheSize","memoryCache","log","getMemoryCache","resetRequestCache","revalidateTag","tags","tagsManifest","getFilePath","fileData","mtime","lastModified","getTime","body","fetchIdx","fetchUrl","parsedData","storedTags","fetchCache","maybeSegmentData","segmentPaths","segmentsDir","segmentPath","segmentDataFilePath","cacheTags","tagsHeader","combinedTags","softTags","stringify","isAppPath","htmlPath","toRoute","IncrementalCache","dev","minimalMode","requestHeaders","getPrerenderManifest","fetchCacheKeyPrefix","CurCacheHandler","allowedRevalidateHeaderKeys","locks","hasCustomCacheHandler","cacheHandlersSymbol","_globalThis","globalCacheHandler","FetchCache","__NEXT_TEST_MAX_ISR_CACHE","disableForTestmode","NEXT_PRIVATE_TEST_PROXY","prerenderManifest","cacheControls","SharedCacheControls","preview","getPreviouslyRevalidatedTags","cacheHandler","_requestHeaders","calculateRevalidate","fromTime","floor","timeOrigin","initialRevalidateSeconds","_getPathname","lock","generateCacheKey","init","bodyChunks","_ogBody","getReader","readableBody","chunks","total","arr","arrayBuffer","offset","formData","val","text","blob","Blob","type","fromEntries","cacheString","mode","credentials","referrer","referrerPolicy","integrity","createHash","digest","cacheData","revalidateAfter","workUnitStore","workUnitAsyncStorage","resumeDataCache","getRenderResumeDataCache","memoryCacheData","fetch","workStore","workAsyncStorage","pendingRevalidatedTags","age","notFoundRoutes","prerenderResumeDataCache","getPrerenderResumeDataCache","itemSize","isImplicitBuildTimeCache","warningText","warn","handlersSymbol","handlersMapSymbol","handlersSetSymbol","reference","interopDefault","mod","default","RouterServerContextSymbol","routerServerGlobal","dynamicImportEsmDefault","id","RouteModule","userland","definition","distDir","projectDir","isDev","instrumentationOnRequestError","absoluteProjectDir","cwd","loadManifests","srcPage","loadManifestFromRelativePath","normalizedPagePath","routesManifest","buildManifest","reactLoadableManifest","nextFontManifest","clientReferenceManifest","serverActionsManifest","subresourceIntegrityManifest","serverFilesManifest","dynamicCssManifest","manifest","shouldCache","isAppRouter","handleMissing","isStaticMetadataRoute","isAppRouteRoute","isMetadataRouteFile","appDirRelativePath","pageExtensions","strictlyMatchExtensions","trailingMatcher","suffixMatcher","metadataRouteFilesRegex","normalizedAppDirRelativePath","useEval","skipParse","__RSC_MANIFEST","interceptionRoutePatterns","rewrites","beforeFiles","filter","rewrite","regex","loadCustomCacheHandlers","cacheHandlers","experimental","initializeCacheHandlers","fallback","DefaultCache","DefaultCacheHandler","RemoteCache","add","getIncrementalCache","CacheHandler","cacheMaxMemorySize","isrFlushToDisk","onRequestError","errorContext","routerServerContext","logErrorWithOriginalStack","prepare","localeResult","previewData","relative","absoluteDistDir","ensureInstrumentationRegistered","manifests","isNextDataRequest","originalPathname","originalQuery","pageIsDynamic","serverUtils","getServerUtils","caseSensitive","defaultRouteRegex","dynamicRouteMatcher","defaultRouteMatches","getNamedRouteRegex","getNamedParametrizedRoute","prefixRouteKeys","includeSuffix","includePrefix","routeKey","j","fromCharCode","hasInterceptionMarker","paramMatches","namedParameterizedRoute","namedRegex","excludeOptionalTrailingSlash","getRouteRegex","parameterizedRoute","getParametrizedRoute","groupIndex","markerMatch","handleRewrites","rewriteParams","fsPathname","checkRewrite","matcher","getPathMatch","regexp","delimiter","sensitive","regexpToFunction","regexModifier","source","flags","removeUnnamedParams","missing","hasParams","matchHas","hasMatch","hasItem","getSafeParamName","paramName","newParamName","charCode","charCodeAt","matches","groupKey","stateHeader","getSelectedParams","currentTree","parallelRoute","isDynamicParameter","segmentValue","parseAndValidateFlightRouterState","state","assert","parsedDestination","destQuery","prepareDestination","destHostnameCompiler","newUrl","parseDestination","escaped","destination","parseRelativeUrl","parseQuery","globalBase","resolvedBase","parsedURL","destHostname","destPath","destParams","destPathParamKeys","destHostnameParamKeys","destPathCompiler","strOrArray","appendParamsToQuery","actualValue","nextInternalLocale","dynamicParams","afterFiles","matchesPage","fsPathnameNoSlash","normalizeQueryParams","routeParamKeys","normalizedKey","v","getParamsFromRouteMatches","routeMatchesHeader","routeMatches","obj","URLSearchParams","keyName","normalizeDynamicRouteParams","ignoreMissingOptional","hasValidParams","defaultValue","isOptional","isDefaultValue","defaultVal","normalizeCdnUrl","_parsedUrl","formatUrl","urlObj","querystring","interpolateDynamicPath","paramValue","builtParam","replaceAll","__NEXT_TRAILING_SLASH","addRequestMeta","request","rewriteParamKeys","paramsMatch","paramsResult","combinedParamKeys","originalValue","queryValue","queryResult","paramsToInterpolate","isDraftMode","config","normalizedSrcPage","resolvedPathname","seg","char","_","getResponseCache","responseCache","handleResponse","purpose","isError","parseBody","limit","parameters","encoding","charset","getRawBody","parseJson","qs","isValidData","urlPath","revalidateHeaders","unstable_onlyGenerated","trustHostHeader","internalRevalidate","cacheHeader","toUpperCase","apiResolver","resolverModule","apiContext","propagateError","onError","bodyParser","api","responseLimit","externalResolver","apiReq","sizeLimit","contentLength","maxContentLength","bytes","writeData","apiRes","endResponse","byteLength","apply","send","sendData","removeHeader","Stream","pipe","isJSONLike","stringifiedBody","etag","generateETag","payload","weak","fnv1a52","len","t0","v0","t1","v1","t2","v2","t3","v3","fresh","json","setDraftMode","enable","setPreviewData","sign","algorithm","maxAge","expiresIn","resolver","routerKind","routePath","routeType","revalidateReason","PagesAPIRouteModule","apiResolverWrapped","render"],"mappings":"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","ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101]}