Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
1 line
No EOL
607 KiB
Text
1 line
No EOL
607 KiB
Text
{"version":3,"file":"pages-api.runtime.dev.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/compiled/safe-stable-stringify/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/headers.ts","webpack://next/./dist/src/server/web/spec-extension/adapters/reflect.ts","webpack://next/./dist/src/shared/lib/isomorphic/path.js","webpack://next/./dist/src/shared/lib/modern-browserslist-target.js","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/invariant-error.ts","webpack://next/./dist/src/shared/lib/router/utils/get-dynamic-param.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/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/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/lib/lru-cache.ts","webpack://next/./dist/src/server/lib/cache-handlers/default.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/lib/generate-interception-routes-rewrites.ts","webpack://next/./dist/src/client/components/app-router-headers.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/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})();","(function(){\"use strict\";var e={879:function(e,t){const{hasOwnProperty:n}=Object.prototype;const r=configure();r.configure=configure;r.stringify=r;r.default=r;t.stringify=r;t.configure=configure;e.exports=r;const i=/[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/;function strEscape(e){if(e.length<5e3&&!i.test(e)){return`\"${e}\"`}return JSON.stringify(e)}function sort(e,t){if(e.length>200||t){return e.sort(t)}for(let t=1;t<e.length;t++){const n=e[t];let r=t;while(r!==0&&e[r-1]>n){e[r]=e[r-1];r--}e[r]=n}return e}const f=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(Object.getPrototypeOf(new Int8Array)),Symbol.toStringTag).get;function isTypedArrayWithEntries(e){return f.call(e)!==undefined&&e.length!==0}function stringifyTypedArray(e,t,n){if(e.length<n){n=e.length}const r=t===\",\"?\"\":\" \";let i=`\"0\":${r}${e[0]}`;for(let f=1;f<n;f++){i+=`${t}\"${f}\":${r}${e[f]}`}return i}function getCircularValueOption(e){if(n.call(e,\"circularValue\")){const t=e.circularValue;if(typeof t===\"string\"){return`\"${t}\"`}if(t==null){return t}if(t===Error||t===TypeError){return{toString(){throw new TypeError(\"Converting circular structure to JSON\")}}}throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')}return'\"[Circular]\"'}function getDeterministicOption(e){let t;if(n.call(e,\"deterministic\")){t=e.deterministic;if(typeof t!==\"boolean\"&&typeof t!==\"function\"){throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')}}return t===undefined?true:t}function getBooleanOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"boolean\"){throw new TypeError(`The \"${t}\" argument must be of type boolean`)}}return r===undefined?true:r}function getPositiveIntegerOption(e,t){let r;if(n.call(e,t)){r=e[t];if(typeof r!==\"number\"){throw new TypeError(`The \"${t}\" argument must be of type number`)}if(!Number.isInteger(r)){throw new TypeError(`The \"${t}\" argument must be an integer`)}if(r<1){throw new RangeError(`The \"${t}\" argument must be >= 1`)}}return r===undefined?Infinity:r}function getItemCount(e){if(e===1){return\"1 item\"}return`${e} items`}function getUniqueReplacerSet(e){const t=new Set;for(const n of e){if(typeof n===\"string\"||typeof n===\"number\"){t.add(String(n))}}return t}function getStrictOption(e){if(n.call(e,\"strict\")){const t=e.strict;if(typeof t!==\"boolean\"){throw new TypeError('The \"strict\" argument must be of type boolean')}if(t){return e=>{let t=`Object can not safely be stringified. Received type ${typeof e}`;if(typeof e!==\"function\")t+=` (${e.toString()})`;throw new Error(t)}}}}function configure(e){e={...e};const t=getStrictOption(e);if(t){if(e.bigint===undefined){e.bigint=false}if(!(\"circularValue\"in e)){e.circularValue=Error}}const n=getCircularValueOption(e);const r=getBooleanOption(e,\"bigint\");const i=getDeterministicOption(e);const f=typeof i===\"function\"?i:undefined;const u=getPositiveIntegerOption(e,\"maximumDepth\");const o=getPositiveIntegerOption(e,\"maximumBreadth\");function stringifyFnReplacer(e,s,l,c,a,g){let p=s[e];if(typeof p===\"object\"&&p!==null&&typeof p.toJSON===\"function\"){p=p.toJSON(e)}p=c.call(s,e,p);switch(typeof p){case\"string\":return strEscape(p);case\"object\":{if(p===null){return\"null\"}if(l.indexOf(p)!==-1){return n}let e=\"\";let t=\",\";const r=g;if(Array.isArray(p)){if(p.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(p);if(a!==\"\"){g+=a;e+=`\\n${g}`;t=`,\\n${g}`}const n=Math.min(p.length,o);let i=0;for(;i<n-1;i++){const n=stringifyFnReplacer(String(i),p,l,c,a,g);e+=n!==undefined?n:\"null\";e+=t}const f=stringifyFnReplacer(String(i),p,l,c,a,g);e+=f!==undefined?f:\"null\";if(p.length-1>o){const n=p.length-o-1;e+=`${t}\"... ${getItemCount(n)} not stringified\"`}if(a!==\"\"){e+=`\\n${r}`}l.pop();return`[${e}]`}let s=Object.keys(p);const y=s.length;if(y===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let d=\"\";let h=\"\";if(a!==\"\"){g+=a;t=`,\\n${g}`;d=\" \"}const $=Math.min(y,o);if(i&&!isTypedArrayWithEntries(p)){s=sort(s,f)}l.push(p);for(let n=0;n<$;n++){const r=s[n];const i=stringifyFnReplacer(r,p,l,c,a,g);if(i!==undefined){e+=`${h}${strEscape(r)}:${d}${i}`;h=t}}if(y>o){const n=y-o;e+=`${h}\"...\":${d}\"${getItemCount(n)} not stringified\"`;h=t}if(a!==\"\"&&h.length>1){e=`\\n${g}${e}\\n${r}`}l.pop();return`{${e}}`}case\"number\":return isFinite(p)?String(p):t?t(p):\"null\";case\"boolean\":return p===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(p)}default:return t?t(p):undefined}}function stringifyArrayReplacer(e,i,f,s,l,c){if(typeof i===\"object\"&&i!==null&&typeof i.toJSON===\"function\"){i=i.toJSON(e)}switch(typeof i){case\"string\":return strEscape(i);case\"object\":{if(i===null){return\"null\"}if(f.indexOf(i)!==-1){return n}const e=c;let t=\"\";let r=\",\";if(Array.isArray(i)){if(i.length===0){return\"[]\"}if(u<f.length+1){return'\"[Array]\"'}f.push(i);if(l!==\"\"){c+=l;t+=`\\n${c}`;r=`,\\n${c}`}const n=Math.min(i.length,o);let a=0;for(;a<n-1;a++){const e=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=e!==undefined?e:\"null\";t+=r}const g=stringifyArrayReplacer(String(a),i[a],f,s,l,c);t+=g!==undefined?g:\"null\";if(i.length-1>o){const e=i.length-o-1;t+=`${r}\"... ${getItemCount(e)} not stringified\"`}if(l!==\"\"){t+=`\\n${e}`}f.pop();return`[${t}]`}f.push(i);let a=\"\";if(l!==\"\"){c+=l;r=`,\\n${c}`;a=\" \"}let g=\"\";for(const e of s){const n=stringifyArrayReplacer(e,i[e],f,s,l,c);if(n!==undefined){t+=`${g}${strEscape(e)}:${a}${n}`;g=r}}if(l!==\"\"&&g.length>1){t=`\\n${c}${t}\\n${e}`}f.pop();return`{${t}}`}case\"number\":return isFinite(i)?String(i):t?t(i):\"null\";case\"boolean\":return i===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(i)}default:return t?t(i):undefined}}function stringifyIndent(e,s,l,c,a){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifyIndent(e,s,l,c,a)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}const t=a;if(Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);a+=c;let e=`\\n${a}`;const n=`,\\n${a}`;const r=Math.min(s.length,o);let i=0;for(;i<r-1;i++){const t=stringifyIndent(String(i),s[i],l,c,a);e+=t!==undefined?t:\"null\";e+=n}const f=stringifyIndent(String(i),s[i],l,c,a);e+=f!==undefined?f:\"null\";if(s.length-1>o){const t=s.length-o-1;e+=`${n}\"... ${getItemCount(t)} not stringified\"`}e+=`\\n${t}`;l.pop();return`[${e}]`}let r=Object.keys(s);const g=r.length;if(g===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}a+=c;const p=`,\\n${a}`;let y=\"\";let d=\"\";let h=Math.min(g,o);if(isTypedArrayWithEntries(s)){y+=stringifyTypedArray(s,p,o);r=r.slice(s.length);h-=s.length;d=p}if(i){r=sort(r,f)}l.push(s);for(let e=0;e<h;e++){const t=r[e];const n=stringifyIndent(t,s[t],l,c,a);if(n!==undefined){y+=`${d}${strEscape(t)}: ${n}`;d=p}}if(g>o){const e=g-o;y+=`${d}\"...\": \"${getItemCount(e)} not stringified\"`;d=p}if(d!==\"\"){y=`\\n${a}${y}\\n${t}`}l.pop();return`{${y}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringifySimple(e,s,l){switch(typeof s){case\"string\":return strEscape(s);case\"object\":{if(s===null){return\"null\"}if(typeof s.toJSON===\"function\"){s=s.toJSON(e);if(typeof s!==\"object\"){return stringifySimple(e,s,l)}if(s===null){return\"null\"}}if(l.indexOf(s)!==-1){return n}let t=\"\";const r=s.length!==undefined;if(r&&Array.isArray(s)){if(s.length===0){return\"[]\"}if(u<l.length+1){return'\"[Array]\"'}l.push(s);const e=Math.min(s.length,o);let n=0;for(;n<e-1;n++){const e=stringifySimple(String(n),s[n],l);t+=e!==undefined?e:\"null\";t+=\",\"}const r=stringifySimple(String(n),s[n],l);t+=r!==undefined?r:\"null\";if(s.length-1>o){const e=s.length-o-1;t+=`,\"... ${getItemCount(e)} not stringified\"`}l.pop();return`[${t}]`}let c=Object.keys(s);const a=c.length;if(a===0){return\"{}\"}if(u<l.length+1){return'\"[Object]\"'}let g=\"\";let p=Math.min(a,o);if(r&&isTypedArrayWithEntries(s)){t+=stringifyTypedArray(s,\",\",o);c=c.slice(s.length);p-=s.length;g=\",\"}if(i){c=sort(c,f)}l.push(s);for(let e=0;e<p;e++){const n=c[e];const r=stringifySimple(n,s[n],l);if(r!==undefined){t+=`${g}${strEscape(n)}:${r}`;g=\",\"}}if(a>o){const e=a-o;t+=`${g}\"...\":\"${getItemCount(e)} not stringified\"`}l.pop();return`{${t}}`}case\"number\":return isFinite(s)?String(s):t?t(s):\"null\";case\"boolean\":return s===true?\"true\":\"false\";case\"undefined\":return undefined;case\"bigint\":if(r){return String(s)}default:return t?t(s):undefined}}function stringify(e,t,n){if(arguments.length>1){let r=\"\";if(typeof n===\"number\"){r=\" \".repeat(Math.min(n,10))}else if(typeof n===\"string\"){r=n.slice(0,10)}if(t!=null){if(typeof t===\"function\"){return stringifyFnReplacer(\"\",{\"\":e},[],t,r,\"\")}if(Array.isArray(t)){return stringifyArrayReplacer(\"\",e,[],getUniqueReplacerSet(t),r,\"\")}}if(r.length!==0){return stringifyIndent(\"\",e,[],r,\"\")}}return stringifySimple(\"\",e,[])}return stringify}}};var t={};function __nccwpck_require__(n){var r=t[n];if(r!==undefined){return r.exports}var i=t[n]={exports:{}};var f=true;try{e[n](i,i.exports,__nccwpck_require__);f=false}finally{if(f)delete t[n]}return i.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var n=__nccwpck_require__(879);module.exports=n})();","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// Patterns to detect proxy files (replacement for middleware)\nexport const PROXY_FILENAME = 'proxy'\nexport const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_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\nexport const WEB_SOCKET_MAX_RECONNECTIONS = 12\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\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 getRequestHandlerWithMetadata = 'NextServer.getRequestHandlerWithMetadata',\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","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","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","/**\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/**\n * These are the minimum browser versions that we consider \"modern\" and thus compile for by default.\n * This list was generated using `pnpm browserslist \"baseline widely available\"` on 2025-10-01.\n */\nconst MODERN_BROWSERSLIST_TARGET = [\n 'chrome 111',\n 'edge 111',\n 'firefox 111',\n 'safari 16.4',\n]\n\nmodule.exports = MODERN_BROWSERSLIST_TARGET\n","// 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\n// Re-export entry constants for backward compatibility\nexport {\n UNDERSCORE_NOT_FOUND_ROUTE,\n UNDERSCORE_NOT_FOUND_ROUTE_ENTRY,\n UNDERSCORE_GLOBAL_ERROR_ROUTE,\n UNDERSCORE_GLOBAL_ERROR_ROUTE_ENTRY,\n} from './entry-constants'\n\nexport enum AdapterOutputType {\n /**\n * `PAGES` represents all the React pages that are under `pages/`.\n */\n PAGES = 'PAGES',\n\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 /**\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 * `PRERENDER` represents an ISR enabled route that might\n * have a seeded cache entry or fallback generated during build\n */\n PRERENDER = 'PRERENDER',\n\n /**\n * `STATIC_FILE` represents a static file (ie /_next/static)\n */\n STATIC_FILE = 'STATIC_FILE',\n\n /**\n * `MIDDLEWARE` represents the middleware output if present\n */\n MIDDLEWARE = 'MIDDLEWARE',\n}\n\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'\n\nexport type PHASE_TYPE =\n | typeof PHASE_INFO\n | typeof PHASE_TEST\n | typeof PHASE_EXPORT\n | typeof PHASE_PRODUCTION_BUILD\n | typeof PHASE_PRODUCTION_SERVER\n | typeof PHASE_DEVELOPMENT_SERVER\n\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 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 // process.features can be undefined on Edge runtime\n // TODO: Remove `as any` once we bump @types/node to v22.10.0+\n ...((process?.features as any)?.typescript ? ['next.config.mts'] : []),\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/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_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 { FlightRouterState, Segment } from './app-router-types'\n\nexport function getSegmentValue(segment: Segment) {\n return Array.isArray(segment) ? segment[1] : segment\n}\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 function computeSelectedLayoutSegment(\n segments: string[] | null,\n parallelRouteKey: string\n): string | null {\n if (!segments || segments.length === 0) {\n return null\n }\n\n // For 'children', use first segment; for other parallel routes, use last segment\n const rawSegment =\n parallelRouteKey === 'children'\n ? segments[0]\n : segments[segments.length - 1]\n\n // If the default slot is showing, return null since it's not technically \"selected\" (it's a fallback)\n // Returning an internal value like `__DEFAULT__` would be confusing\n return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment\n}\n\n/** Get the canonical parameters from the current level to the leaf node. */\nexport function getSelectedLayoutSegmentPath(\n tree: FlightRouterState,\n parallelRouteKey: string,\n first = true,\n segmentPath: string[] = []\n): string[] {\n let node: FlightRouterState\n if (first) {\n // Use the provided parallel route key on the first parallel route\n node = tree[1][parallelRouteKey]\n } else {\n // After first parallel route prefer children, if there's no children pick the first parallel route.\n const parallelRoutes = tree[1]\n node = parallelRoutes.children ?? Object.values(parallelRoutes)[0]\n }\n\n if (!node) return segmentPath\n const segment = node[0]\n\n let segmentValue = getSegmentValue(segment)\n\n if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {\n return segmentPath\n }\n\n segmentPath.push(segmentValue)\n\n return getSelectedLayoutSegmentPath(\n node,\n parallelRouteKey,\n false,\n segmentPath\n )\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\ntype InterceptionRouteInformation = {\n /**\n * The intercepting route. This is the route that is being intercepted or the\n * route that the user was coming from. This is matched by the Next-Url\n * header.\n */\n interceptingRoute: string\n\n /**\n * The intercepted route. This is the route that is being intercepted or the\n * route that the user is going to. This is matched by the request pathname.\n */\n interceptedRoute: string\n}\n\nexport function extractInterceptionRouteInformation(\n path: string\n): InterceptionRouteInformation {\n let interceptingRoute: string | undefined\n let marker: (typeof INTERCEPTION_ROUTE_MARKERS)[number] | undefined\n let 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","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 { DynamicParam } from '../../../../server/app-render/app-render'\nimport type { LoaderTree } from '../../../../server/lib/app-dir-module'\nimport type { OpaqueFallbackRouteParams } from '../../../../server/request/fallback-params'\nimport type { Params } from '../../../../server/request/params'\nimport type { DynamicParamTypesShort } from '../../app-router-types'\nimport { InvariantError } from '../../invariant-error'\nimport { parseLoaderTree } from './parse-loader-tree'\nimport { getSegmentParam } from './get-segment-param'\n\n/**\n * Gets the value of a param from the params object. This correctly handles the\n * case where the param is a fallback route param and encodes the resulting\n * value.\n *\n * @param interpolatedParams - The params object.\n * @param segmentKey - The key of the segment.\n * @param fallbackRouteParams - The fallback route params.\n * @returns The value of the param.\n */\nfunction getParamValue(\n interpolatedParams: Params,\n segmentKey: string,\n fallbackRouteParams: OpaqueFallbackRouteParams | null\n) {\n let value = interpolatedParams[segmentKey]\n\n if (fallbackRouteParams?.has(segmentKey)) {\n // We know that the fallback route params has the segment key because we\n // checked that above.\n const [searchValue] = fallbackRouteParams.get(segmentKey)!\n value = searchValue\n } else if (Array.isArray(value)) {\n value = value.map((i) => encodeURIComponent(i))\n } else if (typeof value === 'string') {\n value = encodeURIComponent(value)\n }\n\n return value\n}\n\nexport function interpolateParallelRouteParams(\n loaderTree: LoaderTree,\n params: Params,\n pagePath: string,\n fallbackRouteParams: OpaqueFallbackRouteParams | null\n) {\n const interpolated = structuredClone(params)\n\n // Stack-based traversal with depth tracking\n const stack: Array<{ tree: LoaderTree; depth: number }> = [\n { tree: loaderTree, depth: 0 },\n ]\n\n // Derive value from pagePath based on depth and parameter type\n const pathSegments = pagePath.split('/').slice(1) // Remove first empty string\n\n while (stack.length > 0) {\n const { tree, depth } = stack.pop()!\n const { segment, parallelRoutes } = parseLoaderTree(tree)\n\n // Check if current segment contains a parameter\n const segmentParam = getSegmentParam(segment)\n if (\n segmentParam &&\n !interpolated.hasOwnProperty(segmentParam.param) &&\n // If the param is in the fallback route params, we don't need to\n // interpolate it because it's already marked as being unknown.\n !fallbackRouteParams?.has(segmentParam.param)\n ) {\n switch (segmentParam.type) {\n case 'catchall':\n case 'optional-catchall':\n case 'catchall-intercepted':\n // For catchall parameters, take all remaining segments from this depth\n const remainingSegments = pathSegments.slice(depth)\n\n // Process each segment to handle any dynamic params\n const processedSegments = remainingSegments\n .flatMap((pathSegment) => {\n const param = getSegmentParam(pathSegment)\n // If the segment matches a param, return the param value otherwise,\n // it's a static segment, so just return that. We don't use the\n // `getParamValue` function here because we don't want the values to\n // be encoded, that's handled on get by the `getDynamicParam`\n // function.\n return param ? interpolated[param.param] : pathSegment\n })\n .filter((s) => s !== undefined)\n\n if (processedSegments.length > 0) {\n interpolated[segmentParam.param] = processedSegments\n }\n break\n case 'dynamic':\n case 'dynamic-intercepted':\n // For regular dynamic parameters, take the segment at this depth\n if (depth < pathSegments.length) {\n const pathSegment = pathSegments[depth]\n const param = getSegmentParam(pathSegment)\n\n interpolated[segmentParam.param] = param\n ? interpolated[param.param]\n : pathSegment\n }\n break\n default:\n segmentParam.type satisfies never\n }\n }\n\n // Calculate next depth - increment if this is not a route group and not empty\n let nextDepth = depth\n const isRouteGroup = segment.startsWith('(') && segment.endsWith(')')\n if (!isRouteGroup && segment !== '') {\n nextDepth++\n }\n\n // Add all parallel routes to the stack for processing\n for (const route of Object.values(parallelRoutes)) {\n stack.push({ tree: route, depth: nextDepth })\n }\n }\n\n return interpolated\n}\n\n/**\n *\n * Shared logic on client and server for creating a dynamic param value.\n *\n * This code needs to be shared with the client so it can extract dynamic route\n * params from the URL without a server request.\n *\n * Because everything in this module is sent to the client, we should aim to\n * keep this code as simple as possible. The special case handling for catchall\n * and optional is, alas, unfortunate.\n */\nexport function getDynamicParam(\n interpolatedParams: Params,\n segmentKey: string,\n dynamicParamType: DynamicParamTypesShort,\n fallbackRouteParams: OpaqueFallbackRouteParams | null\n): DynamicParam {\n let value: string | string[] | undefined = getParamValue(\n interpolatedParams,\n segmentKey,\n fallbackRouteParams\n )\n\n // handle the case where an optional catchall does not have a value,\n // e.g. `/dashboard/[[...slug]]` when requesting `/dashboard`\n if (!value || value.length === 0) {\n if (dynamicParamType === 'oc') {\n return {\n param: segmentKey,\n value: null,\n type: dynamicParamType,\n treeSegment: [segmentKey, '', dynamicParamType],\n }\n }\n\n throw new InvariantError(\n `Missing value for segment key: \"${segmentKey}\" with dynamic param type: ${dynamicParamType}`\n )\n }\n\n return {\n param: segmentKey,\n // The value that is passed to user code.\n value,\n // The value that is rendered in the router tree.\n treeSegment: [\n segmentKey,\n Array.isArray(value) ? value.join('/') : value,\n dynamicParamType,\n ],\n type: dynamicParamType,\n }\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 */\nexport const 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 */\nexport function 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","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'\nimport { PARAMETER_PATTERN, parseMatchedParameter } from './get-dynamic-param'\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\nexport type RegexReference = {\n names: Record<string, string>\n intercepted: Record<string, string>\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 /**\n * If provided, this will be used as the reference for the dynamic parameter\n * keys instead of generating them in context. This is currently only used for\n * interception routes.\n */\n reference?: RegexReference\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\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 {\n key,\n pattern: optional\n ? `(?:/${interceptionPrefix}${pattern})?`\n : `/${interceptionPrefix}${pattern}`,\n cleanedKey: cleanedKey,\n optional,\n repeat,\n }\n}\n\nfunction getNamedParametrizedRoute(\n route: string,\n prefixRouteKeys: boolean,\n includeSuffix: boolean,\n includePrefix: boolean,\n backreferenceDuplicateKeys: boolean,\n reference: RegexReference = { names: {}, intercepted: {} }\n) {\n const getSafeRouteKey = buildGetSafeRouteKey()\n const routeKeys: { [named: string]: string } = {}\n\n const segments: string[] = []\n const inverseParts: string[] = []\n\n // Ensure we don't mutate the original reference object.\n reference = structuredClone(reference)\n\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 const interceptionMarker = hasInterceptionMarker\n ? paramMatches?.[1]\n : undefined\n\n let keyPrefix: string | undefined\n if (interceptionMarker && paramMatches?.[2]) {\n keyPrefix = prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n reference.intercepted[paramMatches[2]] = interceptionMarker\n } else if (paramMatches?.[2] && reference.intercepted[paramMatches[2]]) {\n keyPrefix = prefixRouteKeys ? NEXT_INTERCEPTION_MARKER_PREFIX : undefined\n } else {\n keyPrefix = prefixRouteKeys ? NEXT_QUERY_PARAM_PREFIX : undefined\n }\n\n if (interceptionMarker && paramMatches && paramMatches[2]) {\n // If there's an interception marker, add it to the segments.\n const { key, pattern, cleanedKey, repeat, optional } =\n getSafeKeyFromSegment({\n getSafeRouteKey,\n interceptionMarker,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n })\n\n segments.push(pattern)\n inverseParts.push(\n `/${paramMatches[1]}:${reference.names[key] ?? cleanedKey}${repeat ? (optional ? '*' : '+') : ''}`\n )\n reference.names[key] ??= cleanedKey\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 inverseParts.push(`/${paramMatches[1]}`)\n }\n\n const { key, pattern, cleanedKey, repeat, optional } =\n getSafeKeyFromSegment({\n getSafeRouteKey,\n segment: paramMatches[2],\n routeKeys,\n keyPrefix,\n backreferenceDuplicateKeys,\n })\n\n // Remove the leading slash if includePrefix already added it.\n let s = pattern\n if (includePrefix && paramMatches[1]) {\n s = s.substring(1)\n }\n\n segments.push(s)\n inverseParts.push(\n `/:${reference.names[key] ?? cleanedKey}${repeat ? (optional ? '*' : '+') : ''}`\n )\n reference.names[key] ??= cleanedKey\n } else {\n segments.push(`/${escapeStringRegexp(segment)}`)\n inverseParts.push(`/${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 inverseParts.push(paramMatches[3])\n }\n }\n\n return {\n namedParameterizedRoute: segments.join(''),\n routeKeys,\n pathToRegexpPattern: inverseParts.join(''),\n reference,\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 options.reference\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 pathToRegexpPattern: result.pathToRegexpPattern,\n reference: result.reference,\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 undefined\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 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 */\nexport const 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 compiled pathname.\n * This removes separators that were inserted by normalizeAdjacentParameters\n * to satisfy path-to-regexp validation.\n *\n * Only removes separators in the specific contexts where they were inserted:\n * - After interception route markers: (.)_NEXTSEP_ -> (.)\n *\n * This targeted approach ensures we don't accidentally remove the separator\n * from legitimate user content.\n */\nexport function stripNormalizedSeparators(pathname: string): string {\n // Remove separator after interception route markers\n // Pattern: (.)_NEXTSEP_ -> (.), (..)_NEXTSEP_ -> (..), etc.\n // The separator appears after the closing paren of interception markers\n return pathname.replace(new RegExp(`\\\\)${PARAM_SEPARATOR}`, 'g'), ')')\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 stripNormalizedSeparators,\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 * When normalization is applied, the returned compiler function automatically strips\n * the internal separator from the output URL.\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 const compiler = compile(routeToUse, options)\n\n // If we normalized the route, wrap the compiler to strip separators from output\n // The normalization inserts _NEXTSEP_ as a literal string in the pattern to satisfy\n // path-to-regexp validation, but we don't want it in the final compiled URL\n if (needsNormalization) {\n return (params: any) => {\n return stripNormalizedSeparators(compiler(params))\n }\n }\n\n return compiler\n } catch (error) {\n // Only try normalization if we haven't already normalized\n if (!needsNormalization) {\n try {\n const normalizedRoute = normalizeAdjacentParameters(route)\n const compiler = compile(normalizedRoute, options)\n\n // Wrap the compiler to strip separators from output\n return (params: any) => {\n return stripNormalizedSeparators(compiler(params))\n }\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 let search = parsed.search\n if (search) {\n search = unescapeSegments(search)\n }\n\n let origin = parsed.origin\n if (origin) {\n origin = unescapeSegments(origin)\n }\n\n return {\n ...parsed,\n pathname,\n hostname,\n href,\n hash,\n search,\n origin,\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 {\n hostname: destHostname,\n query: destQuery,\n search: destSearch,\n } = 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 parsedDestination.search = destSearch\n ? compileNonPath(destSearch, args.params)\n : ''\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 { 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'\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 value === 'index' ||\n value === `[[...${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: DeepReadonly<UrlWithParsedQuery>\n ) {\n // Here we deep clone the parsedUrl to avoid mutating the original. We also\n // cast this to a mutable type so we can mutate it within this scope.\n const rewrittenParsedUrl = structuredClone(parsedUrl) as UrlWithParsedQuery\n const rewriteParams: Record<string, string> = {}\n let fsPathname = rewrittenParsedUrl.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 (!rewrittenParsedUrl.pathname) return false\n\n let params = matcher(rewrittenParsedUrl.pathname)\n\n if ((rewrite.has || rewrite.missing) && params) {\n const hasParams = matchHas(\n req,\n rewrittenParsedUrl.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 const { parsedDestination, destQuery } = prepareDestination({\n appendParamsToQuery: true,\n destination: rewrite.destination,\n params: params,\n query: rewrittenParsedUrl.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(rewrittenParsedUrl.query, parsedDestination.query)\n delete (parsedDestination as any).query\n\n Object.assign(rewrittenParsedUrl, parsedDestination)\n\n fsPathname = rewrittenParsedUrl.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 rewrittenParsedUrl.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 rewrittenParsedUrl.query = {\n ...rewrittenParsedUrl.query,\n ...dynamicParams,\n }\n return true\n }\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\n return { rewriteParams, rewrittenParsedUrl }\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","import { pathHasPrefix } from '../router/utils/path-has-prefix'\n\n/**\n * strip _next/data/<build-id>/ prefix and .json suffix\n */\nexport function normalizeDataPath(pathname: string) {\n if (!pathHasPrefix(pathname || '/', '/_next/data')) {\n return pathname\n }\n pathname = pathname\n .replace(/\\/_next\\/data\\/[^/]{1,}/, '')\n .replace(/\\.json$/, '')\n\n if (pathname === '/index') {\n return '/'\n }\n return pathname\n}\n","import 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 {\n ResponseCacheEntry,\n ServerComponentsHmrCache,\n} from './response-cache'\nimport type { PagesDevOverlayBridgeType } from '../next-devtools/userspace/pages/pages-dev-overlay-setup'\nimport type { OpaqueFallbackRouteParams } from './request/fallback-params'\nimport type { IncrementalCache } from './lib/incremental-cache'\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\n/**\n * The callback function to call when a response cache entry was generated or\n * looked up in the cache. When it returns true, the server assumes that the\n * handler has already responded to the request and will not do so itself.\n */\nexport type OnCacheEntryHandler = (\n /**\n * The response cache entry that was generated or looked up in the cache.\n */\n cacheEntry: ResponseCacheEntry,\n\n /**\n * The request metadata.\n */\n requestMeta: {\n /**\n * The URL that was used to make the request.\n */\n url: string | undefined\n }\n) => Promise<boolean | void> | boolean | void\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?: IncrementalCache\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 * @deprecated Use `onCacheEntryV2` instead.\n */\n onCacheEntry?: OnCacheEntryHandler\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 onCacheEntryV2?: OnCacheEntryHandler\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 relative project dir the server is running in from project root\n */\n relativeProjectDir?: string\n\n /**\n * The dist directory the server is currently using\n */\n distDir?: string\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 * 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 * DEV only: The fallback params that should be used when validating prerenders during dev\n */\n devValidatingFallbackParams?: OpaqueFallbackRouteParams\n\n /**\n * DEV only: Request timings in process.hrtime.bigint()\n */\n devRequestTimingStart?: bigint\n devRequestTimingMiddlewareStart?: bigint\n devRequestTimingMiddlewareEnd?: bigint\n devRequestTimingInternalsEnd?: bigint\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 & NextQueryMetadata\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 `/opengraph-image.png`, `/opengraph-image.ts`\nexport const getExtensionRegexString = (\n staticExtensions: readonly string[],\n dynamicExtensions: readonly string[] | null\n) => {\n let result: string\n // If there's no possible multi dynamic routes, will not match any <name>[].<ext> files\n if (!dynamicExtensions || dynamicExtensions.length === 0) {\n result = `(\\\\.(?:${staticExtensions.join('|')}))`\n } else {\n result = `(?:\\\\.(${staticExtensions.join('|')})|(\\\\.(${dynamicExtensions.join('|')})))`\n }\n return result\n}\n\n/**\n * Matches the static metadata files, e.g. /robots.txt, /sitemap.xml, /favicon.ico, etc.\n * @param appDirRelativePath the relative file path to app/\n * @returns if the path is a static metadata file route\n */\nexport function isStaticMetadataFile(appDirRelativePath: string) {\n return isMetadataRouteFile(appDirRelativePath, [], true)\n}\n\n// Pre-compiled static regexes for common cases\nconst FAVICON_REGEX = /^[\\\\/]favicon\\.ico$/\nconst ROBOTS_TXT_REGEX = /^[\\\\/]robots\\.txt$/\nconst MANIFEST_JSON_REGEX = /^[\\\\/]manifest\\.json$/\nconst MANIFEST_WEBMANIFEST_REGEX = /^[\\\\/]manifest\\.webmanifest$/\nconst SITEMAP_XML_REGEX = /[\\\\/]sitemap\\.xml$/\n\n// Cache for compiled regex patterns based on parameters\nconst compiledRegexCache = new Map<string, RegExp[]>()\n\n// Fast path checks for common metadata files\nfunction fastPathCheck(normalizedPath: string): boolean | null {\n // Check favicon.ico first (most common)\n if (FAVICON_REGEX.test(normalizedPath)) return true\n\n // Check other common static files\n if (ROBOTS_TXT_REGEX.test(normalizedPath)) return true\n if (MANIFEST_JSON_REGEX.test(normalizedPath)) return true\n if (MANIFEST_WEBMANIFEST_REGEX.test(normalizedPath)) return true\n if (SITEMAP_XML_REGEX.test(normalizedPath)) return true\n\n // Quick negative check - if it doesn't contain any metadata keywords, skip\n if (\n !normalizedPath.includes('robots') &&\n !normalizedPath.includes('manifest') &&\n !normalizedPath.includes('sitemap') &&\n !normalizedPath.includes('icon') &&\n !normalizedPath.includes('apple-icon') &&\n !normalizedPath.includes('opengraph-image') &&\n !normalizedPath.includes('twitter-image') &&\n !normalizedPath.includes('favicon')\n ) {\n return false\n }\n\n return null // Continue with full regex matching\n}\n\nfunction getCompiledRegexes(\n pageExtensions: PageExtensions,\n strictlyMatchExtensions: boolean\n): RegExp[] {\n // Create cache key\n const cacheKey = `${pageExtensions.join(',')}|${strictlyMatchExtensions}`\n\n const cached = compiledRegexCache.get(cacheKey)\n if (cached) {\n return cached\n }\n\n // Pre-compute common strings\n const trailingMatcher = strictlyMatchExtensions ? '$' : '?$'\n const variantsMatcher = '\\\\d?'\n const groupSuffix = strictlyMatchExtensions ? '' : '(-\\\\w{6})?'\n const suffixMatcher = variantsMatcher + groupSuffix\n\n // Pre-compute extension arrays to avoid repeated concatenation\n const robotsExts =\n pageExtensions.length > 0 ? [...pageExtensions, 'txt'] : ['txt']\n const manifestExts =\n pageExtensions.length > 0\n ? [...pageExtensions, 'webmanifest', 'json']\n : ['webmanifest', 'json']\n\n const regexes = [\n new RegExp(\n `^[\\\\\\\\/]robots${getExtensionRegexString(robotsExts, null)}${trailingMatcher}`\n ),\n new RegExp(\n `^[\\\\\\\\/]manifest${getExtensionRegexString(manifestExts, null)}${trailingMatcher}`\n ),\n // FAVICON_REGEX removed - already handled in fastPathCheck\n new RegExp(\n `[\\\\\\\\/]sitemap${getExtensionRegexString(['xml'], pageExtensions)}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]icon${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.icon.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]apple-icon${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.apple.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]opengraph-image${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.openGraph.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n new RegExp(\n `[\\\\\\\\/]twitter-image${suffixMatcher}${getExtensionRegexString(\n STATIC_METADATA_IMAGES.twitter.extensions,\n pageExtensions\n )}${trailingMatcher}`\n ),\n ]\n\n compiledRegexCache.set(cacheKey, regexes)\n return regexes\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): boolean {\n // Early exit for empty or obviously non-metadata paths\n if (!appDirRelativePath || appDirRelativePath.length < 2) {\n return false\n }\n\n const normalizedPath = normalizePathSep(appDirRelativePath)\n\n // Fast path check for common cases\n const fastResult = fastPathCheck(normalizedPath)\n if (fastResult !== null) {\n return fastResult\n }\n\n // Get compiled regexes from cache\n const regexes = getCompiledRegexes(pageExtensions, strictlyMatchExtensions)\n\n // Use for loop instead of .some() for better performance\n for (let i = 0; i < regexes.length; i++) {\n if (regexes[i].test(normalizedPath)) {\n return true\n }\n }\n\n return false\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 WorkFnContext<V, K> = {\n resolve: (value: V | PromiseLike<V>) => void\n key: K\n}\n\ntype WorkFn<V, K> = (context: WorkFnContext<V, K>) => 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, K>): Promise<V> {\n const cacheKey = (this.cacheKeyFn ? await this.cacheKeyFn(key) : key) as C\n if (cacheKey === null) {\n return fn({ resolve: (value) => Promise.resolve(value), key })\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({ resolve, key })\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\n /**\n * When true, this indicates that the response generator is being called in a\n * context where the response must be generated statically.\n *\n * CRITICAL: This should only currently be used when revalidating due to a\n * dynamic RSC request.\n */\n forceStaticRender?: boolean\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 revalidateTag(\n tags: string | string[],\n durations?: { expire?: number }\n ): Promise<void>\n}\n","import type { ReactDOMServerReadableStream } from 'react-dom/server'\nimport { 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'\nimport {\n RSC_HEADER,\n NEXT_ROUTER_PREFETCH_HEADER,\n NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,\n NEXT_RSC_UNION_QUERY,\n} from '../../client/components/app-router-headers'\nimport { computeCacheBustingSearchParam } from '../../shared/lib/router/utils/cache-busting-search-param'\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\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 type BufferedTransformOptions = {\n /**\n * Flush synchronously once the buffer reaches this many bytes.\n */\n readonly maxBufferByteLength?: number\n}\n\nexport function createBufferedTransformStream(\n options: BufferedTransformOptions = {}\n): TransformStream<Uint8Array, Uint8Array> {\n const { maxBufferByteLength = Infinity } = options\n\n let bufferedChunks: Array<Uint8Array> = []\n let bufferByteLength: number = 0\n let pending: DetachedPromise<void> | undefined\n\n const flush = (controller: TransformStreamDefaultController) => {\n try {\n if (bufferedChunks.length === 0) {\n return\n }\n\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 // transformer. It's most likely caused by the controller having been\n // errored (for example, if the stream was cancelled).\n }\n }\n\n const scheduleFlush = (controller: TransformStreamDefaultController) => {\n if (pending) {\n return\n }\n\n const detached = new DetachedPromise<void>()\n pending = detached\n\n scheduleImmediate(() => {\n try {\n flush(controller)\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 if (bufferByteLength >= maxBufferByteLength) {\n flush(controller)\n } else {\n scheduleFlush(controller)\n }\n },\n flush() {\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<ReactDOMServerReadableStream> {\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\nfunction createClientResumeScriptInsertionTransformStream(): TransformStream<\n Uint8Array,\n Uint8Array\n> {\n const segmentPath = '/_full'\n const cacheBustingHeader = computeCacheBustingSearchParam(\n '1', // headers[NEXT_ROUTER_PREFETCH_HEADER]\n '/_full', // headers[NEXT_ROUTER_SEGMENT_PREFETCH_HEADER]\n undefined, // headers[NEXT_ROUTER_STATE_TREE_HEADER]\n undefined // headers[NEXT_URL]\n )\n const searchStr = `${NEXT_RSC_UNION_QUERY}=${cacheBustingHeader}`\n const NEXT_CLIENT_RESUME_SCRIPT = `<script>__NEXT_CLIENT_RESUME=fetch(location.pathname+'?${searchStr}',{credentials:'same-origin',headers:{'${RSC_HEADER}': '1','${NEXT_ROUTER_PREFETCH_HEADER}': '1','${NEXT_ROUTER_SEGMENT_PREFETCH_HEADER}': '${segmentPath}'}})</script>`\n\n let didAlreadyInsert = false\n return new TransformStream({\n transform(chunk, controller) {\n if (didAlreadyInsert) {\n // Already inserted the script into the head. Pass through.\n controller.enqueue(chunk)\n return\n }\n // TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.\n const headClosingTagIndex = indexOfUint8Array(\n chunk,\n ENCODED_TAGS.CLOSED.HEAD\n )\n\n if (headClosingTagIndex === -1) {\n // In fully static rendering or non PPR rendering cases:\n // `/head>` will always be found in the chunk in first chunk rendering.\n controller.enqueue(chunk)\n return\n }\n\n const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT)\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, headClosingTagIndex))\n // Append the server inserted content\n insertedHeadContent.set(encodedInsertion, headClosingTagIndex)\n // Append the rest of the chunk\n insertedHeadContent.set(\n chunk.slice(headClosingTagIndex),\n headClosingTagIndex + encodedInsertion.length\n )\n\n controller.enqueue(insertedHeadContent)\n didAlreadyInsert = true\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\nfunction createFlightDataInjectionTransformStream(\n stream: ReadableStream<Uint8Array>,\n delayDataUntilFirstHtmlChunk: boolean\n): TransformStream<Uint8Array, Uint8Array> {\n let htmlStreamFinished = false\n\n let pull: Promise<void> | null = null\n let donePulling = false\n\n function startOrContinuePulling(\n controller: TransformStreamDefaultController\n ) {\n if (!pull) {\n pull = startPulling(controller)\n }\n return pull\n }\n\n async function startPulling(controller: TransformStreamDefaultController) {\n const reader = stream.getReader()\n\n if (delayDataUntilFirstHtmlChunk) {\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\n try {\n while (true) {\n const { done, value } = await reader.read()\n if (done) {\n donePulling = true\n return\n }\n\n // We want to prioritize HTML over RSC data.\n // The SSR render is based on the same RSC stream, so when we get a new RSC chunk,\n // we're likely to produce an HTML chunk as well, so give it a chance to flush first.\n if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) {\n await atLeastOneTask()\n }\n controller.enqueue(value)\n }\n } catch (err) {\n controller.error(err)\n }\n }\n\n return new TransformStream({\n start(controller) {\n if (!delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n transform(chunk, controller) {\n controller.enqueue(chunk)\n\n // Start the streaming if it hasn't already been started yet.\n if (delayDataUntilFirstHtmlChunk) {\n startOrContinuePulling(controller)\n }\n },\n flush(controller) {\n htmlStreamFinished = true\n if (donePulling) {\n return\n }\n return startOrContinuePulling(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: ReactDOMServerReadableStream,\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 we need to wait for it to resolve before continuing.\n if (isStaticGeneration) {\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\n ? createFlightDataInjectionTransformStream(inlinedDataStream, true)\n : 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(\n createFlightDataInjectionTransformStream(inlinedDataStream, true)\n )\n // Close tags should always be deferred to the end\n .pipeThrough(createMoveSuffixStream())\n )\n}\n\nexport async function continueStaticFallbackPrerender(\n prerenderStream: ReadableStream<Uint8Array>,\n {\n inlinedDataStream,\n getServerInsertedHTML,\n getServerInsertedMetadata,\n isBuildTimePrerendering,\n buildId,\n }: ContinueStaticPrerenderOptions\n) {\n // Same as `continueStaticPrerender`, but also inserts an additional script\n // to instruct the client to start fetching the hydration data as early\n // as possible.\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 // Insert the client resume script into the head\n .pipeThrough(createClientResumeScriptInsertionTransformStream())\n // Transform metadata\n .pipeThrough(createMetadataTransformStream(getServerInsertedMetadata))\n // Insert the inlined data (Flight data, form state, etc.) stream into the HTML\n .pipeThrough(\n createFlightDataInjectionTransformStream(inlinedDataStream, true)\n )\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 delayDataUntilFirstHtmlChunk: boolean\n}\n\nexport async function continueDynamicHTMLResume(\n renderStream: ReadableStream<Uint8Array>,\n {\n delayDataUntilFirstHtmlChunk,\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(\n createFlightDataInjectionTransformStream(\n inlinedDataStream,\n delayDataUntilFirstHtmlChunk\n )\n )\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 /** @internal */\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","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 getBatcher = 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 readonly revalidateBatcher = Batcher.create<\n string,\n IncrementalResponseCacheEntry | null\n >({\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 /**\n * Gets the response cache entry for the given key.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @returns The response cache entry.\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({\n hasResolved: false,\n previousCacheEntry: null,\n })\n }\n\n // Check minimal mode cache before doing any other work\n if (\n this.minimal_mode &&\n this.previousCacheItem?.key === key &&\n this.previousCacheItem.expiresAt > Date.now()\n ) {\n return toResponseCacheEntry(this.previousCacheItem.entry)\n }\n\n const {\n incrementalCache,\n isOnDemandRevalidate = false,\n isFallback = false,\n isRoutePPREnabled = false,\n isPrefetch = false,\n waitUntil,\n routeKind,\n } = context\n\n const response = await this.getBatcher.batch(\n { key, isOnDemandRevalidate },\n ({ resolve }) => {\n const promise = this.handleGet(\n key,\n responseGenerator,\n {\n incrementalCache,\n isOnDemandRevalidate,\n isFallback,\n isRoutePPREnabled,\n isPrefetch,\n routeKind,\n },\n resolve\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n }\n )\n\n return toResponseCacheEntry(response)\n }\n\n /**\n * Handles the get request for the response cache.\n *\n * @param key - The key to get the response cache entry for.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param context - The context for the get request.\n * @param resolve - The resolve function to use to resolve the response cache entry.\n * @returns The response cache entry.\n */\n private async handleGet(\n key: string,\n responseGenerator: ResponseGenerator,\n context: {\n incrementalCache: IncrementalResponseCache\n isOnDemandRevalidate: boolean\n isFallback: boolean\n isRoutePPREnabled: boolean\n isPrefetch: boolean\n routeKind: RouteKind\n },\n resolve: (value: IncrementalResponseCacheEntry | null) => void\n ): Promise<IncrementalResponseCacheEntry | null> {\n let previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null =\n null\n let resolved = false\n\n try {\n // Get the previous cache entry if not in minimal mode\n previousIncrementalCacheEntry = !this.minimal_mode\n ? await context.incrementalCache.get(key, {\n kind: routeKindToIncrementalCacheKind(context.routeKind),\n isRoutePPREnabled: context.isRoutePPREnabled,\n isFallback: context.isFallback,\n })\n : null\n\n if (previousIncrementalCacheEntry && !context.isOnDemandRevalidate) {\n resolve(previousIncrementalCacheEntry)\n resolved = true\n\n if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {\n // The cached value is still valid, so we don't need to update it yet.\n return previousIncrementalCacheEntry\n }\n }\n\n // Revalidate the cache entry\n const incrementalResponseCacheEntry = await this.revalidate(\n key,\n context.incrementalCache,\n context.isRoutePPREnabled,\n context.isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n previousIncrementalCacheEntry !== null && !context.isOnDemandRevalidate\n )\n\n // Handle null response\n if (!incrementalResponseCacheEntry) {\n // Unset the previous cache item if it was set so we don't use it again.\n if (this.minimal_mode) this.previousCacheItem = undefined\n return null\n }\n\n // Resolve for on-demand revalidation or if not already resolved\n if (context.isOnDemandRevalidate && !resolved) {\n return incrementalResponseCacheEntry\n }\n\n return incrementalResponseCacheEntry\n } catch (err) {\n // If we've already resolved the cache entry, we can't reject as we\n // already resolved the cache entry so log the error here.\n if (resolved) {\n console.error(err)\n return null\n }\n\n throw err\n }\n }\n\n /**\n * Revalidates the cache entry for the given key.\n *\n * @param key - The key to revalidate the cache entry for.\n * @param incrementalCache - The incremental cache to use to revalidate the cache entry.\n * @param isRoutePPREnabled - Whether the route is PPR enabled.\n * @param isFallback - Whether the route is a fallback.\n * @param responseGenerator - The response generator to use to generate the response cache entry.\n * @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.\n * @param hasResolved - Whether the response has been resolved.\n * @returns The revalidated cache entry.\n */\n public async revalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean,\n waitUntil?: (prom: Promise<any>) => void\n ) {\n return this.revalidateBatcher.batch(key, () => {\n const promise = this.handleRevalidate(\n key,\n incrementalCache,\n isRoutePPREnabled,\n isFallback,\n responseGenerator,\n previousIncrementalCacheEntry,\n hasResolved\n )\n\n // We need to ensure background revalidates are passed to waitUntil.\n if (waitUntil) waitUntil(promise)\n\n return promise\n })\n }\n\n private async handleRevalidate(\n key: string,\n incrementalCache: IncrementalResponseCache,\n isRoutePPREnabled: boolean,\n isFallback: boolean,\n responseGenerator: ResponseGenerator,\n previousIncrementalCacheEntry: IncrementalResponseCacheEntry | null,\n hasResolved: boolean\n ) {\n try {\n // Generate the response cache entry using the response generator.\n const responseCacheEntry = await responseGenerator({\n hasResolved,\n previousCacheEntry: previousIncrementalCacheEntry,\n isRevalidating: true,\n })\n if (!responseCacheEntry) {\n return null\n }\n\n // Convert the response cache entry to an incremental response cache entry.\n const incrementalResponseCacheEntry = await fromResponseCacheEntry({\n ...responseCacheEntry,\n isMiss: !previousIncrementalCacheEntry,\n })\n\n // We want to persist the result only if it has a cache control value\n // defined.\n if (incrementalResponseCacheEntry.cacheControl) {\n if (this.minimal_mode) {\n this.previousCacheItem = {\n key,\n entry: incrementalResponseCacheEntry,\n expiresAt: Date.now() + 1000,\n }\n } else {\n await incrementalCache.set(key, incrementalResponseCacheEntry.value, {\n cacheControl: incrementalResponseCacheEntry.cacheControl,\n isRoutePPREnabled,\n isFallback,\n })\n }\n }\n\n return incrementalResponseCacheEntry\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 (previousIncrementalCacheEntry?.cacheControl) {\n const revalidate = Math.min(\n Math.max(\n previousIncrementalCacheEntry.cacheControl.revalidate || 3,\n 3\n ),\n 30\n )\n const expire =\n previousIncrementalCacheEntry.cacheControl.expire === undefined\n ? undefined\n : Math.max(\n revalidate + 3,\n previousIncrementalCacheEntry.cacheControl.expire\n )\n\n await incrementalCache.set(key, previousIncrementalCacheEntry.value, {\n cacheControl: { revalidate: revalidate, expire: expire },\n isRoutePPREnabled,\n isFallback,\n })\n }\n\n // We haven't resolved yet, so let's throw to indicate an error.\n throw err\n }\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 type { TagManifestEntry } from './tags-manifest.external'\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 { areTagsExpired, 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('FileSystemCache: using memory store for fetch cache')\n }\n\n FileSystemCache.memoryCache = getMemoryCache(ctx.maxMemoryCacheSize)\n } else if (FileSystemCache.debug) {\n console.log('FileSystemCache: memory store already initialized')\n }\n } else if (FileSystemCache.debug) {\n console.log('FileSystemCache: not using memory store for fetch cache')\n }\n }\n\n public resetRequestCache(): void {}\n\n public async revalidateTag(\n tags: string | string[],\n durations?: { expire?: number }\n ) {\n tags = typeof tags === 'string' ? [tags] : tags\n\n if (FileSystemCache.debug) {\n console.log('FileSystemCache: revalidateTag', tags, durations)\n }\n\n if (tags.length === 0) {\n return\n }\n\n const now = Date.now()\n\n for (const tag of tags) {\n const existingEntry = tagsManifest.get(tag) || {}\n\n if (durations) {\n // Use provided durations directly\n const updates: TagManifestEntry = { ...existingEntry }\n\n // mark as stale immediately\n updates.stale = now\n\n if (durations.expire !== undefined) {\n updates.expired = now + durations.expire * 1000 // Convert seconds to ms\n }\n\n tagsManifest.set(tag, updates)\n } else {\n // Update expired field for immediate expiration (default behavior when no durations provided)\n tagsManifest.set(tag, { ...existingEntry, expired: 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('FileSystemCache: get', key, ctx.tags, kind, !!data)\n } else {\n console.log('FileSystemCache: 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(\n 'FileSystemCache: tags vs storedTags mismatch',\n tags,\n storedTags\n )\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 const tagsHeader = data.value.headers?.[NEXT_CACHE_TAGS_HEADER]\n if (typeof tagsHeader === 'string') {\n const cacheTags = tagsHeader.split(',')\n\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 (\n cacheTags.length > 0 &&\n areTagsExpired(cacheTags, data.lastModified)\n ) {\n if (FileSystemCache.debug) {\n console.log('FileSystemCache: expired tags', cacheTags)\n }\n\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 // When revalidate tag is called we don't return stale data so it's\n // updated right away.\n if (combinedTags.some((tag) => this.revalidatedTags.includes(tag))) {\n if (FileSystemCache.debug) {\n console.log('FileSystemCache: was revalidated', combinedTags)\n }\n\n return null\n }\n\n if (areTagsExpired(combinedTags, data.lastModified)) {\n if (FileSystemCache.debug) {\n console.log('FileSystemCache: expired tags', combinedTags)\n }\n\n return null\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('FileSystemCache: 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'\nimport FileSystemCache from './file-system-cache'\nimport { normalizePagePath } from '../../../shared/lib/page-path/normalize-page-path'\n\nimport {\n CACHE_ONE_YEAR,\n NEXT_CACHE_TAGS_HEADER,\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'\nimport { areTagsExpired, areTagsStale } from './tags-manifest.external'\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 _tags: string | string[],\n _durations?: { expire?: number }\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 isOnDemandRevalidate?: boolean\n readonly revalidatedTags?: readonly string[]\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 if (IncrementalCache.debug) {\n console.log('IncrementalCache: using global FetchCache cache handler')\n }\n } else {\n if (fs && serverDistDir) {\n if (IncrementalCache.debug) {\n console.log('IncrementalCache: using filesystem cache handler')\n }\n CurCacheHandler = FileSystemCache\n }\n }\n } else if (IncrementalCache.debug) {\n console.log(\n 'IncrementalCache: using custom cache handler',\n CurCacheHandler.name\n )\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 = this.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('IncrementalCache: 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('IncrementalCache: 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(\n tags: string | string[],\n durations?: { expire?: number }\n ): Promise<void> {\n return this.cacheHandler?.revalidateTag(tags, durations)\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 if (IncrementalCache.debug) {\n console.log('IncrementalCache: rdc:hit', cacheKey)\n }\n\n return { isStale: false, value: memoryCacheData }\n } else if (IncrementalCache.debug) {\n console.log('IncrementalCache: rdc:miss', cacheKey)\n }\n } else {\n if (IncrementalCache.debug) {\n console.log('IncrementalCache: rdc:no-resume-data')\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?.some((item) => item.tag === tag)\n )\n ) {\n if (IncrementalCache.debug) {\n console.log('IncrementalCache: expired tag', cacheKey)\n }\n\n return null\n }\n\n // As we're able to get the cache entry for this fetch, and the prerender\n // resume data cache (RDC) is available, it must have been populated by a\n // previous fetch, but was not yet present in the in-memory cache. This\n // could be the case when performing multiple renders in parallel during\n // build time where we de-duplicate the fetch calls.\n //\n // We add it to the RDC so that the next fetch call will be able to use it\n // and it won't have to reach into the fetch cache implementation.\n const workUnitStore = workUnitAsyncStorage.getStore()\n if (workUnitStore) {\n const prerenderResumeDataCache =\n getPrerenderResumeDataCache(workUnitStore)\n if (prerenderResumeDataCache) {\n if (IncrementalCache.debug) {\n console.log('IncrementalCache: rdc:set', cacheKey)\n }\n\n prerenderResumeDataCache.fetch.set(cacheKey, cacheData.value)\n }\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 let isStale = age > revalidate\n const data = cacheData.value.data\n\n if (areTagsExpired(combinedTags, cacheData.lastModified)) {\n return null\n } else if (areTagsStale(combinedTags, cacheData.lastModified)) {\n isStale = true\n }\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 const now = performance.timeOrigin + performance.now()\n const lastModified = cacheData?.lastModified || now\n\n revalidateAfter = this.calculateRevalidate(\n cacheKey,\n lastModified,\n this.dev ?? false,\n ctx.isFallback\n )\n\n isStale =\n revalidateAfter !== false && revalidateAfter < now ? true : undefined\n\n // If the stale time couldn't be determined based on the revalidation\n // time, we check if the tags are expired or stale.\n if (\n isStale === undefined &&\n (cacheData?.value?.kind === CachedRouteKind.APP_PAGE ||\n cacheData?.value?.kind === CachedRouteKind.APP_ROUTE)\n ) {\n const tagsHeader = cacheData.value.headers?.[NEXT_CACHE_TAGS_HEADER]\n\n if (typeof tagsHeader === 'string') {\n const cacheTags = tagsHeader.split(',')\n\n if (cacheTags.length > 0) {\n if (areTagsExpired(cacheTags, lastModified)) {\n isStale = -1\n } else if (areTagsStale(cacheTags, lastModified)) {\n isStale = true\n }\n }\n }\n }\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 if (IncrementalCache.debug) {\n console.log('IncrementalCache: rdc:set', pathname)\n }\n\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","/**\n * Node in the doubly-linked list used for LRU tracking.\n * Each node represents a cache entry with bidirectional pointers.\n */\nclass LRUNode<T> {\n public readonly key: string\n public data: T\n public size: number\n public prev: LRUNode<T> | SentinelNode<T> | null = null\n public next: LRUNode<T> | SentinelNode<T> | null = null\n\n constructor(key: string, data: T, size: number) {\n this.key = key\n this.data = data\n this.size = size\n }\n}\n\n/**\n * Sentinel node used for head/tail boundaries.\n * These nodes don't contain actual cache data but simplify list operations.\n */\nclass SentinelNode<T> {\n public prev: LRUNode<T> | SentinelNode<T> | null = null\n public next: LRUNode<T> | SentinelNode<T> | null = null\n}\n\n/**\n * LRU (Least Recently Used) Cache implementation using a doubly-linked list\n * and hash map for O(1) operations.\n *\n * Algorithm:\n * - Uses a doubly-linked list to maintain access order (most recent at head)\n * - Hash map provides O(1) key-to-node lookup\n * - Sentinel head/tail nodes simplify edge case handling\n * - Size-based eviction supports custom size calculation functions\n *\n * Data Structure Layout:\n * HEAD <-> [most recent] <-> ... <-> [least recent] <-> TAIL\n *\n * Operations:\n * - get(): Move accessed node to head (mark as most recent)\n * - set(): Add new node at head, evict from tail if over capacity\n * - Eviction: Remove least recent node (tail.prev) when size exceeds limit\n */\nexport class LRUCache<T> {\n private readonly cache: Map<string, LRUNode<T>> = new Map()\n private readonly head: SentinelNode<T>\n private readonly tail: SentinelNode<T>\n private totalSize: number = 0\n private readonly maxSize: number\n private readonly calculateSize: ((value: T) => number) | undefined\n\n constructor(maxSize: number, calculateSize?: (value: T) => number) {\n this.maxSize = maxSize\n this.calculateSize = calculateSize\n\n // Create sentinel nodes to simplify doubly-linked list operations\n // HEAD <-> TAIL (empty list)\n this.head = new SentinelNode<T>()\n this.tail = new SentinelNode<T>()\n this.head.next = this.tail\n this.tail.prev = this.head\n }\n\n /**\n * Adds a node immediately after the head (marks as most recently used).\n * Used when inserting new items or when an item is accessed.\n * PRECONDITION: node must be disconnected (prev/next should be null)\n */\n private addToHead(node: LRUNode<T>): void {\n node.prev = this.head\n node.next = this.head.next\n // head.next is always non-null (points to tail or another node)\n this.head.next!.prev = node\n this.head.next = node\n }\n\n /**\n * Removes a node from its current position in the doubly-linked list.\n * Updates the prev/next pointers of adjacent nodes to maintain list integrity.\n * PRECONDITION: node must be connected (prev/next are non-null)\n */\n private removeNode(node: LRUNode<T>): void {\n // Connected nodes always have non-null prev/next\n node.prev!.next = node.next\n node.next!.prev = node.prev\n }\n\n /**\n * Moves an existing node to the head position (marks as most recently used).\n * This is the core LRU operation - accessed items become most recent.\n */\n private moveToHead(node: LRUNode<T>): void {\n this.removeNode(node)\n this.addToHead(node)\n }\n\n /**\n * Removes and returns the least recently used node (the one before tail).\n * This is called during eviction when the cache exceeds capacity.\n * PRECONDITION: cache is not empty (ensured by caller)\n */\n private removeTail(): LRUNode<T> {\n const lastNode = this.tail.prev as LRUNode<T>\n // tail.prev is always non-null and always LRUNode when cache is not empty\n this.removeNode(lastNode)\n return lastNode\n }\n\n /**\n * Sets a key-value pair in the cache.\n * If the key exists, updates the value and moves to head.\n * If new, adds at head and evicts from tail if necessary.\n *\n * Time Complexity:\n * - O(1) for uniform item sizes\n * - O(k) where k is the number of items evicted (can be O(N) for variable sizes)\n */\n public set(key: string, value: T): void {\n const size = this.calculateSize?.(value) ?? 1\n if (size > this.maxSize) {\n console.warn('Single item size exceeds maxSize')\n return\n }\n\n const existing = this.cache.get(key)\n if (existing) {\n // Update existing node: adjust size and move to head (most recent)\n existing.data = value\n this.totalSize = this.totalSize - existing.size + size\n existing.size = size\n this.moveToHead(existing)\n } else {\n // Add new node at head (most recent position)\n const newNode = new LRUNode(key, value, size)\n this.cache.set(key, newNode)\n this.addToHead(newNode)\n this.totalSize += size\n }\n\n // Evict least recently used items until under capacity\n while (this.totalSize > this.maxSize && this.cache.size > 0) {\n const tail = this.removeTail()\n this.cache.delete(tail.key)\n this.totalSize -= tail.size\n }\n }\n\n /**\n * Checks if a key exists in the cache.\n * This is a pure query operation - does NOT update LRU order.\n *\n * Time Complexity: O(1)\n */\n public has(key: string): boolean {\n return this.cache.has(key)\n }\n\n /**\n * Retrieves a value by key and marks it as most recently used.\n * Moving to head maintains the LRU property for future evictions.\n *\n * Time Complexity: O(1)\n */\n public get(key: string): T | undefined {\n const node = this.cache.get(key)\n if (!node) return undefined\n\n // Mark as most recently used by moving to head\n this.moveToHead(node)\n\n return node.data\n }\n\n /**\n * Returns an iterator over the cache entries. The order is outputted in the\n * order of most recently used to least recently used.\n */\n public *[Symbol.iterator](): IterableIterator<[string, T]> {\n let current = this.head.next\n while (current && current !== this.tail) {\n // Between head and tail, current is always LRUNode\n const node = current as LRUNode<T>\n yield [node.key, node.data]\n current = current.next\n }\n }\n\n /**\n * Removes a specific key from the cache.\n * Updates both the hash map and doubly-linked list.\n *\n * Time Complexity: O(1)\n */\n public remove(key: string): void {\n const node = this.cache.get(key)\n if (!node) return\n\n this.removeNode(node)\n this.cache.delete(key)\n this.totalSize -= node.size\n }\n\n /**\n * Returns the number of items in the cache.\n */\n public get size(): number {\n return this.cache.size\n }\n\n /**\n * Returns the current total size of all cached items.\n * This uses the custom size calculation if provided.\n */\n public get currentSize(): number {\n return this.totalSize\n }\n}\n","/**\n * This is the default \"use cache\" handler it defaults to an in-memory store.\n * In-memory caches are fragile and should not use stale-while-revalidate\n * semantics on the caches because it's not worth warming up an entry that's\n * likely going to get evicted before we get to use it anyway. However, we also\n * don't want to reuse a stale entry for too long so stale entries should be\n * considered expired/missing in such cache handlers.\n */\n\nimport { LRUCache } from '../lru-cache'\nimport type { CacheEntry, CacheHandler } from './types'\nimport {\n areTagsExpired,\n areTagsStale,\n tagsManifest,\n type TagManifestEntry,\n} from '../incremental-cache/tags-manifest.external'\n\ntype PrivateCacheEntry = {\n entry: CacheEntry\n\n // For the default cache we store errored cache\n // entries and allow them to be used up to 3 times\n // after that we want to dispose it and try for fresh\n\n // If an entry is errored we return no entry\n // three times so that we retry hitting origin (MISS)\n // and then if it still fails to set after the third we\n // return the errored content and use expiration of\n // Math.min(30, entry.expiration)\n isErrored: boolean\n errorRetryCount: number\n\n // compute size on set since we need to read size\n // of the ReadableStream for LRU evicting\n size: number\n}\n\nexport function createDefaultCacheHandler(maxSize: number): CacheHandler {\n // If the max size is 0, return a cache handler that doesn't cache anything,\n // this avoids an unnecessary LRUCache instance and potential memory\n // allocation.\n if (maxSize === 0) {\n return {\n get: () => Promise.resolve(undefined),\n set: () => Promise.resolve(),\n refreshTags: () => Promise.resolve(),\n getExpiration: () => Promise.resolve(0),\n updateTags: () => Promise.resolve(),\n }\n }\n\n const memoryCache = new LRUCache<PrivateCacheEntry>(\n maxSize,\n (entry) => entry.size\n )\n const pendingSets = new Map<string, Promise<void>>()\n\n const debug = process.env.NEXT_PRIVATE_DEBUG_CACHE\n ? console.debug.bind(console, 'DefaultCacheHandler:')\n : undefined\n\n return {\n async get(cacheKey) {\n const pendingPromise = pendingSets.get(cacheKey)\n\n if (pendingPromise) {\n debug?.('get', cacheKey, 'pending')\n await pendingPromise\n }\n\n const privateEntry = memoryCache.get(cacheKey)\n\n if (!privateEntry) {\n debug?.('get', cacheKey, 'not found')\n return undefined\n }\n\n const entry = privateEntry.entry\n if (\n performance.timeOrigin + performance.now() >\n entry.timestamp + entry.revalidate * 1000\n ) {\n // In-memory caches should expire after revalidate time because it is\n // unlikely that a new entry will be able to be used before it is dropped\n // from the cache.\n debug?.('get', cacheKey, 'expired')\n\n return undefined\n }\n\n let revalidate = entry.revalidate\n\n if (areTagsExpired(entry.tags, entry.timestamp)) {\n debug?.('get', cacheKey, 'had expired tag')\n return undefined\n }\n\n if (areTagsStale(entry.tags, entry.timestamp)) {\n debug?.('get', cacheKey, 'had stale tag')\n revalidate = -1\n }\n\n const [returnStream, newSaved] = entry.value.tee()\n entry.value = newSaved\n\n debug?.('get', cacheKey, 'found', {\n tags: entry.tags,\n timestamp: entry.timestamp,\n expire: entry.expire,\n revalidate,\n })\n\n return {\n ...entry,\n revalidate,\n value: returnStream,\n }\n },\n\n async set(cacheKey, pendingEntry) {\n debug?.('set', cacheKey, 'start')\n\n let resolvePending: () => void = () => {}\n const pendingPromise = new Promise<void>((resolve) => {\n resolvePending = resolve\n })\n pendingSets.set(cacheKey, pendingPromise)\n\n const entry = await pendingEntry\n\n let size = 0\n\n try {\n const [value, clonedValue] = entry.value.tee()\n entry.value = value\n const reader = clonedValue.getReader()\n\n for (let chunk; !(chunk = await reader.read()).done; ) {\n size += Buffer.from(chunk.value).byteLength\n }\n\n memoryCache.set(cacheKey, {\n entry,\n isErrored: false,\n errorRetryCount: 0,\n size,\n })\n\n debug?.('set', cacheKey, 'done')\n } catch (err) {\n // TODO: store partial buffer with error after we retry 3 times\n debug?.('set', cacheKey, 'failed', err)\n } finally {\n resolvePending()\n pendingSets.delete(cacheKey)\n }\n },\n\n async refreshTags() {\n // Nothing to do for an in-memory cache handler.\n },\n\n async getExpiration(tags) {\n const expirations = tags.map((tag) => {\n const entry = tagsManifest.get(tag)\n if (!entry) return 0\n // Return the most recent timestamp (either expired or stale)\n return entry.expired || 0\n })\n\n const expiration = Math.max(...expirations, 0)\n\n debug?.('getExpiration', { tags, expiration })\n\n return expiration\n },\n\n async updateTags(tags, durations) {\n const now = Math.round(performance.timeOrigin + performance.now())\n debug?.('updateTags', { tags, timestamp: now })\n\n for (const tag of tags) {\n // TODO: update file-system-cache?\n const existingEntry = tagsManifest.get(tag) || {}\n\n if (durations) {\n // Use provided durations directly\n const updates: TagManifestEntry = { ...existingEntry }\n\n // mark as stale immediately\n updates.stale = now\n\n if (durations.expire !== undefined) {\n updates.expired = now + durations.expire * 1000 // Convert seconds to ms\n }\n\n tagsManifest.set(tag, updates)\n } else {\n // Update expired field for immediate expiration (default behavior when no durations provided)\n tagsManifest.set(tag, { ...existingEntry, expired: now })\n }\n }\n },\n }\n}\n","import { createDefaultCacheHandler } from '../lib/cache-handlers/default'\nimport type { CacheHandler } 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?: CacheHandler\n DefaultCache?: CacheHandler\n }\n [handlersMapSymbol]?: Map<string, CacheHandler>\n [handlersSetSymbol]?: Set<CacheHandler>\n} = globalThis\n\n/**\n * Initialize the cache handlers.\n * @param cacheMaxMemorySize - The maximum memory size of the cache in bytes, if\n * not provided, the default memory size will be used.\n * @returns `true` if the cache handlers were initialized, `false` if they were already initialized.\n */\nexport function initializeCacheHandlers(cacheMaxMemorySize: number): 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, CacheHandler>()\n\n // Initialize the cache from the symbol contents first.\n if (reference[handlersSymbol]) {\n let fallback: CacheHandler\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 = createDefaultCacheHandler(cacheMaxMemorySize)\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 const handler = createDefaultCacheHandler(cacheMaxMemorySize)\n\n debug?.('setting \"default\" cache handler from default')\n reference[handlersMapSymbol].set('default', handler)\n debug?.('setting \"remote\" cache handler from default')\n reference[handlersMapSymbol].set('remote', handler)\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): CacheHandler | 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(): SetIterator<CacheHandler> | 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, CacheHandler]>\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: CacheHandler\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'\nimport type { ServerCacheStatus } from '../../../next-devtools/dev-overlay/cache-indicator'\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 // 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 | undefined) => void\n setReactDebugChannel?: (\n debugChannel: { readable: ReadableStream<Uint8Array> },\n htmlRequestId: string,\n requestId: string\n ) => void\n setCacheStatus?: (\n status: ServerCacheStatus,\n htmlRequestId: string,\n requestId: string\n ) => 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 { 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 type { DeepReadonly } from '../shared/lib/deep-readonly'\nimport { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex'\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 destination = getNamedRouteRegex(basePath + appPath, {\n prefixRouteKeys: true,\n })\n\n const header = getNamedRouteRegex(interceptingRoute, {\n prefixRouteKeys: true,\n reference: destination.reference,\n })\n\n const source = getNamedRouteRegex(basePath + interceptedRoute, {\n prefixRouteKeys: true,\n reference: header.reference,\n })\n\n const headerRegex = header.namedRegex\n // Strip ^ and $ anchors since matchHas() will add them automatically\n .replace(/^\\^/, '')\n .replace(/\\$$/, '')\n // Replace matching the `/` with matching any route segment.\n .replace(/^\\/\\(\\?:\\/\\)\\?$/, '/.*')\n // Replace the optional trailing with slash capture group with one that\n // will match any descendants.\n .replace(/\\(\\?:\\/\\)\\?$/, '(?:/.*)?')\n\n rewrites.push({\n source: source.pathToRegexpPattern,\n destination: destination.pathToRegexpPattern,\n has: [\n {\n type: 'header',\n key: NEXT_URL,\n value: headerRegex,\n },\n ],\n internal: true,\n regex: source.namedRegex,\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\nexport const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id' as const\nexport const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id' as const\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 { 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 relativeProjectDir: 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 relativeProjectDir: string\n public incrementCache?: IncrementalCache\n public responseCache?: ResponseCache\n\n constructor({\n userland,\n definition,\n distDir,\n relativeProjectDir,\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.relativeProjectDir = relativeProjectDir\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 = join(\n /* turbopackIgnore: true */\n process.cwd(),\n getRequestMeta(req, 'relativeProjectDir') || this.relativeProjectDir\n )\n\n const { instrumentationOnRequestError } = await import(\n '../lib/router-utils/instrumentation-globals.external.js'\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 fallbackBuildManifest: 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 fallbackBuildManifest: {} 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 skipProxyUrlNormalize: 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 router =\n this.definition.kind === RouteKind.PAGES ||\n this.definition.kind === RouteKind.PAGES_API\n ? 'pages'\n : 'app'\n\n const [\n routesManifest,\n prerenderManifest,\n buildManifest,\n fallbackBuildManifest,\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 srcPage === '/_error'\n ? loadManifestFromRelativePath<BuildManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: `fallback-${BUILD_MANIFEST}`,\n shouldCache: !this.isDev,\n handleMissing: true,\n })\n : ({} as BuildManifest),\n loadManifestFromRelativePath<ReactLoadableManifest>({\n projectDir,\n distDir: this.distDir,\n manifest: process.env.TURBOPACK\n ? `server/${router === 'app' ? '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 router === 'app' && !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 router === 'app'\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 fallbackBuildManifest,\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 { cacheMaxMemorySize, cacheHandlers } = nextConfig\n if (!cacheHandlers) return\n\n // If we've already initialized the cache handlers interface, don't do it\n // again.\n if (!initializeCacheHandlers(cacheMaxMemorySize)) 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 = join(\n /* turbopackIgnore: true */\n process.cwd(),\n getRequestMeta(req, 'relativeProjectDir') || this.relativeProjectDir\n )\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 isMinimalMode: boolean\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 = join(\n /* turbopackIgnore: true */\n process.cwd(),\n getRequestMeta(req, 'relativeProjectDir') || this.relativeProjectDir\n )\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 const incrementalCache = 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: isMinimalMode,\n serverDistDir: `${projectDir}/${this.distDir}/server`,\n fetchCacheKeyPrefix: nextConfig.experimental.fetchCacheKeyPrefix,\n maxMemoryCacheSize: nextConfig.cacheMaxMemorySize,\n flushToDisk: !isMinimalMode && nextConfig.experimental.isrFlushToDisk,\n getPrerenderManifest: () => prerenderManifest,\n CurCacheHandler: CacheHandler,\n })\n\n // we need to expose this on globalThis as the app-render\n // workStore grabs the incrementalCache from there\n ;(globalThis as any).__incrementalCache = incrementalCache\n return incrementalCache\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 encodedResolvedPathname: string\n isNextDataRequest: boolean\n buildManifest: DeepReadonly<BuildManifest>\n fallbackBuildManifest: 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 absoluteProjectDir: 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 absoluteProjectDir = join(\n /* turbopackIgnore: true */\n process.cwd(),\n getRequestMeta(req, 'relativeProjectDir') || this.relativeProjectDir\n )\n\n const absoluteDistDir = getRequestMeta(req, 'distDir')\n\n if (absoluteDistDir) {\n this.distDir = relative(absoluteProjectDir, absoluteDistDir)\n }\n const { ensureInstrumentationRegistered } = await import(\n '../lib/router-utils/instrumentation-globals.external.js'\n )\n // ensure instrumentation is registered and pass\n // onRequestError below\n ensureInstrumentationRegistered(absoluteProjectDir, this.distDir)\n }\n const manifests = await this.loadManifests(srcPage, absoluteProjectDir)\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 // Normalize the page path for route matching. The srcPage contains the\n // internal page path (e.g., /app/[slug]/page), but route matchers expect\n // the pathname format (e.g., /app/[slug]).\n const normalizedSrcPage = normalizeAppPath(srcPage)\n\n const serverUtils = getServerUtils({\n page: normalizedSrcPage,\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 // we apply rewrites against cloned URL so that we don't\n // modify the original with the rewrite destination\n const { rewriteParams, rewrittenParsedUrl } = serverUtils.handleRewrites(\n req,\n parsedUrl\n )\n const rewriteParamKeys = Object.keys(rewriteParams)\n Object.assign(parsedUrl.query, rewrittenParsedUrl.query)\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 rewrittenParsedUrl.pathname = normalizeLocalePath(\n rewrittenParsedUrl.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(\n rewrittenParsedUrl?.pathname || parsedUrl.pathname || '/'\n )\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 (\n this.definition.kind === RouteKind.PAGES ||\n this.definition.kind === RouteKind.PAGES_API\n ) {\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\n let paramsToInterpolate: ParsedUrlQuery\n\n if (\n // if both query and params are valid but one\n // provided more information rely on that one\n query &&\n params &&\n paramsResult.hasValidParams &&\n queryResult.hasValidParams &&\n Object.keys(paramsResult.params).length <\n Object.keys(queryResult.params).length\n ) {\n paramsToInterpolate = queryResult.params\n params = Object.assign(queryResult.params)\n } else {\n paramsToInterpolate =\n paramsResult.hasValidParams && params\n ? params\n : queryResult.hasValidParams\n ? query\n : {}\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 relativeProjectDir =\n getRequestMeta(req, 'relativeProjectDir') || this.relativeProjectDir\n\n const routerServerContext =\n routerServerGlobal[RouterServerContextSymbol]?.[relativeProjectDir]\n const nextConfig =\n routerServerContext?.nextConfig || serverFilesManifest.config\n\n let resolvedPathname = normalizedSrcPage\n if (isDynamicRoute(resolvedPathname) && params) {\n resolvedPathname = serverUtils.interpolateDynamicPath(\n resolvedPathname,\n params\n )\n }\n\n if (resolvedPathname === '/index') {\n resolvedPathname = '/'\n }\n const encodedResolvedPathname = resolvedPathname\n\n // we decode for cache key/manifest usage encoded is\n // for URL building\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 encodedResolvedPathname,\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 =\n (Boolean(process.env.MINIMAL_MODE) ||\n getRequestMeta(req, 'minimalMode')) ??\n 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 isMinimalMode,\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 isMinimalMode: boolean\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 isMinimalMode\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 { 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 origin?: string | null\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 origin: parsedURL.origin,\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'\nimport safeStringify from 'next/dist/compiled/safe-stable-stringify'\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\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 type { RevalidateFn } 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 internalRevalidate?: RevalidateFn\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 = context.internalRevalidate\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'\nimport type { RevalidateFn } from '../../lib/router-utils/router-server-context'\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 * Internal revalidate function to avoid revalidating\n * over the network\n */\n internalRevalidate?: RevalidateFn\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 internalRevalidate: context.internalRevalidate,\n },\n context.propagateError,\n context.dev,\n context.page,\n context.onError\n )\n }\n}\n\nexport default PagesAPIRouteModule\n"],"names":["__defProp","Object","__getOwnPropDesc","__getOwnPropNames","__hasOwnProp","src_exports","all","RequestCookies","ResponseCookies","parseCookie","parseSetCookie","stringifyCookie","name","c","_a","attrs","Date","Boolean","stringified","encodeURIComponent","cookie","map","Map","pair","splitAt","key","value","decodeURIComponent","setCookie","attributes","domain","expires","httponly","maxage","path","samesite","secure","partitioned","priority","value2","string","t","Number","SAME_SITE","PRIORITY","newT","to","from","except","desc","requestHeaders","header","Symbol","args","Array","_","n","names","result","JSON","v","responseHeaders","_b","_c","cookieString","cookiesString","start","ch","lastComma","nextStart","cookiesSeparatorFound","cookiesStrings","pos","skipWhitespace","parsed","bag","headers","serialized","options","e","r","parse","format","a","i","Math","o","s","f","u","p","l","isNaN","parseFloat","parseInt","__dirname","__nccwpck_require__","ContentType","TypeError","String","isFinite","parseHttpDate","NaN","tryConsume","mustConsume","consumeText","isSafe","safePattern","escapeString","d","g","x","m","T","tokensToFunction","flags","RegExp","regexpToFunction","tokensToRegexp","h","E","w","y","R","A","pathToRegexp","configure","strEscape","sort","Int8Array","isTypedArrayWithEntries","stringifyTypedArray","getPositiveIntegerOption","RangeError","getItemCount","Error","arguments","stringifyFnReplacer","$","stringifyArrayReplacer","Set","stringifyIndent","stringifySimple","TEXT_PLAIN_CONTENT_TYPE_HEADER","HTML_CONTENT_TYPE_HEADER","JSON_CONTENT_TYPE_HEADER","NEXT_QUERY_PARAM_PREFIX","NEXT_INTERCEPTION_MARKER_PREFIX","MATCHED_PATH_HEADER","PRERENDER_REVALIDATE_HEADER","PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER","RSC_PREFETCH_SUFFIX","RSC_SEGMENTS_DIR_SUFFIX","RSC_SEGMENT_SUFFIX","RSC_SUFFIX","ACTION_SUFFIX","NEXT_DATA_SUFFIX","NEXT_META_SUFFIX","NEXT_BODY_SUFFIX","NEXT_CACHE_TAGS_HEADER","NEXT_CACHE_REVALIDATED_TAGS_HEADER","NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER","NEXT_RESUME_HEADER","NEXT_CACHE_TAG_MAX_ITEMS","NEXT_CACHE_TAG_MAX_LENGTH","NEXT_CACHE_SOFT_TAG_MAX_LENGTH","NEXT_CACHE_IMPLICIT_TAG_ID","CACHE_ONE_YEAR","INFINITE_CACHE","MIDDLEWARE_FILENAME","MIDDLEWARE_LOCATION_REGEXP","PROXY_FILENAME","PROXY_LOCATION_REGEXP","INSTRUMENTATION_HOOK_FILENAME","PAGES_DIR_ALIAS","DOT_NEXT_ALIAS","ROOT_DIR_ALIAS","APP_DIR_ALIAS","RSC_MOD_REF_PROXY_ALIAS","RSC_ACTION_VALIDATE_ALIAS","RSC_ACTION_PROXY_ALIAS","RSC_CACHE_WRAPPER_ALIAS","RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS","RSC_ACTION_ENCRYPTION_ALIAS","RSC_ACTION_CLIENT_WRAPPER_ALIAS","PUBLIC_DIR_MIDDLEWARE_CONFLICT","SSG_GET_INITIAL_PROPS_CONFLICT","SERVER_PROPS_GET_INIT_PROPS_CONFLICT","SERVER_PROPS_SSG_CONFLICT","STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR","SERVER_PROPS_EXPORT_ERROR","GSP_NO_RETURNED_VALUE","GSSP_NO_RETURNED_VALUE","UNSTABLE_REVALIDATE_RENAME_ERROR","GSSP_COMPONENT_MEMBER_ERROR","NON_STANDARD_NODE_ENV","SSG_FALLBACK_EXPORT_ERROR","ESLINT_DEFAULT_DIRS","SERVER_RUNTIME","edge","experimentalEdge","nodejs","WEB_SOCKET_MAX_RECONNECTIONS","WEBPACK_LAYERS_NAMES","shared","reactServerComponents","serverSideRendering","actionBrowser","apiNode","apiEdge","middleware","instrument","edgeAsset","appPagesBrowser","pagesDirBrowser","pagesDirEdge","pagesDirNode","WEBPACK_LAYERS","GROUP","builtinReact","serverOnly","neutralTarget","clientOnly","bundled","appPages","WEBPACK_RESOURCE_QUERIES","edgeSSREntry","metadata","metadataRoute","metadataImageMeta","formatDynamicImportPath","dir","filePath","absoluteFilePath","pathToFileURL","toString","wrapApiHandler","page","handler","getTracer","setRootSpanAttribute","trace","NodeSpan","spanName","sendStatusCode","res","statusCode","redirect","statusOrUrl","url","writeHead","Location","write","end","checkIsOnDemandRevalidate","req","previewProps","HeadersAdapter","isOnDemandRevalidate","previewModeId","get","revalidateOnlyGenerated","has","COOKIE_NAME_PRERENDER_BYPASS","COOKIE_NAME_PRERENDER_DATA","RESPONSE_LIMIT_DEFAULT","SYMBOL_PREVIEW_DATA","SYMBOL_CLEARED_COOKIES","clearPreviewData","serialize","require","previous","getHeader","setHeader","isArray","httpOnly","sameSite","process","undefined","defineProperty","enumerable","ApiError","constructor","message","sendError","statusMessage","setLazyProp","prop","getter","opts","configurable","optsReset","writable","set","tryGetPreviewData","multiZoneDraftMode","cookies","encryptedPreviewData","tokenPreviewData","data","jsonwebtoken","verify","previewModeSigningKey","decryptWithSecret","decryptedPreviewData","Buffer","previewModeEncryptionKey","CIPHER_ALGORITHM","encryptWithSecret","secret","iv","crypto","salt","cipher","encrypted","concat","update","final","tag","getAuthTag","encryptedData","buffer","slice","CIPHER_SALT_LENGTH","decipher","setAuthTag","nodeFs","existsSync","fs","readFile","readFileSync","writeFile","mkdir","recursive","stat","BaseServerSpan","LoadComponentsSpan","NextServerSpan","NextNodeServerSpan","StartServerSpan","RenderSpan","AppRenderSpan","RouterSpan","AppRouteRouteHandlersSpan","ResolveMetadataSpan","MiddlewareSpan","NextVanillaSpanAllowlist","LogSpanAllowList","ReadonlyHeadersError","callable","Headers","Proxy","target","receiver","ReflectAdapter","lowercased","toLowerCase","original","keys","find","deleteProperty","seal","merge","join","append","existing","push","delete","forEach","callbackfn","thisArg","entries","call","values","iterator","Reflect","bind","module","__webpack_require__","leafPrototypes","getProto","obj","mode","ns","def","current","exports","definition","COMPILER_NAMES","client","server","edgeServer","BUILD_MANIFEST","parseReqUrl","parsedUrl","parseUrl","URL","query","searchParams","getAll","length","hash","search","pathname","href","host","hostname","auth","protocol","slashes","port","features","typescript","cache","WeakMap","normalizeLocalePath","locales","detectedLocale","lowercasedLocales","locale","segments","split","segment","index","indexOf","ensureLeadingSlash","startsWith","normalizeAppPath","route","reduce","endsWith","normalizeRscURL","replace","INTERCEPTION_ROUTE_MARKERS","isInterceptionRouteAppPath","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","InvariantError","PARAMETER_PATTERN","parseMatchedParameter","param","optional","repeat","getSafeKeyFromSegment","interceptionMarker","getSafeRouteKey","routeKeys","keyPrefix","backreferenceDuplicateKeys","pattern","cleanedKey","invalidKey","duplicateKey","interceptionPrefix","SP","performance","every","method","DecodeError","NormalizeError","PARAM_SEPARATOR","hasAdjacentParameterIssues","normalizeAdjacentParameters","normalized","stripNormalizedSeparators","safePathToRegexp","needsNormalization","routeToUse","error","normalizedRoute","retryError","safeCompile","compiler","compile","params","getRouteMatcher","re","groups","matcherFn","routeMatch","exec","decode","group","match","entry","cleaned","item","searchParamsToUrlQuery","stringifyUrlQueryParam","getCookieParser","parseCookieFn","unescapeSegments","compileNonPath","includes","validate","normalizeNextQueryParam","decodeQueryPathParameter","slashedProtocols","filterInternalQuery","paramKeys","isNextQueryPrefix","isNextInterceptionMarkerPrefix","detectDomainLocale","domainItems","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","FAVICON_REGEX","ROBOTS_TXT_REGEX","MANIFEST_JSON_REGEX","MANIFEST_WEBMANIFEST_REGEX","SITEMAP_XML_REGEX","compiledRegexCache","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","controller","enqueue","encode","close","streamFromBuffer","chunk","streamToString","stream","signal","decoder","TextDecoder","fatal","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","RenderResult","EMPTY","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","getBatcher","revalidateBatcher","responseGenerator","context","hasResolved","previousCacheEntry","previousCacheItem","expiresAt","now","incrementalCache","isFallback","isRoutePPREnabled","isPrefetch","routeKind","handleGet","previousIncrementalCacheEntry","resolved","routeKindToIncrementalCacheKind","incrementalResponseCacheEntry","revalidate","console","handleRevalidate","responseCacheEntry","isRevalidating","min","max","expire","MultiFileWriter","tasks","findOrCreateTask","directory","task","wait","flatMap","FileSystemCache","debug","NEXT_PRIVATE_DEBUG_CACHE","ctx","flushToDisk","serverDistDir","revalidatedTags","maxMemoryCacheSize","memoryCache","log","getMemoryCache","resetRequestCache","revalidateTag","tags","durations","existingEntry","tagsManifest","updates","stale","expired","getFilePath","fileData","mtime","lastModified","getTime","body","fetchIdx","fetchUrl","parsedData","storedTags","fetchCache","maybeSegmentData","segmentPaths","segmentsDir","segmentPath","segmentDataFilePath","tagsHeader","cacheTags","areTagsExpired","combinedTags","softTags","stringify","isAppPath","htmlPath","toRoute","IncrementalCache","dev","minimalMode","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","credentials","referrer","referrerPolicy","integrity","createHash","digest","cacheData","revalidateAfter","workUnitStore","workUnitAsyncStorage","resumeDataCache","getRenderResumeDataCache","memoryCacheData","fetch","workStore","workAsyncStorage","pendingRevalidatedTags","prerenderResumeDataCache","getPrerenderResumeDataCache","age","areTagsStale","notFoundRoutes","itemSize","isImplicitBuildTimeCache","warningText","warn","LRUNode","size","prev","next","SentinelNode","LRUCache","maxSize","calculateSize","totalSize","head","tail","addToHead","node","removeNode","moveToHead","removeTail","lastNode","newNode","remove","currentSize","createDefaultCacheHandler","refreshTags","getExpiration","updateTags","pendingSets","pendingPromise","privateEntry","timestamp","returnStream","newSaved","tee","pendingEntry","resolvePending","clonedValue","reader","read","done","byteLength","isErrored","errorRetryCount","expiration","round","handlersSymbol","handlersMapSymbol","handlersSetSymbol","reference","interopDefault","mod","default","RouterServerContextSymbol","routerServerGlobal","isInterceptionRouteRewrite","dynamicImportEsmDefault","id","RouteModule","userland","distDir","relativeProjectDir","isDev","instrumentationOnRequestError","absoluteProjectDir","cwd","loadManifests","srcPage","projectDir","loadManifestFromRelativePath","router","routesManifest","buildManifest","fallbackBuildManifest","reactLoadableManifest","nextFontManifest","clientReferenceManifest","serverActionsManifest","subresourceIntegrityManifest","serverFilesManifest","dynamicCssManifest","manifest","shouldCache","handleMissing","isStaticMetadataRoute","isAppRouteRoute","isMetadataRouteFile","appDirRelativePath","pageExtensions","strictlyMatchExtensions","normalizedPath","fastResult","regexes","getCompiledRegexes","cached","trailingMatcher","suffixMatcher","variantsMatcher","robotsExts","manifestExts","useEval","skipParse","__RSC_MANIFEST","interceptionRoutePatterns","rewrites","beforeFiles","filter","rewrite","regex","loadCustomCacheHandlers","cacheMaxMemorySize","cacheHandlers","initializeCacheHandlers","fallback","DefaultCache","RemoteCache","add","getIncrementalCache","isMinimalMode","CacheHandler","experimental","isrFlushToDisk","__incrementalCache","onRequestError","errorContext","routerServerContext","logErrorWithOriginalStack","prepare","localeResult","previewData","relative","absoluteDistDir","ensureInstrumentationRegistered","manifests","isNextDataRequest","originalPathname","originalQuery","pageIsDynamic","normalizedSrcPage","serverUtils","getServerUtils","caseSensitive","defaultRouteRegex","dynamicRouteMatcher","defaultRouteMatches","getNamedRouteRegex","getNamedParametrizedRoute","prefixRouteKeys","includeSuffix","includePrefix","intercepted","routeKey","j","fromCharCode","inverseParts","structuredClone","hasInterceptionMarker","paramMatches","namedParameterizedRoute","pathToRegexpPattern","namedRegex","excludeOptionalTrailingSlash","getRouteRegex","parameterizedRoute","getParametrizedRoute","groupIndex","markerMatch","handleRewrites","rewrittenParsedUrl","rewriteParams","fsPathname","checkRewrite","matcher","getPathMatch","regexp","delimiter","sensitive","regexModifier","source","removeUnnamedParams","missing","hasParams","matchHas","hasMatch","hasItem","getSafeParamName","paramName","newParamName","charCode","charCodeAt","matches","groupKey","parsedDestination","destQuery","prepareDestination","destHostnameCompiler","newUrl","parseDestination","escaped","destination","parseRelativeUrl","parseQuery","globalBase","resolvedBase","parsedURL","destHostname","destSearch","destPath","destParams","destPathParamKeys","destHostnameParamKeys","destPathCompiler","strOrArray","appendParamsToQuery","nextInternalLocale","dynamicParams","afterFiles","matchesPage","fsPathnameNoSlash","normalizeQueryParams","routeParamKeys","normalizedKey","getParamsFromRouteMatches","routeMatchesHeader","routeMatches","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","paramsToInterpolate","queryResult","isDraftMode","config","resolvedPathname","encodedResolvedPathname","seg","char","getResponseCache","responseCache","MINIMAL_MODE","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","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","wasPiped","apiRouteResult","Response","headersSent","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]} |