6621 lines
322 KiB
JavaScript
6621 lines
322 KiB
JavaScript
module.exports = [
|
||
"[project]/node_modules/next/dist/esm/server/route-modules/pages/module.compiled.js [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
module.exports = __turbopack_context__.r("[externals]/next/dist/compiled/next-server/pages-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/pages-turbo.runtime.dev.js, cjs)");
|
||
} else //TURBOPACK unreachable
|
||
;
|
||
} else //TURBOPACK unreachable
|
||
;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/route-kind.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"RouteKind",
|
||
()=>RouteKind
|
||
]);
|
||
var RouteKind = /*#__PURE__*/ function(RouteKind) {
|
||
/**
|
||
* `PAGES` represents all the React pages that are under `pages/`.
|
||
*/ RouteKind["PAGES"] = "PAGES";
|
||
/**
|
||
* `PAGES_API` represents all the API routes under `pages/api/`.
|
||
*/ RouteKind["PAGES_API"] = "PAGES_API";
|
||
/**
|
||
* `APP_PAGE` represents all the React pages that are under `app/` with the
|
||
* filename of `page.{j,t}s{,x}`.
|
||
*/ RouteKind["APP_PAGE"] = "APP_PAGE";
|
||
/**
|
||
* `APP_ROUTE` represents all the API routes and metadata routes that are under `app/` with the
|
||
* filename of `route.{j,t}s{,x}`.
|
||
*/ RouteKind["APP_ROUTE"] = "APP_ROUTE";
|
||
/**
|
||
* `IMAGE` represents all the images that are generated by `next/image`.
|
||
*/ RouteKind["IMAGE"] = "IMAGE";
|
||
return RouteKind;
|
||
}({});
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/build/templates/helpers.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Hoists a name from a module or promised module.
|
||
*
|
||
* @param module the module to hoist the name from
|
||
* @param name the name to hoist
|
||
* @returns the value on the module (or promised module)
|
||
*/ __turbopack_context__.s([
|
||
"hoist",
|
||
()=>hoist
|
||
]);
|
||
function hoist(module, name) {
|
||
// If the name is available in the module, return it.
|
||
if (name in module) {
|
||
return module[name];
|
||
}
|
||
// If a property called `then` exists, assume it's a promise and
|
||
// return a promise that resolves to the name.
|
||
if ('then' in module && typeof module.then === 'function') {
|
||
return module.then((mod)=>hoist(mod, name));
|
||
}
|
||
// If we're trying to hoise the default export, and the module is a function,
|
||
// return the module itself.
|
||
if (typeof module === 'function' && name === 'default') {
|
||
return module;
|
||
}
|
||
// Otherwise, return undefined.
|
||
return undefined;
|
||
}
|
||
}),
|
||
"[project]/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
function _getRequireWildcardCache(nodeInterop) {
|
||
if (typeof WeakMap !== "function") return null;
|
||
var cacheBabelInterop = new WeakMap();
|
||
var cacheNodeInterop = new WeakMap();
|
||
return (_getRequireWildcardCache = function(nodeInterop) {
|
||
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
||
})(nodeInterop);
|
||
}
|
||
function _interop_require_wildcard(obj, nodeInterop) {
|
||
if (!nodeInterop && obj && obj.__esModule) return obj;
|
||
if (obj === null || typeof obj !== "object" && typeof obj !== "function") return {
|
||
default: obj
|
||
};
|
||
var cache = _getRequireWildcardCache(nodeInterop);
|
||
if (cache && cache.has(obj)) return cache.get(obj);
|
||
var newObj = {
|
||
__proto__: null
|
||
};
|
||
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||
for(var key in obj){
|
||
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
||
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
||
if (desc && (desc.get || desc.set)) Object.defineProperty(newObj, key, desc);
|
||
else newObj[key] = obj[key];
|
||
}
|
||
}
|
||
newObj.default = obj;
|
||
if (cache) cache.set(obj, newObj);
|
||
return newObj;
|
||
}
|
||
exports._ = _interop_require_wildcard;
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/side-effect.js [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "default", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return SideEffect;
|
||
}
|
||
});
|
||
const _react = __turbopack_context__.r("[externals]/react [external] (react, cjs)");
|
||
const isServer = ("TURBOPACK compile-time value", "undefined") === 'undefined';
|
||
const useClientOnlyLayoutEffect = ("TURBOPACK compile-time truthy", 1) ? ()=>{} : "TURBOPACK unreachable";
|
||
const useClientOnlyEffect = ("TURBOPACK compile-time truthy", 1) ? ()=>{} : "TURBOPACK unreachable";
|
||
function SideEffect(props) {
|
||
const { headManager, reduceComponentsToState } = props;
|
||
function emitChange() {
|
||
if (headManager && headManager.mountedInstances) {
|
||
const headElements = _react.Children.toArray(Array.from(headManager.mountedInstances).filter(Boolean));
|
||
headManager.updateHead(reduceComponentsToState(headElements));
|
||
}
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
headManager?.mountedInstances?.add(props.children);
|
||
emitChange();
|
||
}
|
||
useClientOnlyLayoutEffect(()=>{
|
||
headManager?.mountedInstances?.add(props.children);
|
||
return ()=>{
|
||
headManager?.mountedInstances?.delete(props.children);
|
||
};
|
||
});
|
||
// We need to call `updateHead` method whenever the `SideEffect` is trigger in all
|
||
// life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s
|
||
// being rendered, we only trigger the method from the last one.
|
||
// This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`
|
||
// singleton in the layout effect pass, and actually trigger it in the effect pass.
|
||
useClientOnlyLayoutEffect(()=>{
|
||
if (headManager) {
|
||
headManager._pendingUpdate = emitChange;
|
||
}
|
||
return ()=>{
|
||
if (headManager) {
|
||
headManager._pendingUpdate = emitChange;
|
||
}
|
||
};
|
||
});
|
||
useClientOnlyEffect(()=>{
|
||
if (headManager && headManager._pendingUpdate) {
|
||
headManager._pendingUpdate();
|
||
headManager._pendingUpdate = null;
|
||
}
|
||
return ()=>{
|
||
if (headManager && headManager._pendingUpdate) {
|
||
headManager._pendingUpdate();
|
||
headManager._pendingUpdate = null;
|
||
}
|
||
};
|
||
});
|
||
return null;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
module.exports = __turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/pages/module.compiled.js [ssr] (ecmascript)").vendored['contexts'].HeadManagerContext;
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/utils/warn-once.js [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, "warnOnce", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return warnOnce;
|
||
}
|
||
});
|
||
let warnOnce = (_)=>{};
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
const warnings = new Set();
|
||
warnOnce = (msg)=>{
|
||
if (!warnings.has(msg)) {
|
||
console.warn(msg);
|
||
}
|
||
warnings.add(msg);
|
||
};
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/shared/lib/head.js [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
default: null,
|
||
defaultHead: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
default: function() {
|
||
return _default;
|
||
},
|
||
defaultHead: function() {
|
||
return defaultHead;
|
||
}
|
||
});
|
||
const _interop_require_default = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_default.cjs [ssr] (ecmascript)");
|
||
const _interop_require_wildcard = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs [ssr] (ecmascript)");
|
||
const _jsxruntime = __turbopack_context__.r("[externals]/react/jsx-runtime [external] (react/jsx-runtime, cjs)");
|
||
const _react = /*#__PURE__*/ _interop_require_wildcard._(__turbopack_context__.r("[externals]/react [external] (react, cjs)"));
|
||
const _sideeffect = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/side-effect.js [ssr] (ecmascript)"));
|
||
const _headmanagercontextsharedruntime = __turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js [ssr] (ecmascript)");
|
||
const _warnonce = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/utils/warn-once.js [ssr] (ecmascript)");
|
||
function defaultHead() {
|
||
const head = [
|
||
/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", {
|
||
charSet: "utf-8"
|
||
}, "charset"),
|
||
/*#__PURE__*/ (0, _jsxruntime.jsx)("meta", {
|
||
name: "viewport",
|
||
content: "width=device-width"
|
||
}, "viewport")
|
||
];
|
||
return head;
|
||
}
|
||
function onlyReactElement(list, child) {
|
||
// React children can be "string" or "number" in this case we ignore them for backwards compat
|
||
if (typeof child === 'string' || typeof child === 'number') {
|
||
return list;
|
||
}
|
||
// Adds support for React.Fragment
|
||
if (child.type === _react.default.Fragment) {
|
||
return list.concat(_react.default.Children.toArray(child.props.children).reduce((fragmentList, fragmentChild)=>{
|
||
if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') {
|
||
return fragmentList;
|
||
}
|
||
return fragmentList.concat(fragmentChild);
|
||
}, []));
|
||
}
|
||
return list.concat(child);
|
||
}
|
||
const METATYPES = [
|
||
'name',
|
||
'httpEquiv',
|
||
'charSet',
|
||
'itemProp'
|
||
];
|
||
/*
|
||
returns a function for filtering head child elements
|
||
which shouldn't be duplicated, like <title/>
|
||
Also adds support for deduplicated `key` properties
|
||
*/ function unique() {
|
||
const keys = new Set();
|
||
const tags = new Set();
|
||
const metaTypes = new Set();
|
||
const metaCategories = {};
|
||
return (h)=>{
|
||
let isUnique = true;
|
||
let hasKey = false;
|
||
if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {
|
||
hasKey = true;
|
||
const key = h.key.slice(h.key.indexOf('$') + 1);
|
||
if (keys.has(key)) {
|
||
isUnique = false;
|
||
} else {
|
||
keys.add(key);
|
||
}
|
||
}
|
||
// eslint-disable-next-line default-case
|
||
switch(h.type){
|
||
case 'title':
|
||
case 'base':
|
||
if (tags.has(h.type)) {
|
||
isUnique = false;
|
||
} else {
|
||
tags.add(h.type);
|
||
}
|
||
break;
|
||
case 'meta':
|
||
for(let i = 0, len = METATYPES.length; i < len; i++){
|
||
const metatype = METATYPES[i];
|
||
if (!h.props.hasOwnProperty(metatype)) continue;
|
||
if (metatype === 'charSet') {
|
||
if (metaTypes.has(metatype)) {
|
||
isUnique = false;
|
||
} else {
|
||
metaTypes.add(metatype);
|
||
}
|
||
} else {
|
||
const category = h.props[metatype];
|
||
const categories = metaCategories[metatype] || new Set();
|
||
if ((metatype !== 'name' || !hasKey) && categories.has(category)) {
|
||
isUnique = false;
|
||
} else {
|
||
categories.add(category);
|
||
metaCategories[metatype] = categories;
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
return isUnique;
|
||
};
|
||
}
|
||
/**
|
||
*
|
||
* @param headChildrenElements List of children of <Head>
|
||
*/ function reduceComponents(headChildrenElements) {
|
||
return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead().reverse()).filter(unique()).reverse().map((c, i)=>{
|
||
const key = c.key || i;
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
// omit JSON-LD structured data snippets from the warning
|
||
if (c.type === 'script' && c.props['type'] !== 'application/ld+json') {
|
||
const srcMessage = c.props['src'] ? `<script> tag with src="${c.props['src']}"` : `inline <script>`;
|
||
(0, _warnonce.warnOnce)(`Do not add <script> tags using next/head (see ${srcMessage}). Use next/script instead. \nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component`);
|
||
} else if (c.type === 'link' && c.props['rel'] === 'stylesheet') {
|
||
(0, _warnonce.warnOnce)(`Do not add stylesheets using next/head (see <link rel="stylesheet"> tag with href="${c.props['href']}"). Use Document instead. \nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component`);
|
||
}
|
||
}
|
||
return /*#__PURE__*/ _react.default.cloneElement(c, {
|
||
key
|
||
});
|
||
});
|
||
}
|
||
/**
|
||
* This component injects elements to `<head>` of your page.
|
||
* To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.
|
||
*/ function Head({ children }) {
|
||
const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);
|
||
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {
|
||
reduceComponentsToState: reduceComponents,
|
||
headManager: headManager,
|
||
children: children
|
||
});
|
||
}
|
||
const _default = Head;
|
||
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
||
Object.defineProperty(exports.default, '__esModule', {
|
||
value: true
|
||
});
|
||
Object.assign(exports.default, exports);
|
||
module.exports = exports.default;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/server/request-meta.js [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
0 && (module.exports = {
|
||
NEXT_REQUEST_META: null,
|
||
addRequestMeta: null,
|
||
getRequestMeta: null,
|
||
removeRequestMeta: null,
|
||
setRequestMeta: null
|
||
});
|
||
function _export(target, all) {
|
||
for(var name in all)Object.defineProperty(target, name, {
|
||
enumerable: true,
|
||
get: all[name]
|
||
});
|
||
}
|
||
_export(exports, {
|
||
NEXT_REQUEST_META: function() {
|
||
return NEXT_REQUEST_META;
|
||
},
|
||
addRequestMeta: function() {
|
||
return addRequestMeta;
|
||
},
|
||
getRequestMeta: function() {
|
||
return getRequestMeta;
|
||
},
|
||
removeRequestMeta: function() {
|
||
return removeRequestMeta;
|
||
},
|
||
setRequestMeta: function() {
|
||
return setRequestMeta;
|
||
}
|
||
});
|
||
const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta');
|
||
function getRequestMeta(req, key) {
|
||
const meta = req[NEXT_REQUEST_META] || {};
|
||
return typeof key === 'string' ? meta[key] : meta;
|
||
}
|
||
function setRequestMeta(req, meta) {
|
||
req[NEXT_REQUEST_META] = meta;
|
||
return meta;
|
||
}
|
||
function addRequestMeta(request, key, value) {
|
||
const meta = getRequestMeta(request);
|
||
meta[key] = value;
|
||
return setRequestMeta(request, meta);
|
||
}
|
||
function removeRequestMeta(request, key) {
|
||
const meta = getRequestMeta(request);
|
||
delete meta[key];
|
||
return setRequestMeta(request, meta);
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/pages/_error.js [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
Object.defineProperty(exports, "__esModule", {
|
||
value: true
|
||
});
|
||
Object.defineProperty(exports, /**
|
||
* `Error` component used for handling errors.
|
||
*/ "default", {
|
||
enumerable: true,
|
||
get: function() {
|
||
return Error;
|
||
}
|
||
});
|
||
const _interop_require_default = __turbopack_context__.r("[project]/node_modules/@swc/helpers/cjs/_interop_require_default.cjs [ssr] (ecmascript)");
|
||
const _jsxruntime = __turbopack_context__.r("[externals]/react/jsx-runtime [external] (react/jsx-runtime, cjs)");
|
||
const _react = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[externals]/react [external] (react, cjs)"));
|
||
const _head = /*#__PURE__*/ _interop_require_default._(__turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/head.js [ssr] (ecmascript)"));
|
||
const statusCodes = {
|
||
400: 'Bad Request',
|
||
404: 'This page could not be found',
|
||
405: 'Method Not Allowed',
|
||
500: 'Internal Server Error'
|
||
};
|
||
function _getInitialProps({ req, res, err }) {
|
||
const statusCode = res && res.statusCode ? res.statusCode : err ? err.statusCode : 404;
|
||
let hostname;
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else if (req) {
|
||
const { getRequestMeta } = __turbopack_context__.r("[project]/node_modules/next/dist/server/request-meta.js [ssr] (ecmascript)");
|
||
const initUrl = getRequestMeta(req, 'initURL');
|
||
if (initUrl) {
|
||
const url = new URL(initUrl);
|
||
hostname = url.hostname;
|
||
}
|
||
}
|
||
return {
|
||
statusCode,
|
||
hostname
|
||
};
|
||
}
|
||
const styles = {
|
||
error: {
|
||
// https://github.com/sindresorhus/modern-normalize/blob/main/modern-normalize.css#L38-L52
|
||
fontFamily: 'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',
|
||
height: '100vh',
|
||
textAlign: 'center',
|
||
display: 'flex',
|
||
flexDirection: 'column',
|
||
alignItems: 'center',
|
||
justifyContent: 'center'
|
||
},
|
||
desc: {
|
||
lineHeight: '48px'
|
||
},
|
||
h1: {
|
||
display: 'inline-block',
|
||
margin: '0 20px 0 0',
|
||
paddingRight: 23,
|
||
fontSize: 24,
|
||
fontWeight: 500,
|
||
verticalAlign: 'top'
|
||
},
|
||
h2: {
|
||
fontSize: 14,
|
||
fontWeight: 400,
|
||
lineHeight: '28px'
|
||
},
|
||
wrap: {
|
||
display: 'inline-block'
|
||
}
|
||
};
|
||
class Error extends _react.default.Component {
|
||
static{
|
||
this.displayName = 'ErrorPage';
|
||
}
|
||
static{
|
||
this.getInitialProps = _getInitialProps;
|
||
}
|
||
static{
|
||
this.origGetInitialProps = _getInitialProps;
|
||
}
|
||
render() {
|
||
const { statusCode, withDarkMode = true } = this.props;
|
||
const title = this.props.title || statusCodes[statusCode] || 'An unexpected error has occurred';
|
||
return /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
|
||
style: styles.error,
|
||
children: [
|
||
/*#__PURE__*/ (0, _jsxruntime.jsx)(_head.default, {
|
||
children: /*#__PURE__*/ (0, _jsxruntime.jsx)("title", {
|
||
children: statusCode ? `${statusCode}: ${title}` : 'Application error: a client-side exception has occurred'
|
||
})
|
||
}),
|
||
/*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
|
||
style: styles.desc,
|
||
children: [
|
||
/*#__PURE__*/ (0, _jsxruntime.jsx)("style", {
|
||
dangerouslySetInnerHTML: {
|
||
/* CSS minified from
|
||
body { margin: 0; color: #000; background: #fff; }
|
||
.next-error-h1 {
|
||
border-right: 1px solid rgba(0, 0, 0, .3);
|
||
}
|
||
|
||
${
|
||
withDarkMode
|
||
? `@media (prefers-color-scheme: dark) {
|
||
body { color: #fff; background: #000; }
|
||
.next-error-h1 {
|
||
border-right: 1px solid rgba(255, 255, 255, .3);
|
||
}
|
||
}`
|
||
: ''
|
||
}
|
||
*/ __html: `body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}${withDarkMode ? '@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}' : ''}`
|
||
}
|
||
}),
|
||
statusCode ? /*#__PURE__*/ (0, _jsxruntime.jsx)("h1", {
|
||
className: "next-error-h1",
|
||
style: styles.h1,
|
||
children: statusCode
|
||
}) : null,
|
||
/*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
|
||
style: styles.wrap,
|
||
children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("h2", {
|
||
style: styles.h2,
|
||
children: [
|
||
this.props.title || statusCode ? title : /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
||
children: [
|
||
"Application error: a client-side exception has occurred",
|
||
' ',
|
||
Boolean(this.props.hostname) && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
|
||
children: [
|
||
"while loading ",
|
||
this.props.hostname
|
||
]
|
||
}),
|
||
' ',
|
||
"(see the browser console for more information)"
|
||
]
|
||
}),
|
||
"."
|
||
]
|
||
})
|
||
})
|
||
]
|
||
})
|
||
]
|
||
});
|
||
}
|
||
}
|
||
if ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {
|
||
Object.defineProperty(exports.default, '__esModule', {
|
||
value: true
|
||
});
|
||
Object.assign(exports.default, exports);
|
||
module.exports = exports.default;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"AppRenderSpan",
|
||
()=>AppRenderSpan,
|
||
"AppRouteRouteHandlersSpan",
|
||
()=>AppRouteRouteHandlersSpan,
|
||
"BaseServerSpan",
|
||
()=>BaseServerSpan,
|
||
"LoadComponentsSpan",
|
||
()=>LoadComponentsSpan,
|
||
"LogSpanAllowList",
|
||
()=>LogSpanAllowList,
|
||
"MiddlewareSpan",
|
||
()=>MiddlewareSpan,
|
||
"NextNodeServerSpan",
|
||
()=>NextNodeServerSpan,
|
||
"NextServerSpan",
|
||
()=>NextServerSpan,
|
||
"NextVanillaSpanAllowlist",
|
||
()=>NextVanillaSpanAllowlist,
|
||
"NodeSpan",
|
||
()=>NodeSpan,
|
||
"RenderSpan",
|
||
()=>RenderSpan,
|
||
"ResolveMetadataSpan",
|
||
()=>ResolveMetadataSpan,
|
||
"RouterSpan",
|
||
()=>RouterSpan,
|
||
"StartServerSpan",
|
||
()=>StartServerSpan
|
||
]);
|
||
/**
|
||
* Contains predefined constants for the trace span name in next/server.
|
||
*
|
||
* Currently, next/server/tracer is internal implementation only for tracking
|
||
* next.js's implementation only with known span names defined here.
|
||
**/ // eslint typescript has a bug with TS enums
|
||
var BaseServerSpan = /*#__PURE__*/ function(BaseServerSpan) {
|
||
BaseServerSpan["handleRequest"] = "BaseServer.handleRequest";
|
||
BaseServerSpan["run"] = "BaseServer.run";
|
||
BaseServerSpan["pipe"] = "BaseServer.pipe";
|
||
BaseServerSpan["getStaticHTML"] = "BaseServer.getStaticHTML";
|
||
BaseServerSpan["render"] = "BaseServer.render";
|
||
BaseServerSpan["renderToResponseWithComponents"] = "BaseServer.renderToResponseWithComponents";
|
||
BaseServerSpan["renderToResponse"] = "BaseServer.renderToResponse";
|
||
BaseServerSpan["renderToHTML"] = "BaseServer.renderToHTML";
|
||
BaseServerSpan["renderError"] = "BaseServer.renderError";
|
||
BaseServerSpan["renderErrorToResponse"] = "BaseServer.renderErrorToResponse";
|
||
BaseServerSpan["renderErrorToHTML"] = "BaseServer.renderErrorToHTML";
|
||
BaseServerSpan["render404"] = "BaseServer.render404";
|
||
return BaseServerSpan;
|
||
}(BaseServerSpan || {});
|
||
var LoadComponentsSpan = /*#__PURE__*/ function(LoadComponentsSpan) {
|
||
LoadComponentsSpan["loadDefaultErrorComponents"] = "LoadComponents.loadDefaultErrorComponents";
|
||
LoadComponentsSpan["loadComponents"] = "LoadComponents.loadComponents";
|
||
return LoadComponentsSpan;
|
||
}(LoadComponentsSpan || {});
|
||
var NextServerSpan = /*#__PURE__*/ function(NextServerSpan) {
|
||
NextServerSpan["getRequestHandler"] = "NextServer.getRequestHandler";
|
||
NextServerSpan["getRequestHandlerWithMetadata"] = "NextServer.getRequestHandlerWithMetadata";
|
||
NextServerSpan["getServer"] = "NextServer.getServer";
|
||
NextServerSpan["getServerRequestHandler"] = "NextServer.getServerRequestHandler";
|
||
NextServerSpan["createServer"] = "createServer.createServer";
|
||
return NextServerSpan;
|
||
}(NextServerSpan || {});
|
||
var NextNodeServerSpan = /*#__PURE__*/ function(NextNodeServerSpan) {
|
||
NextNodeServerSpan["compression"] = "NextNodeServer.compression";
|
||
NextNodeServerSpan["getBuildId"] = "NextNodeServer.getBuildId";
|
||
NextNodeServerSpan["createComponentTree"] = "NextNodeServer.createComponentTree";
|
||
NextNodeServerSpan["clientComponentLoading"] = "NextNodeServer.clientComponentLoading";
|
||
NextNodeServerSpan["getLayoutOrPageModule"] = "NextNodeServer.getLayoutOrPageModule";
|
||
NextNodeServerSpan["generateStaticRoutes"] = "NextNodeServer.generateStaticRoutes";
|
||
NextNodeServerSpan["generateFsStaticRoutes"] = "NextNodeServer.generateFsStaticRoutes";
|
||
NextNodeServerSpan["generatePublicRoutes"] = "NextNodeServer.generatePublicRoutes";
|
||
NextNodeServerSpan["generateImageRoutes"] = "NextNodeServer.generateImageRoutes.route";
|
||
NextNodeServerSpan["sendRenderResult"] = "NextNodeServer.sendRenderResult";
|
||
NextNodeServerSpan["proxyRequest"] = "NextNodeServer.proxyRequest";
|
||
NextNodeServerSpan["runApi"] = "NextNodeServer.runApi";
|
||
NextNodeServerSpan["render"] = "NextNodeServer.render";
|
||
NextNodeServerSpan["renderHTML"] = "NextNodeServer.renderHTML";
|
||
NextNodeServerSpan["imageOptimizer"] = "NextNodeServer.imageOptimizer";
|
||
NextNodeServerSpan["getPagePath"] = "NextNodeServer.getPagePath";
|
||
NextNodeServerSpan["getRoutesManifest"] = "NextNodeServer.getRoutesManifest";
|
||
NextNodeServerSpan["findPageComponents"] = "NextNodeServer.findPageComponents";
|
||
NextNodeServerSpan["getFontManifest"] = "NextNodeServer.getFontManifest";
|
||
NextNodeServerSpan["getServerComponentManifest"] = "NextNodeServer.getServerComponentManifest";
|
||
NextNodeServerSpan["getRequestHandler"] = "NextNodeServer.getRequestHandler";
|
||
NextNodeServerSpan["renderToHTML"] = "NextNodeServer.renderToHTML";
|
||
NextNodeServerSpan["renderError"] = "NextNodeServer.renderError";
|
||
NextNodeServerSpan["renderErrorToHTML"] = "NextNodeServer.renderErrorToHTML";
|
||
NextNodeServerSpan["render404"] = "NextNodeServer.render404";
|
||
NextNodeServerSpan["startResponse"] = "NextNodeServer.startResponse";
|
||
// nested inner span, does not require parent scope name
|
||
NextNodeServerSpan["route"] = "route";
|
||
NextNodeServerSpan["onProxyReq"] = "onProxyReq";
|
||
NextNodeServerSpan["apiResolver"] = "apiResolver";
|
||
NextNodeServerSpan["internalFetch"] = "internalFetch";
|
||
return NextNodeServerSpan;
|
||
}(NextNodeServerSpan || {});
|
||
var StartServerSpan = /*#__PURE__*/ function(StartServerSpan) {
|
||
StartServerSpan["startServer"] = "startServer.startServer";
|
||
return StartServerSpan;
|
||
}(StartServerSpan || {});
|
||
var RenderSpan = /*#__PURE__*/ function(RenderSpan) {
|
||
RenderSpan["getServerSideProps"] = "Render.getServerSideProps";
|
||
RenderSpan["getStaticProps"] = "Render.getStaticProps";
|
||
RenderSpan["renderToString"] = "Render.renderToString";
|
||
RenderSpan["renderDocument"] = "Render.renderDocument";
|
||
RenderSpan["createBodyResult"] = "Render.createBodyResult";
|
||
return RenderSpan;
|
||
}(RenderSpan || {});
|
||
var AppRenderSpan = /*#__PURE__*/ function(AppRenderSpan) {
|
||
AppRenderSpan["renderToString"] = "AppRender.renderToString";
|
||
AppRenderSpan["renderToReadableStream"] = "AppRender.renderToReadableStream";
|
||
AppRenderSpan["getBodyResult"] = "AppRender.getBodyResult";
|
||
AppRenderSpan["fetch"] = "AppRender.fetch";
|
||
return AppRenderSpan;
|
||
}(AppRenderSpan || {});
|
||
var RouterSpan = /*#__PURE__*/ function(RouterSpan) {
|
||
RouterSpan["executeRoute"] = "Router.executeRoute";
|
||
return RouterSpan;
|
||
}(RouterSpan || {});
|
||
var NodeSpan = /*#__PURE__*/ function(NodeSpan) {
|
||
NodeSpan["runHandler"] = "Node.runHandler";
|
||
return NodeSpan;
|
||
}(NodeSpan || {});
|
||
var AppRouteRouteHandlersSpan = /*#__PURE__*/ function(AppRouteRouteHandlersSpan) {
|
||
AppRouteRouteHandlersSpan["runHandler"] = "AppRouteRouteHandlers.runHandler";
|
||
return AppRouteRouteHandlersSpan;
|
||
}(AppRouteRouteHandlersSpan || {});
|
||
var ResolveMetadataSpan = /*#__PURE__*/ function(ResolveMetadataSpan) {
|
||
ResolveMetadataSpan["generateMetadata"] = "ResolveMetadata.generateMetadata";
|
||
ResolveMetadataSpan["generateViewport"] = "ResolveMetadata.generateViewport";
|
||
return ResolveMetadataSpan;
|
||
}(ResolveMetadataSpan || {});
|
||
var MiddlewareSpan = /*#__PURE__*/ function(MiddlewareSpan) {
|
||
MiddlewareSpan["execute"] = "Middleware.execute";
|
||
return MiddlewareSpan;
|
||
}(MiddlewareSpan || {});
|
||
const NextVanillaSpanAllowlist = new Set([
|
||
"Middleware.execute",
|
||
"BaseServer.handleRequest",
|
||
"Render.getServerSideProps",
|
||
"Render.getStaticProps",
|
||
"AppRender.fetch",
|
||
"AppRender.getBodyResult",
|
||
"Render.renderDocument",
|
||
"Node.runHandler",
|
||
"AppRouteRouteHandlers.runHandler",
|
||
"ResolveMetadata.generateMetadata",
|
||
"ResolveMetadata.generateViewport",
|
||
"NextNodeServer.createComponentTree",
|
||
"NextNodeServer.findPageComponents",
|
||
"NextNodeServer.getLayoutOrPageModule",
|
||
"NextNodeServer.startResponse",
|
||
"NextNodeServer.clientComponentLoading"
|
||
]);
|
||
const LogSpanAllowList = new Set([
|
||
"NextNodeServer.findPageComponents",
|
||
"NextNodeServer.createComponentTree",
|
||
"NextNodeServer.clientComponentLoading"
|
||
]);
|
||
;
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Check to see if a value is Thenable.
|
||
*
|
||
* @param promise the maybe-thenable value
|
||
* @returns true if the value is thenable
|
||
*/ __turbopack_context__.s([
|
||
"isThenable",
|
||
()=>isThenable
|
||
]);
|
||
function isThenable(promise) {
|
||
return promise !== null && typeof promise === 'object' && 'then' in promise && typeof promise.then === 'function';
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"BubbledError",
|
||
()=>BubbledError,
|
||
"SpanKind",
|
||
()=>SpanKind,
|
||
"SpanStatusCode",
|
||
()=>SpanStatusCode,
|
||
"getTracer",
|
||
()=>getTracer,
|
||
"isBubbledError",
|
||
()=>isBubbledError
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
const NEXT_OTEL_PERFORMANCE_PREFIX = process.env.NEXT_OTEL_PERFORMANCE_PREFIX;
|
||
let api;
|
||
// we want to allow users to use their own version of @opentelemetry/api if they
|
||
// want to, so we try to require it first, and if it fails we fall back to the
|
||
// version that is bundled with Next.js
|
||
// this is because @opentelemetry/api has to be synced with the version of
|
||
// @opentelemetry/tracing that is used, and we don't want to force users to use
|
||
// the version that is bundled with Next.js.
|
||
// the API is ~stable, so this should be fine
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else {
|
||
try {
|
||
api = __turbopack_context__.r("[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)");
|
||
} catch (err) {
|
||
api = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [ssr] (ecmascript)");
|
||
}
|
||
}
|
||
const { context, propagation, trace, SpanStatusCode, SpanKind, ROOT_CONTEXT } = api;
|
||
class BubbledError extends Error {
|
||
constructor(bubble, result){
|
||
super(), this.bubble = bubble, this.result = result;
|
||
}
|
||
}
|
||
function isBubbledError(error) {
|
||
if (typeof error !== 'object' || error === null) return false;
|
||
return error instanceof BubbledError;
|
||
}
|
||
const closeSpanWithError = (span, error)=>{
|
||
if (isBubbledError(error) && error.bubble) {
|
||
span.setAttribute('next.bubble', true);
|
||
} else {
|
||
if (error) {
|
||
span.recordException(error);
|
||
span.setAttribute('error.type', error.name);
|
||
}
|
||
span.setStatus({
|
||
code: SpanStatusCode.ERROR,
|
||
message: error == null ? void 0 : error.message
|
||
});
|
||
}
|
||
span.end();
|
||
};
|
||
/** we use this map to propagate attributes from nested spans to the top span */ const rootSpanAttributesStore = new Map();
|
||
const rootSpanIdKey = api.createContextKey('next.rootSpanId');
|
||
let lastSpanId = 0;
|
||
const getSpanId = ()=>lastSpanId++;
|
||
const clientTraceDataSetter = {
|
||
set (carrier, key, value) {
|
||
carrier.push({
|
||
key,
|
||
value
|
||
});
|
||
}
|
||
};
|
||
class NextTracerImpl {
|
||
/**
|
||
* Returns an instance to the trace with configured name.
|
||
* Since wrap / trace can be defined in any place prior to actual trace subscriber initialization,
|
||
* This should be lazily evaluated.
|
||
*/ getTracerInstance() {
|
||
return trace.getTracer('next.js', '0.0.1');
|
||
}
|
||
getContext() {
|
||
return context;
|
||
}
|
||
getTracePropagationData() {
|
||
const activeContext = context.active();
|
||
const entries = [];
|
||
propagation.inject(activeContext, entries, clientTraceDataSetter);
|
||
return entries;
|
||
}
|
||
getActiveScopeSpan() {
|
||
return trace.getSpan(context == null ? void 0 : context.active());
|
||
}
|
||
withPropagatedContext(carrier, fn, getter, force = false) {
|
||
const activeContext = context.active();
|
||
if (force) {
|
||
const remoteContext = propagation.extract(ROOT_CONTEXT, carrier, getter);
|
||
if (trace.getSpanContext(remoteContext)) {
|
||
return context.with(remoteContext, fn);
|
||
}
|
||
// Preserve the current active span while still merging any extracted
|
||
// baggage/context values from the carrier.
|
||
const mergedContext = propagation.extract(activeContext, carrier, getter);
|
||
return context.with(mergedContext, fn);
|
||
}
|
||
if (trace.getSpanContext(activeContext)) {
|
||
// Active span is already set, too late to propagate.
|
||
return fn();
|
||
}
|
||
const remoteContext = propagation.extract(activeContext, carrier, getter);
|
||
return context.with(remoteContext, fn);
|
||
}
|
||
trace(...args) {
|
||
const [type, fnOrOptions, fnOrEmpty] = args;
|
||
// coerce options form overload
|
||
const { fn, options } = typeof fnOrOptions === 'function' ? {
|
||
fn: fnOrOptions,
|
||
options: {}
|
||
} : {
|
||
fn: fnOrEmpty,
|
||
options: {
|
||
...fnOrOptions
|
||
}
|
||
};
|
||
const spanName = options.spanName ?? type;
|
||
if (!__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(type) && process.env.NEXT_OTEL_VERBOSE !== '1' || options.hideSpan) {
|
||
return fn();
|
||
}
|
||
// Trying to get active scoped span to assign parent. If option specifies parent span manually, will try to use it.
|
||
let spanContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan());
|
||
if (!spanContext) {
|
||
spanContext = (context == null ? void 0 : context.active()) ?? ROOT_CONTEXT;
|
||
}
|
||
// Check if there's already a root span in the store for this trace
|
||
// We are intentionally not checking whether there is an active context
|
||
// from outside of nextjs to ensure that we can provide the same level
|
||
// of telemetry when using a custom server
|
||
const existingRootSpanId = spanContext.getValue(rootSpanIdKey);
|
||
const isRootSpan = typeof existingRootSpanId !== 'number' || !rootSpanAttributesStore.has(existingRootSpanId);
|
||
const spanId = getSpanId();
|
||
options.attributes = {
|
||
'next.span_name': spanName,
|
||
'next.span_type': type,
|
||
...options.attributes
|
||
};
|
||
return context.with(spanContext.setValue(rootSpanIdKey, spanId), ()=>this.getTracerInstance().startActiveSpan(spanName, options, (span)=>{
|
||
let startTime;
|
||
if (NEXT_OTEL_PERFORMANCE_PREFIX && type && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["LogSpanAllowList"].has(type)) {
|
||
startTime = 'performance' in globalThis && 'measure' in performance ? globalThis.performance.now() : undefined;
|
||
}
|
||
let cleanedUp = false;
|
||
const onCleanup = ()=>{
|
||
if (cleanedUp) return;
|
||
cleanedUp = true;
|
||
rootSpanAttributesStore.delete(spanId);
|
||
if (startTime) {
|
||
performance.measure(`${NEXT_OTEL_PERFORMANCE_PREFIX}:next-${(type.split('.').pop() || '').replace(/[A-Z]/g, (match)=>'-' + match.toLowerCase())}`, {
|
||
start: startTime,
|
||
end: performance.now()
|
||
});
|
||
}
|
||
};
|
||
if (isRootSpan) {
|
||
rootSpanAttributesStore.set(spanId, new Map(Object.entries(options.attributes ?? {})));
|
||
}
|
||
if (fn.length > 1) {
|
||
try {
|
||
return fn(span, (err)=>closeSpanWithError(span, err));
|
||
} catch (err) {
|
||
closeSpanWithError(span, err);
|
||
throw err;
|
||
} finally{
|
||
onCleanup();
|
||
}
|
||
}
|
||
try {
|
||
const result = fn(span);
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$is$2d$thenable$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["isThenable"])(result)) {
|
||
// If there's error make sure it throws
|
||
return result.then((res)=>{
|
||
span.end();
|
||
// Need to pass down the promise result,
|
||
// it could be react stream response with error { error, stream }
|
||
return res;
|
||
}).catch((err)=>{
|
||
closeSpanWithError(span, err);
|
||
throw err;
|
||
}).finally(onCleanup);
|
||
} else {
|
||
span.end();
|
||
onCleanup();
|
||
}
|
||
return result;
|
||
} catch (err) {
|
||
closeSpanWithError(span, err);
|
||
onCleanup();
|
||
throw err;
|
||
}
|
||
}));
|
||
}
|
||
wrap(...args) {
|
||
const tracer = this;
|
||
const [name, options, fn] = args.length === 3 ? args : [
|
||
args[0],
|
||
{},
|
||
args[1]
|
||
];
|
||
if (!__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NextVanillaSpanAllowlist"].has(name) && process.env.NEXT_OTEL_VERBOSE !== '1') {
|
||
return fn;
|
||
}
|
||
return function() {
|
||
let optionsObj = options;
|
||
if (typeof optionsObj === 'function' && typeof fn === 'function') {
|
||
optionsObj = optionsObj.apply(this, arguments);
|
||
}
|
||
const lastArgId = arguments.length - 1;
|
||
const cb = arguments[lastArgId];
|
||
if (typeof cb === 'function') {
|
||
const scopeBoundCb = tracer.getContext().bind(context.active(), cb);
|
||
return tracer.trace(name, optionsObj, (_span, done)=>{
|
||
arguments[lastArgId] = function(err) {
|
||
done == null ? void 0 : done(err);
|
||
return scopeBoundCb.apply(this, arguments);
|
||
};
|
||
return fn.apply(this, arguments);
|
||
});
|
||
} else {
|
||
return tracer.trace(name, optionsObj, ()=>fn.apply(this, arguments));
|
||
}
|
||
};
|
||
}
|
||
startSpan(...args) {
|
||
const [type, options] = args;
|
||
const spanContext = this.getSpanContext((options == null ? void 0 : options.parentSpan) ?? this.getActiveScopeSpan());
|
||
return this.getTracerInstance().startSpan(type, options, spanContext);
|
||
}
|
||
getSpanContext(parentSpan) {
|
||
const spanContext = parentSpan ? trace.setSpan(context.active(), parentSpan) : undefined;
|
||
return spanContext;
|
||
}
|
||
getRootSpanAttributes() {
|
||
const spanId = context.active().getValue(rootSpanIdKey);
|
||
return rootSpanAttributesStore.get(spanId);
|
||
}
|
||
setRootSpanAttribute(key, value) {
|
||
const spanId = context.active().getValue(rootSpanIdKey);
|
||
const attributes = rootSpanAttributesStore.get(spanId);
|
||
if (attributes && !attributes.has(key)) {
|
||
attributes.set(key, value);
|
||
}
|
||
}
|
||
withSpan(span, fn) {
|
||
const spanContext = trace.setSpan(context.active(), span);
|
||
return context.with(spanContext, fn);
|
||
}
|
||
}
|
||
const getTracer = (()=>{
|
||
const tracer = new NextTracerImpl();
|
||
return ()=>tracer;
|
||
})();
|
||
;
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/querystring.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"assign",
|
||
()=>assign,
|
||
"searchParamsToUrlQuery",
|
||
()=>searchParamsToUrlQuery,
|
||
"urlQueryToSearchParams",
|
||
()=>urlQueryToSearchParams
|
||
]);
|
||
function searchParamsToUrlQuery(searchParams) {
|
||
const query = {};
|
||
for (const [key, value] of searchParams.entries()){
|
||
const existing = query[key];
|
||
if (typeof existing === 'undefined') {
|
||
query[key] = value;
|
||
} else if (Array.isArray(existing)) {
|
||
existing.push(value);
|
||
} else {
|
||
query[key] = [
|
||
existing,
|
||
value
|
||
];
|
||
}
|
||
}
|
||
return query;
|
||
}
|
||
function stringifyUrlQueryParam(param) {
|
||
if (typeof param === 'string') {
|
||
return param;
|
||
}
|
||
if (typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') {
|
||
return String(param);
|
||
} else {
|
||
return '';
|
||
}
|
||
}
|
||
function urlQueryToSearchParams(query) {
|
||
const searchParams = new URLSearchParams();
|
||
for (const [key, value] of Object.entries(query)){
|
||
if (Array.isArray(value)) {
|
||
for (const item of value){
|
||
searchParams.append(key, stringifyUrlQueryParam(item));
|
||
}
|
||
} else {
|
||
searchParams.set(key, stringifyUrlQueryParam(value));
|
||
}
|
||
}
|
||
return searchParams;
|
||
}
|
||
function assign(target, ...searchParamsList) {
|
||
for (const searchParams of searchParamsList){
|
||
for (const key of searchParams.keys()){
|
||
target.delete(key);
|
||
}
|
||
for (const [key, value] of searchParams.entries()){
|
||
target.append(key, value);
|
||
}
|
||
}
|
||
return target;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-url.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"formatUrl",
|
||
()=>formatUrl,
|
||
"formatWithValidation",
|
||
()=>formatWithValidation,
|
||
"urlObjectKeys",
|
||
()=>urlObjectKeys
|
||
]);
|
||
// Format function modified from nodejs
|
||
// Copyright Joyent, Inc. and other Node contributors.
|
||
//
|
||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||
// copy of this software and associated documentation files (the
|
||
// "Software"), to deal in the Software without restriction, including
|
||
// without limitation the rights to use, copy, modify, merge, publish,
|
||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||
// persons to whom the Software is furnished to do so, subject to the
|
||
// following conditions:
|
||
//
|
||
// The above copyright notice and this permission notice shall be included
|
||
// in all copies or substantial portions of the Software.
|
||
//
|
||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$querystring$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/querystring.js [ssr] (ecmascript)");
|
||
;
|
||
const slashedProtocols = /https?|ftp|gopher|file/;
|
||
function formatUrl(urlObj) {
|
||
let { auth, hostname } = urlObj;
|
||
let protocol = urlObj.protocol || '';
|
||
let pathname = urlObj.pathname || '';
|
||
let hash = urlObj.hash || '';
|
||
let query = urlObj.query || '';
|
||
let host = false;
|
||
auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';
|
||
if (urlObj.host) {
|
||
host = auth + urlObj.host;
|
||
} else if (hostname) {
|
||
host = auth + (~hostname.indexOf(':') ? `[${hostname}]` : hostname);
|
||
if (urlObj.port) {
|
||
host += ':' + urlObj.port;
|
||
}
|
||
}
|
||
if (query && typeof query === 'object') {
|
||
query = String(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$querystring$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["urlQueryToSearchParams"](query));
|
||
}
|
||
let search = urlObj.search || query && `?${query}` || '';
|
||
if (protocol && !protocol.endsWith(':')) protocol += ':';
|
||
if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {
|
||
host = '//' + (host || '');
|
||
if (pathname && pathname[0] !== '/') pathname = '/' + pathname;
|
||
} else if (!host) {
|
||
host = '';
|
||
}
|
||
if (hash && hash[0] !== '#') hash = '#' + hash;
|
||
if (search && search[0] !== '?') search = '?' + search;
|
||
pathname = pathname.replace(/[?#]/g, encodeURIComponent);
|
||
search = search.replace('#', '%23');
|
||
return `${protocol}${host}${pathname}${search}${hash}`;
|
||
}
|
||
const urlObjectKeys = [
|
||
'auth',
|
||
'hash',
|
||
'host',
|
||
'hostname',
|
||
'href',
|
||
'path',
|
||
'pathname',
|
||
'port',
|
||
'protocol',
|
||
'query',
|
||
'search',
|
||
'slashes'
|
||
];
|
||
function formatWithValidation(url) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (url !== null && typeof url === 'object') {
|
||
Object.keys(url).forEach((key)=>{
|
||
if (!urlObjectKeys.includes(key)) {
|
||
console.warn(`Unknown key passed via urlObject into url.format: ${key}`);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
return formatUrl(url);
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/request-meta.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// FIXME: (wyattjoh) this is a temporary solution to allow us to pass data between bundled modules
|
||
__turbopack_context__.s([
|
||
"NEXT_REQUEST_META",
|
||
()=>NEXT_REQUEST_META,
|
||
"addRequestMeta",
|
||
()=>addRequestMeta,
|
||
"getRequestMeta",
|
||
()=>getRequestMeta,
|
||
"removeRequestMeta",
|
||
()=>removeRequestMeta,
|
||
"setRequestMeta",
|
||
()=>setRequestMeta
|
||
]);
|
||
const NEXT_REQUEST_META = Symbol.for('NextInternalRequestMeta');
|
||
function getRequestMeta(req, key) {
|
||
const meta = req[NEXT_REQUEST_META] || {};
|
||
return typeof key === 'string' ? meta[key] : meta;
|
||
}
|
||
function setRequestMeta(req, meta) {
|
||
req[NEXT_REQUEST_META] = meta;
|
||
return meta;
|
||
}
|
||
function addRequestMeta(request, key, value) {
|
||
const meta = getRequestMeta(request);
|
||
meta[key] = value;
|
||
return setRequestMeta(request, meta);
|
||
}
|
||
function removeRequestMeta(request, key) {
|
||
const meta = getRequestMeta(request);
|
||
delete meta[key];
|
||
return setRequestMeta(request, meta);
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/app-render/interop-default.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Interop between "export default" and "module.exports".
|
||
*/ __turbopack_context__.s([
|
||
"interopDefault",
|
||
()=>interopDefault
|
||
]);
|
||
function interopDefault(mod) {
|
||
return mod.default || mod;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"getRevalidateReason",
|
||
()=>getRevalidateReason
|
||
]);
|
||
function getRevalidateReason(params) {
|
||
if (params.isOnDemandRevalidate) {
|
||
return 'on-demand';
|
||
}
|
||
if (params.isStaticGeneration) {
|
||
return 'stale';
|
||
}
|
||
return undefined;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Given a path this function will find the pathname, query and hash and return
|
||
* them. This is useful to parse full paths on the client side.
|
||
* @param path A path to parse e.g. /foo/bar?id=1#hash
|
||
*/ __turbopack_context__.s([
|
||
"parsePath",
|
||
()=>parsePath
|
||
]);
|
||
function parsePath(path) {
|
||
const hashIndex = path.indexOf('#');
|
||
const queryIndex = path.indexOf('?');
|
||
const hasQuery = queryIndex > -1 && (hashIndex < 0 || queryIndex < hashIndex);
|
||
if (hasQuery || hashIndex > -1) {
|
||
return {
|
||
pathname: path.substring(0, hasQuery ? queryIndex : hashIndex),
|
||
query: hasQuery ? path.substring(queryIndex, hashIndex > -1 ? hashIndex : undefined) : '',
|
||
hash: hashIndex > -1 ? path.slice(hashIndex) : ''
|
||
};
|
||
}
|
||
return {
|
||
pathname: path,
|
||
query: '',
|
||
hash: ''
|
||
};
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"pathHasPrefix",
|
||
()=>pathHasPrefix
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [ssr] (ecmascript)");
|
||
;
|
||
function pathHasPrefix(path, prefix) {
|
||
if (typeof path !== 'string') {
|
||
return false;
|
||
}
|
||
const { pathname } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["parsePath"])(path);
|
||
return pathname === prefix || pathname.startsWith(prefix + '/');
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-data-path.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"normalizeDataPath",
|
||
()=>normalizeDataPath
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [ssr] (ecmascript)");
|
||
;
|
||
function normalizeDataPath(pathname) {
|
||
if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["pathHasPrefix"])(pathname || '/', '/_next/data')) {
|
||
return pathname;
|
||
}
|
||
pathname = pathname.replace(/\/_next\/data\/[^/]{1,}/, '').replace(/\.json$/, '');
|
||
if (pathname === '/index') {
|
||
return '/';
|
||
}
|
||
return pathname;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/lib/detached-promise.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* A `Promise.withResolvers` implementation that exposes the `resolve` and
|
||
* `reject` functions on a `Promise`.
|
||
*
|
||
* @see https://tc39.es/proposal-promise-with-resolvers/
|
||
*/ __turbopack_context__.s([
|
||
"DetachedPromise",
|
||
()=>DetachedPromise
|
||
]);
|
||
class DetachedPromise {
|
||
constructor(){
|
||
let resolve;
|
||
let reject;
|
||
// Create the promise and assign the resolvers to the object.
|
||
this.promise = new Promise((res, rej)=>{
|
||
resolve = res;
|
||
reject = rej;
|
||
});
|
||
// We know that resolvers is defined because the Promise constructor runs
|
||
// synchronously.
|
||
this.resolve = resolve;
|
||
this.reject = reject;
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/lib/batcher.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"Batcher",
|
||
()=>Batcher
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/detached-promise.js [ssr] (ecmascript)");
|
||
;
|
||
class Batcher {
|
||
constructor(cacheKeyFn, /**
|
||
* A function that will be called to schedule the wrapped function to be
|
||
* executed. This defaults to a function that will execute the function
|
||
* immediately.
|
||
*/ schedulerFn = (fn)=>fn()){
|
||
this.cacheKeyFn = cacheKeyFn;
|
||
this.schedulerFn = schedulerFn;
|
||
this.pending = new Map();
|
||
}
|
||
static create(options) {
|
||
return new Batcher(options == null ? void 0 : options.cacheKeyFn, options == null ? void 0 : options.schedulerFn);
|
||
}
|
||
/**
|
||
* Wraps a function in a promise that will be resolved or rejected only once
|
||
* for a given key. This will allow multiple calls to the function to be
|
||
* made, but only one will be executed at a time. The result of the first
|
||
* call will be returned to all callers.
|
||
*
|
||
* @param key the key to use for the cache
|
||
* @param fn the function to wrap
|
||
* @returns a promise that resolves to the result of the function
|
||
*/ async batch(key, fn) {
|
||
const cacheKey = this.cacheKeyFn ? await this.cacheKeyFn(key) : key;
|
||
if (cacheKey === null) {
|
||
return fn({
|
||
resolve: (value)=>Promise.resolve(value),
|
||
key
|
||
});
|
||
}
|
||
const pending = this.pending.get(cacheKey);
|
||
if (pending) return pending;
|
||
const { promise, resolve, reject } = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["DetachedPromise"]();
|
||
this.pending.set(cacheKey, promise);
|
||
this.schedulerFn(async ()=>{
|
||
try {
|
||
const result = await fn({
|
||
resolve,
|
||
key
|
||
});
|
||
// Resolving a promise multiple times is a no-op, so we can safely
|
||
// resolve all pending promises with the same result.
|
||
resolve(result);
|
||
} catch (err) {
|
||
reject(err);
|
||
} finally{
|
||
this.pending.delete(cacheKey);
|
||
}
|
||
});
|
||
return promise;
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"LRUCache",
|
||
()=>LRUCache
|
||
]);
|
||
/**
|
||
* Node in the doubly-linked list used for LRU tracking.
|
||
* Each node represents a cache entry with bidirectional pointers.
|
||
*/ class LRUNode {
|
||
constructor(key, data, size){
|
||
this.prev = null;
|
||
this.next = null;
|
||
this.key = key;
|
||
this.data = data;
|
||
this.size = size;
|
||
}
|
||
}
|
||
/**
|
||
* Sentinel node used for head/tail boundaries.
|
||
* These nodes don't contain actual cache data but simplify list operations.
|
||
*/ class SentinelNode {
|
||
constructor(){
|
||
this.prev = null;
|
||
this.next = null;
|
||
}
|
||
}
|
||
class LRUCache {
|
||
constructor(maxSize, calculateSize, onEvict){
|
||
this.cache = new Map();
|
||
this.totalSize = 0;
|
||
this.maxSize = maxSize;
|
||
this.calculateSize = calculateSize;
|
||
this.onEvict = onEvict;
|
||
// Create sentinel nodes to simplify doubly-linked list operations
|
||
// HEAD <-> TAIL (empty list)
|
||
this.head = new SentinelNode();
|
||
this.tail = new SentinelNode();
|
||
this.head.next = this.tail;
|
||
this.tail.prev = this.head;
|
||
}
|
||
/**
|
||
* Adds a node immediately after the head (marks as most recently used).
|
||
* Used when inserting new items or when an item is accessed.
|
||
* PRECONDITION: node must be disconnected (prev/next should be null)
|
||
*/ addToHead(node) {
|
||
node.prev = this.head;
|
||
node.next = this.head.next;
|
||
// head.next is always non-null (points to tail or another node)
|
||
this.head.next.prev = node;
|
||
this.head.next = node;
|
||
}
|
||
/**
|
||
* Removes a node from its current position in the doubly-linked list.
|
||
* Updates the prev/next pointers of adjacent nodes to maintain list integrity.
|
||
* PRECONDITION: node must be connected (prev/next are non-null)
|
||
*/ removeNode(node) {
|
||
// Connected nodes always have non-null prev/next
|
||
node.prev.next = node.next;
|
||
node.next.prev = node.prev;
|
||
}
|
||
/**
|
||
* Moves an existing node to the head position (marks as most recently used).
|
||
* This is the core LRU operation - accessed items become most recent.
|
||
*/ moveToHead(node) {
|
||
this.removeNode(node);
|
||
this.addToHead(node);
|
||
}
|
||
/**
|
||
* Removes and returns the least recently used node (the one before tail).
|
||
* This is called during eviction when the cache exceeds capacity.
|
||
* PRECONDITION: cache is not empty (ensured by caller)
|
||
*/ removeTail() {
|
||
const lastNode = this.tail.prev;
|
||
// tail.prev is always non-null and always LRUNode when cache is not empty
|
||
this.removeNode(lastNode);
|
||
return lastNode;
|
||
}
|
||
/**
|
||
* Sets a key-value pair in the cache.
|
||
* If the key exists, updates the value and moves to head.
|
||
* If new, adds at head and evicts from tail if necessary.
|
||
*
|
||
* Time Complexity:
|
||
* - O(1) for uniform item sizes
|
||
* - O(k) where k is the number of items evicted (can be O(N) for variable sizes)
|
||
*/ set(key, value) {
|
||
const size = (this.calculateSize == null ? void 0 : this.calculateSize.call(this, value)) ?? 1;
|
||
if (size <= 0) {
|
||
throw Object.defineProperty(new Error(`LRUCache: calculateSize returned ${size}, but size must be > 0. ` + `Items with size 0 would never be evicted, causing unbounded cache growth.`), "__NEXT_ERROR_CODE", {
|
||
value: "E1045",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if (size > this.maxSize) {
|
||
console.warn('Single item size exceeds maxSize');
|
||
return false;
|
||
}
|
||
const existing = this.cache.get(key);
|
||
if (existing) {
|
||
// Update existing node: adjust size and move to head (most recent)
|
||
existing.data = value;
|
||
this.totalSize = this.totalSize - existing.size + size;
|
||
existing.size = size;
|
||
this.moveToHead(existing);
|
||
} else {
|
||
// Add new node at head (most recent position)
|
||
const newNode = new LRUNode(key, value, size);
|
||
this.cache.set(key, newNode);
|
||
this.addToHead(newNode);
|
||
this.totalSize += size;
|
||
}
|
||
// Evict least recently used items until under capacity
|
||
while(this.totalSize > this.maxSize && this.cache.size > 0){
|
||
const tail = this.removeTail();
|
||
this.cache.delete(tail.key);
|
||
this.totalSize -= tail.size;
|
||
this.onEvict == null ? void 0 : this.onEvict.call(this, tail.key, tail.data);
|
||
}
|
||
return true;
|
||
}
|
||
/**
|
||
* Checks if a key exists in the cache.
|
||
* This is a pure query operation - does NOT update LRU order.
|
||
*
|
||
* Time Complexity: O(1)
|
||
*/ has(key) {
|
||
return this.cache.has(key);
|
||
}
|
||
/**
|
||
* Retrieves a value by key and marks it as most recently used.
|
||
* Moving to head maintains the LRU property for future evictions.
|
||
*
|
||
* Time Complexity: O(1)
|
||
*/ get(key) {
|
||
const node = this.cache.get(key);
|
||
if (!node) return undefined;
|
||
// Mark as most recently used by moving to head
|
||
this.moveToHead(node);
|
||
return node.data;
|
||
}
|
||
/**
|
||
* Returns an iterator over the cache entries. The order is outputted in the
|
||
* order of most recently used to least recently used.
|
||
*/ *[Symbol.iterator]() {
|
||
let current = this.head.next;
|
||
while(current && current !== this.tail){
|
||
// Between head and tail, current is always LRUNode
|
||
const node = current;
|
||
yield [
|
||
node.key,
|
||
node.data
|
||
];
|
||
current = current.next;
|
||
}
|
||
}
|
||
/**
|
||
* Removes a specific key from the cache.
|
||
* Updates both the hash map and doubly-linked list.
|
||
*
|
||
* Note: This is an explicit removal and does NOT trigger the `onEvict`
|
||
* callback. Use this for intentional deletions where eviction tracking
|
||
* is not needed.
|
||
*
|
||
* Time Complexity: O(1)
|
||
*/ remove(key) {
|
||
const node = this.cache.get(key);
|
||
if (!node) return;
|
||
this.removeNode(node);
|
||
this.cache.delete(key);
|
||
this.totalSize -= node.size;
|
||
}
|
||
/**
|
||
* Returns the number of items in the cache.
|
||
*/ get size() {
|
||
return this.cache.size;
|
||
}
|
||
/**
|
||
* Returns the current total size of all cached items.
|
||
* This uses the custom size calculation if provided.
|
||
*/ get currentSize() {
|
||
return this.totalSize;
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/lib/picocolors.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"bgBlack",
|
||
()=>bgBlack,
|
||
"bgBlue",
|
||
()=>bgBlue,
|
||
"bgCyan",
|
||
()=>bgCyan,
|
||
"bgGreen",
|
||
()=>bgGreen,
|
||
"bgMagenta",
|
||
()=>bgMagenta,
|
||
"bgRed",
|
||
()=>bgRed,
|
||
"bgWhite",
|
||
()=>bgWhite,
|
||
"bgYellow",
|
||
()=>bgYellow,
|
||
"black",
|
||
()=>black,
|
||
"blue",
|
||
()=>blue,
|
||
"bold",
|
||
()=>bold,
|
||
"cyan",
|
||
()=>cyan,
|
||
"dim",
|
||
()=>dim,
|
||
"gray",
|
||
()=>gray,
|
||
"green",
|
||
()=>green,
|
||
"hidden",
|
||
()=>hidden,
|
||
"inverse",
|
||
()=>inverse,
|
||
"italic",
|
||
()=>italic,
|
||
"magenta",
|
||
()=>magenta,
|
||
"purple",
|
||
()=>purple,
|
||
"red",
|
||
()=>red,
|
||
"reset",
|
||
()=>reset,
|
||
"strikethrough",
|
||
()=>strikethrough,
|
||
"underline",
|
||
()=>underline,
|
||
"white",
|
||
()=>white,
|
||
"yellow",
|
||
()=>yellow
|
||
]);
|
||
// ISC License
|
||
// Copyright (c) 2021 Alexey Raspopov, Kostiantyn Denysov, Anton Verinov
|
||
// Permission to use, copy, modify, and/or distribute this software for any
|
||
// purpose with or without fee is hereby granted, provided that the above
|
||
// copyright notice and this permission notice appear in all copies.
|
||
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||
//
|
||
// https://github.com/alexeyraspopov/picocolors/blob/b6261487e7b81aaab2440e397a356732cad9e342/picocolors.js#L1
|
||
var _globalThis;
|
||
const { env, stdout } = ((_globalThis = globalThis) == null ? void 0 : _globalThis.process) ?? {};
|
||
const enabled = env && !env.NO_COLOR && (env.FORCE_COLOR || (stdout == null ? void 0 : stdout.isTTY) && !env.CI && env.TERM !== 'dumb');
|
||
const replaceClose = (str, close, replace, index)=>{
|
||
const start = str.substring(0, index) + replace;
|
||
const end = str.substring(index + close.length);
|
||
const nextIndex = end.indexOf(close);
|
||
return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end;
|
||
};
|
||
const formatter = (open, close, replace = open)=>{
|
||
if (!enabled) return String;
|
||
return (input)=>{
|
||
const string = '' + input;
|
||
const index = string.indexOf(close, open.length);
|
||
return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
|
||
};
|
||
};
|
||
const reset = enabled ? (s)=>`\x1b[0m${s}\x1b[0m` : String;
|
||
const bold = formatter('\x1b[1m', '\x1b[22m', '\x1b[22m\x1b[1m');
|
||
const dim = formatter('\x1b[2m', '\x1b[22m', '\x1b[22m\x1b[2m');
|
||
const italic = formatter('\x1b[3m', '\x1b[23m');
|
||
const underline = formatter('\x1b[4m', '\x1b[24m');
|
||
const inverse = formatter('\x1b[7m', '\x1b[27m');
|
||
const hidden = formatter('\x1b[8m', '\x1b[28m');
|
||
const strikethrough = formatter('\x1b[9m', '\x1b[29m');
|
||
const black = formatter('\x1b[30m', '\x1b[39m');
|
||
const red = formatter('\x1b[31m', '\x1b[39m');
|
||
const green = formatter('\x1b[32m', '\x1b[39m');
|
||
const yellow = formatter('\x1b[33m', '\x1b[39m');
|
||
const blue = formatter('\x1b[34m', '\x1b[39m');
|
||
const magenta = formatter('\x1b[35m', '\x1b[39m');
|
||
const purple = formatter('\x1b[38;2;173;127;168m', '\x1b[39m');
|
||
const cyan = formatter('\x1b[36m', '\x1b[39m');
|
||
const white = formatter('\x1b[37m', '\x1b[39m');
|
||
const gray = formatter('\x1b[90m', '\x1b[39m');
|
||
const bgBlack = formatter('\x1b[40m', '\x1b[49m');
|
||
const bgRed = formatter('\x1b[41m', '\x1b[49m');
|
||
const bgGreen = formatter('\x1b[42m', '\x1b[49m');
|
||
const bgYellow = formatter('\x1b[43m', '\x1b[49m');
|
||
const bgBlue = formatter('\x1b[44m', '\x1b[49m');
|
||
const bgMagenta = formatter('\x1b[45m', '\x1b[49m');
|
||
const bgCyan = formatter('\x1b[46m', '\x1b[49m');
|
||
const bgWhite = formatter('\x1b[47m', '\x1b[49m');
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/build/output/log.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"bootstrap",
|
||
()=>bootstrap,
|
||
"error",
|
||
()=>error,
|
||
"errorOnce",
|
||
()=>errorOnce,
|
||
"event",
|
||
()=>event,
|
||
"info",
|
||
()=>info,
|
||
"prefixes",
|
||
()=>prefixes,
|
||
"ready",
|
||
()=>ready,
|
||
"trace",
|
||
()=>trace,
|
||
"wait",
|
||
()=>wait,
|
||
"warn",
|
||
()=>warn,
|
||
"warnOnce",
|
||
()=>warnOnce
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/picocolors.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
const prefixes = {
|
||
wait: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["bold"])('○')),
|
||
error: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["red"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["bold"])('⨯')),
|
||
warn: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["yellow"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["bold"])('⚠')),
|
||
ready: '▲',
|
||
info: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["white"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["bold"])(' ')),
|
||
event: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["green"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["bold"])('✓')),
|
||
trace: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["magenta"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$picocolors$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["bold"])('»'))
|
||
};
|
||
const LOGGING_METHOD = {
|
||
log: 'log',
|
||
warn: 'warn',
|
||
error: 'error'
|
||
};
|
||
function prefixedLog(prefixType, ...message) {
|
||
if ((message[0] === '' || message[0] === undefined) && message.length === 1) {
|
||
message.shift();
|
||
}
|
||
const consoleMethod = prefixType in LOGGING_METHOD ? LOGGING_METHOD[prefixType] : 'log';
|
||
const prefix = prefixes[prefixType];
|
||
// If there's no message, don't print the prefix but a new line
|
||
if (message.length === 0) {
|
||
console[consoleMethod]('');
|
||
} else {
|
||
// Ensure if there's ANSI escape codes it's concatenated into one string.
|
||
// Chrome DevTool can only handle color if it's in one string.
|
||
if (message.length === 1 && typeof message[0] === 'string') {
|
||
console[consoleMethod](prefix + ' ' + message[0]);
|
||
} else {
|
||
console[consoleMethod](prefix, ...message);
|
||
}
|
||
}
|
||
}
|
||
function bootstrap(message) {
|
||
console.log(message);
|
||
}
|
||
function wait(...message) {
|
||
prefixedLog('wait', ...message);
|
||
}
|
||
function error(...message) {
|
||
prefixedLog('error', ...message);
|
||
}
|
||
function warn(...message) {
|
||
prefixedLog('warn', ...message);
|
||
}
|
||
function ready(...message) {
|
||
prefixedLog('ready', ...message);
|
||
}
|
||
function info(...message) {
|
||
prefixedLog('info', ...message);
|
||
}
|
||
function event(...message) {
|
||
prefixedLog('event', ...message);
|
||
}
|
||
function trace(...message) {
|
||
prefixedLog('trace', ...message);
|
||
}
|
||
const warnOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length);
|
||
function warnOnce(...message) {
|
||
const key = message.join(' ');
|
||
if (!warnOnceCache.has(key)) {
|
||
warnOnceCache.set(key, key);
|
||
warn(...message);
|
||
}
|
||
}
|
||
const errorOnceCache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["LRUCache"](10000, (value)=>value.length);
|
||
function errorOnce(...message) {
|
||
const key = message.join(' ');
|
||
if (!errorOnceCache.has(key)) {
|
||
errorOnceCache.set(key, key);
|
||
error(...message);
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/lib/scheduler.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Schedules a function to be called on the next tick after the other promises
|
||
* have been resolved.
|
||
*
|
||
* @param cb the function to schedule
|
||
*/ __turbopack_context__.s([
|
||
"atLeastOneTask",
|
||
()=>atLeastOneTask,
|
||
"scheduleImmediate",
|
||
()=>scheduleImmediate,
|
||
"scheduleOnNextTick",
|
||
()=>scheduleOnNextTick,
|
||
"waitAtLeastOneReactRenderTask",
|
||
()=>waitAtLeastOneReactRenderTask
|
||
]);
|
||
const scheduleOnNextTick = (cb)=>{
|
||
// We use Promise.resolve().then() here so that the operation is scheduled at
|
||
// the end of the promise job queue, we then add it to the next process tick
|
||
// to ensure it's evaluated afterwards.
|
||
//
|
||
// This was inspired by the implementation of the DataLoader interface: https://github.com/graphql/dataloader/blob/d336bd15282664e0be4b4a657cb796f09bafbc6b/src/index.js#L213-L255
|
||
//
|
||
Promise.resolve().then(()=>{
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else {
|
||
process.nextTick(cb);
|
||
}
|
||
});
|
||
};
|
||
const scheduleImmediate = (cb)=>{
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else {
|
||
setImmediate(cb);
|
||
}
|
||
};
|
||
function atLeastOneTask() {
|
||
return new Promise((resolve)=>scheduleImmediate(resolve));
|
||
}
|
||
function waitAtLeastOneReactRenderTask() {
|
||
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
||
;
|
||
else {
|
||
return new Promise((r)=>setImmediate(r));
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/response-cache/types.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"CachedRouteKind",
|
||
()=>CachedRouteKind,
|
||
"IncrementalCacheKind",
|
||
()=>IncrementalCacheKind
|
||
]);
|
||
var CachedRouteKind = /*#__PURE__*/ function(CachedRouteKind) {
|
||
CachedRouteKind["APP_PAGE"] = "APP_PAGE";
|
||
CachedRouteKind["APP_ROUTE"] = "APP_ROUTE";
|
||
CachedRouteKind["PAGES"] = "PAGES";
|
||
CachedRouteKind["FETCH"] = "FETCH";
|
||
CachedRouteKind["REDIRECT"] = "REDIRECT";
|
||
CachedRouteKind["IMAGE"] = "IMAGE";
|
||
return CachedRouteKind;
|
||
}({});
|
||
var IncrementalCacheKind = /*#__PURE__*/ function(IncrementalCacheKind) {
|
||
IncrementalCacheKind["APP_PAGE"] = "APP_PAGE";
|
||
IncrementalCacheKind["APP_ROUTE"] = "APP_ROUTE";
|
||
IncrementalCacheKind["PAGES"] = "PAGES";
|
||
IncrementalCacheKind["FETCH"] = "FETCH";
|
||
IncrementalCacheKind["IMAGE"] = "IMAGE";
|
||
return IncrementalCacheKind;
|
||
}({});
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"ENCODED_TAGS",
|
||
()=>ENCODED_TAGS
|
||
]);
|
||
const ENCODED_TAGS = {
|
||
// opening tags do not have the closing `>` since they can contain other attributes such as `<body className=''>`
|
||
OPENING: {
|
||
// <html
|
||
HTML: new Uint8Array([
|
||
60,
|
||
104,
|
||
116,
|
||
109,
|
||
108
|
||
]),
|
||
// <head
|
||
HEAD: new Uint8Array([
|
||
60,
|
||
104,
|
||
101,
|
||
97,
|
||
100
|
||
]),
|
||
// <body
|
||
BODY: new Uint8Array([
|
||
60,
|
||
98,
|
||
111,
|
||
100,
|
||
121
|
||
])
|
||
},
|
||
CLOSED: {
|
||
// </head>
|
||
HEAD: new Uint8Array([
|
||
60,
|
||
47,
|
||
104,
|
||
101,
|
||
97,
|
||
100,
|
||
62
|
||
]),
|
||
// </body>
|
||
BODY: new Uint8Array([
|
||
60,
|
||
47,
|
||
98,
|
||
111,
|
||
100,
|
||
121,
|
||
62
|
||
]),
|
||
// </html>
|
||
HTML: new Uint8Array([
|
||
60,
|
||
47,
|
||
104,
|
||
116,
|
||
109,
|
||
108,
|
||
62
|
||
]),
|
||
// </body></html>
|
||
BODY_AND_HTML: new Uint8Array([
|
||
60,
|
||
47,
|
||
98,
|
||
111,
|
||
100,
|
||
121,
|
||
62,
|
||
60,
|
||
47,
|
||
104,
|
||
116,
|
||
109,
|
||
108,
|
||
62
|
||
])
|
||
},
|
||
META: {
|
||
// Only the match the prefix cause the suffix can be different wether it's xml compatible or not ">" or "/>"
|
||
// <meta name="«nxt-icon»"
|
||
// This is a special mark that will be replaced by the icon insertion script tag.
|
||
ICON_MARK: new Uint8Array([
|
||
60,
|
||
109,
|
||
101,
|
||
116,
|
||
97,
|
||
32,
|
||
110,
|
||
97,
|
||
109,
|
||
101,
|
||
61,
|
||
34,
|
||
194,
|
||
171,
|
||
110,
|
||
120,
|
||
116,
|
||
45,
|
||
105,
|
||
99,
|
||
111,
|
||
110,
|
||
194,
|
||
187,
|
||
34
|
||
])
|
||
}
|
||
};
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Find the starting index of Uint8Array `b` within Uint8Array `a`.
|
||
*/ __turbopack_context__.s([
|
||
"indexOfUint8Array",
|
||
()=>indexOfUint8Array,
|
||
"isEquivalentUint8Arrays",
|
||
()=>isEquivalentUint8Arrays,
|
||
"removeFromUint8Array",
|
||
()=>removeFromUint8Array
|
||
]);
|
||
function indexOfUint8Array(a, b) {
|
||
if (b.length === 0) return 0;
|
||
if (a.length === 0 || b.length > a.length) return -1;
|
||
// Use Node's native implementation when available.
|
||
if (typeof Buffer !== 'undefined') {
|
||
const haystack = Buffer.isBuffer(a) ? a : Buffer.from(a.buffer, a.byteOffset, a.byteLength);
|
||
return haystack.indexOf(b);
|
||
}
|
||
// start iterating through `a`
|
||
for(let i = 0; i <= a.length - b.length; i++){
|
||
let completeMatch = true;
|
||
// from index `i`, iterate through `b` and check for mismatch
|
||
for(let j = 0; j < b.length; j++){
|
||
// if the values do not match, then this isn't a complete match, exit `b` iteration early and iterate to next index of `a`.
|
||
if (a[i + j] !== b[j]) {
|
||
completeMatch = false;
|
||
break;
|
||
}
|
||
}
|
||
if (completeMatch) {
|
||
return i;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
function isEquivalentUint8Arrays(a, b) {
|
||
if (a.length !== b.length) return false;
|
||
for(let i = 0; i < a.length; i++){
|
||
if (a[i] !== b[i]) return false;
|
||
}
|
||
return true;
|
||
}
|
||
function removeFromUint8Array(a, b) {
|
||
const tagIndex = indexOfUint8Array(a, b);
|
||
if (tagIndex === 0) return a.subarray(b.length);
|
||
if (tagIndex > -1) {
|
||
const removed = new Uint8Array(a.length - b.length);
|
||
removed.set(a.subarray(0, tagIndex));
|
||
removed.set(a.subarray(tagIndex + b.length), tagIndex);
|
||
return removed;
|
||
} else {
|
||
return a;
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"MISSING_ROOT_TAGS_ERROR",
|
||
()=>MISSING_ROOT_TAGS_ERROR
|
||
]);
|
||
const MISSING_ROOT_TAGS_ERROR = 'NEXT_MISSING_ROOT_TAGS';
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"ACTION_HEADER",
|
||
()=>ACTION_HEADER,
|
||
"FLIGHT_HEADERS",
|
||
()=>FLIGHT_HEADERS,
|
||
"NEXT_ACTION_NOT_FOUND_HEADER",
|
||
()=>NEXT_ACTION_NOT_FOUND_HEADER,
|
||
"NEXT_ACTION_REVALIDATED_HEADER",
|
||
()=>NEXT_ACTION_REVALIDATED_HEADER,
|
||
"NEXT_DID_POSTPONE_HEADER",
|
||
()=>NEXT_DID_POSTPONE_HEADER,
|
||
"NEXT_HMR_REFRESH_HASH_COOKIE",
|
||
()=>NEXT_HMR_REFRESH_HASH_COOKIE,
|
||
"NEXT_HMR_REFRESH_HEADER",
|
||
()=>NEXT_HMR_REFRESH_HEADER,
|
||
"NEXT_HTML_REQUEST_ID_HEADER",
|
||
()=>NEXT_HTML_REQUEST_ID_HEADER,
|
||
"NEXT_INSTANT_PREFETCH_HEADER",
|
||
()=>NEXT_INSTANT_PREFETCH_HEADER,
|
||
"NEXT_INSTANT_TEST_COOKIE",
|
||
()=>NEXT_INSTANT_TEST_COOKIE,
|
||
"NEXT_IS_PRERENDER_HEADER",
|
||
()=>NEXT_IS_PRERENDER_HEADER,
|
||
"NEXT_REQUEST_ID_HEADER",
|
||
()=>NEXT_REQUEST_ID_HEADER,
|
||
"NEXT_REWRITTEN_PATH_HEADER",
|
||
()=>NEXT_REWRITTEN_PATH_HEADER,
|
||
"NEXT_REWRITTEN_QUERY_HEADER",
|
||
()=>NEXT_REWRITTEN_QUERY_HEADER,
|
||
"NEXT_ROUTER_PREFETCH_HEADER",
|
||
()=>NEXT_ROUTER_PREFETCH_HEADER,
|
||
"NEXT_ROUTER_SEGMENT_PREFETCH_HEADER",
|
||
()=>NEXT_ROUTER_SEGMENT_PREFETCH_HEADER,
|
||
"NEXT_ROUTER_STALE_TIME_HEADER",
|
||
()=>NEXT_ROUTER_STALE_TIME_HEADER,
|
||
"NEXT_ROUTER_STATE_TREE_HEADER",
|
||
()=>NEXT_ROUTER_STATE_TREE_HEADER,
|
||
"NEXT_RSC_UNION_QUERY",
|
||
()=>NEXT_RSC_UNION_QUERY,
|
||
"NEXT_URL",
|
||
()=>NEXT_URL,
|
||
"RSC_CONTENT_TYPE_HEADER",
|
||
()=>RSC_CONTENT_TYPE_HEADER,
|
||
"RSC_HEADER",
|
||
()=>RSC_HEADER
|
||
]);
|
||
const RSC_HEADER = 'rsc';
|
||
const ACTION_HEADER = 'next-action';
|
||
const NEXT_ROUTER_STATE_TREE_HEADER = 'next-router-state-tree';
|
||
const NEXT_ROUTER_PREFETCH_HEADER = 'next-router-prefetch';
|
||
const NEXT_ROUTER_SEGMENT_PREFETCH_HEADER = 'next-router-segment-prefetch';
|
||
const NEXT_HMR_REFRESH_HEADER = 'next-hmr-refresh';
|
||
const NEXT_HMR_REFRESH_HASH_COOKIE = '__next_hmr_refresh_hash__';
|
||
const NEXT_URL = 'next-url';
|
||
const RSC_CONTENT_TYPE_HEADER = 'text/x-component';
|
||
const NEXT_INSTANT_PREFETCH_HEADER = 'next-instant-navigation-testing-prefetch';
|
||
const NEXT_INSTANT_TEST_COOKIE = 'next-instant-navigation-testing';
|
||
const FLIGHT_HEADERS = [
|
||
RSC_HEADER,
|
||
NEXT_ROUTER_STATE_TREE_HEADER,
|
||
NEXT_ROUTER_PREFETCH_HEADER,
|
||
NEXT_HMR_REFRESH_HEADER,
|
||
NEXT_ROUTER_SEGMENT_PREFETCH_HEADER
|
||
];
|
||
const NEXT_RSC_UNION_QUERY = '_rsc';
|
||
const NEXT_ROUTER_STALE_TIME_HEADER = 'x-nextjs-stale-time';
|
||
const NEXT_DID_POSTPONE_HEADER = 'x-nextjs-postponed';
|
||
const NEXT_REWRITTEN_PATH_HEADER = 'x-nextjs-rewritten-path';
|
||
const NEXT_REWRITTEN_QUERY_HEADER = 'x-nextjs-rewritten-query';
|
||
const NEXT_IS_PRERENDER_HEADER = 'x-nextjs-prerender';
|
||
const NEXT_ACTION_NOT_FOUND_HEADER = 'x-nextjs-action-not-found';
|
||
const NEXT_REQUEST_ID_HEADER = 'x-nextjs-request-id';
|
||
const NEXT_HTML_REQUEST_ID_HEADER = 'x-nextjs-html-request-id';
|
||
const NEXT_ACTION_REVALIDATED_HEADER = 'x-action-revalidated';
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/hash.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// http://www.cse.yorku.ca/~oz/hash.html
|
||
// More specifically, 32-bit hash via djbxor
|
||
// (ref: https://gist.github.com/eplawless/52813b1d8ad9af510d85?permalink_comment_id=3367765#gistcomment-3367765)
|
||
// This is due to number type differences between rust for turbopack to js number types,
|
||
// where rust does not have easy way to repreesnt js's 53-bit float number type for the matching
|
||
// overflow behavior. This is more `correct` in terms of having canonical hash across different runtime / implementation
|
||
// as can gaurantee determinstic output from 32bit hash.
|
||
__turbopack_context__.s([
|
||
"djb2Hash",
|
||
()=>djb2Hash,
|
||
"hexHash",
|
||
()=>hexHash
|
||
]);
|
||
function djb2Hash(str) {
|
||
let hash = 5381;
|
||
for(let i = 0; i < str.length; i++){
|
||
const char = str.charCodeAt(i);
|
||
hash = (hash << 5) + hash + char & 0xffffffff;
|
||
}
|
||
return hash >>> 0;
|
||
}
|
||
function hexHash(str) {
|
||
return djb2Hash(str).toString(36).slice(0, 5);
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"computeCacheBustingSearchParam",
|
||
()=>computeCacheBustingSearchParam,
|
||
"computeLegacyCacheBustingSearchParam",
|
||
()=>computeLegacyCacheBustingSearchParam
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/hash.js [ssr] (ecmascript)");
|
||
;
|
||
const CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES = 12;
|
||
const textEncoder = new TextEncoder();
|
||
function encodeCacheBustingSearchParam(bytes) {
|
||
let binary = '';
|
||
for(let i = 0; i < bytes.length; i++){
|
||
binary += String.fromCharCode(bytes[i]);
|
||
}
|
||
return btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
||
}
|
||
function normalizeCacheBustingInput(value) {
|
||
if (value === undefined) {
|
||
return '0';
|
||
}
|
||
return Array.isArray(value) ? value.join(',') : value;
|
||
}
|
||
function createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) {
|
||
if ((prefetchHeader === undefined || prefetchHeader === '0') && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) {
|
||
return null;
|
||
}
|
||
return [
|
||
prefetchHeader ?? '0',
|
||
normalizeCacheBustingInput(segmentPrefetchHeader),
|
||
normalizeCacheBustingInput(stateTreeHeader),
|
||
normalizeCacheBustingInput(nextUrlHeader)
|
||
].join(',');
|
||
}
|
||
async function computeCacheBustingSearchParamFromInput(input) {
|
||
// Truncate SHA-256 to 96 bits to keep `_rsc` compact
|
||
const digest = await globalThis.crypto.subtle.digest('SHA-256', textEncoder.encode(input));
|
||
return encodeCacheBustingSearchParam(new Uint8Array(digest).subarray(0, CACHE_BUSTING_SEARCH_PARAM_DIGEST_BYTES));
|
||
}
|
||
async function computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) {
|
||
const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader);
|
||
if (input === null) {
|
||
return '';
|
||
}
|
||
return computeCacheBustingSearchParamFromInput(input);
|
||
}
|
||
function computeLegacyCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) {
|
||
const input = createCacheBustingSearchParamInput(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader);
|
||
if (input === null) {
|
||
return '';
|
||
}
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hexHash"])(input);
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/stream-utils/node-web-streams-helper.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"chainStreams",
|
||
()=>chainStreams,
|
||
"continueDynamicHTMLResume",
|
||
()=>continueDynamicHTMLResume,
|
||
"continueDynamicPrerender",
|
||
()=>continueDynamicPrerender,
|
||
"continueFizzStream",
|
||
()=>continueFizzStream,
|
||
"continueStaticFallbackPrerender",
|
||
()=>continueStaticFallbackPrerender,
|
||
"continueStaticPrerender",
|
||
()=>continueStaticPrerender,
|
||
"createBufferedTransformStream",
|
||
()=>createBufferedTransformStream,
|
||
"createDocumentClosingStream",
|
||
()=>createDocumentClosingStream,
|
||
"createInstantTestScriptInsertionTransformStream",
|
||
()=>createInstantTestScriptInsertionTransformStream,
|
||
"createRootLayoutValidatorStream",
|
||
()=>createRootLayoutValidatorStream,
|
||
"createRuntimePrefetchTransformStream",
|
||
()=>createRuntimePrefetchTransformStream,
|
||
"renderToInitialFizzStream",
|
||
()=>renderToInitialFizzStream,
|
||
"streamFromBuffer",
|
||
()=>streamFromBuffer,
|
||
"streamFromString",
|
||
()=>streamFromString,
|
||
"streamToBuffer",
|
||
()=>streamToBuffer,
|
||
"streamToString",
|
||
()=>streamToString,
|
||
"streamToUint8Array",
|
||
()=>streamToUint8Array
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/detached-promise.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$errors$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
function voidCatch() {
|
||
// this catcher is designed to be used with pipeTo where we expect the underlying
|
||
// pipe implementation to forward errors but we don't want the pipeTo promise to reject
|
||
// and be unhandled
|
||
}
|
||
// We can share the same encoder instance everywhere
|
||
// Notably we cannot do the same for TextDecoder because it is stateful
|
||
// when handling streaming data
|
||
const encoder = new TextEncoder();
|
||
function chainStreams(...streams) {
|
||
// If we have no streams, return an empty stream. This behavior is
|
||
// intentional as we're now providing the `RenderResult.EMPTY` value.
|
||
if (streams.length === 0) {
|
||
return new ReadableStream({
|
||
start (controller) {
|
||
controller.close();
|
||
}
|
||
});
|
||
}
|
||
// If we only have 1 stream we fast path it by returning just this stream
|
||
if (streams.length === 1) {
|
||
return streams[0];
|
||
}
|
||
const { readable, writable } = new TransformStream();
|
||
// We always initiate pipeTo immediately. We know we have at least 2 streams
|
||
// so we need to avoid closing the writable when this one finishes.
|
||
let promise = streams[0].pipeTo(writable, {
|
||
preventClose: true
|
||
});
|
||
let i = 1;
|
||
for(; i < streams.length - 1; i++){
|
||
const nextStream = streams[i];
|
||
promise = promise.then(()=>nextStream.pipeTo(writable, {
|
||
preventClose: true
|
||
}));
|
||
}
|
||
// We can omit the length check because we halted before the last stream and there
|
||
// is at least two streams so the lastStream here will always be defined
|
||
const lastStream = streams[i];
|
||
promise = promise.then(()=>lastStream.pipeTo(writable));
|
||
// Catch any errors from the streams and ignore them, they will be handled
|
||
// by whatever is consuming the readable stream.
|
||
promise.catch(voidCatch);
|
||
return readable;
|
||
}
|
||
function streamFromString(str) {
|
||
return new ReadableStream({
|
||
start (controller) {
|
||
controller.enqueue(encoder.encode(str));
|
||
controller.close();
|
||
}
|
||
});
|
||
}
|
||
function streamFromBuffer(chunk) {
|
||
return new ReadableStream({
|
||
start (controller) {
|
||
controller.enqueue(chunk);
|
||
controller.close();
|
||
}
|
||
});
|
||
}
|
||
async function streamToChunks(stream) {
|
||
const reader = stream.getReader();
|
||
const chunks = [];
|
||
while(true){
|
||
const { done, value } = await reader.read();
|
||
if (done) {
|
||
break;
|
||
}
|
||
chunks.push(value);
|
||
}
|
||
return chunks;
|
||
}
|
||
function concatUint8Arrays(chunks) {
|
||
const totalLength = chunks.reduce((sum, chunk)=>sum + chunk.length, 0);
|
||
const result = new Uint8Array(totalLength);
|
||
let offset = 0;
|
||
for (const chunk of chunks){
|
||
result.set(chunk, offset);
|
||
offset += chunk.length;
|
||
}
|
||
return result;
|
||
}
|
||
async function streamToUint8Array(stream) {
|
||
return concatUint8Arrays(await streamToChunks(stream));
|
||
}
|
||
async function streamToBuffer(stream) {
|
||
return Buffer.concat(await streamToChunks(stream));
|
||
}
|
||
async function streamToString(stream, signal) {
|
||
const decoder = new TextDecoder('utf-8', {
|
||
fatal: true
|
||
});
|
||
let string = '';
|
||
for await (const chunk of stream){
|
||
if (signal == null ? void 0 : signal.aborted) {
|
||
return string;
|
||
}
|
||
string += decoder.decode(chunk, {
|
||
stream: true
|
||
});
|
||
}
|
||
string += decoder.decode();
|
||
return string;
|
||
}
|
||
function createBufferedTransformStream(options = {}) {
|
||
const { maxBufferByteLength = Infinity } = options;
|
||
let bufferedChunks = [];
|
||
let bufferByteLength = 0;
|
||
let pending;
|
||
const flush = (controller)=>{
|
||
try {
|
||
if (bufferedChunks.length === 0) {
|
||
return;
|
||
}
|
||
const chunk = new Uint8Array(bufferByteLength);
|
||
let copiedBytes = 0;
|
||
for(let i = 0; i < bufferedChunks.length; i++){
|
||
const bufferedChunk = bufferedChunks[i];
|
||
chunk.set(bufferedChunk, copiedBytes);
|
||
copiedBytes += bufferedChunk.byteLength;
|
||
}
|
||
// We just wrote all the buffered chunks so we need to reset the bufferedChunks array
|
||
// and our bufferByteLength to prepare for the next round of buffered chunks
|
||
bufferedChunks.length = 0;
|
||
bufferByteLength = 0;
|
||
controller.enqueue(chunk);
|
||
} catch {
|
||
// If an error occurs while enqueuing, it can't be due to this
|
||
// transformer. It's most likely caused by the controller having been
|
||
// errored (for example, if the stream was cancelled).
|
||
}
|
||
};
|
||
const scheduleFlush = (controller)=>{
|
||
if (pending) {
|
||
return;
|
||
}
|
||
const detached = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["DetachedPromise"]();
|
||
pending = detached;
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["scheduleImmediate"])(()=>{
|
||
try {
|
||
flush(controller);
|
||
} finally{
|
||
pending = undefined;
|
||
detached.resolve();
|
||
}
|
||
});
|
||
};
|
||
return new TransformStream({
|
||
transform (chunk, controller) {
|
||
// Combine the previous buffer with the new chunk.
|
||
bufferedChunks.push(chunk);
|
||
bufferByteLength += chunk.byteLength;
|
||
if (bufferByteLength >= maxBufferByteLength) {
|
||
flush(controller);
|
||
} else {
|
||
scheduleFlush(controller);
|
||
}
|
||
},
|
||
flush () {
|
||
return pending == null ? void 0 : pending.promise;
|
||
}
|
||
});
|
||
}
|
||
function renderToInitialFizzStream({ ReactDOMServer, element, streamOptions }) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["AppRenderSpan"].renderToReadableStream, async ()=>ReactDOMServer.renderToReadableStream(element, streamOptions));
|
||
}
|
||
function createMetadataTransformStream(insert) {
|
||
let chunkIndex = -1;
|
||
let isMarkRemoved = false;
|
||
return new TransformStream({
|
||
async transform (chunk, controller) {
|
||
let iconMarkIndex = -1;
|
||
let closedHeadIndex = -1;
|
||
chunkIndex++;
|
||
if (isMarkRemoved) {
|
||
controller.enqueue(chunk);
|
||
return;
|
||
}
|
||
let iconMarkLength = 0;
|
||
// Only search for the closed head tag once
|
||
if (iconMarkIndex === -1) {
|
||
iconMarkIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK);
|
||
if (iconMarkIndex === -1) {
|
||
controller.enqueue(chunk);
|
||
return;
|
||
} else {
|
||
// When we found the `<meta name="«nxt-icon»"` tag prefix, we will remove it from the chunk.
|
||
// Its close tag could either be `/>` or `>`, checking the next char to ensure we cover both cases.
|
||
iconMarkLength = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].META.ICON_MARK.length;
|
||
// Check if next char is /, this is for xml mode.
|
||
if (chunk[iconMarkIndex + iconMarkLength] === 47) {
|
||
iconMarkLength += 2;
|
||
} else {
|
||
// The last char is `>`
|
||
iconMarkLength++;
|
||
}
|
||
}
|
||
}
|
||
// Check if icon mark is inside <head> tag in the first chunk.
|
||
if (chunkIndex === 0) {
|
||
closedHeadIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD);
|
||
if (iconMarkIndex !== -1) {
|
||
// The mark icon is located in the 1st chunk before the head tag.
|
||
// We do not need to insert the script tag in this case because it's in the head.
|
||
// Just remove the icon mark from the chunk.
|
||
if (iconMarkIndex < closedHeadIndex) {
|
||
const replaced = new Uint8Array(chunk.length - iconMarkLength);
|
||
// Remove the icon mark from the chunk.
|
||
replaced.set(chunk.subarray(0, iconMarkIndex));
|
||
replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex);
|
||
chunk = replaced;
|
||
} else {
|
||
// The icon mark is after the head tag, replace and insert the script tag at that position.
|
||
const insertion = await insert();
|
||
const encodedInsertion = encoder.encode(insertion);
|
||
const insertionLength = encodedInsertion.length;
|
||
const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength);
|
||
replaced.set(chunk.subarray(0, iconMarkIndex));
|
||
replaced.set(encodedInsertion, iconMarkIndex);
|
||
replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength);
|
||
chunk = replaced;
|
||
}
|
||
isMarkRemoved = true;
|
||
}
|
||
// If there's no icon mark located, it will be handled later when if present in the following chunks.
|
||
} else {
|
||
// When it's appeared in the following chunks, we'll need to
|
||
// remove the mark and then insert the script tag at that position.
|
||
const insertion = await insert();
|
||
const encodedInsertion = encoder.encode(insertion);
|
||
const insertionLength = encodedInsertion.length;
|
||
// Replace the icon mark with the hoist script or empty string.
|
||
const replaced = new Uint8Array(chunk.length - iconMarkLength + insertionLength);
|
||
// Set the first part of the chunk, before the icon mark.
|
||
replaced.set(chunk.subarray(0, iconMarkIndex));
|
||
// Set the insertion after the icon mark.
|
||
replaced.set(encodedInsertion, iconMarkIndex);
|
||
// Set the rest of the chunk after the icon mark.
|
||
replaced.set(chunk.subarray(iconMarkIndex + iconMarkLength), iconMarkIndex + insertionLength);
|
||
chunk = replaced;
|
||
isMarkRemoved = true;
|
||
}
|
||
controller.enqueue(chunk);
|
||
}
|
||
});
|
||
}
|
||
function createHeadInsertionTransformStream(insert) {
|
||
let inserted = false;
|
||
// We need to track if this transform saw any bytes because if it didn't
|
||
// we won't want to insert any server HTML at all
|
||
let hasBytes = false;
|
||
return new TransformStream({
|
||
async transform (chunk, controller) {
|
||
hasBytes = true;
|
||
const insertion = await insert();
|
||
if (inserted) {
|
||
if (insertion) {
|
||
const encodedInsertion = encoder.encode(insertion);
|
||
controller.enqueue(encodedInsertion);
|
||
}
|
||
controller.enqueue(chunk);
|
||
} else {
|
||
// TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.
|
||
const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD);
|
||
// In fully static rendering or non PPR rendering cases:
|
||
// `/head>` will always be found in the chunk in first chunk rendering.
|
||
if (index !== -1) {
|
||
if (insertion) {
|
||
const encodedInsertion = encoder.encode(insertion);
|
||
// Get the total count of the bytes in the chunk and the insertion
|
||
// e.g.
|
||
// chunk = <head><meta charset="utf-8"></head>
|
||
// insertion = <script>...</script>
|
||
// output = <head><meta charset="utf-8"> [ <script>...</script> ] </head>
|
||
const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length);
|
||
// Append the first part of the chunk, before the head tag
|
||
insertedHeadContent.set(chunk.slice(0, index));
|
||
// Append the server inserted content
|
||
insertedHeadContent.set(encodedInsertion, index);
|
||
// Append the rest of the chunk
|
||
insertedHeadContent.set(chunk.slice(index), index + encodedInsertion.length);
|
||
controller.enqueue(insertedHeadContent);
|
||
} else {
|
||
controller.enqueue(chunk);
|
||
}
|
||
inserted = true;
|
||
} else {
|
||
// This will happens in PPR rendering during next start, when the page is partially rendered.
|
||
// When the page resumes, the head tag will be found in the middle of the chunk.
|
||
// Where we just need to append the insertion and chunk to the current stream.
|
||
// e.g.
|
||
// PPR-static: <head>...</head><body> [ resume content ] </body>
|
||
// PPR-resume: [ insertion ] [ rest content ]
|
||
if (insertion) {
|
||
controller.enqueue(encoder.encode(insertion));
|
||
}
|
||
controller.enqueue(chunk);
|
||
inserted = true;
|
||
}
|
||
}
|
||
},
|
||
async flush (controller) {
|
||
// Check before closing if there's anything remaining to insert.
|
||
if (hasBytes) {
|
||
const insertion = await insert();
|
||
if (insertion) {
|
||
controller.enqueue(encoder.encode(insertion));
|
||
}
|
||
}
|
||
}
|
||
});
|
||
}
|
||
async function createClientResumeScriptInsertionTransformStream() {
|
||
const segmentPath = '/_full';
|
||
const cacheBustingHeader = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["computeCacheBustingSearchParam"])('1', '/_full', undefined, undefined // headers[NEXT_URL]
|
||
);
|
||
const searchStr = `${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_RSC_UNION_QUERY"]}=${cacheBustingHeader}`;
|
||
const NEXT_CLIENT_RESUME_SCRIPT = `<script>__NEXT_CLIENT_RESUME=fetch(location.pathname+'?${searchStr}',{credentials:'same-origin',headers:{'${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RSC_HEADER"]}': '1','${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_ROUTER_PREFETCH_HEADER"]}': '1','${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_ROUTER_SEGMENT_PREFETCH_HEADER"]}': '${segmentPath}'}})</script>`;
|
||
let didAlreadyInsert = false;
|
||
return new TransformStream({
|
||
transform (chunk, controller) {
|
||
if (didAlreadyInsert) {
|
||
// Already inserted the script into the head. Pass through.
|
||
controller.enqueue(chunk);
|
||
return;
|
||
}
|
||
// TODO (@Ethan-Arrowood): Replace the generic `indexOfUint8Array` method with something finely tuned for the subset of things actually being checked for.
|
||
const headClosingTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HEAD);
|
||
if (headClosingTagIndex === -1) {
|
||
// In fully static rendering or non PPR rendering cases:
|
||
// `/head>` will always be found in the chunk in first chunk rendering.
|
||
controller.enqueue(chunk);
|
||
return;
|
||
}
|
||
const encodedInsertion = encoder.encode(NEXT_CLIENT_RESUME_SCRIPT);
|
||
// Get the total count of the bytes in the chunk and the insertion
|
||
// e.g.
|
||
// chunk = <head><meta charset="utf-8"></head>
|
||
// insertion = <script>...</script>
|
||
// output = <head><meta charset="utf-8"> [ <script>...</script> ] </head>
|
||
const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length);
|
||
// Append the first part of the chunk, before the head tag
|
||
insertedHeadContent.set(chunk.slice(0, headClosingTagIndex));
|
||
// Append the server inserted content
|
||
insertedHeadContent.set(encodedInsertion, headClosingTagIndex);
|
||
// Append the rest of the chunk
|
||
insertedHeadContent.set(chunk.slice(headClosingTagIndex), headClosingTagIndex + encodedInsertion.length);
|
||
controller.enqueue(insertedHeadContent);
|
||
didAlreadyInsert = true;
|
||
}
|
||
});
|
||
}
|
||
async function createInstantTestScriptInsertionTransformStream(requestId) {
|
||
// Kick off a fetch for the static RSC payload. This is the hydration
|
||
// source for the locked static shell — same as the __NEXT_CLIENT_RESUME
|
||
// fetch used for fallback routes, but with NEXT_INSTANT_PREFETCH_HEADER
|
||
// so the server returns static-only data.
|
||
//
|
||
// The fetch promise is stored as self.__next_instant_test, which doubles
|
||
// as the feature flag (truthy = instant test mode). The client processes
|
||
// this as a fallback prerender payload for hydration.
|
||
const segmentPath = '/_full';
|
||
const cacheBustingHeader = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$cache$2d$busting$2d$search$2d$param$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["computeCacheBustingSearchParam"])('1', segmentPath, undefined, undefined);
|
||
const searchStr = `${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_RSC_UNION_QUERY"]}=${cacheBustingHeader}`;
|
||
// In dev mode, inject self.__next_r (request ID) so that HMR WebSocket
|
||
// and debug channel initialization don't crash. The static shell
|
||
// bypasses renderToFizzStream which normally injects this via
|
||
// bootstrapScriptContent.
|
||
const requestIdScript = requestId !== null ? `self.__next_r=${JSON.stringify(requestId)};` : '';
|
||
const INSTANT_TEST_SCRIPT = `<script>${requestIdScript}self.__next_instant_test=fetch(location.pathname+'?${searchStr}',{credentials:'same-origin',headers:{'${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RSC_HEADER"]}':'1','${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_ROUTER_PREFETCH_HEADER"]}':'1','${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_ROUTER_SEGMENT_PREFETCH_HEADER"]}':'${segmentPath}','${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$app$2d$router$2d$headers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_INSTANT_PREFETCH_HEADER"]}':'1'}})</script>`;
|
||
let didAlreadyInsert = false;
|
||
return new TransformStream({
|
||
transform (chunk, controller) {
|
||
if (didAlreadyInsert) {
|
||
// Already inserted the script into the head. Pass through.
|
||
controller.enqueue(chunk);
|
||
return;
|
||
}
|
||
// Find the opening <head tag (may have attributes like <head class="...">)
|
||
const headOpenIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.HEAD);
|
||
if (headOpenIndex === -1) {
|
||
controller.enqueue(chunk);
|
||
return;
|
||
}
|
||
// Find the closing > of the <head ...> tag
|
||
const headCloseAngle = chunk.indexOf(62, headOpenIndex + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.HEAD.length);
|
||
if (headCloseAngle === -1) {
|
||
controller.enqueue(chunk);
|
||
return;
|
||
}
|
||
const encodedInsertion = encoder.encode(INSTANT_TEST_SCRIPT);
|
||
const insertionPoint = headCloseAngle + 1;
|
||
// e.g.
|
||
// chunk = <!DOCTYPE html><html><head><meta charset="utf-8">...
|
||
// insertion = <script>self.__next_instant_test=fetch(...)</script>
|
||
// output = <!DOCTYPE html><html><head> [ <script>...</script> ] <meta charset="utf-8">...
|
||
const insertedHeadContent = new Uint8Array(chunk.length + encodedInsertion.length);
|
||
insertedHeadContent.set(chunk.slice(0, insertionPoint));
|
||
insertedHeadContent.set(encodedInsertion, insertionPoint);
|
||
insertedHeadContent.set(chunk.slice(insertionPoint), insertionPoint + encodedInsertion.length);
|
||
controller.enqueue(insertedHeadContent);
|
||
didAlreadyInsert = true;
|
||
},
|
||
flush (controller) {
|
||
// Append closing tags so the browser can parse the full document.
|
||
controller.enqueue(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML);
|
||
}
|
||
});
|
||
}
|
||
// Suffix after main body content - scripts before </body>,
|
||
// but wait for the major chunks to be enqueued.
|
||
function createDeferredSuffixStream(suffix) {
|
||
let flushed = false;
|
||
let pending;
|
||
const flush = (controller)=>{
|
||
const detached = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["DetachedPromise"]();
|
||
pending = detached;
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["scheduleImmediate"])(()=>{
|
||
try {
|
||
controller.enqueue(encoder.encode(suffix));
|
||
} catch {
|
||
// If an error occurs while enqueuing it can't be due to this
|
||
// transformers fault. It's likely due to the controller being
|
||
// errored due to the stream being cancelled.
|
||
} finally{
|
||
pending = undefined;
|
||
detached.resolve();
|
||
}
|
||
});
|
||
};
|
||
return new TransformStream({
|
||
transform (chunk, controller) {
|
||
controller.enqueue(chunk);
|
||
// If we've already flushed, we're done.
|
||
if (flushed) return;
|
||
// Schedule the flush to happen.
|
||
flushed = true;
|
||
flush(controller);
|
||
},
|
||
flush (controller) {
|
||
if (pending) return pending.promise;
|
||
if (flushed) return;
|
||
// Flush now.
|
||
controller.enqueue(encoder.encode(suffix));
|
||
}
|
||
});
|
||
}
|
||
function createFlightDataInjectionTransformStream(stream, delayDataUntilFirstHtmlChunk) {
|
||
let htmlStreamFinished = false;
|
||
let pull = null;
|
||
let donePulling = false;
|
||
function startOrContinuePulling(controller) {
|
||
if (!pull) {
|
||
pull = startPulling(controller);
|
||
}
|
||
return pull;
|
||
}
|
||
async function startPulling(controller) {
|
||
const reader = stream.getReader();
|
||
if (delayDataUntilFirstHtmlChunk) {
|
||
// NOTE: streaming flush
|
||
// We are buffering here for the inlined data stream because the
|
||
// "shell" stream might be chunkenized again by the underlying stream
|
||
// implementation, e.g. with a specific high-water mark. To ensure it's
|
||
// the safe timing to pipe the data stream, this extra tick is
|
||
// necessary.
|
||
// We don't start reading until we've left the current Task to ensure
|
||
// that it's inserted after flushing the shell. Note that this implementation
|
||
// might get stale if impl details of Fizz change in the future.
|
||
await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["atLeastOneTask"])();
|
||
}
|
||
try {
|
||
while(true){
|
||
const { done, value } = await reader.read();
|
||
if (done) {
|
||
donePulling = true;
|
||
return;
|
||
}
|
||
// We want to prioritize HTML over RSC data.
|
||
// The SSR render is based on the same RSC stream, so when we get a new RSC chunk,
|
||
// we're likely to produce an HTML chunk as well, so give it a chance to flush first.
|
||
if (!delayDataUntilFirstHtmlChunk && !htmlStreamFinished) {
|
||
await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["atLeastOneTask"])();
|
||
}
|
||
controller.enqueue(value);
|
||
}
|
||
} catch (err) {
|
||
controller.error(err);
|
||
}
|
||
}
|
||
return new TransformStream({
|
||
start (controller) {
|
||
if (!delayDataUntilFirstHtmlChunk) {
|
||
startOrContinuePulling(controller);
|
||
}
|
||
},
|
||
transform (chunk, controller) {
|
||
controller.enqueue(chunk);
|
||
// Start the streaming if it hasn't already been started yet.
|
||
if (delayDataUntilFirstHtmlChunk) {
|
||
startOrContinuePulling(controller);
|
||
}
|
||
},
|
||
flush (controller) {
|
||
htmlStreamFinished = true;
|
||
if (donePulling) {
|
||
return;
|
||
}
|
||
return startOrContinuePulling(controller);
|
||
}
|
||
});
|
||
}
|
||
const CLOSE_TAG = '</body></html>';
|
||
/**
|
||
* This transform stream moves the suffix to the end of the stream, so results
|
||
* like `</body></html><script>...</script>` will be transformed to
|
||
* `<script>...</script></body></html>`.
|
||
*/ function createMoveSuffixStream() {
|
||
let foundSuffix = false;
|
||
return new TransformStream({
|
||
transform (chunk, controller) {
|
||
if (foundSuffix) {
|
||
return controller.enqueue(chunk);
|
||
}
|
||
const index = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML);
|
||
if (index > -1) {
|
||
foundSuffix = true;
|
||
// If the whole chunk is the suffix, then don't write anything, it will
|
||
// be written in the flush.
|
||
if (chunk.length === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length) {
|
||
return;
|
||
}
|
||
// Write out the part before the suffix.
|
||
const before = chunk.slice(0, index);
|
||
controller.enqueue(before);
|
||
// In the case where the suffix is in the middle of the chunk, we need
|
||
// to split the chunk into two parts.
|
||
if (chunk.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length + index) {
|
||
// Write out the part after the suffix.
|
||
const after = chunk.slice(index + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML.length);
|
||
controller.enqueue(after);
|
||
}
|
||
} else {
|
||
controller.enqueue(chunk);
|
||
}
|
||
},
|
||
flush (controller) {
|
||
// Even if we didn't find the suffix, the HTML is not valid if we don't
|
||
// add it, so insert it at the end.
|
||
controller.enqueue(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML);
|
||
}
|
||
});
|
||
}
|
||
function createStripDocumentClosingTagsTransform() {
|
||
return new TransformStream({
|
||
transform (chunk, controller) {
|
||
// We rely on the assumption that chunks will never break across a code unit.
|
||
// This is reasonable because we currently concat all of React's output from a single
|
||
// flush into one chunk before streaming it forward which means the chunk will represent
|
||
// a single coherent utf-8 string. This is not safe to use if we change our streaming to no
|
||
// longer do this large buffered chunk
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY_AND_HTML) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["isEquivalentUint8Arrays"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML)) {
|
||
// the entire chunk is the closing tags; return without enqueueing anything.
|
||
return;
|
||
}
|
||
// We assume these tags will go at together at the end of the document and that
|
||
// they won't appear anywhere else in the document. This is not really a safe assumption
|
||
// but until we revamp our streaming infra this is a performant way to string the tags
|
||
chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.BODY);
|
||
chunk = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["removeFromUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML);
|
||
controller.enqueue(chunk);
|
||
}
|
||
});
|
||
}
|
||
function createHtmlDataDplIdTransformStream(dplId) {
|
||
let didTransform = false;
|
||
return new TransformStream({
|
||
transform (chunk, controller) {
|
||
if (didTransform) {
|
||
controller.enqueue(chunk);
|
||
return;
|
||
}
|
||
const htmlTagIndex = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.HTML);
|
||
if (htmlTagIndex === -1) {
|
||
controller.enqueue(chunk);
|
||
return;
|
||
}
|
||
// Insert the data-dpl-id attribute right after "<html "
|
||
const insertionPoint = htmlTagIndex + __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.HTML.length;
|
||
const attribute = ` data-dpl-id="${dplId}"`;
|
||
const encodedAttribute = encoder.encode(attribute);
|
||
const modifiedChunk = new Uint8Array(chunk.length + encodedAttribute.length);
|
||
// Copy everything before the insertion point
|
||
modifiedChunk.set(chunk.subarray(0, insertionPoint));
|
||
// Insert the attribute
|
||
modifiedChunk.set(encodedAttribute, insertionPoint);
|
||
// Copy everything after
|
||
modifiedChunk.set(chunk.subarray(insertionPoint), insertionPoint + encodedAttribute.length);
|
||
controller.enqueue(modifiedChunk);
|
||
didTransform = true;
|
||
}
|
||
});
|
||
}
|
||
function createRootLayoutValidatorStream() {
|
||
let foundHtml = false;
|
||
let foundBody = false;
|
||
return new TransformStream({
|
||
async transform (chunk, controller) {
|
||
// Peek into the streamed chunk to see if the tags are present.
|
||
if (!foundHtml && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.HTML) > -1) {
|
||
foundHtml = true;
|
||
}
|
||
if (!foundBody && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$uint8array$2d$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["indexOfUint8Array"])(chunk, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$encoded$2d$tags$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].OPENING.BODY) > -1) {
|
||
foundBody = true;
|
||
}
|
||
controller.enqueue(chunk);
|
||
},
|
||
flush (controller) {
|
||
const missingTags = [];
|
||
if (!foundHtml) missingTags.push('html');
|
||
if (!foundBody) missingTags.push('body');
|
||
if (!missingTags.length) return;
|
||
controller.enqueue(encoder.encode(`<html id="__next_error__">
|
||
<template
|
||
data-next-error-message="Missing ${missingTags.map((c)=>`<${c}>`).join(missingTags.length > 1 ? ' and ' : '')} tags in the root layout.\nRead more at https://nextjs.org/docs/messages/missing-root-layout-tags"
|
||
data-next-error-digest="${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$errors$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["MISSING_ROOT_TAGS_ERROR"]}"
|
||
data-next-error-stack=""
|
||
></template>
|
||
`));
|
||
}
|
||
});
|
||
}
|
||
function chainTransformers(readable, transformers) {
|
||
let stream = readable;
|
||
for (const transformer of transformers){
|
||
if (!transformer) continue;
|
||
stream = stream.pipeThrough(transformer);
|
||
}
|
||
return stream;
|
||
}
|
||
async function continueFizzStream(renderStream, { suffix, inlinedDataStream, isStaticGeneration, deploymentId, getServerInsertedHTML, getServerInsertedMetadata, validateRootLayout }) {
|
||
// Suffix itself might contain close tags at the end, so we need to split it.
|
||
const suffixUnclosed = suffix ? suffix.split(CLOSE_TAG, 1)[0] : null;
|
||
if (isStaticGeneration) {
|
||
// If we're generating static HTML we need to wait for it to resolve before continuing.
|
||
await renderStream.allReady;
|
||
} else {
|
||
// Otherwise, we want to make sure Fizz is done with all microtasky work
|
||
// before we start pulling the stream and cause a flush.
|
||
await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["waitAtLeastOneReactRenderTask"])();
|
||
}
|
||
return chainTransformers(renderStream, [
|
||
// Buffer everything to avoid flushing too frequently
|
||
createBufferedTransformStream(),
|
||
// Insert data-dpl-id attribute on the html tag
|
||
deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,
|
||
// Transform metadata
|
||
createMetadataTransformStream(getServerInsertedMetadata),
|
||
// Insert suffix content
|
||
suffixUnclosed != null && suffixUnclosed.length > 0 ? createDeferredSuffixStream(suffixUnclosed) : null,
|
||
// Insert the inlined data (Flight data, form state, etc.) stream into the HTML
|
||
inlinedDataStream ? createFlightDataInjectionTransformStream(inlinedDataStream, true) : null,
|
||
// Validate the root layout for missing html or body tags
|
||
validateRootLayout ? createRootLayoutValidatorStream() : null,
|
||
// Close tags should always be deferred to the end
|
||
createMoveSuffixStream(),
|
||
// Special head insertions
|
||
// TODO-APP: Insert server side html to end of head in app layout rendering, to avoid
|
||
// hydration errors. Remove this once it's ready to be handled by react itself.
|
||
createHeadInsertionTransformStream(getServerInsertedHTML)
|
||
]);
|
||
}
|
||
async function continueDynamicPrerender(prerenderStream, { getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) {
|
||
return chainTransformers(prerenderStream, [
|
||
// Buffer everything to avoid flushing too frequently
|
||
createBufferedTransformStream(),
|
||
createStripDocumentClosingTagsTransform(),
|
||
// Insert data-dpl-id attribute on the html tag
|
||
deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,
|
||
// Insert generated tags to head
|
||
createHeadInsertionTransformStream(getServerInsertedHTML),
|
||
// Transform metadata
|
||
createMetadataTransformStream(getServerInsertedMetadata)
|
||
]);
|
||
}
|
||
async function continueStaticPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) {
|
||
return chainTransformers(prerenderStream, [
|
||
// Buffer everything to avoid flushing too frequently
|
||
createBufferedTransformStream(),
|
||
// Add build id comment to start of the HTML document (in export mode)
|
||
// Insert data-dpl-id attribute on the html tag
|
||
deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,
|
||
// Insert generated tags to head
|
||
createHeadInsertionTransformStream(getServerInsertedHTML),
|
||
// Transform metadata
|
||
createMetadataTransformStream(getServerInsertedMetadata),
|
||
// Insert the inlined data (Flight data, form state, etc.) stream into the HTML
|
||
createFlightDataInjectionTransformStream(inlinedDataStream, true),
|
||
// Close tags should always be deferred to the end
|
||
createMoveSuffixStream()
|
||
]);
|
||
}
|
||
async function continueStaticFallbackPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) {
|
||
// Same as `continueStaticPrerender`, but also inserts an additional script
|
||
// to instruct the client to start fetching the hydration data as early
|
||
// as possible.
|
||
return chainTransformers(prerenderStream, [
|
||
// Buffer everything to avoid flushing too frequently
|
||
createBufferedTransformStream(),
|
||
// Insert data-dpl-id attribute on the html tag
|
||
deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,
|
||
// Insert generated tags to head
|
||
createHeadInsertionTransformStream(getServerInsertedHTML),
|
||
// Insert the client resume script into the head
|
||
await createClientResumeScriptInsertionTransformStream(),
|
||
// Transform metadata
|
||
createMetadataTransformStream(getServerInsertedMetadata),
|
||
// Insert the inlined data (Flight data, form state, etc.) stream into the HTML
|
||
createFlightDataInjectionTransformStream(inlinedDataStream, true),
|
||
// Close tags should always be deferred to the end
|
||
createMoveSuffixStream()
|
||
]);
|
||
}
|
||
async function continueDynamicHTMLResume(renderStream, { delayDataUntilFirstHtmlChunk, inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, deploymentId }) {
|
||
return chainTransformers(renderStream, [
|
||
// Buffer everything to avoid flushing too frequently
|
||
createBufferedTransformStream(),
|
||
// Insert data-dpl-id attribute on the html tag
|
||
deploymentId ? createHtmlDataDplIdTransformStream(deploymentId) : null,
|
||
// Insert generated tags to head
|
||
createHeadInsertionTransformStream(getServerInsertedHTML),
|
||
// Transform metadata
|
||
createMetadataTransformStream(getServerInsertedMetadata),
|
||
// Insert the inlined data (Flight data, form state, etc.) stream into the HTML
|
||
createFlightDataInjectionTransformStream(inlinedDataStream, delayDataUntilFirstHtmlChunk),
|
||
// Close tags should always be deferred to the end
|
||
createMoveSuffixStream()
|
||
]);
|
||
}
|
||
function createDocumentClosingStream() {
|
||
return streamFromString(CLOSE_TAG);
|
||
}
|
||
function createRuntimePrefetchTransformStream(sentinel, isPartial, staleTime) {
|
||
const enc = new TextEncoder();
|
||
// Search for: [<sentinel>]
|
||
// Replace with: [<isPartial>,<staleTime>]
|
||
const search = enc.encode(`[${sentinel}]`);
|
||
const first = search[0];
|
||
const replace = enc.encode(`[${isPartial},${staleTime}]`);
|
||
const searchLen = search.length;
|
||
let currentChunk = null;
|
||
let found = false;
|
||
function processChunk(controller, nextChunk) {
|
||
if (found) {
|
||
if (nextChunk) {
|
||
controller.enqueue(nextChunk);
|
||
}
|
||
return;
|
||
}
|
||
if (currentChunk) {
|
||
// We can't search past the index that can contain a full match
|
||
let exclusiveUpperBound = currentChunk.length - (searchLen - 1);
|
||
if (nextChunk) {
|
||
// If we have any overflow bytes we can search up to the chunk's final byte
|
||
exclusiveUpperBound += Math.min(nextChunk.length, searchLen - 1);
|
||
}
|
||
if (exclusiveUpperBound < 1) {
|
||
// we can't match the current chunk.
|
||
controller.enqueue(currentChunk);
|
||
currentChunk = nextChunk // advance so we don't process this chunk again
|
||
;
|
||
return;
|
||
}
|
||
let currentIndex = currentChunk.indexOf(first);
|
||
// check the current candidate match if it is within the bounds of our search space for the currentChunk
|
||
candidateLoop: while(-1 < currentIndex && currentIndex < exclusiveUpperBound){
|
||
// We already know index 0 matches because we used indexOf to find the candidateIndex so we start at index 1
|
||
let matchIndex = 1;
|
||
while(matchIndex < searchLen){
|
||
const candidateIndex = currentIndex + matchIndex;
|
||
const candidateValue = candidateIndex < currentChunk.length ? currentChunk[candidateIndex] : nextChunk[candidateIndex - currentChunk.length];
|
||
if (candidateValue !== search[matchIndex]) {
|
||
// No match, reset and continue the search from the next position
|
||
currentIndex = currentChunk.indexOf(first, currentIndex + 1);
|
||
continue candidateLoop;
|
||
}
|
||
matchIndex++;
|
||
}
|
||
// We found a complete match. currentIndex is our starting point to replace the value.
|
||
found = true;
|
||
// enqueue everything up to the match
|
||
controller.enqueue(currentChunk.subarray(0, currentIndex));
|
||
// enqueue the replacement value
|
||
controller.enqueue(replace);
|
||
// If there are bytes in the currentChunk after the match enqueue them
|
||
if (currentIndex + searchLen < currentChunk.length) {
|
||
controller.enqueue(currentChunk.slice(currentIndex + searchLen));
|
||
}
|
||
// If we have a next chunk we enqueue it now
|
||
if (nextChunk) {
|
||
// if replacement spills over to the next chunk we first exclude the replaced bytes
|
||
const overflowBytes = currentIndex + searchLen - currentChunk.length;
|
||
const truncatedChunk = overflowBytes > 0 ? nextChunk.subarray(overflowBytes) : nextChunk;
|
||
controller.enqueue(truncatedChunk);
|
||
}
|
||
// We are now in found mode and don't need to track currentChunk anymore
|
||
currentChunk = null;
|
||
return;
|
||
}
|
||
// No match found in this chunk, emit it and wait for the next one
|
||
controller.enqueue(currentChunk);
|
||
}
|
||
// Advance to the next chunk
|
||
currentChunk = nextChunk;
|
||
}
|
||
return new TransformStream({
|
||
transform (chunk, controller) {
|
||
processChunk(controller, chunk);
|
||
},
|
||
flush (controller) {
|
||
processChunk(controller, null);
|
||
}
|
||
});
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/lib/constants.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"ACTION_SUFFIX",
|
||
()=>ACTION_SUFFIX,
|
||
"APP_DIR_ALIAS",
|
||
()=>APP_DIR_ALIAS,
|
||
"CACHE_ONE_YEAR_SECONDS",
|
||
()=>CACHE_ONE_YEAR_SECONDS,
|
||
"DOT_NEXT_ALIAS",
|
||
()=>DOT_NEXT_ALIAS,
|
||
"ESLINT_DEFAULT_DIRS",
|
||
()=>ESLINT_DEFAULT_DIRS,
|
||
"GSP_NO_RETURNED_VALUE",
|
||
()=>GSP_NO_RETURNED_VALUE,
|
||
"GSSP_COMPONENT_MEMBER_ERROR",
|
||
()=>GSSP_COMPONENT_MEMBER_ERROR,
|
||
"GSSP_NO_RETURNED_VALUE",
|
||
()=>GSSP_NO_RETURNED_VALUE,
|
||
"HTML_CONTENT_TYPE_HEADER",
|
||
()=>HTML_CONTENT_TYPE_HEADER,
|
||
"INFINITE_CACHE",
|
||
()=>INFINITE_CACHE,
|
||
"INSTRUMENTATION_HOOK_FILENAME",
|
||
()=>INSTRUMENTATION_HOOK_FILENAME,
|
||
"JSON_CONTENT_TYPE_HEADER",
|
||
()=>JSON_CONTENT_TYPE_HEADER,
|
||
"MATCHED_PATH_HEADER",
|
||
()=>MATCHED_PATH_HEADER,
|
||
"MIDDLEWARE_FILENAME",
|
||
()=>MIDDLEWARE_FILENAME,
|
||
"MIDDLEWARE_LOCATION_REGEXP",
|
||
()=>MIDDLEWARE_LOCATION_REGEXP,
|
||
"NEXT_BODY_SUFFIX",
|
||
()=>NEXT_BODY_SUFFIX,
|
||
"NEXT_CACHE_IMPLICIT_TAG_ID",
|
||
()=>NEXT_CACHE_IMPLICIT_TAG_ID,
|
||
"NEXT_CACHE_REVALIDATED_TAGS_HEADER",
|
||
()=>NEXT_CACHE_REVALIDATED_TAGS_HEADER,
|
||
"NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER",
|
||
()=>NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER,
|
||
"NEXT_CACHE_ROOT_PARAM_TAG_ID",
|
||
()=>NEXT_CACHE_ROOT_PARAM_TAG_ID,
|
||
"NEXT_CACHE_SOFT_TAG_MAX_LENGTH",
|
||
()=>NEXT_CACHE_SOFT_TAG_MAX_LENGTH,
|
||
"NEXT_CACHE_TAGS_HEADER",
|
||
()=>NEXT_CACHE_TAGS_HEADER,
|
||
"NEXT_CACHE_TAG_MAX_ITEMS",
|
||
()=>NEXT_CACHE_TAG_MAX_ITEMS,
|
||
"NEXT_CACHE_TAG_MAX_LENGTH",
|
||
()=>NEXT_CACHE_TAG_MAX_LENGTH,
|
||
"NEXT_DATA_SUFFIX",
|
||
()=>NEXT_DATA_SUFFIX,
|
||
"NEXT_INTERCEPTION_MARKER_PREFIX",
|
||
()=>NEXT_INTERCEPTION_MARKER_PREFIX,
|
||
"NEXT_META_SUFFIX",
|
||
()=>NEXT_META_SUFFIX,
|
||
"NEXT_NAV_DEPLOYMENT_ID_HEADER",
|
||
()=>NEXT_NAV_DEPLOYMENT_ID_HEADER,
|
||
"NEXT_QUERY_PARAM_PREFIX",
|
||
()=>NEXT_QUERY_PARAM_PREFIX,
|
||
"NEXT_RESUME_HEADER",
|
||
()=>NEXT_RESUME_HEADER,
|
||
"NEXT_RESUME_STATE_LENGTH_HEADER",
|
||
()=>NEXT_RESUME_STATE_LENGTH_HEADER,
|
||
"NON_STANDARD_NODE_ENV",
|
||
()=>NON_STANDARD_NODE_ENV,
|
||
"PAGES_DIR_ALIAS",
|
||
()=>PAGES_DIR_ALIAS,
|
||
"PRERENDER_REVALIDATE_HEADER",
|
||
()=>PRERENDER_REVALIDATE_HEADER,
|
||
"PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER",
|
||
()=>PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER,
|
||
"PROXY_FILENAME",
|
||
()=>PROXY_FILENAME,
|
||
"PROXY_LOCATION_REGEXP",
|
||
()=>PROXY_LOCATION_REGEXP,
|
||
"PUBLIC_DIR_MIDDLEWARE_CONFLICT",
|
||
()=>PUBLIC_DIR_MIDDLEWARE_CONFLICT,
|
||
"ROOT_DIR_ALIAS",
|
||
()=>ROOT_DIR_ALIAS,
|
||
"RSC_ACTION_CLIENT_WRAPPER_ALIAS",
|
||
()=>RSC_ACTION_CLIENT_WRAPPER_ALIAS,
|
||
"RSC_ACTION_ENCRYPTION_ALIAS",
|
||
()=>RSC_ACTION_ENCRYPTION_ALIAS,
|
||
"RSC_ACTION_PROXY_ALIAS",
|
||
()=>RSC_ACTION_PROXY_ALIAS,
|
||
"RSC_ACTION_VALIDATE_ALIAS",
|
||
()=>RSC_ACTION_VALIDATE_ALIAS,
|
||
"RSC_CACHE_WRAPPER_ALIAS",
|
||
()=>RSC_CACHE_WRAPPER_ALIAS,
|
||
"RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS",
|
||
()=>RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS,
|
||
"RSC_MOD_REF_PROXY_ALIAS",
|
||
()=>RSC_MOD_REF_PROXY_ALIAS,
|
||
"RSC_SEGMENTS_DIR_SUFFIX",
|
||
()=>RSC_SEGMENTS_DIR_SUFFIX,
|
||
"RSC_SEGMENT_SUFFIX",
|
||
()=>RSC_SEGMENT_SUFFIX,
|
||
"RSC_SUFFIX",
|
||
()=>RSC_SUFFIX,
|
||
"SERVER_PROPS_EXPORT_ERROR",
|
||
()=>SERVER_PROPS_EXPORT_ERROR,
|
||
"SERVER_PROPS_GET_INIT_PROPS_CONFLICT",
|
||
()=>SERVER_PROPS_GET_INIT_PROPS_CONFLICT,
|
||
"SERVER_PROPS_SSG_CONFLICT",
|
||
()=>SERVER_PROPS_SSG_CONFLICT,
|
||
"SERVER_RUNTIME",
|
||
()=>SERVER_RUNTIME,
|
||
"SSG_FALLBACK_EXPORT_ERROR",
|
||
()=>SSG_FALLBACK_EXPORT_ERROR,
|
||
"SSG_GET_INITIAL_PROPS_CONFLICT",
|
||
()=>SSG_GET_INITIAL_PROPS_CONFLICT,
|
||
"STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR",
|
||
()=>STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR,
|
||
"TEXT_PLAIN_CONTENT_TYPE_HEADER",
|
||
()=>TEXT_PLAIN_CONTENT_TYPE_HEADER,
|
||
"UNSTABLE_REVALIDATE_RENAME_ERROR",
|
||
()=>UNSTABLE_REVALIDATE_RENAME_ERROR,
|
||
"WEBPACK_LAYERS",
|
||
()=>WEBPACK_LAYERS,
|
||
"WEBPACK_RESOURCE_QUERIES",
|
||
()=>WEBPACK_RESOURCE_QUERIES,
|
||
"WEB_SOCKET_MAX_RECONNECTIONS",
|
||
()=>WEB_SOCKET_MAX_RECONNECTIONS
|
||
]);
|
||
const TEXT_PLAIN_CONTENT_TYPE_HEADER = 'text/plain';
|
||
const HTML_CONTENT_TYPE_HEADER = 'text/html; charset=utf-8';
|
||
const JSON_CONTENT_TYPE_HEADER = 'application/json; charset=utf-8';
|
||
const NEXT_QUERY_PARAM_PREFIX = 'nxtP';
|
||
const NEXT_INTERCEPTION_MARKER_PREFIX = 'nxtI';
|
||
const MATCHED_PATH_HEADER = 'x-matched-path';
|
||
const PRERENDER_REVALIDATE_HEADER = 'x-prerender-revalidate';
|
||
const PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER = 'x-prerender-revalidate-if-generated';
|
||
const RSC_SEGMENTS_DIR_SUFFIX = '.segments';
|
||
const RSC_SEGMENT_SUFFIX = '.segment.rsc';
|
||
const RSC_SUFFIX = '.rsc';
|
||
const ACTION_SUFFIX = '.action';
|
||
const NEXT_DATA_SUFFIX = '.json';
|
||
const NEXT_META_SUFFIX = '.meta';
|
||
const NEXT_BODY_SUFFIX = '.body';
|
||
const NEXT_NAV_DEPLOYMENT_ID_HEADER = 'x-nextjs-deployment-id';
|
||
const NEXT_CACHE_TAGS_HEADER = 'x-next-cache-tags';
|
||
const NEXT_CACHE_REVALIDATED_TAGS_HEADER = 'x-next-revalidated-tags';
|
||
const NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER = 'x-next-revalidate-tag-token';
|
||
const NEXT_RESUME_HEADER = 'next-resume';
|
||
const NEXT_RESUME_STATE_LENGTH_HEADER = 'x-next-resume-state-length';
|
||
const NEXT_CACHE_TAG_MAX_ITEMS = 128;
|
||
const NEXT_CACHE_TAG_MAX_LENGTH = 256;
|
||
const NEXT_CACHE_SOFT_TAG_MAX_LENGTH = 1024;
|
||
const NEXT_CACHE_IMPLICIT_TAG_ID = '_N_T_';
|
||
const NEXT_CACHE_ROOT_PARAM_TAG_ID = '_N_RP_';
|
||
const CACHE_ONE_YEAR_SECONDS = 31536000;
|
||
const INFINITE_CACHE = 0xfffffffe;
|
||
const MIDDLEWARE_FILENAME = 'middleware';
|
||
const MIDDLEWARE_LOCATION_REGEXP = `(?:src/)?${MIDDLEWARE_FILENAME}`;
|
||
const PROXY_FILENAME = 'proxy';
|
||
const PROXY_LOCATION_REGEXP = `(?:src/)?${PROXY_FILENAME}`;
|
||
const INSTRUMENTATION_HOOK_FILENAME = 'instrumentation';
|
||
const PAGES_DIR_ALIAS = 'private-next-pages';
|
||
const DOT_NEXT_ALIAS = 'private-dot-next';
|
||
const ROOT_DIR_ALIAS = 'private-next-root-dir';
|
||
const APP_DIR_ALIAS = 'private-next-app-dir';
|
||
const RSC_MOD_REF_PROXY_ALIAS = 'private-next-rsc-mod-ref-proxy';
|
||
const RSC_ACTION_VALIDATE_ALIAS = 'private-next-rsc-action-validate';
|
||
const RSC_ACTION_PROXY_ALIAS = 'private-next-rsc-server-reference';
|
||
const RSC_CACHE_WRAPPER_ALIAS = 'private-next-rsc-cache-wrapper';
|
||
const RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS = 'private-next-rsc-track-dynamic-import';
|
||
const RSC_ACTION_ENCRYPTION_ALIAS = 'private-next-rsc-action-encryption';
|
||
const RSC_ACTION_CLIENT_WRAPPER_ALIAS = 'private-next-rsc-action-client-wrapper';
|
||
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`;
|
||
const SSG_GET_INITIAL_PROPS_CONFLICT = `You can not use getInitialProps with getStaticProps. To use SSG, please remove your getInitialProps`;
|
||
const SERVER_PROPS_GET_INIT_PROPS_CONFLICT = `You can not use getInitialProps with getServerSideProps. Please remove getInitialProps.`;
|
||
const SERVER_PROPS_SSG_CONFLICT = `You can not use getStaticProps or getStaticPaths with getServerSideProps. To use SSG, please remove getServerSideProps`;
|
||
const STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR = `can not have getInitialProps/getServerSideProps, https://nextjs.org/docs/messages/404-get-initial-props`;
|
||
const SERVER_PROPS_EXPORT_ERROR = `pages with \`getServerSideProps\` can not be exported. See more info here: https://nextjs.org/docs/messages/gssp-export`;
|
||
const GSP_NO_RETURNED_VALUE = 'Your `getStaticProps` function did not return an object. Did you forget to add a `return`?';
|
||
const GSSP_NO_RETURNED_VALUE = 'Your `getServerSideProps` function did not return an object. Did you forget to add a `return`?';
|
||
const UNSTABLE_REVALIDATE_RENAME_ERROR = 'The `unstable_revalidate` property is available for general use.\n' + 'Please use `revalidate` instead.';
|
||
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`;
|
||
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`;
|
||
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`;
|
||
const ESLINT_DEFAULT_DIRS = [
|
||
'app',
|
||
'pages',
|
||
'components',
|
||
'lib',
|
||
'src'
|
||
];
|
||
const SERVER_RUNTIME = {
|
||
edge: 'edge',
|
||
experimentalEdge: 'experimental-edge',
|
||
nodejs: 'nodejs'
|
||
};
|
||
const WEB_SOCKET_MAX_RECONNECTIONS = 12;
|
||
/**
|
||
* The names of the webpack layers. These layers are the primitives for the
|
||
* webpack chunks.
|
||
*/ const WEBPACK_LAYERS_NAMES = {
|
||
/**
|
||
* The layer for the shared code between the client and server bundles.
|
||
*/ shared: 'shared',
|
||
/**
|
||
* The layer for server-only runtime and picking up `react-server` export conditions.
|
||
* Including app router RSC pages and app router custom routes and metadata routes.
|
||
*/ reactServerComponents: 'rsc',
|
||
/**
|
||
* Server Side Rendering layer for app (ssr).
|
||
*/ serverSideRendering: 'ssr',
|
||
/**
|
||
* The browser client bundle layer for actions.
|
||
*/ actionBrowser: 'action-browser',
|
||
/**
|
||
* The Node.js bundle layer for the API routes.
|
||
*/ apiNode: 'api-node',
|
||
/**
|
||
* The Edge Lite bundle layer for the API routes.
|
||
*/ apiEdge: 'api-edge',
|
||
/**
|
||
* The layer for the middleware code.
|
||
*/ middleware: 'middleware',
|
||
/**
|
||
* The layer for the instrumentation hooks.
|
||
*/ instrument: 'instrument',
|
||
/**
|
||
* The layer for assets on the edge.
|
||
*/ edgeAsset: 'edge-asset',
|
||
/**
|
||
* The browser client bundle layer for App directory.
|
||
*/ appPagesBrowser: 'app-pages-browser',
|
||
/**
|
||
* The browser client bundle layer for Pages directory.
|
||
*/ pagesDirBrowser: 'pages-dir-browser',
|
||
/**
|
||
* The Edge Lite bundle layer for Pages directory.
|
||
*/ pagesDirEdge: 'pages-dir-edge',
|
||
/**
|
||
* The Node.js bundle layer for Pages directory.
|
||
*/ pagesDirNode: 'pages-dir-node'
|
||
};
|
||
const WEBPACK_LAYERS = {
|
||
...WEBPACK_LAYERS_NAMES,
|
||
GROUP: {
|
||
builtinReact: [
|
||
WEBPACK_LAYERS_NAMES.reactServerComponents,
|
||
WEBPACK_LAYERS_NAMES.actionBrowser
|
||
],
|
||
serverOnly: [
|
||
WEBPACK_LAYERS_NAMES.reactServerComponents,
|
||
WEBPACK_LAYERS_NAMES.actionBrowser,
|
||
WEBPACK_LAYERS_NAMES.instrument,
|
||
WEBPACK_LAYERS_NAMES.middleware
|
||
],
|
||
neutralTarget: [
|
||
// pages api
|
||
WEBPACK_LAYERS_NAMES.apiNode,
|
||
WEBPACK_LAYERS_NAMES.apiEdge
|
||
],
|
||
clientOnly: [
|
||
WEBPACK_LAYERS_NAMES.serverSideRendering,
|
||
WEBPACK_LAYERS_NAMES.appPagesBrowser
|
||
],
|
||
bundled: [
|
||
WEBPACK_LAYERS_NAMES.reactServerComponents,
|
||
WEBPACK_LAYERS_NAMES.actionBrowser,
|
||
WEBPACK_LAYERS_NAMES.serverSideRendering,
|
||
WEBPACK_LAYERS_NAMES.appPagesBrowser,
|
||
WEBPACK_LAYERS_NAMES.shared,
|
||
WEBPACK_LAYERS_NAMES.instrument,
|
||
WEBPACK_LAYERS_NAMES.middleware
|
||
],
|
||
appPages: [
|
||
// app router pages and layouts
|
||
WEBPACK_LAYERS_NAMES.reactServerComponents,
|
||
WEBPACK_LAYERS_NAMES.serverSideRendering,
|
||
WEBPACK_LAYERS_NAMES.appPagesBrowser,
|
||
WEBPACK_LAYERS_NAMES.actionBrowser
|
||
]
|
||
}
|
||
};
|
||
const WEBPACK_RESOURCE_QUERIES = {
|
||
edgeSSREntry: '__next_edge_ssr_entry__',
|
||
metadata: '__next_metadata__',
|
||
metadataRoute: '__next_metadata_route__',
|
||
metadataImageMeta: '__next_metadata_image_meta__'
|
||
};
|
||
;
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/web/utils.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"fromNodeOutgoingHttpHeaders",
|
||
()=>fromNodeOutgoingHttpHeaders,
|
||
"normalizeNextQueryParam",
|
||
()=>normalizeNextQueryParam,
|
||
"splitCookiesString",
|
||
()=>splitCookiesString,
|
||
"toNodeOutgoingHttpHeaders",
|
||
()=>toNodeOutgoingHttpHeaders,
|
||
"validateURL",
|
||
()=>validateURL
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [ssr] (ecmascript)");
|
||
;
|
||
function fromNodeOutgoingHttpHeaders(nodeHeaders) {
|
||
const headers = new Headers();
|
||
for (let [key, value] of Object.entries(nodeHeaders)){
|
||
const values = Array.isArray(value) ? value : [
|
||
value
|
||
];
|
||
for (let v of values){
|
||
if (typeof v === 'undefined') continue;
|
||
if (typeof v === 'number') {
|
||
v = v.toString();
|
||
}
|
||
headers.append(key, v);
|
||
}
|
||
}
|
||
return headers;
|
||
}
|
||
function splitCookiesString(cookiesString) {
|
||
var cookiesStrings = [];
|
||
var pos = 0;
|
||
var start;
|
||
var ch;
|
||
var lastComma;
|
||
var nextStart;
|
||
var cookiesSeparatorFound;
|
||
function skipWhitespace() {
|
||
while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){
|
||
pos += 1;
|
||
}
|
||
return pos < cookiesString.length;
|
||
}
|
||
function notSpecialChar() {
|
||
ch = cookiesString.charAt(pos);
|
||
return ch !== '=' && ch !== ';' && ch !== ',';
|
||
}
|
||
while(pos < cookiesString.length){
|
||
start = pos;
|
||
cookiesSeparatorFound = false;
|
||
while(skipWhitespace()){
|
||
ch = cookiesString.charAt(pos);
|
||
if (ch === ',') {
|
||
// ',' is a cookie separator if we have later first '=', not ';' or ','
|
||
lastComma = pos;
|
||
pos += 1;
|
||
skipWhitespace();
|
||
nextStart = pos;
|
||
while(pos < cookiesString.length && notSpecialChar()){
|
||
pos += 1;
|
||
}
|
||
// currently special character
|
||
if (pos < cookiesString.length && cookiesString.charAt(pos) === '=') {
|
||
// we found cookies separator
|
||
cookiesSeparatorFound = true;
|
||
// pos is inside the next cookie, so back up and return it.
|
||
pos = nextStart;
|
||
cookiesStrings.push(cookiesString.substring(start, lastComma));
|
||
start = pos;
|
||
} else {
|
||
// in param ',' or param separator ';',
|
||
// we continue from that comma
|
||
pos = lastComma + 1;
|
||
}
|
||
} else {
|
||
pos += 1;
|
||
}
|
||
}
|
||
if (!cookiesSeparatorFound || pos >= cookiesString.length) {
|
||
cookiesStrings.push(cookiesString.substring(start, cookiesString.length));
|
||
}
|
||
}
|
||
return cookiesStrings;
|
||
}
|
||
function toNodeOutgoingHttpHeaders(headers) {
|
||
const nodeHeaders = {};
|
||
const cookies = [];
|
||
if (headers) {
|
||
for (const [key, value] of headers.entries()){
|
||
if (key.toLowerCase() === 'set-cookie') {
|
||
// We may have gotten a comma joined string of cookies, or multiple
|
||
// set-cookie headers. We need to merge them into one header array
|
||
// to represent all the cookies.
|
||
cookies.push(...splitCookiesString(value));
|
||
nodeHeaders[key] = cookies.length === 1 ? cookies[0] : cookies;
|
||
} else {
|
||
nodeHeaders[key] = value;
|
||
}
|
||
}
|
||
}
|
||
return nodeHeaders;
|
||
}
|
||
function validateURL(url) {
|
||
try {
|
||
return String(new URL(String(url)));
|
||
} catch (error) {
|
||
throw Object.defineProperty(new Error(`URL is malformed "${String(url)}". Please use only absolute URLs - https://nextjs.org/docs/messages/middleware-relative-urls`, {
|
||
cause: error
|
||
}), "__NEXT_ERROR_CODE", {
|
||
value: "E61",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
function normalizeNextQueryParam(key) {
|
||
const prefixes = [
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_QUERY_PARAM_PREFIX"],
|
||
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_INTERCEPTION_MARKER_PREFIX"]
|
||
];
|
||
for (const prefix of prefixes){
|
||
if (key !== prefix && key.startsWith(prefix)) {
|
||
return key.substring(prefix.length);
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"detectDomainLocale",
|
||
()=>detectDomainLocale
|
||
]);
|
||
function detectDomainLocale(domainItems, hostname, detectedLocale) {
|
||
if (!domainItems) return;
|
||
if (detectedLocale) {
|
||
detectedLocale = detectedLocale.toLowerCase();
|
||
}
|
||
for (const item of domainItems){
|
||
// remove port if present
|
||
const domainHostname = item.domain?.split(':', 1)[0].toLowerCase();
|
||
if (hostname === domainHostname || detectedLocale === item.defaultLocale.toLowerCase() || item.locales?.some((locale)=>locale.toLowerCase() === detectedLocale)) {
|
||
return item;
|
||
}
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Removes the trailing slash for a given route or page path. Preserves the
|
||
* root page. Examples:
|
||
* - `/foo/bar/` -> `/foo/bar`
|
||
* - `/foo/bar` -> `/foo/bar`
|
||
* - `/` -> `/`
|
||
*/ __turbopack_context__.s([
|
||
"removeTrailingSlash",
|
||
()=>removeTrailingSlash
|
||
]);
|
||
function removeTrailingSlash(route) {
|
||
return route.replace(/\/$/, '') || '/';
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"addPathPrefix",
|
||
()=>addPathPrefix
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [ssr] (ecmascript)");
|
||
;
|
||
function addPathPrefix(path, prefix) {
|
||
if (!path.startsWith('/') || !prefix) {
|
||
return path;
|
||
}
|
||
const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["parsePath"])(path);
|
||
return `${prefix}${pathname}${query}${hash}`;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"addPathSuffix",
|
||
()=>addPathSuffix
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [ssr] (ecmascript)");
|
||
;
|
||
function addPathSuffix(path, suffix) {
|
||
if (!path.startsWith('/') || !suffix) {
|
||
return path;
|
||
}
|
||
const { pathname, query, hash } = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$parse$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["parsePath"])(path);
|
||
return `${pathname}${suffix}${query}${hash}`;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"addLocale",
|
||
()=>addLocale
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
function addLocale(path, locale, defaultLocale, ignorePrefix) {
|
||
// If no locale was given or the locale is the default locale, we don't need
|
||
// to prefix the path.
|
||
if (!locale || locale === defaultLocale) return path;
|
||
const lower = path.toLowerCase();
|
||
// If the path is an API path or the path already has the locale prefix, we
|
||
// don't need to prefix the path.
|
||
if (!ignorePrefix) {
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, '/api')) return path;
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["pathHasPrefix"])(lower, `/${locale.toLowerCase()}`)) return path;
|
||
}
|
||
// Add the locale prefix to the path.
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["addPathPrefix"])(path, `/${locale}`);
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"formatNextPathnameInfo",
|
||
()=>formatNextPathnameInfo
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$locale$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
function formatNextPathnameInfo(info) {
|
||
let pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$locale$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["addLocale"])(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix);
|
||
if (info.buildId || !info.trailingSlash) {
|
||
pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(pathname);
|
||
}
|
||
if (info.buildId) {
|
||
pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["addPathSuffix"])((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, `/_next/data/${info.buildId}`), info.pathname === '/' ? 'index.json' : '.json');
|
||
}
|
||
pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["addPathPrefix"])(pathname, info.basePath);
|
||
return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$suffix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["addPathSuffix"])(pathname, '/') : pathname : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(pathname);
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Takes an object with a hostname property (like a parsed URL) and some
|
||
* headers that may contain Host and returns the preferred hostname.
|
||
* @param parsed An object containing a hostname property.
|
||
* @param headers A dictionary with headers containing a `host`.
|
||
*/ __turbopack_context__.s([
|
||
"getHostname",
|
||
()=>getHostname
|
||
]);
|
||
function getHostname(parsed, headers) {
|
||
// Get the hostname from the headers if it exists, otherwise use the parsed
|
||
// hostname.
|
||
let hostname;
|
||
if (headers?.host && !Array.isArray(headers.host)) {
|
||
hostname = headers.host.toString().split(':', 1)[0];
|
||
} else if (parsed.hostname) {
|
||
hostname = parsed.hostname;
|
||
} else return;
|
||
return hostname.toLowerCase();
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"normalizeLocalePath",
|
||
()=>normalizeLocalePath
|
||
]);
|
||
/**
|
||
* A cache of lowercased locales for each list of locales. This is stored as a
|
||
* WeakMap so if the locales are garbage collected, the cache entry will be
|
||
* removed as well.
|
||
*/ const cache = new WeakMap();
|
||
function normalizeLocalePath(pathname, locales) {
|
||
// If locales is undefined, return the pathname as is.
|
||
if (!locales) return {
|
||
pathname
|
||
};
|
||
// Get the cached lowercased locales or create a new cache entry.
|
||
let lowercasedLocales = cache.get(locales);
|
||
if (!lowercasedLocales) {
|
||
lowercasedLocales = locales.map((locale)=>locale.toLowerCase());
|
||
cache.set(locales, lowercasedLocales);
|
||
}
|
||
let detectedLocale;
|
||
// The first segment will be empty, because it has a leading `/`. If
|
||
// there is no further segment, there is no locale (or it's the default).
|
||
const segments = pathname.split('/', 2);
|
||
// If there's no second segment (ie, the pathname is just `/`), there's no
|
||
// locale.
|
||
if (!segments[1]) return {
|
||
pathname
|
||
};
|
||
// The second segment will contain the locale part if any.
|
||
const segment = segments[1].toLowerCase();
|
||
// See if the segment matches one of the locales. If it doesn't, there is
|
||
// no locale (or it's the default).
|
||
const index = lowercasedLocales.indexOf(segment);
|
||
if (index < 0) return {
|
||
pathname
|
||
};
|
||
// Return the case-sensitive locale.
|
||
detectedLocale = locales[index];
|
||
// Remove the `/${locale}` part of the pathname.
|
||
pathname = pathname.slice(detectedLocale.length + 1) || '/';
|
||
return {
|
||
pathname,
|
||
detectedLocale
|
||
};
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"removePathPrefix",
|
||
()=>removePathPrefix
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [ssr] (ecmascript)");
|
||
;
|
||
function removePathPrefix(path, prefix) {
|
||
// If the path doesn't start with the prefix we can return it as is. This
|
||
// protects us from situations where the prefix is a substring of the path
|
||
// prefix such as:
|
||
//
|
||
// For prefix: /blog
|
||
//
|
||
// /blog -> true
|
||
// /blog/ -> true
|
||
// /blog/1 -> true
|
||
// /blogging -> false
|
||
// /blogging/ -> false
|
||
// /blogging/1 -> false
|
||
if (!(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["pathHasPrefix"])(path, prefix)) {
|
||
return path;
|
||
}
|
||
// Remove the prefix from the path via slicing.
|
||
const withoutPrefix = path.slice(prefix.length);
|
||
// If the path without the prefix starts with a `/` we can return it as is.
|
||
if (withoutPrefix.startsWith('/')) {
|
||
return withoutPrefix;
|
||
}
|
||
// If the path without the prefix doesn't start with a `/` we need to add it
|
||
// back to the path to make sure it's a valid path.
|
||
return `/${withoutPrefix}`;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"getNextPathnameInfo",
|
||
()=>getNextPathnameInfo
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
function getNextPathnameInfo(pathname, options) {
|
||
const { basePath, i18n, trailingSlash } = options.nextConfig ?? {};
|
||
const info = {
|
||
pathname,
|
||
trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash
|
||
};
|
||
if (basePath && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$path$2d$has$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["pathHasPrefix"])(info.pathname, basePath)) {
|
||
info.pathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$path$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["removePathPrefix"])(info.pathname, basePath);
|
||
info.basePath = basePath;
|
||
}
|
||
let pathnameNoDataPrefix = info.pathname;
|
||
if (info.pathname.startsWith('/_next/data/') && info.pathname.endsWith('.json')) {
|
||
const paths = info.pathname.replace(/^\/_next\/data\//, '').replace(/\.json$/, '').split('/');
|
||
const buildId = paths[0];
|
||
info.buildId = buildId;
|
||
pathnameNoDataPrefix = paths[1] !== 'index' ? `/${paths.slice(1).join('/')}` : '/';
|
||
// update pathname with normalized if enabled although
|
||
// we use normalized to populate locale info still
|
||
if (options.parseData === true) {
|
||
info.pathname = pathnameNoDataPrefix;
|
||
}
|
||
}
|
||
// If provided, use the locale route normalizer to detect the locale instead
|
||
// of the function below.
|
||
if (i18n) {
|
||
let result = options.i18nProvider ? options.i18nProvider.analyze(info.pathname) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(info.pathname, i18n.locales);
|
||
info.locale = result.detectedLocale;
|
||
info.pathname = result.pathname ?? info.pathname;
|
||
if (!result.detectedLocale && info.buildId) {
|
||
result = options.i18nProvider ? options.i18nProvider.analyze(pathnameNoDataPrefix) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$normalize$2d$locale$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(pathnameNoDataPrefix, i18n.locales);
|
||
if (result.detectedLocale) {
|
||
info.locale = result.detectedLocale;
|
||
}
|
||
}
|
||
}
|
||
return info;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/web/next-url.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"NextURL",
|
||
()=>NextURL
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$next$2d$pathname$2d$info$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$next$2d$pathname$2d$info$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
const REGEX_LOCALHOST_HOSTNAME = /^(?:127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)$/;
|
||
function parseURL(url, base) {
|
||
const parsed = new URL(String(url), base && String(base));
|
||
if (REGEX_LOCALHOST_HOSTNAME.test(parsed.hostname)) {
|
||
parsed.hostname = 'localhost';
|
||
}
|
||
return parsed;
|
||
}
|
||
const Internal = Symbol('NextURLInternal');
|
||
class NextURL {
|
||
constructor(input, baseOrOpts, opts){
|
||
let base;
|
||
let options;
|
||
if (typeof baseOrOpts === 'object' && 'pathname' in baseOrOpts || typeof baseOrOpts === 'string') {
|
||
base = baseOrOpts;
|
||
options = opts || {};
|
||
} else {
|
||
options = opts || baseOrOpts || {};
|
||
}
|
||
this[Internal] = {
|
||
url: parseURL(input, base ?? options.base),
|
||
options: options,
|
||
basePath: ''
|
||
};
|
||
this.analyze();
|
||
}
|
||
analyze() {
|
||
var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig, _this_Internal_domainLocale, _this_Internal_options_nextConfig_i18n1, _this_Internal_options_nextConfig1;
|
||
const info = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$get$2d$next$2d$pathname$2d$info$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getNextPathnameInfo"])(this[Internal].url.pathname, {
|
||
nextConfig: this[Internal].options.nextConfig,
|
||
parseData: !("TURBOPACK compile-time value", void 0),
|
||
i18nProvider: this[Internal].options.i18nProvider
|
||
});
|
||
const hostname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$get$2d$hostname$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getHostname"])(this[Internal].url, this[Internal].options.headers);
|
||
this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$i18n$2f$detect$2d$domain$2d$locale$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["detectDomainLocale"])((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.domains, hostname);
|
||
const defaultLocale = ((_this_Internal_domainLocale = this[Internal].domainLocale) == null ? void 0 : _this_Internal_domainLocale.defaultLocale) || ((_this_Internal_options_nextConfig1 = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n1 = _this_Internal_options_nextConfig1.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n1.defaultLocale);
|
||
this[Internal].url.pathname = info.pathname;
|
||
this[Internal].defaultLocale = defaultLocale;
|
||
this[Internal].basePath = info.basePath ?? '';
|
||
this[Internal].buildId = info.buildId;
|
||
this[Internal].locale = info.locale ?? defaultLocale;
|
||
this[Internal].trailingSlash = info.trailingSlash;
|
||
}
|
||
formatPathname() {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$next$2d$pathname$2d$info$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["formatNextPathnameInfo"])({
|
||
basePath: this[Internal].basePath,
|
||
buildId: this[Internal].buildId,
|
||
defaultLocale: !this[Internal].options.forceLocale ? this[Internal].defaultLocale : undefined,
|
||
locale: this[Internal].locale,
|
||
pathname: this[Internal].url.pathname,
|
||
trailingSlash: this[Internal].trailingSlash
|
||
});
|
||
}
|
||
formatSearch() {
|
||
return this[Internal].url.search;
|
||
}
|
||
get buildId() {
|
||
return this[Internal].buildId;
|
||
}
|
||
set buildId(buildId) {
|
||
this[Internal].buildId = buildId;
|
||
}
|
||
get locale() {
|
||
return this[Internal].locale ?? '';
|
||
}
|
||
set locale(locale) {
|
||
var _this_Internal_options_nextConfig_i18n, _this_Internal_options_nextConfig;
|
||
if (!this[Internal].locale || !((_this_Internal_options_nextConfig = this[Internal].options.nextConfig) == null ? void 0 : (_this_Internal_options_nextConfig_i18n = _this_Internal_options_nextConfig.i18n) == null ? void 0 : _this_Internal_options_nextConfig_i18n.locales.includes(locale))) {
|
||
throw Object.defineProperty(new TypeError(`The NextURL configuration includes no locale "${locale}"`), "__NEXT_ERROR_CODE", {
|
||
value: "E597",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
this[Internal].locale = locale;
|
||
}
|
||
get defaultLocale() {
|
||
return this[Internal].defaultLocale;
|
||
}
|
||
get domainLocale() {
|
||
return this[Internal].domainLocale;
|
||
}
|
||
get searchParams() {
|
||
return this[Internal].url.searchParams;
|
||
}
|
||
get host() {
|
||
return this[Internal].url.host;
|
||
}
|
||
set host(value) {
|
||
this[Internal].url.host = value;
|
||
}
|
||
get hostname() {
|
||
return this[Internal].url.hostname;
|
||
}
|
||
set hostname(value) {
|
||
this[Internal].url.hostname = value;
|
||
}
|
||
get port() {
|
||
return this[Internal].url.port;
|
||
}
|
||
set port(value) {
|
||
this[Internal].url.port = value;
|
||
}
|
||
get protocol() {
|
||
return this[Internal].url.protocol;
|
||
}
|
||
set protocol(value) {
|
||
this[Internal].url.protocol = value;
|
||
}
|
||
get href() {
|
||
const pathname = this.formatPathname();
|
||
const search = this.formatSearch();
|
||
return `${this.protocol}//${this.host}${pathname}${search}${this.hash}`;
|
||
}
|
||
set href(url) {
|
||
this[Internal].url = parseURL(url);
|
||
this.analyze();
|
||
}
|
||
get origin() {
|
||
return this[Internal].url.origin;
|
||
}
|
||
get pathname() {
|
||
return this[Internal].url.pathname;
|
||
}
|
||
set pathname(value) {
|
||
this[Internal].url.pathname = value;
|
||
}
|
||
get hash() {
|
||
return this[Internal].url.hash;
|
||
}
|
||
set hash(value) {
|
||
this[Internal].url.hash = value;
|
||
}
|
||
get search() {
|
||
return this[Internal].url.search;
|
||
}
|
||
set search(value) {
|
||
this[Internal].url.search = value;
|
||
}
|
||
get password() {
|
||
return this[Internal].url.password;
|
||
}
|
||
set password(value) {
|
||
this[Internal].url.password = value;
|
||
}
|
||
get username() {
|
||
return this[Internal].url.username;
|
||
}
|
||
set username(value) {
|
||
this[Internal].url.username = value;
|
||
}
|
||
get basePath() {
|
||
return this[Internal].basePath;
|
||
}
|
||
set basePath(value) {
|
||
this[Internal].basePath = value.startsWith('/') ? value : `/${value}`;
|
||
}
|
||
toString() {
|
||
return this.href;
|
||
}
|
||
toJSON() {
|
||
return this.href;
|
||
}
|
||
[Symbol.for('edge-runtime.inspect.custom')]() {
|
||
return {
|
||
href: this.href,
|
||
origin: this.origin,
|
||
protocol: this.protocol,
|
||
username: this.username,
|
||
password: this.password,
|
||
host: this.host,
|
||
hostname: this.hostname,
|
||
port: this.port,
|
||
pathname: this.pathname,
|
||
search: this.search,
|
||
searchParams: this.searchParams,
|
||
hash: this.hash
|
||
};
|
||
}
|
||
clone() {
|
||
return new NextURL(String(this), this[Internal].options);
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/web/error.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"PageSignatureError",
|
||
()=>PageSignatureError,
|
||
"RemovedPageError",
|
||
()=>RemovedPageError,
|
||
"RemovedUAError",
|
||
()=>RemovedUAError
|
||
]);
|
||
class PageSignatureError extends Error {
|
||
constructor({ page }){
|
||
super(`The middleware "${page}" accepts an async API directly with the form:
|
||
|
||
export function middleware(request, event) {
|
||
return NextResponse.redirect('/new-location')
|
||
}
|
||
|
||
Read more: https://nextjs.org/docs/messages/middleware-new-signature
|
||
`);
|
||
}
|
||
}
|
||
class RemovedPageError extends Error {
|
||
constructor(){
|
||
super(`The request.page has been deprecated in favour of \`URLPattern\`.
|
||
Read more: https://nextjs.org/docs/messages/middleware-request-page
|
||
`);
|
||
}
|
||
}
|
||
class RemovedUAError extends Error {
|
||
constructor(){
|
||
super(`The request.ua has been removed in favour of \`userAgent\` function.
|
||
Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent
|
||
`);
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
"use strict";
|
||
|
||
var __defProp = Object.defineProperty;
|
||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||
var __export = (target, all)=>{
|
||
for(var name in all)__defProp(target, name, {
|
||
get: all[name],
|
||
enumerable: true
|
||
});
|
||
};
|
||
var __copyProps = (to, from, except, desc)=>{
|
||
if (from && typeof from === "object" || typeof from === "function") {
|
||
for (let key of __getOwnPropNames(from))if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
||
get: ()=>from[key],
|
||
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
||
});
|
||
}
|
||
return to;
|
||
};
|
||
var __toCommonJS = (mod)=>__copyProps(__defProp({}, "__esModule", {
|
||
value: true
|
||
}), mod);
|
||
// src/index.ts
|
||
var src_exports = {};
|
||
__export(src_exports, {
|
||
RequestCookies: ()=>RequestCookies,
|
||
ResponseCookies: ()=>ResponseCookies,
|
||
parseCookie: ()=>parseCookie,
|
||
parseSetCookie: ()=>parseSetCookie,
|
||
stringifyCookie: ()=>stringifyCookie
|
||
});
|
||
module.exports = __toCommonJS(src_exports);
|
||
// src/serialize.ts
|
||
function stringifyCookie(c) {
|
||
var _a;
|
||
const attrs = [
|
||
"path" in c && c.path && `Path=${c.path}`,
|
||
"expires" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === "number" ? new Date(c.expires) : c.expires).toUTCString()}`,
|
||
"maxAge" in c && typeof c.maxAge === "number" && `Max-Age=${c.maxAge}`,
|
||
"domain" in c && c.domain && `Domain=${c.domain}`,
|
||
"secure" in c && c.secure && "Secure",
|
||
"httpOnly" in c && c.httpOnly && "HttpOnly",
|
||
"sameSite" in c && c.sameSite && `SameSite=${c.sameSite}`,
|
||
"partitioned" in c && c.partitioned && "Partitioned",
|
||
"priority" in c && c.priority && `Priority=${c.priority}`
|
||
].filter(Boolean);
|
||
const stringified = `${c.name}=${encodeURIComponent((_a = c.value) != null ? _a : "")}`;
|
||
return attrs.length === 0 ? stringified : `${stringified}; ${attrs.join("; ")}`;
|
||
}
|
||
function parseCookie(cookie) {
|
||
const map = /* @__PURE__ */ new Map();
|
||
for (const pair of cookie.split(/; */)){
|
||
if (!pair) continue;
|
||
const splitAt = pair.indexOf("=");
|
||
if (splitAt === -1) {
|
||
map.set(pair, "true");
|
||
continue;
|
||
}
|
||
const [key, value] = [
|
||
pair.slice(0, splitAt),
|
||
pair.slice(splitAt + 1)
|
||
];
|
||
try {
|
||
map.set(key, decodeURIComponent(value != null ? value : "true"));
|
||
} catch {}
|
||
}
|
||
return map;
|
||
}
|
||
function parseSetCookie(setCookie) {
|
||
if (!setCookie) {
|
||
return void 0;
|
||
}
|
||
const [[name, value], ...attributes] = parseCookie(setCookie);
|
||
const { domain, expires, httponly, maxage, path, samesite, secure, partitioned, priority } = Object.fromEntries(attributes.map(([key, value2])=>[
|
||
key.toLowerCase().replace(/-/g, ""),
|
||
value2
|
||
]));
|
||
const cookie = {
|
||
name,
|
||
value: decodeURIComponent(value),
|
||
domain,
|
||
...expires && {
|
||
expires: new Date(expires)
|
||
},
|
||
...httponly && {
|
||
httpOnly: true
|
||
},
|
||
...typeof maxage === "string" && {
|
||
maxAge: Number(maxage)
|
||
},
|
||
path,
|
||
...samesite && {
|
||
sameSite: parseSameSite(samesite)
|
||
},
|
||
...secure && {
|
||
secure: true
|
||
},
|
||
...priority && {
|
||
priority: parsePriority(priority)
|
||
},
|
||
...partitioned && {
|
||
partitioned: true
|
||
}
|
||
};
|
||
return compact(cookie);
|
||
}
|
||
function compact(t) {
|
||
const newT = {};
|
||
for(const key in t){
|
||
if (t[key]) {
|
||
newT[key] = t[key];
|
||
}
|
||
}
|
||
return newT;
|
||
}
|
||
var SAME_SITE = [
|
||
"strict",
|
||
"lax",
|
||
"none"
|
||
];
|
||
function parseSameSite(string) {
|
||
string = string.toLowerCase();
|
||
return SAME_SITE.includes(string) ? string : void 0;
|
||
}
|
||
var PRIORITY = [
|
||
"low",
|
||
"medium",
|
||
"high"
|
||
];
|
||
function parsePriority(string) {
|
||
string = string.toLowerCase();
|
||
return PRIORITY.includes(string) ? string : void 0;
|
||
}
|
||
function splitCookiesString(cookiesString) {
|
||
if (!cookiesString) return [];
|
||
var cookiesStrings = [];
|
||
var pos = 0;
|
||
var start;
|
||
var ch;
|
||
var lastComma;
|
||
var nextStart;
|
||
var cookiesSeparatorFound;
|
||
function skipWhitespace() {
|
||
while(pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))){
|
||
pos += 1;
|
||
}
|
||
return pos < cookiesString.length;
|
||
}
|
||
function notSpecialChar() {
|
||
ch = cookiesString.charAt(pos);
|
||
return ch !== "=" && ch !== ";" && ch !== ",";
|
||
}
|
||
while(pos < cookiesString.length){
|
||
start = pos;
|
||
cookiesSeparatorFound = false;
|
||
while(skipWhitespace()){
|
||
ch = cookiesString.charAt(pos);
|
||
if (ch === ",") {
|
||
lastComma = pos;
|
||
pos += 1;
|
||
skipWhitespace();
|
||
nextStart = pos;
|
||
while(pos < cookiesString.length && notSpecialChar()){
|
||
pos += 1;
|
||
}
|
||
if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") {
|
||
cookiesSeparatorFound = true;
|
||
pos = nextStart;
|
||
cookiesStrings.push(cookiesString.substring(start, lastComma));
|
||
start = pos;
|
||
} else {
|
||
pos = lastComma + 1;
|
||
}
|
||
} else {
|
||
pos += 1;
|
||
}
|
||
}
|
||
if (!cookiesSeparatorFound || pos >= cookiesString.length) {
|
||
cookiesStrings.push(cookiesString.substring(start, cookiesString.length));
|
||
}
|
||
}
|
||
return cookiesStrings;
|
||
}
|
||
// src/request-cookies.ts
|
||
var RequestCookies = class {
|
||
constructor(requestHeaders){
|
||
/** @internal */ this._parsed = /* @__PURE__ */ new Map();
|
||
this._headers = requestHeaders;
|
||
const header = requestHeaders.get("cookie");
|
||
if (header) {
|
||
const parsed = parseCookie(header);
|
||
for (const [name, value] of parsed){
|
||
this._parsed.set(name, {
|
||
name,
|
||
value
|
||
});
|
||
}
|
||
}
|
||
}
|
||
[Symbol.iterator]() {
|
||
return this._parsed[Symbol.iterator]();
|
||
}
|
||
/**
|
||
* The amount of cookies received from the client
|
||
*/ get size() {
|
||
return this._parsed.size;
|
||
}
|
||
get(...args) {
|
||
const name = typeof args[0] === "string" ? args[0] : args[0].name;
|
||
return this._parsed.get(name);
|
||
}
|
||
getAll(...args) {
|
||
var _a;
|
||
const all = Array.from(this._parsed);
|
||
if (!args.length) {
|
||
return all.map(([_, value])=>value);
|
||
}
|
||
const name = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;
|
||
return all.filter(([n])=>n === name).map(([_, value])=>value);
|
||
}
|
||
has(name) {
|
||
return this._parsed.has(name);
|
||
}
|
||
set(...args) {
|
||
const [name, value] = args.length === 1 ? [
|
||
args[0].name,
|
||
args[0].value
|
||
] : args;
|
||
const map = this._parsed;
|
||
map.set(name, {
|
||
name,
|
||
value
|
||
});
|
||
this._headers.set("cookie", Array.from(map).map(([_, value2])=>stringifyCookie(value2)).join("; "));
|
||
return this;
|
||
}
|
||
/**
|
||
* Delete the cookies matching the passed name or names in the request.
|
||
*/ delete(names) {
|
||
const map = this._parsed;
|
||
const result = !Array.isArray(names) ? map.delete(names) : names.map((name)=>map.delete(name));
|
||
this._headers.set("cookie", Array.from(map).map(([_, value])=>stringifyCookie(value)).join("; "));
|
||
return result;
|
||
}
|
||
/**
|
||
* Delete all the cookies in the cookies in the request.
|
||
*/ clear() {
|
||
this.delete(Array.from(this._parsed.keys()));
|
||
return this;
|
||
}
|
||
/**
|
||
* Format the cookies in the request as a string for logging
|
||
*/ [Symbol.for("edge-runtime.inspect.custom")]() {
|
||
return `RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;
|
||
}
|
||
toString() {
|
||
return [
|
||
...this._parsed.values()
|
||
].map((v)=>`${v.name}=${encodeURIComponent(v.value)}`).join("; ");
|
||
}
|
||
};
|
||
// src/response-cookies.ts
|
||
var ResponseCookies = class {
|
||
constructor(responseHeaders){
|
||
/** @internal */ this._parsed = /* @__PURE__ */ new Map();
|
||
var _a, _b, _c;
|
||
this._headers = responseHeaders;
|
||
const setCookie = (_c = (_b = (_a = responseHeaders.getSetCookie) == null ? void 0 : _a.call(responseHeaders)) != null ? _b : responseHeaders.get("set-cookie")) != null ? _c : [];
|
||
const cookieStrings = Array.isArray(setCookie) ? setCookie : splitCookiesString(setCookie);
|
||
for (const cookieString of cookieStrings){
|
||
const parsed = parseSetCookie(cookieString);
|
||
if (parsed) this._parsed.set(parsed.name, parsed);
|
||
}
|
||
}
|
||
/**
|
||
* {@link https://wicg.github.io/cookie-store/#CookieStore-get CookieStore#get} without the Promise.
|
||
*/ get(...args) {
|
||
const key = typeof args[0] === "string" ? args[0] : args[0].name;
|
||
return this._parsed.get(key);
|
||
}
|
||
/**
|
||
* {@link https://wicg.github.io/cookie-store/#CookieStore-getAll CookieStore#getAll} without the Promise.
|
||
*/ getAll(...args) {
|
||
var _a;
|
||
const all = Array.from(this._parsed.values());
|
||
if (!args.length) {
|
||
return all;
|
||
}
|
||
const key = typeof args[0] === "string" ? args[0] : (_a = args[0]) == null ? void 0 : _a.name;
|
||
return all.filter((c)=>c.name === key);
|
||
}
|
||
has(name) {
|
||
return this._parsed.has(name);
|
||
}
|
||
/**
|
||
* {@link https://wicg.github.io/cookie-store/#CookieStore-set CookieStore#set} without the Promise.
|
||
*/ set(...args) {
|
||
const [name, value, cookie] = args.length === 1 ? [
|
||
args[0].name,
|
||
args[0].value,
|
||
args[0]
|
||
] : args;
|
||
const map = this._parsed;
|
||
map.set(name, normalizeCookie({
|
||
name,
|
||
value,
|
||
...cookie
|
||
}));
|
||
replace(map, this._headers);
|
||
return this;
|
||
}
|
||
/**
|
||
* {@link https://wicg.github.io/cookie-store/#CookieStore-delete CookieStore#delete} without the Promise.
|
||
*/ delete(...args) {
|
||
const [name, options] = typeof args[0] === "string" ? [
|
||
args[0]
|
||
] : [
|
||
args[0].name,
|
||
args[0]
|
||
];
|
||
return this.set({
|
||
...options,
|
||
name,
|
||
value: "",
|
||
expires: /* @__PURE__ */ new Date(0)
|
||
});
|
||
}
|
||
[Symbol.for("edge-runtime.inspect.custom")]() {
|
||
return `ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`;
|
||
}
|
||
toString() {
|
||
return [
|
||
...this._parsed.values()
|
||
].map(stringifyCookie).join("; ");
|
||
}
|
||
};
|
||
function replace(bag, headers) {
|
||
headers.delete("set-cookie");
|
||
for (const [, value] of bag){
|
||
const serialized = stringifyCookie(value);
|
||
headers.append("set-cookie", serialized);
|
||
}
|
||
}
|
||
function normalizeCookie(cookie = {
|
||
name: "",
|
||
value: ""
|
||
}) {
|
||
if (typeof cookie.expires === "number") {
|
||
cookie.expires = new Date(cookie.expires);
|
||
}
|
||
if (cookie.maxAge) {
|
||
cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);
|
||
}
|
||
if (cookie.path === null || cookie.path === void 0) {
|
||
cookie.path = "/";
|
||
}
|
||
return cookie;
|
||
}
|
||
// Annotate the CommonJS export names for ESM import in node:
|
||
0 && (module.exports = {
|
||
RequestCookies,
|
||
ResponseCookies,
|
||
parseCookie,
|
||
parseSetCookie,
|
||
stringifyCookie
|
||
});
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [ssr] (ecmascript) <locals>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [ssr] (ecmascript)");
|
||
;
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"INTERNALS",
|
||
()=>INTERNALS,
|
||
"NextRequest",
|
||
()=>NextRequest
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/next-url.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/error.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$cookies$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [ssr] (ecmascript) <locals>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
const INTERNALS = Symbol('internal request');
|
||
class NextRequest extends Request {
|
||
constructor(input, init = {}){
|
||
const url = typeof input !== 'string' && 'url' in input ? input.url : String(input);
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["validateURL"])(url);
|
||
// node Request instance requires duplex option when a body
|
||
// is present or it errors, we don't handle this for
|
||
// Request being passed in since it would have already
|
||
// errored if this wasn't configured
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (init.body && init.duplex !== 'half') {
|
||
init.duplex = 'half';
|
||
}
|
||
}
|
||
if (input instanceof Request) super(input, init);
|
||
else super(url, init);
|
||
const nextUrl = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$next$2d$url$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NextURL"](url, {
|
||
headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["toNodeOutgoingHttpHeaders"])(this.headers),
|
||
nextConfig: init.nextConfig
|
||
});
|
||
this[INTERNALS] = {
|
||
cookies: new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f40$edge$2d$runtime$2f$cookies$2f$index$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RequestCookies"](this.headers),
|
||
nextUrl,
|
||
url: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : nextUrl.toString()
|
||
};
|
||
}
|
||
[Symbol.for('edge-runtime.inspect.custom')]() {
|
||
return {
|
||
cookies: this.cookies,
|
||
nextUrl: this.nextUrl,
|
||
url: this.url,
|
||
// rest of props come from Request
|
||
bodyUsed: this.bodyUsed,
|
||
cache: this.cache,
|
||
credentials: this.credentials,
|
||
destination: this.destination,
|
||
headers: Object.fromEntries(this.headers),
|
||
integrity: this.integrity,
|
||
keepalive: this.keepalive,
|
||
method: this.method,
|
||
mode: this.mode,
|
||
redirect: this.redirect,
|
||
referrer: this.referrer,
|
||
referrerPolicy: this.referrerPolicy,
|
||
signal: this.signal
|
||
};
|
||
}
|
||
get cookies() {
|
||
return this[INTERNALS].cookies;
|
||
}
|
||
get nextUrl() {
|
||
return this[INTERNALS].nextUrl;
|
||
}
|
||
/**
|
||
* @deprecated
|
||
* `page` has been deprecated in favour of `URLPattern`.
|
||
* Read more: https://nextjs.org/docs/messages/middleware-request-page
|
||
*/ get page() {
|
||
throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RemovedPageError"]();
|
||
}
|
||
/**
|
||
* @deprecated
|
||
* `ua` has been removed in favour of \`userAgent\` function.
|
||
* Read more: https://nextjs.org/docs/messages/middleware-parse-user-agent
|
||
*/ get ua() {
|
||
throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RemovedUAError"]();
|
||
}
|
||
get url() {
|
||
return this[INTERNALS].url;
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/base-http/helpers.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* This file provides some helpers that should be used in conjunction with
|
||
* explicit environment checks. When combined with the environment checks, it
|
||
* will ensure that the correct typings are used as well as enable code
|
||
* elimination.
|
||
*/ /**
|
||
* Type guard to determine if a request is a WebNextRequest. This does not
|
||
* actually check the type of the request, but rather the runtime environment.
|
||
* It's expected that when the runtime environment is the edge runtime, that any
|
||
* base request is a WebNextRequest.
|
||
*/ __turbopack_context__.s([
|
||
"isNodeNextRequest",
|
||
()=>isNodeNextRequest,
|
||
"isNodeNextResponse",
|
||
()=>isNodeNextResponse,
|
||
"isWebNextRequest",
|
||
()=>isWebNextRequest,
|
||
"isWebNextResponse",
|
||
()=>isWebNextResponse
|
||
]);
|
||
const isWebNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") === 'edge';
|
||
const isWebNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") === 'edge';
|
||
const isNodeNextRequest = (req)=>("TURBOPACK compile-time value", "nodejs") !== 'edge';
|
||
const isNodeNextResponse = (res)=>("TURBOPACK compile-time value", "nodejs") !== 'edge';
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"NextRequestAdapter",
|
||
()=>NextRequestAdapter,
|
||
"ResponseAborted",
|
||
()=>ResponseAborted,
|
||
"ResponseAbortedName",
|
||
()=>ResponseAbortedName,
|
||
"createAbortController",
|
||
()=>createAbortController,
|
||
"signalFromNodeResponse",
|
||
()=>signalFromNodeResponse
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
const ResponseAbortedName = 'ResponseAborted';
|
||
class ResponseAborted extends Error {
|
||
constructor(...args){
|
||
super(...args), this.name = ResponseAbortedName;
|
||
}
|
||
}
|
||
function createAbortController(response) {
|
||
const controller = new AbortController();
|
||
// If `finish` fires first, then `res.end()` has been called and the close is
|
||
// just us finishing the stream on our side. If `close` fires first, then we
|
||
// know the client disconnected before we finished.
|
||
response.once('close', ()=>{
|
||
if (response.writableFinished) return;
|
||
controller.abort(new ResponseAborted());
|
||
});
|
||
return controller;
|
||
}
|
||
function signalFromNodeResponse(response) {
|
||
const { errored, destroyed } = response;
|
||
if (errored || destroyed) {
|
||
return AbortSignal.abort(errored ?? new ResponseAborted());
|
||
}
|
||
const { signal } = createAbortController(response);
|
||
return signal;
|
||
}
|
||
class NextRequestAdapter {
|
||
static fromBaseNextRequest(request, signal) {
|
||
if (// environment variable check provides dead code elimination.
|
||
("TURBOPACK compile-time value", "nodejs") === 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["isWebNextRequest"])(request)) //TURBOPACK unreachable
|
||
;
|
||
else if (// environment variable check provides dead code elimination.
|
||
("TURBOPACK compile-time value", "nodejs") !== 'edge' && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["isNodeNextRequest"])(request)) {
|
||
return NextRequestAdapter.fromNodeNextRequest(request, signal);
|
||
} else {
|
||
throw Object.defineProperty(new Error('Invariant: Unsupported NextRequest type'), "__NEXT_ERROR_CODE", {
|
||
value: "E345",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
static fromNodeNextRequest(request, signal) {
|
||
// HEAD and GET requests can not have a body.
|
||
let body = null;
|
||
if (request.method !== 'GET' && request.method !== 'HEAD' && request.body) {
|
||
// @ts-expect-error - this is handled by undici, when streams/web land use it instead
|
||
body = request.body;
|
||
}
|
||
let url;
|
||
if (request.url.startsWith('http')) {
|
||
url = new URL(request.url);
|
||
} else {
|
||
// Grab the full URL from the request metadata.
|
||
const base = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRequestMeta"])(request, 'initURL');
|
||
if (!base || !base.startsWith('http')) {
|
||
// Because the URL construction relies on the fact that the URL provided
|
||
// is absolute, we need to provide a base URL. We can't use the request
|
||
// URL because it's relative, so we use a dummy URL instead.
|
||
url = new URL(request.url, 'http://n');
|
||
} else {
|
||
url = new URL(request.url, base);
|
||
}
|
||
}
|
||
return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NextRequest"](url, {
|
||
method: request.method,
|
||
headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(request.headers),
|
||
duplex: 'half',
|
||
signal,
|
||
// geo
|
||
// ip
|
||
// nextConfig
|
||
// body can not be passed if request was aborted
|
||
// or we get a Request body was disturbed error
|
||
...signal.aborted ? {} : {
|
||
body
|
||
}
|
||
});
|
||
}
|
||
static fromWebNextRequest(request) {
|
||
// HEAD and GET requests can not have a body.
|
||
let body = null;
|
||
if (request.method !== 'GET' && request.method !== 'HEAD') {
|
||
body = request.body;
|
||
}
|
||
return new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$request$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NextRequest"](request.url, {
|
||
method: request.method,
|
||
headers: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(request.headers),
|
||
duplex: 'half',
|
||
signal: request.request.signal,
|
||
// geo
|
||
// ip
|
||
// nextConfig
|
||
// body can not be passed if request was aborted
|
||
// or we get a Request body was disturbed error
|
||
...request.request.signal.aborted ? {} : {
|
||
body
|
||
}
|
||
});
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/client-component-renderer-logger.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"getClientComponentLoaderMetrics",
|
||
()=>getClientComponentLoaderMetrics,
|
||
"wrapClientComponentLoader",
|
||
()=>wrapClientComponentLoader
|
||
]);
|
||
// Combined load times for loading client components
|
||
let clientComponentLoadStart = 0;
|
||
let clientComponentLoadTimes = 0;
|
||
let clientComponentLoadCount = 0;
|
||
function wrapClientComponentLoader(ComponentMod) {
|
||
if (!('performance' in globalThis)) {
|
||
return ComponentMod.__next_app__;
|
||
}
|
||
return {
|
||
require: (...args)=>{
|
||
const startTime = performance.now();
|
||
if (clientComponentLoadStart === 0) {
|
||
clientComponentLoadStart = startTime;
|
||
}
|
||
try {
|
||
clientComponentLoadCount += 1;
|
||
return ComponentMod.__next_app__.require(...args);
|
||
} finally{
|
||
clientComponentLoadTimes += performance.now() - startTime;
|
||
}
|
||
},
|
||
loadChunk: (...args)=>{
|
||
const startTime = performance.now();
|
||
const result = ComponentMod.__next_app__.loadChunk(...args);
|
||
// Avoid wrapping `loadChunk`'s result in an extra promise in case something like React depends on its identity.
|
||
// We only need to know when it's settled.
|
||
result.finally(()=>{
|
||
clientComponentLoadTimes += performance.now() - startTime;
|
||
});
|
||
return result;
|
||
}
|
||
};
|
||
}
|
||
function getClientComponentLoaderMetrics(options = {}) {
|
||
const metrics = clientComponentLoadStart === 0 ? undefined : {
|
||
clientComponentLoadStart,
|
||
clientComponentLoadTimes,
|
||
clientComponentLoadCount
|
||
};
|
||
if (options.reset) {
|
||
clientComponentLoadStart = 0;
|
||
clientComponentLoadTimes = 0;
|
||
clientComponentLoadCount = 0;
|
||
}
|
||
return metrics;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/pipe-readable.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"isAbortError",
|
||
()=>isAbortError,
|
||
"pipeToNodeResponse",
|
||
()=>pipeToNodeResponse
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/detached-promise.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$client$2d$component$2d$renderer$2d$logger$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/client-component-renderer-logger.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
function isAbortError(e) {
|
||
return (e == null ? void 0 : e.name) === 'AbortError' || (e == null ? void 0 : e.name) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["ResponseAbortedName"];
|
||
}
|
||
function createWriterFromResponse(res, waitUntilForEnd) {
|
||
let started = false;
|
||
// Create a promise that will resolve once the response has drained. See
|
||
// https://nodejs.org/api/stream.html#stream_event_drain
|
||
let drained = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["DetachedPromise"]();
|
||
function onDrain() {
|
||
drained.resolve();
|
||
}
|
||
res.on('drain', onDrain);
|
||
// If the finish event fires, it means we shouldn't block and wait for the
|
||
// drain event.
|
||
res.once('close', ()=>{
|
||
res.off('drain', onDrain);
|
||
drained.resolve();
|
||
});
|
||
// Create a promise that will resolve once the response has finished. See
|
||
// https://nodejs.org/api/http.html#event-finish_1
|
||
const finished = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["DetachedPromise"]();
|
||
res.once('finish', ()=>{
|
||
finished.resolve();
|
||
});
|
||
// Create a writable stream that will write to the response.
|
||
return new WritableStream({
|
||
write: async (chunk)=>{
|
||
// You'd think we'd want to use `start` instead of placing this in `write`
|
||
// but this ensures that we don't actually flush the headers until we've
|
||
// started writing chunks.
|
||
if (!started) {
|
||
started = true;
|
||
if ('performance' in globalThis && process.env.NEXT_OTEL_PERFORMANCE_PREFIX) {
|
||
const metrics = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$client$2d$component$2d$renderer$2d$logger$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getClientComponentLoaderMetrics"])();
|
||
if (metrics) {
|
||
performance.measure(`${process.env.NEXT_OTEL_PERFORMANCE_PREFIX}:next-client-component-loading`, {
|
||
start: metrics.clientComponentLoadStart,
|
||
end: metrics.clientComponentLoadStart + metrics.clientComponentLoadTimes
|
||
});
|
||
}
|
||
}
|
||
res.flushHeaders();
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getTracer"])().trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].startResponse, {
|
||
spanName: 'start response'
|
||
}, ()=>undefined);
|
||
}
|
||
try {
|
||
const ok = res.write(chunk);
|
||
// Added by the `compression` middleware, this is a function that will
|
||
// flush the partially-compressed response to the client.
|
||
if ('flush' in res && typeof res.flush === 'function') {
|
||
res.flush();
|
||
}
|
||
// If the write returns false, it means there's some backpressure, so
|
||
// wait until it's streamed before continuing.
|
||
if (!ok) {
|
||
await drained.promise;
|
||
// Reset the drained promise so that we can wait for the next drain event.
|
||
drained = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$detached$2d$promise$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["DetachedPromise"]();
|
||
}
|
||
} catch (err) {
|
||
res.end();
|
||
throw Object.defineProperty(new Error('failed to write chunk to response', {
|
||
cause: err
|
||
}), "__NEXT_ERROR_CODE", {
|
||
value: "E321",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
},
|
||
abort: (err)=>{
|
||
if (res.writableFinished) return;
|
||
res.destroy(err);
|
||
},
|
||
close: async ()=>{
|
||
// if a waitUntil promise was passed, wait for it to resolve before
|
||
// ending the response.
|
||
if (waitUntilForEnd) {
|
||
await waitUntilForEnd;
|
||
}
|
||
if (res.writableFinished) return;
|
||
res.end();
|
||
return finished.promise;
|
||
}
|
||
});
|
||
}
|
||
async function pipeToNodeResponse(readable, res, waitUntilForEnd) {
|
||
try {
|
||
// If the response has already errored, then just return now.
|
||
const { errored, destroyed } = res;
|
||
if (errored || destroyed) return;
|
||
// Create a new AbortController so that we can abort the readable if the
|
||
// client disconnects.
|
||
const controller = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$spec$2d$extension$2f$adapters$2f$next$2d$request$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["createAbortController"])(res);
|
||
const writer = createWriterFromResponse(res, waitUntilForEnd);
|
||
await readable.pipeTo(writer, {
|
||
signal: controller.signal
|
||
});
|
||
} catch (err) {
|
||
// If this isn't related to an abort error, re-throw it.
|
||
if (isAbortError(err)) return;
|
||
throw Object.defineProperty(new Error('failed to pipe response', {
|
||
cause: err
|
||
}), "__NEXT_ERROR_CODE", {
|
||
value: "E180",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"InvariantError",
|
||
()=>InvariantError
|
||
]);
|
||
class InvariantError extends Error {
|
||
constructor(message, options){
|
||
super(`Invariant: ${message.endsWith('.') ? message : message + '.'} This is a bug in Next.js.`, options);
|
||
this.name = 'InvariantError';
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/render-result.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"default",
|
||
()=>RenderResult
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/node-web-streams-helper.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
class RenderResult {
|
||
static #_ = /**
|
||
* A render result that represents an empty response. This is used to
|
||
* represent a response that was not found or was already sent.
|
||
*/ this.EMPTY = new RenderResult(null, {
|
||
metadata: {},
|
||
contentType: null
|
||
});
|
||
/**
|
||
* Creates a new RenderResult instance from a static response.
|
||
*
|
||
* @param value the static response value
|
||
* @param contentType the content type of the response
|
||
* @returns a new RenderResult instance
|
||
*/ static fromStatic(value, contentType) {
|
||
return new RenderResult(value, {
|
||
metadata: {},
|
||
contentType
|
||
});
|
||
}
|
||
constructor(response, { contentType, waitUntil, metadata }){
|
||
this.response = response;
|
||
this.contentType = contentType;
|
||
this.metadata = metadata;
|
||
this.waitUntil = waitUntil;
|
||
}
|
||
assignMetadata(metadata) {
|
||
Object.assign(this.metadata, metadata);
|
||
}
|
||
/**
|
||
* Returns true if the response is null. It can be null if the response was
|
||
* not found or was already sent.
|
||
*/ get isNull() {
|
||
return this.response === null;
|
||
}
|
||
/**
|
||
* Returns false if the response is a string. It can be a string if the page
|
||
* was prerendered. If it's not, then it was generated dynamically.
|
||
*/ get isDynamic() {
|
||
return typeof this.response !== 'string';
|
||
}
|
||
toUnchunkedString(stream = false) {
|
||
if (this.response === null) {
|
||
// If the response is null, return an empty string. This behavior is
|
||
// intentional as we're now providing the `RenderResult.EMPTY` value.
|
||
return '';
|
||
}
|
||
if (typeof this.response !== 'string') {
|
||
if (!stream) {
|
||
throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$invariant$2d$error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["InvariantError"]('dynamic responses cannot be unchunked. This is a bug in Next.js'), "__NEXT_ERROR_CODE", {
|
||
value: "E732",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["streamToString"])(this.readable);
|
||
}
|
||
return this.response;
|
||
}
|
||
/**
|
||
* Returns a readable stream of the response.
|
||
*/ get readable() {
|
||
if (this.response === null) {
|
||
// If the response is null, return an empty stream. This behavior is
|
||
// intentional as we're now providing the `RenderResult.EMPTY` value.
|
||
return new ReadableStream({
|
||
start (controller) {
|
||
controller.close();
|
||
}
|
||
});
|
||
}
|
||
if (typeof this.response === 'string') {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["streamFromString"])(this.response);
|
||
}
|
||
if (Buffer.isBuffer(this.response)) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response);
|
||
}
|
||
// If the response is an array of streams, then chain them together.
|
||
if (Array.isArray(this.response)) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["chainStreams"])(...this.response);
|
||
}
|
||
return this.response;
|
||
}
|
||
/**
|
||
* Coerces the response to an array of streams. This will convert the response
|
||
* to an array of streams if it is not already one.
|
||
*
|
||
* @returns An array of streams
|
||
*/ coerce() {
|
||
if (this.response === null) {
|
||
// If the response is null, return an empty stream. This behavior is
|
||
// intentional as we're now providing the `RenderResult.EMPTY` value.
|
||
return [];
|
||
}
|
||
if (typeof this.response === 'string') {
|
||
return [
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["streamFromString"])(this.response)
|
||
];
|
||
} else if (Array.isArray(this.response)) {
|
||
return this.response;
|
||
} else if (Buffer.isBuffer(this.response)) {
|
||
return [
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$stream$2d$utils$2f$node$2d$web$2d$streams$2d$helper$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response)
|
||
];
|
||
} else {
|
||
return [
|
||
this.response
|
||
];
|
||
}
|
||
}
|
||
/**
|
||
* Pipes the response through a transform stream. This converts the response
|
||
* to a single readable stream (chaining if needed) and pipes it through the
|
||
* provided transform.
|
||
*
|
||
* @param transform The transform stream to pipe through
|
||
*/ pipeThrough(transform) {
|
||
this.response = this.readable.pipeThrough(transform);
|
||
}
|
||
/**
|
||
* Unshifts a new stream to the response. This will convert the response to an
|
||
* array of streams if it is not already one and will add the new stream to
|
||
* the start of the array. When this response is piped, all of the streams
|
||
* will be piped one after the other.
|
||
*
|
||
* @param readable The new stream to unshift
|
||
*/ unshift(readable) {
|
||
// Coerce the response to an array of streams.
|
||
this.response = this.coerce();
|
||
// Add the new stream to the start of the array.
|
||
this.response.unshift(readable);
|
||
}
|
||
/**
|
||
* Chains a new stream to the response. This will convert the response to an
|
||
* array of streams if it is not already one and will add the new stream to
|
||
* the end. When this response is piped, all of the streams will be piped
|
||
* one after the other.
|
||
*
|
||
* @param readable The new stream to chain
|
||
*/ push(readable) {
|
||
// Coerce the response to an array of streams.
|
||
this.response = this.coerce();
|
||
// Add the new stream to the end of the array.
|
||
this.response.push(readable);
|
||
}
|
||
/**
|
||
* Pipes the response to a writable stream. This will close/cancel the
|
||
* writable stream if an error is encountered. If this doesn't throw, then
|
||
* the writable stream will be closed or aborted.
|
||
*
|
||
* @param writable Writable stream to pipe the response to
|
||
*/ async pipeTo(writable) {
|
||
try {
|
||
await this.readable.pipeTo(writable, {
|
||
// We want to close the writable stream ourselves so that we can wait
|
||
// for the waitUntil promise to resolve before closing it. If an error
|
||
// is encountered, we'll abort the writable stream if we swallowed the
|
||
// error.
|
||
preventClose: true
|
||
});
|
||
// If there is a waitUntil promise, wait for it to resolve before
|
||
// closing the writable stream.
|
||
if (this.waitUntil) await this.waitUntil;
|
||
// Close the writable stream.
|
||
await writable.close();
|
||
} catch (err) {
|
||
// If this is an abort error, we should abort the writable stream (as we
|
||
// took ownership of it when we started piping). We don't need to re-throw
|
||
// because we handled the error.
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["isAbortError"])(err)) {
|
||
// Abort the writable stream if an error is encountered.
|
||
await writable.abort(err);
|
||
return;
|
||
}
|
||
// We're not aborting the writer here as when this method throws it's not
|
||
// clear as to how so the caller should assume it's their responsibility
|
||
// to clean up the writer.
|
||
throw err;
|
||
}
|
||
}
|
||
/**
|
||
* Pipes the response to a node response. This will close/cancel the node
|
||
* response if an error is encountered.
|
||
*
|
||
* @param res
|
||
*/ async pipeToNodeResponse(res) {
|
||
await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$pipe$2d$readable$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(this.readable, res, this.waitUntil);
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/response-cache/utils.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"fromResponseCacheEntry",
|
||
()=>fromResponseCacheEntry,
|
||
"routeKindToIncrementalCacheKind",
|
||
()=>routeKindToIncrementalCacheKind,
|
||
"toResponseCacheEntry",
|
||
()=>toResponseCacheEntry
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/render-result.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
async function fromResponseCacheEntry(cacheEntry) {
|
||
var _cacheEntry_value, _cacheEntry_value1;
|
||
return {
|
||
...cacheEntry,
|
||
value: ((_cacheEntry_value = cacheEntry.value) == null ? void 0 : _cacheEntry_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? {
|
||
kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES,
|
||
html: await cacheEntry.value.html.toUnchunkedString(true),
|
||
pageData: cacheEntry.value.pageData,
|
||
headers: cacheEntry.value.headers,
|
||
status: cacheEntry.value.status
|
||
} : ((_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? {
|
||
kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE,
|
||
html: await cacheEntry.value.html.toUnchunkedString(true),
|
||
postponed: cacheEntry.value.postponed,
|
||
rscData: cacheEntry.value.rscData,
|
||
headers: cacheEntry.value.headers,
|
||
status: cacheEntry.value.status,
|
||
segmentData: cacheEntry.value.segmentData
|
||
} : cacheEntry.value
|
||
};
|
||
}
|
||
async function toResponseCacheEntry(response) {
|
||
var _response_value, _response_value1;
|
||
if (!response) return null;
|
||
return {
|
||
isMiss: response.isMiss,
|
||
isStale: response.isStale,
|
||
cacheControl: response.cacheControl,
|
||
isFallback: response.isFallback,
|
||
value: ((_response_value = response.value) == null ? void 0 : _response_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES ? {
|
||
kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES,
|
||
html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]),
|
||
pageData: response.value.pageData,
|
||
headers: response.value.headers,
|
||
status: response.value.status
|
||
} : ((_response_value1 = response.value) == null ? void 0 : _response_value1.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE ? {
|
||
kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_PAGE,
|
||
html: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["default"].fromStatic(response.value.html, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]),
|
||
rscData: response.value.rscData,
|
||
headers: response.value.headers,
|
||
status: response.value.status,
|
||
postponed: response.value.postponed,
|
||
segmentData: response.value.segmentData
|
||
} : response.value
|
||
};
|
||
}
|
||
function routeKindToIncrementalCacheKind(routeKind) {
|
||
switch(routeKind){
|
||
case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RouteKind"].PAGES:
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].PAGES;
|
||
case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RouteKind"].APP_PAGE:
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_PAGE;
|
||
case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RouteKind"].IMAGE:
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].IMAGE;
|
||
case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE:
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].APP_ROUTE;
|
||
case __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RouteKind"].PAGES_API:
|
||
// Pages Router API routes are not cached in the incremental cache.
|
||
throw Object.defineProperty(new Error(`Unexpected route kind ${routeKind}`), "__NEXT_ERROR_CODE", {
|
||
value: "E64",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
default:
|
||
return routeKind;
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/response-cache/index.js [ssr] (ecmascript) <locals>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"default",
|
||
()=>ResponseCache
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/batcher.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/lru-cache.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/build/output/log.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/utils.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
/**
|
||
* Parses an environment variable as a positive integer, returning the fallback
|
||
* if the value is missing, not a number, or not positive.
|
||
*/ function parsePositiveInt(envValue, fallback) {
|
||
if (!envValue) return fallback;
|
||
const parsed = parseInt(envValue, 10);
|
||
return Number.isFinite(parsed) && parsed > 0 ? parsed : fallback;
|
||
}
|
||
/**
|
||
* Default TTL (in milliseconds) for minimal mode response cache entries.
|
||
* Used for cache hit validation as a fallback for providers that don't
|
||
* send the x-invocation-id header yet.
|
||
*
|
||
* 10 seconds chosen because:
|
||
* - Long enough to dedupe rapid successive requests (e.g., page + data)
|
||
* - Short enough to not serve stale data across unrelated requests
|
||
*
|
||
* Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_TTL` environment variable.
|
||
*/ const DEFAULT_TTL_MS = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_TTL, 10000);
|
||
/**
|
||
* Default maximum number of entries in the response cache.
|
||
* Can be configured via `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` environment variable.
|
||
*/ const DEFAULT_MAX_SIZE = parsePositiveInt(process.env.NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE, 150);
|
||
/**
|
||
* Separator used in compound cache keys to join pathname and invocationID.
|
||
* Using null byte (\0) since it cannot appear in valid URL paths or UUIDs.
|
||
*/ const KEY_SEPARATOR = '\0';
|
||
/**
|
||
* Sentinel value used for TTL-based cache entries (when invocationID is undefined).
|
||
* Chosen to be a clearly reserved marker for internal cache keys.
|
||
*/ const TTL_SENTINEL = '__ttl_sentinel__';
|
||
/**
|
||
* Creates a compound cache key from pathname and invocationID.
|
||
*/ function createCacheKey(pathname, invocationID) {
|
||
return `${pathname}${KEY_SEPARATOR}${invocationID ?? TTL_SENTINEL}`;
|
||
}
|
||
/**
|
||
* Extracts the invocationID from a compound cache key.
|
||
* Returns undefined if the key used TTL_SENTINEL.
|
||
*/ function extractInvocationID(compoundKey) {
|
||
const separatorIndex = compoundKey.lastIndexOf(KEY_SEPARATOR);
|
||
if (separatorIndex === -1) return undefined;
|
||
const invocationID = compoundKey.slice(separatorIndex + 1);
|
||
return invocationID === TTL_SENTINEL ? undefined : invocationID;
|
||
}
|
||
;
|
||
class ResponseCache {
|
||
constructor(minimal_mode, maxSize = DEFAULT_MAX_SIZE, ttl = DEFAULT_TTL_MS){
|
||
this.getBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["Batcher"].create({
|
||
// Ensure on-demand revalidate doesn't block normal requests, it should be
|
||
// safe to run an on-demand revalidate for the same key as a normal request.
|
||
cacheKeyFn: ({ key, isOnDemandRevalidate })=>`${key}-${isOnDemandRevalidate ? '1' : '0'}`,
|
||
// We wait to do any async work until after we've added our promise to
|
||
// `pendingResponses` to ensure that any any other calls will reuse the
|
||
// same promise until we've fully finished our work.
|
||
schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["scheduleOnNextTick"]
|
||
});
|
||
this.revalidateBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["Batcher"].create({
|
||
// We wait to do any async work until after we've added our promise to
|
||
// `pendingResponses` to ensure that any any other calls will reuse the
|
||
// same promise until we've fully finished our work.
|
||
schedulerFn: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["scheduleOnNextTick"]
|
||
});
|
||
/**
|
||
* Set of invocation IDs that have had cache entries evicted.
|
||
* Used to detect when the cache size may be too small.
|
||
* Bounded to prevent memory growth.
|
||
*/ this.evictedInvocationIDs = new Set();
|
||
this.minimal_mode = minimal_mode;
|
||
this.maxSize = maxSize;
|
||
this.ttl = ttl;
|
||
// Create the LRU cache with eviction tracking
|
||
this.cache = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$lru$2d$cache$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["LRUCache"](maxSize, undefined, (compoundKey)=>{
|
||
const invocationID = extractInvocationID(compoundKey);
|
||
if (invocationID) {
|
||
// Bound to 100 entries to prevent unbounded memory growth.
|
||
// FIFO eviction is acceptable here because:
|
||
// 1. Invocations are short-lived (single request lifecycle), so older
|
||
// invocations are unlikely to still be active after 100 newer ones
|
||
// 2. This warning mechanism is best-effort for developer guidance—
|
||
// missing occasional eviction warnings doesn't affect correctness
|
||
// 3. If a long-running invocation is somehow evicted and then has
|
||
// another cache entry evicted, it will simply be re-added
|
||
if (this.evictedInvocationIDs.size >= 100) {
|
||
const first = this.evictedInvocationIDs.values().next().value;
|
||
if (first) this.evictedInvocationIDs.delete(first);
|
||
}
|
||
this.evictedInvocationIDs.add(invocationID);
|
||
}
|
||
});
|
||
}
|
||
/**
|
||
* Gets the response cache entry for the given key.
|
||
*
|
||
* @param key - The key to get the response cache entry for.
|
||
* @param responseGenerator - The response generator to use to generate the response cache entry.
|
||
* @param context - The context for the get request.
|
||
* @returns The response cache entry.
|
||
*/ async get(key, responseGenerator, context) {
|
||
// If there is no key for the cache, we can't possibly look this up in the
|
||
// cache so just return the result of the response generator.
|
||
if (!key) {
|
||
return responseGenerator({
|
||
hasResolved: false,
|
||
previousCacheEntry: null
|
||
});
|
||
}
|
||
// Check minimal mode cache before doing any other work.
|
||
if (this.minimal_mode) {
|
||
const cacheKey = createCacheKey(key, context.invocationID);
|
||
const cachedItem = this.cache.get(cacheKey);
|
||
if (cachedItem) {
|
||
// With invocationID: exact match found - always a hit
|
||
// With TTL mode: must check expiration
|
||
if (context.invocationID !== undefined) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry);
|
||
}
|
||
// TTL mode: check expiration
|
||
const now = Date.now();
|
||
if (cachedItem.expiresAt > now) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(cachedItem.entry);
|
||
}
|
||
// TTL expired - clean up
|
||
this.cache.remove(cacheKey);
|
||
}
|
||
// Warn if this invocation had entries evicted - indicates cache may be too small.
|
||
if (context.invocationID && this.evictedInvocationIDs.has(context.invocationID)) {
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$output$2f$log$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["warnOnce"])(`Response cache entry was evicted for invocation ${context.invocationID}. ` + `Consider increasing NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE (current: ${this.maxSize}).`);
|
||
}
|
||
}
|
||
const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, waitUntil, routeKind, invocationID } = context;
|
||
const response = await this.getBatcher.batch({
|
||
key,
|
||
isOnDemandRevalidate
|
||
}, ({ resolve })=>{
|
||
const promise = this.handleGet(key, responseGenerator, {
|
||
incrementalCache,
|
||
isOnDemandRevalidate,
|
||
isFallback,
|
||
isRoutePPREnabled,
|
||
isPrefetch,
|
||
routeKind,
|
||
invocationID
|
||
}, resolve);
|
||
// We need to ensure background revalidates are passed to waitUntil.
|
||
if (waitUntil) waitUntil(promise);
|
||
return promise;
|
||
});
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(response);
|
||
}
|
||
/**
|
||
* Handles the get request for the response cache.
|
||
*
|
||
* @param key - The key to get the response cache entry for.
|
||
* @param responseGenerator - The response generator to use to generate the response cache entry.
|
||
* @param context - The context for the get request.
|
||
* @param resolve - The resolve function to use to resolve the response cache entry.
|
||
* @returns The response cache entry.
|
||
*/ async handleGet(key, responseGenerator, context, resolve) {
|
||
let previousIncrementalCacheEntry = null;
|
||
let resolved = false;
|
||
try {
|
||
// Get the previous cache entry if not in minimal mode
|
||
previousIncrementalCacheEntry = !this.minimal_mode ? await context.incrementalCache.get(key, {
|
||
kind: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["routeKindToIncrementalCacheKind"])(context.routeKind),
|
||
isRoutePPREnabled: context.isRoutePPREnabled,
|
||
isFallback: context.isFallback
|
||
}) : null;
|
||
if (previousIncrementalCacheEntry && !context.isOnDemandRevalidate) {
|
||
resolve(previousIncrementalCacheEntry);
|
||
resolved = true;
|
||
if (!previousIncrementalCacheEntry.isStale || context.isPrefetch) {
|
||
// The cached value is still valid, so we don't need to update it yet.
|
||
return previousIncrementalCacheEntry;
|
||
}
|
||
}
|
||
// Revalidate the cache entry
|
||
const incrementalResponseCacheEntry = await this.revalidate(key, context.incrementalCache, context.isRoutePPREnabled, context.isFallback, responseGenerator, previousIncrementalCacheEntry, previousIncrementalCacheEntry !== null && !context.isOnDemandRevalidate, undefined, context.invocationID);
|
||
// Handle null response
|
||
if (!incrementalResponseCacheEntry) {
|
||
// Remove the cache item if it was set so we don't use it again.
|
||
if (this.minimal_mode) {
|
||
const cacheKey = createCacheKey(key, context.invocationID);
|
||
this.cache.remove(cacheKey);
|
||
}
|
||
return null;
|
||
}
|
||
// Resolve for on-demand revalidation or if not already resolved
|
||
if (context.isOnDemandRevalidate && !resolved) {
|
||
return incrementalResponseCacheEntry;
|
||
}
|
||
return incrementalResponseCacheEntry;
|
||
} catch (err) {
|
||
// If we've already resolved the cache entry, we can't reject as we
|
||
// already resolved the cache entry so log the error here.
|
||
if (resolved) {
|
||
console.error(err);
|
||
return null;
|
||
}
|
||
throw err;
|
||
}
|
||
}
|
||
/**
|
||
* Revalidates the cache entry for the given key.
|
||
*
|
||
* @param key - The key to revalidate the cache entry for.
|
||
* @param incrementalCache - The incremental cache to use to revalidate the cache entry.
|
||
* @param isRoutePPREnabled - Whether the route is PPR enabled.
|
||
* @param isFallback - Whether the route is a fallback.
|
||
* @param responseGenerator - The response generator to use to generate the response cache entry.
|
||
* @param previousIncrementalCacheEntry - The previous cache entry to use to revalidate the cache entry.
|
||
* @param hasResolved - Whether the response has been resolved.
|
||
* @param waitUntil - Optional function to register background work.
|
||
* @param invocationID - The invocation ID for cache key scoping.
|
||
* @returns The revalidated cache entry.
|
||
*/ async revalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, waitUntil, invocationID) {
|
||
return this.revalidateBatcher.batch(key, ()=>{
|
||
const promise = this.handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, invocationID);
|
||
// We need to ensure background revalidates are passed to waitUntil.
|
||
if (waitUntil) waitUntil(promise);
|
||
return promise;
|
||
});
|
||
}
|
||
async handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, invocationID) {
|
||
try {
|
||
// Generate the response cache entry using the response generator.
|
||
const responseCacheEntry = await responseGenerator({
|
||
hasResolved,
|
||
previousCacheEntry: previousIncrementalCacheEntry,
|
||
isRevalidating: true
|
||
});
|
||
if (!responseCacheEntry) {
|
||
return null;
|
||
}
|
||
// Convert the response cache entry to an incremental response cache entry.
|
||
const incrementalResponseCacheEntry = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["fromResponseCacheEntry"])({
|
||
...responseCacheEntry,
|
||
isMiss: !previousIncrementalCacheEntry
|
||
});
|
||
// We want to persist the result only if it has a cache control value
|
||
// defined.
|
||
if (incrementalResponseCacheEntry.cacheControl) {
|
||
if (this.minimal_mode) {
|
||
// Set TTL expiration for cache hit validation. Entries are validated
|
||
// by invocationID when available, with TTL as a fallback for providers
|
||
// that don't send x-invocation-id. Memory is managed by LRU eviction.
|
||
const cacheKey = createCacheKey(key, invocationID);
|
||
this.cache.set(cacheKey, {
|
||
entry: incrementalResponseCacheEntry,
|
||
expiresAt: Date.now() + this.ttl
|
||
});
|
||
} else {
|
||
await incrementalCache.set(key, incrementalResponseCacheEntry.value, {
|
||
cacheControl: incrementalResponseCacheEntry.cacheControl,
|
||
isRoutePPREnabled,
|
||
isFallback
|
||
});
|
||
}
|
||
}
|
||
return incrementalResponseCacheEntry;
|
||
} catch (err) {
|
||
// When a path is erroring we automatically re-set the existing cache
|
||
// with new revalidate and expire times to prevent non-stop retrying.
|
||
if (previousIncrementalCacheEntry == null ? void 0 : previousIncrementalCacheEntry.cacheControl) {
|
||
const revalidate = Math.min(Math.max(previousIncrementalCacheEntry.cacheControl.revalidate || 3, 3), 30);
|
||
const expire = previousIncrementalCacheEntry.cacheControl.expire === undefined ? undefined : Math.max(revalidate + 3, previousIncrementalCacheEntry.cacheControl.expire);
|
||
await incrementalCache.set(key, previousIncrementalCacheEntry.value, {
|
||
cacheControl: {
|
||
revalidate: revalidate,
|
||
expire: expire
|
||
},
|
||
isRoutePPREnabled,
|
||
isFallback
|
||
});
|
||
}
|
||
// We haven't resolved yet, so let's throw to indicate an error.
|
||
throw err;
|
||
}
|
||
}
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/lib/cache-control.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"getCacheControlHeader",
|
||
()=>getCacheControlHeader
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [ssr] (ecmascript)");
|
||
;
|
||
function getCacheControlHeader({ revalidate, expire }) {
|
||
const swrHeader = typeof revalidate === 'number' && expire !== undefined && revalidate < expire ? `, stale-while-revalidate=${expire - revalidate}` : '';
|
||
if (revalidate === 0) {
|
||
return 'private, no-cache, no-store, max-age=0, must-revalidate';
|
||
} else if (typeof revalidate === 'number') {
|
||
return `s-maxage=${revalidate}${swrHeader}`;
|
||
}
|
||
return `s-maxage=${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR_SECONDS"]}${swrHeader}`;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/utils.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* Web vitals provided to _app.reportWebVitals by Core Web Vitals plugin developed by Google Chrome team.
|
||
* https://nextjs.org/blog/next-9-4#integrated-web-vitals-reporting
|
||
*/ __turbopack_context__.s([
|
||
"DecodeError",
|
||
()=>DecodeError,
|
||
"MiddlewareNotFoundError",
|
||
()=>MiddlewareNotFoundError,
|
||
"MissingStaticPage",
|
||
()=>MissingStaticPage,
|
||
"NormalizeError",
|
||
()=>NormalizeError,
|
||
"PageNotFoundError",
|
||
()=>PageNotFoundError,
|
||
"SP",
|
||
()=>SP,
|
||
"ST",
|
||
()=>ST,
|
||
"WEB_VITALS",
|
||
()=>WEB_VITALS,
|
||
"execOnce",
|
||
()=>execOnce,
|
||
"getDisplayName",
|
||
()=>getDisplayName,
|
||
"getLocationOrigin",
|
||
()=>getLocationOrigin,
|
||
"getURL",
|
||
()=>getURL,
|
||
"isAbsoluteUrl",
|
||
()=>isAbsoluteUrl,
|
||
"isResSent",
|
||
()=>isResSent,
|
||
"loadGetInitialProps",
|
||
()=>loadGetInitialProps,
|
||
"normalizeRepeatedSlashes",
|
||
()=>normalizeRepeatedSlashes,
|
||
"stringifyError",
|
||
()=>stringifyError
|
||
]);
|
||
const WEB_VITALS = [
|
||
'CLS',
|
||
'FCP',
|
||
'FID',
|
||
'INP',
|
||
'LCP',
|
||
'TTFB'
|
||
];
|
||
function execOnce(fn) {
|
||
let used = false;
|
||
let result;
|
||
return (...args)=>{
|
||
if (!used) {
|
||
used = true;
|
||
result = fn(...args);
|
||
}
|
||
return result;
|
||
};
|
||
}
|
||
// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1
|
||
// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3
|
||
const ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\d+\-.]*?:/;
|
||
const isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);
|
||
function getLocationOrigin() {
|
||
const { protocol, hostname, port } = window.location;
|
||
return `${protocol}//${hostname}${port ? ':' + port : ''}`;
|
||
}
|
||
function getURL() {
|
||
const { href } = window.location;
|
||
const origin = getLocationOrigin();
|
||
return href.substring(origin.length);
|
||
}
|
||
function getDisplayName(Component) {
|
||
return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown';
|
||
}
|
||
function isResSent(res) {
|
||
return res.finished || res.headersSent;
|
||
}
|
||
function normalizeRepeatedSlashes(url) {
|
||
const urlParts = url.split('?');
|
||
const urlNoQuery = urlParts[0];
|
||
return urlNoQuery // first we replace any non-encoded backslashes with forward
|
||
// then normalize repeated forward slashes
|
||
.replace(/\\/g, '/').replace(/\/\/+/g, '/') + (urlParts[1] ? `?${urlParts.slice(1).join('?')}` : '');
|
||
}
|
||
async function loadGetInitialProps(App, ctx) {
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (App.prototype?.getInitialProps) {
|
||
const message = `"${getDisplayName(App)}.getInitialProps()" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.`;
|
||
throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
||
value: "E1035",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
}
|
||
// when called from _app `ctx` is nested in `ctx`
|
||
const res = ctx.res || ctx.ctx && ctx.ctx.res;
|
||
if (!App.getInitialProps) {
|
||
if (ctx.ctx && ctx.Component) {
|
||
// @ts-ignore pageProps default
|
||
return {
|
||
pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)
|
||
};
|
||
}
|
||
return {};
|
||
}
|
||
const props = await App.getInitialProps(ctx);
|
||
if (res && isResSent(res)) {
|
||
return props;
|
||
}
|
||
if (!props) {
|
||
const message = `"${getDisplayName(App)}.getInitialProps()" should resolve to an object. But found "${props}" instead.`;
|
||
throw Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
||
value: "E1025",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
if (Object.keys(props).length === 0 && !ctx.ctx) {
|
||
console.warn(`${getDisplayName(App)} returned an empty object from \`getInitialProps\`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps`);
|
||
}
|
||
}
|
||
return props;
|
||
}
|
||
const SP = typeof performance !== 'undefined';
|
||
const ST = SP && [
|
||
'mark',
|
||
'measure',
|
||
'getEntriesByName'
|
||
].every((method)=>typeof performance[method] === 'function');
|
||
class DecodeError extends Error {
|
||
}
|
||
class NormalizeError extends Error {
|
||
}
|
||
class PageNotFoundError extends Error {
|
||
constructor(page){
|
||
super();
|
||
this.code = 'ENOENT';
|
||
this.name = 'PageNotFoundError';
|
||
this.message = `Cannot find module for page: ${page}`;
|
||
}
|
||
}
|
||
class MissingStaticPage extends Error {
|
||
constructor(page, message){
|
||
super();
|
||
this.message = `Failed to load static file for page: ${page} ${message}`;
|
||
}
|
||
}
|
||
class MiddlewareNotFoundError extends Error {
|
||
constructor(){
|
||
super();
|
||
this.code = 'ENOENT';
|
||
this.message = `Cannot find the middleware module`;
|
||
}
|
||
}
|
||
function stringifyError(error) {
|
||
return JSON.stringify({
|
||
message: error.message,
|
||
stack: error.stack
|
||
});
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"RedirectStatusCode",
|
||
()=>RedirectStatusCode
|
||
]);
|
||
var RedirectStatusCode = /*#__PURE__*/ function(RedirectStatusCode) {
|
||
RedirectStatusCode[RedirectStatusCode["SeeOther"] = 303] = "SeeOther";
|
||
RedirectStatusCode[RedirectStatusCode["TemporaryRedirect"] = 307] = "TemporaryRedirect";
|
||
RedirectStatusCode[RedirectStatusCode["PermanentRedirect"] = 308] = "PermanentRedirect";
|
||
return RedirectStatusCode;
|
||
}({});
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/lib/redirect-status.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"allowedStatusCodes",
|
||
()=>allowedStatusCodes,
|
||
"getRedirectStatus",
|
||
()=>getRedirectStatus,
|
||
"modifyRouteRegex",
|
||
()=>modifyRouteRegex
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [ssr] (ecmascript)");
|
||
;
|
||
const allowedStatusCodes = new Set([
|
||
301,
|
||
302,
|
||
303,
|
||
307,
|
||
308
|
||
]);
|
||
function getRedirectStatus(route) {
|
||
return route.statusCode || (route.permanent ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RedirectStatusCode"].PermanentRedirect : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RedirectStatusCode"].TemporaryRedirect);
|
||
}
|
||
function modifyRouteRegex(regex, restrictedPaths) {
|
||
if (restrictedPaths) {
|
||
regex = regex.replace(/\^/, `^(?!${restrictedPaths.map((path)=>path.replace(/\//g, '\\/')).join('|')})`);
|
||
}
|
||
regex = regex.replace(/\$$/, '(?:\\/)?$');
|
||
return regex;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/lib/etag.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
/**
|
||
* FNV-1a Hash implementation
|
||
* @author Travis Webb (tjwebb) <me@traviswebb.com>
|
||
*
|
||
* Ported from https://github.com/tjwebb/fnv-plus/blob/master/index.js
|
||
*
|
||
* Simplified, optimized and add modified for 52 bit, which provides a larger hash space
|
||
* and still making use of Javascript's 53-bit integer space.
|
||
*/ __turbopack_context__.s([
|
||
"fnv1a52",
|
||
()=>fnv1a52,
|
||
"generateETag",
|
||
()=>generateETag
|
||
]);
|
||
const fnv1a52 = (str)=>{
|
||
const len = str.length;
|
||
let i = 0, t0 = 0, v0 = 0x2325, t1 = 0, v1 = 0x8422, t2 = 0, v2 = 0x9ce4, t3 = 0, v3 = 0xcbf2;
|
||
while(i < len){
|
||
v0 ^= str.charCodeAt(i++);
|
||
t0 = v0 * 435;
|
||
t1 = v1 * 435;
|
||
t2 = v2 * 435;
|
||
t3 = v3 * 435;
|
||
t2 += v0 << 8;
|
||
t3 += v1 << 8;
|
||
t1 += t0 >>> 16;
|
||
v0 = t0 & 65535;
|
||
t2 += t1 >>> 16;
|
||
v1 = t1 & 65535;
|
||
v3 = t3 + (t2 >>> 16) & 65535;
|
||
v2 = t2 & 65535;
|
||
}
|
||
return (v3 & 15) * 281474976710656 + v2 * 4294967296 + v1 * 65536 + (v0 ^ v3 >> 4);
|
||
};
|
||
const generateETag = (payload, weak = false)=>{
|
||
const prefix = weak ? 'W/"' : '"';
|
||
return prefix + fnv1a52(payload).toString(36) + payload.length.toString(36) + '"';
|
||
};
|
||
}),
|
||
"[project]/node_modules/next/dist/compiled/fresh/index.js [ssr] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
||
|
||
(()=>{
|
||
"use strict";
|
||
var e = {
|
||
695: (e)=>{
|
||
/*!
|
||
* fresh
|
||
* Copyright(c) 2012 TJ Holowaychuk
|
||
* Copyright(c) 2016-2017 Douglas Christopher Wilson
|
||
* MIT Licensed
|
||
*/ var 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 = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/fresh") + "/";
|
||
var a = __nccwpck_require__(695);
|
||
module.exports = a;
|
||
})();
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/send-payload.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"sendEtagResponse",
|
||
()=>sendEtagResponse,
|
||
"sendRenderResult",
|
||
()=>sendRenderResult
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$etag$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/etag.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$fresh$2f$index$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/fresh/index.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/cache-control.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
function sendEtagResponse(req, res, etag) {
|
||
if (etag) {
|
||
/**
|
||
* The server generating a 304 response MUST generate any of the
|
||
* following header fields that would have been sent in a 200 (OK)
|
||
* response to the same request: Cache-Control, Content-Location, Date,
|
||
* ETag, Expires, and Vary. https://tools.ietf.org/html/rfc7232#section-4.1
|
||
*/ res.setHeader('ETag', etag);
|
||
}
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$compiled$2f$fresh$2f$index$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["default"])(req.headers, {
|
||
etag
|
||
})) {
|
||
res.statusCode = 304;
|
||
res.end();
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
async function sendRenderResult({ req, res, result, generateEtags, poweredByHeader, cacheControl }) {
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["isResSent"])(res)) {
|
||
return;
|
||
}
|
||
if (poweredByHeader && result.contentType === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"]) {
|
||
res.setHeader('X-Powered-By', 'Next.js');
|
||
}
|
||
// If cache control is already set on the response we don't
|
||
// override it to allow users to customize it via next.config
|
||
if (cacheControl && !res.getHeader('Cache-Control')) {
|
||
res.setHeader('Cache-Control', (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getCacheControlHeader"])(cacheControl));
|
||
}
|
||
const payload = result.isDynamic ? null : result.toUnchunkedString();
|
||
if (generateEtags && payload !== null) {
|
||
const etag = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$etag$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["generateETag"])(payload);
|
||
if (sendEtagResponse(req, res, etag)) {
|
||
return;
|
||
}
|
||
}
|
||
if (!res.getHeader('Content-Type') && result.contentType) {
|
||
res.setHeader('Content-Type', result.contentType);
|
||
}
|
||
if (payload) {
|
||
res.setHeader('Content-Length', Buffer.byteLength(payload));
|
||
}
|
||
if (req.method === 'HEAD') {
|
||
res.end(null);
|
||
return;
|
||
}
|
||
if (payload !== null) {
|
||
res.end(payload);
|
||
return;
|
||
}
|
||
// Pipe the render result to the response after we get a writer for it.
|
||
await result.pipeToNodeResponse(res);
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/html-bots.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
// This regex contains the bots that we need to do a blocking render for and can't safely stream the response
|
||
// due to how they parse the DOM. For example, they might explicitly check for metadata in the `head` tag, so we can't stream metadata tags after the `head` was sent.
|
||
// Note: The pattern [\w-]+-Google captures all Google crawlers with "-Google" suffix (e.g., Mediapartners-Google, AdsBot-Google, Storebot-Google)
|
||
// as well as crawlers starting with "Google-" (e.g., Google-PageRenderer, Google-InspectionTool)
|
||
__turbopack_context__.s([
|
||
"HTML_LIMITED_BOT_UA_RE",
|
||
()=>HTML_LIMITED_BOT_UA_RE
|
||
]);
|
||
const HTML_LIMITED_BOT_UA_RE = /[\w-]+-Google|Google-[\w-]+|Chrome-Lighthouse|Slurp|DuckDuckBot|baiduspider|yandex|sogou|bitlybot|tumblr|vkShare|quora link preview|redditbot|ia_archiver|Bingbot|BingPreview|applebot|facebookexternalhit|facebookcatalog|Twitterbot|LinkedInBot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|Yeti|googleweblight/i;
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-bot.js [ssr] (ecmascript) <locals>", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"HTML_LIMITED_BOT_UA_RE_STRING",
|
||
()=>HTML_LIMITED_BOT_UA_RE_STRING,
|
||
"getBotType",
|
||
()=>getBotType,
|
||
"isBot",
|
||
()=>isBot
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$html$2d$bots$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/html-bots.js [ssr] (ecmascript)");
|
||
;
|
||
// Bot crawler that will spin up a headless browser and execute JS.
|
||
// Only the main Googlebot search crawler executes JavaScript, not other Google crawlers.
|
||
// x-ref: https://developers.google.com/search/docs/crawling-indexing/google-common-crawlers
|
||
// This regex specifically matches "Googlebot" but NOT "Mediapartners-Google", "AdsBot-Google", etc.
|
||
const HEADLESS_BROWSER_BOT_UA_RE = /Googlebot(?!-)|Googlebot$/i;
|
||
const HTML_LIMITED_BOT_UA_RE_STRING = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$html$2d$bots$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["HTML_LIMITED_BOT_UA_RE"].source;
|
||
;
|
||
function isDomBotUA(userAgent) {
|
||
return HEADLESS_BROWSER_BOT_UA_RE.test(userAgent);
|
||
}
|
||
function isHtmlLimitedBotUA(userAgent) {
|
||
return __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$html$2d$bots$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["HTML_LIMITED_BOT_UA_RE"].test(userAgent);
|
||
}
|
||
function isBot(userAgent) {
|
||
return isDomBotUA(userAgent) || isHtmlLimitedBotUA(userAgent);
|
||
}
|
||
function getBotType(userAgent) {
|
||
if (isDomBotUA(userAgent)) {
|
||
return 'dom';
|
||
}
|
||
if (isHtmlLimitedBotUA(userAgent)) {
|
||
return 'html';
|
||
}
|
||
return undefined;
|
||
}
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/server/route-modules/pages/pages-handler.js [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"getHandler",
|
||
()=>getHandler
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$url$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-url.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$interop$2d$default$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/interop-default.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$data$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/normalize-data-path.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$index$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [ssr] (ecmascript) <locals>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/cache-control.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/utils.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$redirect$2d$status$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/redirect-status.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/path [external] (path, cjs)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/send-payload.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/render-result.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/utils.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$bot$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/is-bot.js [ssr] (ecmascript) <locals>");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
const getHandler = ({ srcPage: originalSrcPage, config, userland, routeModule, isFallbackError, getStaticPaths, getStaticProps, getServerSideProps })=>{
|
||
return async function handler(req, res, ctx) {
|
||
var _serverFilesManifest_config_experimental, _serverFilesManifest_config;
|
||
if (ctx.requestMeta) {
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["setRequestMeta"])(req, ctx.requestMeta);
|
||
}
|
||
if (routeModule.isDev) {
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["addRequestMeta"])(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());
|
||
}
|
||
let srcPage = originalSrcPage;
|
||
// turbopack doesn't normalize `/index` in the page name
|
||
// so we need to to process dynamic routes properly
|
||
// TODO: fix turbopack providing differing value from webpack
|
||
if ("TURBOPACK compile-time truthy", 1) {
|
||
srcPage = srcPage.replace(/\/index$/, '') || '/';
|
||
} else if (srcPage === '/index') {
|
||
// we always normalize /index specifically
|
||
srcPage = '/';
|
||
}
|
||
const multiZoneDraftMode = ("TURBOPACK compile-time value", false);
|
||
const prepareResult = await routeModule.prepare(req, res, {
|
||
srcPage,
|
||
multiZoneDraftMode
|
||
});
|
||
if (!prepareResult) {
|
||
res.statusCode = 400;
|
||
res.end('Bad Request');
|
||
ctx.waitUntil == null ? void 0 : ctx.waitUntil.call(ctx, Promise.resolve());
|
||
return;
|
||
}
|
||
const isMinimalMode = Boolean((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'minimalMode'));
|
||
const render404 = async ()=>{
|
||
// TODO: should route-module itself handle rendering the 404
|
||
if (routerServerContext == null ? void 0 : routerServerContext.render404) {
|
||
await routerServerContext.render404(req, res, parsedUrl, false);
|
||
} else {
|
||
res.end('This page could not be found');
|
||
}
|
||
};
|
||
const { buildId, query, params, parsedUrl, originalQuery, originalPathname, buildManifest, fallbackBuildManifest, nextFontManifest, serverFilesManifest, reactLoadableManifest, prerenderManifest, isDraftMode, isOnDemandRevalidate, revalidateOnlyGenerated, locale, locales, defaultLocale, routerServerContext, nextConfig, resolvedPathname, encodedResolvedPathname, deploymentId, clientAssetToken } = prepareResult;
|
||
const isExperimentalCompile = serverFilesManifest == null ? void 0 : (_serverFilesManifest_config = serverFilesManifest.config) == null ? void 0 : (_serverFilesManifest_config_experimental = _serverFilesManifest_config.experimental) == null ? void 0 : _serverFilesManifest_config_experimental.isExperimentalCompile;
|
||
const hasServerProps = Boolean(getServerSideProps);
|
||
const hasStaticProps = Boolean(getStaticProps);
|
||
const hasStaticPaths = Boolean(getStaticPaths);
|
||
const hasGetInitialProps = Boolean((userland.default || userland).getInitialProps);
|
||
let cacheKey = null;
|
||
let isIsrFallback = false;
|
||
let isNextDataRequest = prepareResult.isNextDataRequest && (hasStaticProps || hasServerProps);
|
||
const is404Page = srcPage === '/404';
|
||
const is500Page = srcPage === '/500';
|
||
const isErrorPage = srcPage === '/_error';
|
||
if (!routeModule.isDev && !isDraftMode && hasStaticProps) {
|
||
cacheKey = `${locale ? `/${locale}` : ''}${(srcPage === '/' || resolvedPathname === '/') && locale ? '' : resolvedPathname}`;
|
||
if (is404Page || is500Page || isErrorPage) {
|
||
cacheKey = `${locale ? `/${locale}` : ''}${srcPage}`;
|
||
}
|
||
// ensure /index and / is normalized to one key
|
||
cacheKey = cacheKey === '/index' ? '/' : cacheKey;
|
||
}
|
||
if (hasStaticPaths && !isDraftMode) {
|
||
const decodedPathname = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(locale ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$add$2d$path$2d$prefix$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["addPathPrefix"])(resolvedPathname, `/${locale}`) : resolvedPathname);
|
||
const isPrerendered = Boolean(prerenderManifest.routes[decodedPathname]) || prerenderManifest.notFoundRoutes.includes(decodedPathname);
|
||
const prerenderInfo = prerenderManifest.dynamicRoutes[srcPage];
|
||
if (prerenderInfo) {
|
||
if (prerenderInfo.fallback === false && !isPrerendered) {
|
||
if (nextConfig.adapterPath) {
|
||
return await render404();
|
||
}
|
||
throw new __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"]();
|
||
}
|
||
if (typeof prerenderInfo.fallback === 'string' && !isPrerendered && !isNextDataRequest) {
|
||
isIsrFallback = true;
|
||
}
|
||
}
|
||
}
|
||
// When serving a bot request, we want to serve a blocking render and not
|
||
// the prerendered page. This ensures that the correct content is served
|
||
// to the bot in the head.
|
||
if (isIsrFallback && (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$is$2d$bot$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__$3c$locals$3e$__["isBot"])(req.headers['user-agent'] || '') || isMinimalMode) {
|
||
isIsrFallback = false;
|
||
}
|
||
const tracer = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getTracer"])();
|
||
const activeSpan = tracer.getActiveScopeSpan();
|
||
try {
|
||
var _parsedUrl_pathname;
|
||
const method = req.method || 'GET';
|
||
const resolvedUrl = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$url$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["formatUrl"])({
|
||
pathname: nextConfig.trailingSlash ? `${encodedResolvedPathname}${!encodedResolvedPathname.endsWith('/') && ((_parsedUrl_pathname = parsedUrl.pathname) == null ? void 0 : _parsedUrl_pathname.endsWith('/')) ? '/' : ''}` : (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$remove$2d$trailing$2d$slash$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(encodedResolvedPathname || '/'),
|
||
// make sure to only add query values from original URL
|
||
query: hasStaticProps ? {} : originalQuery
|
||
});
|
||
let parentSpan;
|
||
const handleResponse = async (span)=>{
|
||
const responseGenerator = async ({ previousCacheEntry })=>{
|
||
var _previousCacheEntry_value;
|
||
const doRender = async ()=>{
|
||
try {
|
||
var _nextConfig_i18n;
|
||
return await routeModule.render(req, res, {
|
||
query: hasStaticProps && !isExperimentalCompile ? {
|
||
...params
|
||
} : {
|
||
...query,
|
||
...params
|
||
},
|
||
params,
|
||
page: srcPage,
|
||
renderContext: {
|
||
isDraftMode,
|
||
isFallback: isIsrFallback,
|
||
developmentNotFoundSourcePage: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'developmentNotFoundSourcePage')
|
||
},
|
||
sharedContext: {
|
||
buildId,
|
||
customServer: Boolean(routerServerContext == null ? void 0 : routerServerContext.isCustomServer) || undefined,
|
||
deploymentId,
|
||
clientAssetToken
|
||
},
|
||
renderOpts: {
|
||
params,
|
||
routeModule,
|
||
page: srcPage,
|
||
pageConfig: config || {},
|
||
Component: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$interop$2d$default$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["interopDefault"])(userland),
|
||
ComponentMod: userland,
|
||
getStaticProps,
|
||
getStaticPaths,
|
||
getServerSideProps,
|
||
supportsDynamicResponse: !hasStaticProps,
|
||
buildManifest: isFallbackError ? fallbackBuildManifest : buildManifest,
|
||
nextFontManifest,
|
||
reactLoadableManifest,
|
||
assetPrefix: nextConfig.assetPrefix,
|
||
previewProps: prerenderManifest.preview,
|
||
images: nextConfig.images,
|
||
nextConfigOutput: nextConfig.output,
|
||
optimizeCss: Boolean(nextConfig.experimental.optimizeCss),
|
||
nextScriptWorkers: Boolean(nextConfig.experimental.nextScriptWorkers),
|
||
domainLocales: (_nextConfig_i18n = nextConfig.i18n) == null ? void 0 : _nextConfig_i18n.domains,
|
||
crossOrigin: nextConfig.crossOrigin,
|
||
multiZoneDraftMode,
|
||
basePath: nextConfig.basePath,
|
||
disableOptimizedLoading: nextConfig.experimental.disableOptimizedLoading,
|
||
largePageDataBytes: nextConfig.experimental.largePageDataBytes,
|
||
isExperimentalCompile,
|
||
experimental: {
|
||
clientTraceMetadata: nextConfig.experimental.clientTraceMetadata || []
|
||
},
|
||
locale,
|
||
locales,
|
||
defaultLocale,
|
||
setIsrStatus: routerServerContext == null ? void 0 : routerServerContext.setIsrStatus,
|
||
isNextDataRequest: isNextDataRequest && (hasServerProps || hasStaticProps),
|
||
resolvedUrl,
|
||
// For getServerSideProps and getInitialProps we need to ensure we use the original URL
|
||
// and not the resolved URL to prevent a hydration mismatch on
|
||
// asPath
|
||
resolvedAsPath: hasServerProps || hasGetInitialProps ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$format$2d$url$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["formatUrl"])({
|
||
// we use the original URL pathname less the _next/data prefix if
|
||
// present
|
||
pathname: isNextDataRequest ? (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$normalize$2d$data$2d$path$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["normalizeDataPath"])(originalPathname) : originalPathname,
|
||
query: originalQuery
|
||
}) : resolvedUrl,
|
||
isOnDemandRevalidate,
|
||
ErrorDebug: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'PagesErrorDebug'),
|
||
err: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'invokeError'),
|
||
// needed for experimental.optimizeCss feature
|
||
distDir: __TURBOPACK__imported__module__$5b$externals$5d2f$path__$5b$external$5d$__$28$path$2c$__cjs$29$__["default"].join(/* turbopackIgnore: true */ process.cwd(), routeModule.relativeProjectDir, routeModule.distDir)
|
||
}
|
||
}).then((renderResult)=>{
|
||
const { metadata } = renderResult;
|
||
let cacheControl = metadata.cacheControl;
|
||
if ('isNotFound' in metadata && metadata.isNotFound) {
|
||
return {
|
||
value: null,
|
||
cacheControl
|
||
};
|
||
}
|
||
// Handle `isRedirect`.
|
||
if (metadata.isRedirect) {
|
||
return {
|
||
value: {
|
||
kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].REDIRECT,
|
||
props: metadata.pageData ?? metadata.flightData
|
||
},
|
||
cacheControl
|
||
};
|
||
}
|
||
return {
|
||
value: {
|
||
kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES,
|
||
html: renderResult,
|
||
pageData: renderResult.metadata.pageData,
|
||
headers: renderResult.metadata.headers,
|
||
status: renderResult.metadata.statusCode
|
||
},
|
||
cacheControl
|
||
};
|
||
}).finally(()=>{
|
||
if (!span) return;
|
||
span.setAttributes({
|
||
'http.status_code': res.statusCode,
|
||
'next.rsc': false
|
||
});
|
||
const rootSpanAttributes = tracer.getRootSpanAttributes();
|
||
// We were unable to get attributes, probably OTEL is not enabled
|
||
if (!rootSpanAttributes) {
|
||
return;
|
||
}
|
||
if (rootSpanAttributes.get('next.span_type') !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest) {
|
||
console.warn(`Unexpected root span type '${rootSpanAttributes.get('next.span_type')}'. Please report this Next.js issue https://github.com/vercel/next.js`);
|
||
return;
|
||
}
|
||
const route = rootSpanAttributes.get('next.route');
|
||
if (route) {
|
||
const name = `${method} ${route}`;
|
||
span.setAttributes({
|
||
'next.route': route,
|
||
'http.route': route,
|
||
'next.span_name': name
|
||
});
|
||
span.updateName(name);
|
||
// Propagate http.route to the parent span if one exists
|
||
// (e.g. a platform-created HTTP span in adapter
|
||
// deployments).
|
||
if (parentSpan && parentSpan !== span) {
|
||
parentSpan.setAttribute('http.route', route);
|
||
parentSpan.updateName(name);
|
||
}
|
||
} else {
|
||
span.updateName(`${method} ${srcPage}`);
|
||
}
|
||
});
|
||
} catch (err) {
|
||
// if this is a background revalidate we need to report
|
||
// the request error here as it won't be bubbled
|
||
if (previousCacheEntry == null ? void 0 : previousCacheEntry.isStale) {
|
||
const silenceLog = false;
|
||
await routeModule.onRequestError(req, err, {
|
||
routerKind: 'Pages Router',
|
||
routePath: srcPage,
|
||
routeType: 'render',
|
||
revalidateReason: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRevalidateReason"])({
|
||
isStaticGeneration: hasStaticProps,
|
||
isOnDemandRevalidate
|
||
})
|
||
}, silenceLog, routerServerContext);
|
||
}
|
||
throw err;
|
||
}
|
||
};
|
||
// if we've already generated this page we no longer
|
||
// serve the fallback
|
||
if (previousCacheEntry) {
|
||
isIsrFallback = false;
|
||
}
|
||
if (isIsrFallback) {
|
||
const fallbackResponse = await routeModule.getResponseCache(req).get(routeModule.isDev ? null : locale ? `/${locale}${srcPage}` : srcPage, async ({ previousCacheEntry: previousFallbackCacheEntry = null })=>{
|
||
if (!routeModule.isDev) {
|
||
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(previousFallbackCacheEntry);
|
||
}
|
||
return doRender();
|
||
}, {
|
||
routeKind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RouteKind"].PAGES,
|
||
isFallback: true,
|
||
isRoutePPREnabled: false,
|
||
isOnDemandRevalidate: false,
|
||
incrementalCache: await routeModule.getIncrementalCache(req, nextConfig, prerenderManifest, isMinimalMode),
|
||
waitUntil: ctx.waitUntil
|
||
});
|
||
if (fallbackResponse) {
|
||
// Remove the cache control from the response to prevent it from being
|
||
// used in the surrounding cache.
|
||
delete fallbackResponse.cacheControl;
|
||
fallbackResponse.isMiss = true;
|
||
return fallbackResponse;
|
||
}
|
||
}
|
||
if (!isMinimalMode && isOnDemandRevalidate && revalidateOnlyGenerated && !previousCacheEntry) {
|
||
res.statusCode = 404;
|
||
// on-demand revalidate always sets this header
|
||
res.setHeader('x-nextjs-cache', 'REVALIDATED');
|
||
res.end('This page could not be found');
|
||
return null;
|
||
}
|
||
if (isIsrFallback && (previousCacheEntry == null ? void 0 : (_previousCacheEntry_value = previousCacheEntry.value) == null ? void 0 : _previousCacheEntry_value.kind) === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES) {
|
||
return {
|
||
value: {
|
||
kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES,
|
||
html: new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["default"](Buffer.from(previousCacheEntry.value.html), {
|
||
contentType: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["HTML_CONTENT_TYPE_HEADER"],
|
||
metadata: {
|
||
statusCode: previousCacheEntry.value.status,
|
||
headers: previousCacheEntry.value.headers
|
||
}
|
||
}),
|
||
pageData: {},
|
||
status: previousCacheEntry.value.status,
|
||
headers: previousCacheEntry.value.headers
|
||
},
|
||
cacheControl: {
|
||
revalidate: 0,
|
||
expire: undefined
|
||
}
|
||
};
|
||
}
|
||
return doRender();
|
||
};
|
||
const result = await routeModule.handleResponse({
|
||
cacheKey,
|
||
req,
|
||
nextConfig,
|
||
routeKind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RouteKind"].PAGES,
|
||
isOnDemandRevalidate,
|
||
revalidateOnlyGenerated,
|
||
waitUntil: ctx.waitUntil,
|
||
responseGenerator: responseGenerator,
|
||
prerenderManifest,
|
||
isMinimalMode
|
||
});
|
||
// if we got a cache hit this wasn't an ISR fallback
|
||
// but it wasn't generated during build so isn't in the
|
||
// prerender-manifest
|
||
if (isIsrFallback && !(result == null ? void 0 : result.isMiss)) {
|
||
isIsrFallback = false;
|
||
}
|
||
// response is finished is no cache entry
|
||
if (!result) {
|
||
return;
|
||
}
|
||
if (hasStaticProps && !isMinimalMode) {
|
||
res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : result.isMiss ? 'MISS' : result.isStale ? 'STALE' : 'HIT');
|
||
}
|
||
let cacheControl;
|
||
if (!hasStaticProps || isIsrFallback) {
|
||
if (!res.getHeader('Cache-Control')) {
|
||
cacheControl = {
|
||
revalidate: 0,
|
||
expire: undefined
|
||
};
|
||
}
|
||
} else if (is404Page) {
|
||
const notFoundRevalidate = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'notFoundRevalidate');
|
||
cacheControl = {
|
||
revalidate: typeof notFoundRevalidate === 'undefined' ? 0 : notFoundRevalidate,
|
||
expire: undefined
|
||
};
|
||
} else if (is500Page) {
|
||
cacheControl = {
|
||
revalidate: 0,
|
||
expire: undefined
|
||
};
|
||
} else if (result.cacheControl) {
|
||
// If the cache entry has a cache control with a revalidate value that's
|
||
// a number, use it.
|
||
if (typeof result.cacheControl.revalidate === 'number') {
|
||
var _result_cacheControl;
|
||
if (result.cacheControl.revalidate < 1) {
|
||
throw Object.defineProperty(new Error(`Invalid revalidate configuration provided: ${result.cacheControl.revalidate} < 1`), "__NEXT_ERROR_CODE", {
|
||
value: "E22",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
cacheControl = {
|
||
revalidate: result.cacheControl.revalidate,
|
||
expire: ((_result_cacheControl = result.cacheControl) == null ? void 0 : _result_cacheControl.expire) ?? nextConfig.expireTime
|
||
};
|
||
} else {
|
||
// revalidate: false
|
||
cacheControl = {
|
||
revalidate: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR_SECONDS"],
|
||
expire: undefined
|
||
};
|
||
}
|
||
}
|
||
// If cache control is already set on the response we don't
|
||
// override it to allow users to customize it via next.config
|
||
if (cacheControl && !res.getHeader('Cache-Control')) {
|
||
res.setHeader('Cache-Control', (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$cache$2d$control$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getCacheControlHeader"])(cacheControl));
|
||
}
|
||
// notFound: true case
|
||
if (!result.value) {
|
||
var _result_cacheControl1;
|
||
// add revalidate metadata before rendering 404 page
|
||
// so that we can use this as source of truth for the
|
||
// cache-control header instead of what the 404 page returns
|
||
// for the revalidate value
|
||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["addRequestMeta"])(req, 'notFoundRevalidate', (_result_cacheControl1 = result.cacheControl) == null ? void 0 : _result_cacheControl1.revalidate);
|
||
res.statusCode = 404;
|
||
if (isNextDataRequest) {
|
||
if (deploymentId) {
|
||
res.setHeader(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_NAV_DEPLOYMENT_ID_HEADER"], deploymentId);
|
||
}
|
||
res.end('{"notFound":true}');
|
||
return;
|
||
}
|
||
return await render404();
|
||
}
|
||
if (result.value.kind === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].REDIRECT) {
|
||
if (isNextDataRequest) {
|
||
if (deploymentId) {
|
||
res.setHeader(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_NAV_DEPLOYMENT_ID_HEADER"], deploymentId);
|
||
}
|
||
res.setHeader('content-type', __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["JSON_CONTENT_TYPE_HEADER"]);
|
||
res.end(JSON.stringify(result.value.props));
|
||
return;
|
||
} else {
|
||
const handleRedirect = (pageData)=>{
|
||
const redirect = {
|
||
destination: pageData.pageProps.__N_REDIRECT,
|
||
statusCode: pageData.pageProps.__N_REDIRECT_STATUS,
|
||
basePath: pageData.pageProps.__N_REDIRECT_BASE_PATH
|
||
};
|
||
const statusCode = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$redirect$2d$status$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRedirectStatus"])(redirect);
|
||
const { basePath } = nextConfig;
|
||
if (basePath && redirect.basePath !== false && redirect.destination.startsWith('/')) {
|
||
redirect.destination = `${basePath}${redirect.destination}`;
|
||
}
|
||
if (redirect.destination.startsWith('/')) {
|
||
redirect.destination = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["normalizeRepeatedSlashes"])(redirect.destination);
|
||
}
|
||
res.statusCode = statusCode;
|
||
res.setHeader('Location', redirect.destination);
|
||
if (statusCode === __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$redirect$2d$status$2d$code$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RedirectStatusCode"].PermanentRedirect) {
|
||
res.setHeader('Refresh', `0;url=${redirect.destination}`);
|
||
}
|
||
res.end(redirect.destination);
|
||
};
|
||
await handleRedirect(result.value.props);
|
||
return null;
|
||
}
|
||
}
|
||
if (result.value.kind !== __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$response$2d$cache$2f$types$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["CachedRouteKind"].PAGES) {
|
||
throw Object.defineProperty(new Error(`Invariant: received non-pages cache entry in pages handler`), "__NEXT_ERROR_CODE", {
|
||
value: "E695",
|
||
enumerable: false,
|
||
configurable: true
|
||
});
|
||
}
|
||
// In dev, we should not cache pages for any reason.
|
||
if (routeModule.isDev) {
|
||
res.setHeader('Cache-Control', 'no-cache, must-revalidate');
|
||
}
|
||
// Draft mode should never be cached
|
||
if (isDraftMode) {
|
||
res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');
|
||
}
|
||
// when invoking _error before pages/500 we don't actually
|
||
// send the _error response
|
||
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'customErrorRender') || isErrorPage && isMinimalMode && res.statusCode === 500) {
|
||
return null;
|
||
}
|
||
// Add deployment ID header for data requests
|
||
if (isNextDataRequest && !isErrorPage && !is500Page) {
|
||
if (deploymentId) {
|
||
res.setHeader(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["NEXT_NAV_DEPLOYMENT_ID_HEADER"], deploymentId);
|
||
}
|
||
}
|
||
await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$payload$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["sendRenderResult"])({
|
||
req,
|
||
res,
|
||
// If we are rendering the error page it's not a data request
|
||
// anymore
|
||
result: isNextDataRequest && !isErrorPage && !is500Page ? new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$render$2d$result$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["default"](Buffer.from(JSON.stringify(result.value.pageData)), {
|
||
contentType: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["JSON_CONTENT_TYPE_HEADER"],
|
||
metadata: result.value.html.metadata
|
||
}) : result.value.html,
|
||
generateEtags: nextConfig.generateEtags,
|
||
poweredByHeader: nextConfig.poweredByHeader,
|
||
cacheControl: routeModule.isDev ? undefined : cacheControl
|
||
});
|
||
};
|
||
// TODO: activeSpan code path is for when wrapped by
|
||
// next-server can be removed when this is no longer used
|
||
if (activeSpan) {
|
||
await handleResponse();
|
||
} else {
|
||
parentSpan = tracer.getActiveScopeSpan();
|
||
await tracer.withPropagatedContext(req.headers, ()=>tracer.trace(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$constants$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["BaseServerSpan"].handleRequest, {
|
||
spanName: `${method} ${srcPage}`,
|
||
kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$trace$2f$tracer$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["SpanKind"].SERVER,
|
||
attributes: {
|
||
'http.method': method,
|
||
'http.target': req.url
|
||
}
|
||
}, handleResponse));
|
||
}
|
||
} catch (err) {
|
||
if (!(err instanceof __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$shared$2f$lib$2f$no$2d$fallback$2d$error$2e$external$2e$js$2c$__cjs$29$__["NoFallbackError"])) {
|
||
const silenceLog = false;
|
||
await routeModule.onRequestError(req, err, {
|
||
routerKind: 'Pages Router',
|
||
routePath: srcPage,
|
||
routeType: 'render',
|
||
revalidateReason: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$instrumentation$2f$utils$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getRevalidateReason"])({
|
||
isStaticGeneration: hasStaticProps,
|
||
isOnDemandRevalidate
|
||
})
|
||
}, silenceLog, routerServerContext);
|
||
}
|
||
// rethrow so that we can handle serving error page
|
||
throw err;
|
||
}
|
||
};
|
||
};
|
||
}),
|
||
"[project]/node_modules/next/dist/esm/build/templates/pages.js { INNER_PAGE => \"[project]/node_modules/next/dist/pages/_error.js [ssr] (ecmascript)\", INNER_DOCUMENT => \"[project]/node_modules/next/document.js [ssr] (ecmascript)\", INNER_APP => \"[project]/node_modules/next/app.js [ssr] (ecmascript)\" } [ssr] (ecmascript)", ((__turbopack_context__) => {
|
||
"use strict";
|
||
|
||
__turbopack_context__.s([
|
||
"config",
|
||
()=>config,
|
||
"default",
|
||
()=>__TURBOPACK__default__export__,
|
||
"getServerSideProps",
|
||
()=>getServerSideProps,
|
||
"getStaticPaths",
|
||
()=>getStaticPaths,
|
||
"getStaticProps",
|
||
()=>getStaticProps,
|
||
"handler",
|
||
()=>handler,
|
||
"reportWebVitals",
|
||
()=>reportWebVitals,
|
||
"routeModule",
|
||
()=>routeModule,
|
||
"unstable_getServerProps",
|
||
()=>unstable_getServerProps,
|
||
"unstable_getServerSideProps",
|
||
()=>unstable_getServerSideProps,
|
||
"unstable_getStaticParams",
|
||
()=>unstable_getStaticParams,
|
||
"unstable_getStaticPaths",
|
||
()=>unstable_getStaticPaths,
|
||
"unstable_getStaticProps",
|
||
()=>unstable_getStaticProps
|
||
]);
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$pages$2f$module$2e$compiled$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-modules/pages/module.compiled.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/build/templates/helpers.js [ssr] (ecmascript)");
|
||
// Import the app and document modules.
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$document$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/document.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$app$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/app.js [ssr] (ecmascript)");
|
||
// Import the userland code.
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/pages/_error.js [ssr] (ecmascript)");
|
||
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$pages$2f$pages$2d$handler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-modules/pages/pages-handler.js [ssr] (ecmascript)");
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
const __TURBOPACK__default__export__ = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'default');
|
||
const getStaticProps = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'getStaticProps');
|
||
const getStaticPaths = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'getStaticPaths');
|
||
const getServerSideProps = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'getServerSideProps');
|
||
const config = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'config');
|
||
const reportWebVitals = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'reportWebVitals');
|
||
const unstable_getStaticProps = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'unstable_getStaticProps');
|
||
const unstable_getStaticPaths = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'unstable_getStaticPaths');
|
||
const unstable_getStaticParams = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'unstable_getStaticParams');
|
||
const unstable_getServerProps = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'unstable_getServerProps');
|
||
const unstable_getServerSideProps = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$build$2f$templates$2f$helpers$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["hoist"])(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__, 'unstable_getServerSideProps');
|
||
const routeModule = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$pages$2f$module$2e$compiled$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["PagesRouteModule"]({
|
||
definition: {
|
||
kind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["RouteKind"].PAGES,
|
||
page: "/_error",
|
||
pathname: "/_error",
|
||
// The following aren't used in production.
|
||
bundlePath: '',
|
||
filename: ''
|
||
},
|
||
distDir: ("TURBOPACK compile-time value", ".next/dev") || '',
|
||
relativeProjectDir: ("TURBOPACK compile-time value", "") || '',
|
||
components: {
|
||
// default export might not exist when optimized for data only
|
||
App: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$app$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["default"],
|
||
Document: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$document$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["default"]
|
||
},
|
||
userland: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__
|
||
});
|
||
const handler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$pages$2f$pages$2d$handler$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__["getHandler"])({
|
||
srcPage: "/_error",
|
||
config,
|
||
userland: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$pages$2f$_error$2e$js__$5b$ssr$5d$__$28$ecmascript$29$__,
|
||
routeModule,
|
||
getStaticPaths,
|
||
getStaticProps,
|
||
getServerSideProps
|
||
});
|
||
}),
|
||
];
|
||
|
||
//# sourceMappingURL=node_modules_01ed9g5._.js.map
|