14482 lines
659 KiB
JavaScript
14482 lines
659 KiB
JavaScript
module.exports = [
|
|
"[project]/node_modules/next/dist/esm/server/route-modules/app-route/module.compiled.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
|
|
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
|
;
|
|
else {
|
|
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/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)");
|
|
} else //TURBOPACK unreachable
|
|
;
|
|
} else //TURBOPACK unreachable
|
|
;
|
|
}
|
|
} //# sourceMappingURL=module.compiled.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (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;
|
|
}({}); //# sourceMappingURL=route-kind.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
/**
|
|
* 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
|
|
__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
|
|
]);
|
|
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"
|
|
]);
|
|
;
|
|
//# sourceMappingURL=constants.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [app-route] (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';
|
|
} //# sourceMappingURL=is-thenable.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/compiled/@opentelemetry/api/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
|
|
(()=>{
|
|
"use strict";
|
|
var e = {
|
|
491: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.ContextAPI = void 0;
|
|
const n = r(223);
|
|
const a = r(172);
|
|
const o = r(930);
|
|
const i = "context";
|
|
const c = new n.NoopContextManager;
|
|
class ContextAPI {
|
|
constructor(){}
|
|
static getInstance() {
|
|
if (!this._instance) {
|
|
this._instance = new ContextAPI;
|
|
}
|
|
return this._instance;
|
|
}
|
|
setGlobalContextManager(e) {
|
|
return (0, a.registerGlobal)(i, e, o.DiagAPI.instance());
|
|
}
|
|
active() {
|
|
return this._getContextManager().active();
|
|
}
|
|
with(e, t, r, ...n) {
|
|
return this._getContextManager().with(e, t, r, ...n);
|
|
}
|
|
bind(e, t) {
|
|
return this._getContextManager().bind(e, t);
|
|
}
|
|
_getContextManager() {
|
|
return (0, a.getGlobal)(i) || c;
|
|
}
|
|
disable() {
|
|
this._getContextManager().disable();
|
|
(0, a.unregisterGlobal)(i, o.DiagAPI.instance());
|
|
}
|
|
}
|
|
t.ContextAPI = ContextAPI;
|
|
},
|
|
930: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.DiagAPI = void 0;
|
|
const n = r(56);
|
|
const a = r(912);
|
|
const o = r(957);
|
|
const i = r(172);
|
|
const c = "diag";
|
|
class DiagAPI {
|
|
constructor(){
|
|
function _logProxy(e) {
|
|
return function(...t) {
|
|
const r = (0, i.getGlobal)("diag");
|
|
if (!r) return;
|
|
return r[e](...t);
|
|
};
|
|
}
|
|
const e = this;
|
|
const setLogger = (t, r = {
|
|
logLevel: o.DiagLogLevel.INFO
|
|
})=>{
|
|
var n, c, s;
|
|
if (t === e) {
|
|
const t = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation");
|
|
e.error((n = t.stack) !== null && n !== void 0 ? n : t.message);
|
|
return false;
|
|
}
|
|
if (typeof r === "number") {
|
|
r = {
|
|
logLevel: r
|
|
};
|
|
}
|
|
const u = (0, i.getGlobal)("diag");
|
|
const l = (0, a.createLogLevelDiagLogger)((c = r.logLevel) !== null && c !== void 0 ? c : o.DiagLogLevel.INFO, t);
|
|
if (u && !r.suppressOverrideMessage) {
|
|
const e = (s = (new Error).stack) !== null && s !== void 0 ? s : "<failed to generate stacktrace>";
|
|
u.warn(`Current logger will be overwritten from ${e}`);
|
|
l.warn(`Current logger will overwrite one already registered from ${e}`);
|
|
}
|
|
return (0, i.registerGlobal)("diag", l, e, true);
|
|
};
|
|
e.setLogger = setLogger;
|
|
e.disable = ()=>{
|
|
(0, i.unregisterGlobal)(c, e);
|
|
};
|
|
e.createComponentLogger = (e)=>new n.DiagComponentLogger(e);
|
|
e.verbose = _logProxy("verbose");
|
|
e.debug = _logProxy("debug");
|
|
e.info = _logProxy("info");
|
|
e.warn = _logProxy("warn");
|
|
e.error = _logProxy("error");
|
|
}
|
|
static instance() {
|
|
if (!this._instance) {
|
|
this._instance = new DiagAPI;
|
|
}
|
|
return this._instance;
|
|
}
|
|
}
|
|
t.DiagAPI = DiagAPI;
|
|
},
|
|
653: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.MetricsAPI = void 0;
|
|
const n = r(660);
|
|
const a = r(172);
|
|
const o = r(930);
|
|
const i = "metrics";
|
|
class MetricsAPI {
|
|
constructor(){}
|
|
static getInstance() {
|
|
if (!this._instance) {
|
|
this._instance = new MetricsAPI;
|
|
}
|
|
return this._instance;
|
|
}
|
|
setGlobalMeterProvider(e) {
|
|
return (0, a.registerGlobal)(i, e, o.DiagAPI.instance());
|
|
}
|
|
getMeterProvider() {
|
|
return (0, a.getGlobal)(i) || n.NOOP_METER_PROVIDER;
|
|
}
|
|
getMeter(e, t, r) {
|
|
return this.getMeterProvider().getMeter(e, t, r);
|
|
}
|
|
disable() {
|
|
(0, a.unregisterGlobal)(i, o.DiagAPI.instance());
|
|
}
|
|
}
|
|
t.MetricsAPI = MetricsAPI;
|
|
},
|
|
181: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.PropagationAPI = void 0;
|
|
const n = r(172);
|
|
const a = r(874);
|
|
const o = r(194);
|
|
const i = r(277);
|
|
const c = r(369);
|
|
const s = r(930);
|
|
const u = "propagation";
|
|
const l = new a.NoopTextMapPropagator;
|
|
class PropagationAPI {
|
|
constructor(){
|
|
this.createBaggage = c.createBaggage;
|
|
this.getBaggage = i.getBaggage;
|
|
this.getActiveBaggage = i.getActiveBaggage;
|
|
this.setBaggage = i.setBaggage;
|
|
this.deleteBaggage = i.deleteBaggage;
|
|
}
|
|
static getInstance() {
|
|
if (!this._instance) {
|
|
this._instance = new PropagationAPI;
|
|
}
|
|
return this._instance;
|
|
}
|
|
setGlobalPropagator(e) {
|
|
return (0, n.registerGlobal)(u, e, s.DiagAPI.instance());
|
|
}
|
|
inject(e, t, r = o.defaultTextMapSetter) {
|
|
return this._getGlobalPropagator().inject(e, t, r);
|
|
}
|
|
extract(e, t, r = o.defaultTextMapGetter) {
|
|
return this._getGlobalPropagator().extract(e, t, r);
|
|
}
|
|
fields() {
|
|
return this._getGlobalPropagator().fields();
|
|
}
|
|
disable() {
|
|
(0, n.unregisterGlobal)(u, s.DiagAPI.instance());
|
|
}
|
|
_getGlobalPropagator() {
|
|
return (0, n.getGlobal)(u) || l;
|
|
}
|
|
}
|
|
t.PropagationAPI = PropagationAPI;
|
|
},
|
|
997: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.TraceAPI = void 0;
|
|
const n = r(172);
|
|
const a = r(846);
|
|
const o = r(139);
|
|
const i = r(607);
|
|
const c = r(930);
|
|
const s = "trace";
|
|
class TraceAPI {
|
|
constructor(){
|
|
this._proxyTracerProvider = new a.ProxyTracerProvider;
|
|
this.wrapSpanContext = o.wrapSpanContext;
|
|
this.isSpanContextValid = o.isSpanContextValid;
|
|
this.deleteSpan = i.deleteSpan;
|
|
this.getSpan = i.getSpan;
|
|
this.getActiveSpan = i.getActiveSpan;
|
|
this.getSpanContext = i.getSpanContext;
|
|
this.setSpan = i.setSpan;
|
|
this.setSpanContext = i.setSpanContext;
|
|
}
|
|
static getInstance() {
|
|
if (!this._instance) {
|
|
this._instance = new TraceAPI;
|
|
}
|
|
return this._instance;
|
|
}
|
|
setGlobalTracerProvider(e) {
|
|
const t = (0, n.registerGlobal)(s, this._proxyTracerProvider, c.DiagAPI.instance());
|
|
if (t) {
|
|
this._proxyTracerProvider.setDelegate(e);
|
|
}
|
|
return t;
|
|
}
|
|
getTracerProvider() {
|
|
return (0, n.getGlobal)(s) || this._proxyTracerProvider;
|
|
}
|
|
getTracer(e, t) {
|
|
return this.getTracerProvider().getTracer(e, t);
|
|
}
|
|
disable() {
|
|
(0, n.unregisterGlobal)(s, c.DiagAPI.instance());
|
|
this._proxyTracerProvider = new a.ProxyTracerProvider;
|
|
}
|
|
}
|
|
t.TraceAPI = TraceAPI;
|
|
},
|
|
277: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.deleteBaggage = t.setBaggage = t.getActiveBaggage = t.getBaggage = void 0;
|
|
const n = r(491);
|
|
const a = r(780);
|
|
const o = (0, a.createContextKey)("OpenTelemetry Baggage Key");
|
|
function getBaggage(e) {
|
|
return e.getValue(o) || undefined;
|
|
}
|
|
t.getBaggage = getBaggage;
|
|
function getActiveBaggage() {
|
|
return getBaggage(n.ContextAPI.getInstance().active());
|
|
}
|
|
t.getActiveBaggage = getActiveBaggage;
|
|
function setBaggage(e, t) {
|
|
return e.setValue(o, t);
|
|
}
|
|
t.setBaggage = setBaggage;
|
|
function deleteBaggage(e) {
|
|
return e.deleteValue(o);
|
|
}
|
|
t.deleteBaggage = deleteBaggage;
|
|
},
|
|
993: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.BaggageImpl = void 0;
|
|
class BaggageImpl {
|
|
constructor(e){
|
|
this._entries = e ? new Map(e) : new Map;
|
|
}
|
|
getEntry(e) {
|
|
const t = this._entries.get(e);
|
|
if (!t) {
|
|
return undefined;
|
|
}
|
|
return Object.assign({}, t);
|
|
}
|
|
getAllEntries() {
|
|
return Array.from(this._entries.entries()).map(([e, t])=>[
|
|
e,
|
|
t
|
|
]);
|
|
}
|
|
setEntry(e, t) {
|
|
const r = new BaggageImpl(this._entries);
|
|
r._entries.set(e, t);
|
|
return r;
|
|
}
|
|
removeEntry(e) {
|
|
const t = new BaggageImpl(this._entries);
|
|
t._entries.delete(e);
|
|
return t;
|
|
}
|
|
removeEntries(...e) {
|
|
const t = new BaggageImpl(this._entries);
|
|
for (const r of e){
|
|
t._entries.delete(r);
|
|
}
|
|
return t;
|
|
}
|
|
clear() {
|
|
return new BaggageImpl;
|
|
}
|
|
}
|
|
t.BaggageImpl = BaggageImpl;
|
|
},
|
|
830: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.baggageEntryMetadataSymbol = void 0;
|
|
t.baggageEntryMetadataSymbol = Symbol("BaggageEntryMetadata");
|
|
},
|
|
369: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.baggageEntryMetadataFromString = t.createBaggage = void 0;
|
|
const n = r(930);
|
|
const a = r(993);
|
|
const o = r(830);
|
|
const i = n.DiagAPI.instance();
|
|
function createBaggage(e = {}) {
|
|
return new a.BaggageImpl(new Map(Object.entries(e)));
|
|
}
|
|
t.createBaggage = createBaggage;
|
|
function baggageEntryMetadataFromString(e) {
|
|
if (typeof e !== "string") {
|
|
i.error(`Cannot create baggage metadata from unknown type: ${typeof e}`);
|
|
e = "";
|
|
}
|
|
return {
|
|
__TYPE__: o.baggageEntryMetadataSymbol,
|
|
toString () {
|
|
return e;
|
|
}
|
|
};
|
|
}
|
|
t.baggageEntryMetadataFromString = baggageEntryMetadataFromString;
|
|
},
|
|
67: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.context = void 0;
|
|
const n = r(491);
|
|
t.context = n.ContextAPI.getInstance();
|
|
},
|
|
223: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.NoopContextManager = void 0;
|
|
const n = r(780);
|
|
class NoopContextManager {
|
|
active() {
|
|
return n.ROOT_CONTEXT;
|
|
}
|
|
with(e, t, r, ...n) {
|
|
return t.call(r, ...n);
|
|
}
|
|
bind(e, t) {
|
|
return t;
|
|
}
|
|
enable() {
|
|
return this;
|
|
}
|
|
disable() {
|
|
return this;
|
|
}
|
|
}
|
|
t.NoopContextManager = NoopContextManager;
|
|
},
|
|
780: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.ROOT_CONTEXT = t.createContextKey = void 0;
|
|
function createContextKey(e) {
|
|
return Symbol.for(e);
|
|
}
|
|
t.createContextKey = createContextKey;
|
|
class BaseContext {
|
|
constructor(e){
|
|
const t = this;
|
|
t._currentContext = e ? new Map(e) : new Map;
|
|
t.getValue = (e)=>t._currentContext.get(e);
|
|
t.setValue = (e, r)=>{
|
|
const n = new BaseContext(t._currentContext);
|
|
n._currentContext.set(e, r);
|
|
return n;
|
|
};
|
|
t.deleteValue = (e)=>{
|
|
const r = new BaseContext(t._currentContext);
|
|
r._currentContext.delete(e);
|
|
return r;
|
|
};
|
|
}
|
|
}
|
|
t.ROOT_CONTEXT = new BaseContext;
|
|
},
|
|
506: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.diag = void 0;
|
|
const n = r(930);
|
|
t.diag = n.DiagAPI.instance();
|
|
},
|
|
56: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.DiagComponentLogger = void 0;
|
|
const n = r(172);
|
|
class DiagComponentLogger {
|
|
constructor(e){
|
|
this._namespace = e.namespace || "DiagComponentLogger";
|
|
}
|
|
debug(...e) {
|
|
return logProxy("debug", this._namespace, e);
|
|
}
|
|
error(...e) {
|
|
return logProxy("error", this._namespace, e);
|
|
}
|
|
info(...e) {
|
|
return logProxy("info", this._namespace, e);
|
|
}
|
|
warn(...e) {
|
|
return logProxy("warn", this._namespace, e);
|
|
}
|
|
verbose(...e) {
|
|
return logProxy("verbose", this._namespace, e);
|
|
}
|
|
}
|
|
t.DiagComponentLogger = DiagComponentLogger;
|
|
function logProxy(e, t, r) {
|
|
const a = (0, n.getGlobal)("diag");
|
|
if (!a) {
|
|
return;
|
|
}
|
|
r.unshift(t);
|
|
return a[e](...r);
|
|
}
|
|
},
|
|
972: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.DiagConsoleLogger = void 0;
|
|
const r = [
|
|
{
|
|
n: "error",
|
|
c: "error"
|
|
},
|
|
{
|
|
n: "warn",
|
|
c: "warn"
|
|
},
|
|
{
|
|
n: "info",
|
|
c: "info"
|
|
},
|
|
{
|
|
n: "debug",
|
|
c: "debug"
|
|
},
|
|
{
|
|
n: "verbose",
|
|
c: "trace"
|
|
}
|
|
];
|
|
class DiagConsoleLogger {
|
|
constructor(){
|
|
function _consoleFunc(e) {
|
|
return function(...t) {
|
|
if (console) {
|
|
let r = console[e];
|
|
if (typeof r !== "function") {
|
|
r = console.log;
|
|
}
|
|
if (typeof r === "function") {
|
|
return r.apply(console, t);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
for(let e = 0; e < r.length; e++){
|
|
this[r[e].n] = _consoleFunc(r[e].c);
|
|
}
|
|
}
|
|
}
|
|
t.DiagConsoleLogger = DiagConsoleLogger;
|
|
},
|
|
912: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.createLogLevelDiagLogger = void 0;
|
|
const n = r(957);
|
|
function createLogLevelDiagLogger(e, t) {
|
|
if (e < n.DiagLogLevel.NONE) {
|
|
e = n.DiagLogLevel.NONE;
|
|
} else if (e > n.DiagLogLevel.ALL) {
|
|
e = n.DiagLogLevel.ALL;
|
|
}
|
|
t = t || {};
|
|
function _filterFunc(r, n) {
|
|
const a = t[r];
|
|
if (typeof a === "function" && e >= n) {
|
|
return a.bind(t);
|
|
}
|
|
return function() {};
|
|
}
|
|
return {
|
|
error: _filterFunc("error", n.DiagLogLevel.ERROR),
|
|
warn: _filterFunc("warn", n.DiagLogLevel.WARN),
|
|
info: _filterFunc("info", n.DiagLogLevel.INFO),
|
|
debug: _filterFunc("debug", n.DiagLogLevel.DEBUG),
|
|
verbose: _filterFunc("verbose", n.DiagLogLevel.VERBOSE)
|
|
};
|
|
}
|
|
t.createLogLevelDiagLogger = createLogLevelDiagLogger;
|
|
},
|
|
957: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.DiagLogLevel = void 0;
|
|
var r;
|
|
(function(e) {
|
|
e[e["NONE"] = 0] = "NONE";
|
|
e[e["ERROR"] = 30] = "ERROR";
|
|
e[e["WARN"] = 50] = "WARN";
|
|
e[e["INFO"] = 60] = "INFO";
|
|
e[e["DEBUG"] = 70] = "DEBUG";
|
|
e[e["VERBOSE"] = 80] = "VERBOSE";
|
|
e[e["ALL"] = 9999] = "ALL";
|
|
})(r = t.DiagLogLevel || (t.DiagLogLevel = {}));
|
|
},
|
|
172: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.unregisterGlobal = t.getGlobal = t.registerGlobal = void 0;
|
|
const n = r(200);
|
|
const a = r(521);
|
|
const o = r(130);
|
|
const i = a.VERSION.split(".")[0];
|
|
const c = Symbol.for(`opentelemetry.js.api.${i}`);
|
|
const s = n._globalThis;
|
|
function registerGlobal(e, t, r, n = false) {
|
|
var o;
|
|
const i = s[c] = (o = s[c]) !== null && o !== void 0 ? o : {
|
|
version: a.VERSION
|
|
};
|
|
if (!n && i[e]) {
|
|
const t = new Error(`@opentelemetry/api: Attempted duplicate registration of API: ${e}`);
|
|
r.error(t.stack || t.message);
|
|
return false;
|
|
}
|
|
if (i.version !== a.VERSION) {
|
|
const t = new Error(`@opentelemetry/api: Registration of version v${i.version} for ${e} does not match previously registered API v${a.VERSION}`);
|
|
r.error(t.stack || t.message);
|
|
return false;
|
|
}
|
|
i[e] = t;
|
|
r.debug(`@opentelemetry/api: Registered a global for ${e} v${a.VERSION}.`);
|
|
return true;
|
|
}
|
|
t.registerGlobal = registerGlobal;
|
|
function getGlobal(e) {
|
|
var t, r;
|
|
const n = (t = s[c]) === null || t === void 0 ? void 0 : t.version;
|
|
if (!n || !(0, o.isCompatible)(n)) {
|
|
return;
|
|
}
|
|
return (r = s[c]) === null || r === void 0 ? void 0 : r[e];
|
|
}
|
|
t.getGlobal = getGlobal;
|
|
function unregisterGlobal(e, t) {
|
|
t.debug(`@opentelemetry/api: Unregistering a global for ${e} v${a.VERSION}.`);
|
|
const r = s[c];
|
|
if (r) {
|
|
delete r[e];
|
|
}
|
|
}
|
|
t.unregisterGlobal = unregisterGlobal;
|
|
},
|
|
130: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.isCompatible = t._makeCompatibilityCheck = void 0;
|
|
const n = r(521);
|
|
const a = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;
|
|
function _makeCompatibilityCheck(e) {
|
|
const t = new Set([
|
|
e
|
|
]);
|
|
const r = new Set;
|
|
const n = e.match(a);
|
|
if (!n) {
|
|
return ()=>false;
|
|
}
|
|
const o = {
|
|
major: +n[1],
|
|
minor: +n[2],
|
|
patch: +n[3],
|
|
prerelease: n[4]
|
|
};
|
|
if (o.prerelease != null) {
|
|
return function isExactmatch(t) {
|
|
return t === e;
|
|
};
|
|
}
|
|
function _reject(e) {
|
|
r.add(e);
|
|
return false;
|
|
}
|
|
function _accept(e) {
|
|
t.add(e);
|
|
return true;
|
|
}
|
|
return function isCompatible(e) {
|
|
if (t.has(e)) {
|
|
return true;
|
|
}
|
|
if (r.has(e)) {
|
|
return false;
|
|
}
|
|
const n = e.match(a);
|
|
if (!n) {
|
|
return _reject(e);
|
|
}
|
|
const i = {
|
|
major: +n[1],
|
|
minor: +n[2],
|
|
patch: +n[3],
|
|
prerelease: n[4]
|
|
};
|
|
if (i.prerelease != null) {
|
|
return _reject(e);
|
|
}
|
|
if (o.major !== i.major) {
|
|
return _reject(e);
|
|
}
|
|
if (o.major === 0) {
|
|
if (o.minor === i.minor && o.patch <= i.patch) {
|
|
return _accept(e);
|
|
}
|
|
return _reject(e);
|
|
}
|
|
if (o.minor <= i.minor) {
|
|
return _accept(e);
|
|
}
|
|
return _reject(e);
|
|
};
|
|
}
|
|
t._makeCompatibilityCheck = _makeCompatibilityCheck;
|
|
t.isCompatible = _makeCompatibilityCheck(n.VERSION);
|
|
},
|
|
886: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.metrics = void 0;
|
|
const n = r(653);
|
|
t.metrics = n.MetricsAPI.getInstance();
|
|
},
|
|
901: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.ValueType = void 0;
|
|
var r;
|
|
(function(e) {
|
|
e[e["INT"] = 0] = "INT";
|
|
e[e["DOUBLE"] = 1] = "DOUBLE";
|
|
})(r = t.ValueType || (t.ValueType = {}));
|
|
},
|
|
102: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.createNoopMeter = t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = t.NOOP_OBSERVABLE_GAUGE_METRIC = t.NOOP_OBSERVABLE_COUNTER_METRIC = t.NOOP_UP_DOWN_COUNTER_METRIC = t.NOOP_HISTOGRAM_METRIC = t.NOOP_COUNTER_METRIC = t.NOOP_METER = t.NoopObservableUpDownCounterMetric = t.NoopObservableGaugeMetric = t.NoopObservableCounterMetric = t.NoopObservableMetric = t.NoopHistogramMetric = t.NoopUpDownCounterMetric = t.NoopCounterMetric = t.NoopMetric = t.NoopMeter = void 0;
|
|
class NoopMeter {
|
|
constructor(){}
|
|
createHistogram(e, r) {
|
|
return t.NOOP_HISTOGRAM_METRIC;
|
|
}
|
|
createCounter(e, r) {
|
|
return t.NOOP_COUNTER_METRIC;
|
|
}
|
|
createUpDownCounter(e, r) {
|
|
return t.NOOP_UP_DOWN_COUNTER_METRIC;
|
|
}
|
|
createObservableGauge(e, r) {
|
|
return t.NOOP_OBSERVABLE_GAUGE_METRIC;
|
|
}
|
|
createObservableCounter(e, r) {
|
|
return t.NOOP_OBSERVABLE_COUNTER_METRIC;
|
|
}
|
|
createObservableUpDownCounter(e, r) {
|
|
return t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC;
|
|
}
|
|
addBatchObservableCallback(e, t) {}
|
|
removeBatchObservableCallback(e) {}
|
|
}
|
|
t.NoopMeter = NoopMeter;
|
|
class NoopMetric {
|
|
}
|
|
t.NoopMetric = NoopMetric;
|
|
class NoopCounterMetric extends NoopMetric {
|
|
add(e, t) {}
|
|
}
|
|
t.NoopCounterMetric = NoopCounterMetric;
|
|
class NoopUpDownCounterMetric extends NoopMetric {
|
|
add(e, t) {}
|
|
}
|
|
t.NoopUpDownCounterMetric = NoopUpDownCounterMetric;
|
|
class NoopHistogramMetric extends NoopMetric {
|
|
record(e, t) {}
|
|
}
|
|
t.NoopHistogramMetric = NoopHistogramMetric;
|
|
class NoopObservableMetric {
|
|
addCallback(e) {}
|
|
removeCallback(e) {}
|
|
}
|
|
t.NoopObservableMetric = NoopObservableMetric;
|
|
class NoopObservableCounterMetric extends NoopObservableMetric {
|
|
}
|
|
t.NoopObservableCounterMetric = NoopObservableCounterMetric;
|
|
class NoopObservableGaugeMetric extends NoopObservableMetric {
|
|
}
|
|
t.NoopObservableGaugeMetric = NoopObservableGaugeMetric;
|
|
class NoopObservableUpDownCounterMetric extends NoopObservableMetric {
|
|
}
|
|
t.NoopObservableUpDownCounterMetric = NoopObservableUpDownCounterMetric;
|
|
t.NOOP_METER = new NoopMeter;
|
|
t.NOOP_COUNTER_METRIC = new NoopCounterMetric;
|
|
t.NOOP_HISTOGRAM_METRIC = new NoopHistogramMetric;
|
|
t.NOOP_UP_DOWN_COUNTER_METRIC = new NoopUpDownCounterMetric;
|
|
t.NOOP_OBSERVABLE_COUNTER_METRIC = new NoopObservableCounterMetric;
|
|
t.NOOP_OBSERVABLE_GAUGE_METRIC = new NoopObservableGaugeMetric;
|
|
t.NOOP_OBSERVABLE_UP_DOWN_COUNTER_METRIC = new NoopObservableUpDownCounterMetric;
|
|
function createNoopMeter() {
|
|
return t.NOOP_METER;
|
|
}
|
|
t.createNoopMeter = createNoopMeter;
|
|
},
|
|
660: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.NOOP_METER_PROVIDER = t.NoopMeterProvider = void 0;
|
|
const n = r(102);
|
|
class NoopMeterProvider {
|
|
getMeter(e, t, r) {
|
|
return n.NOOP_METER;
|
|
}
|
|
}
|
|
t.NoopMeterProvider = NoopMeterProvider;
|
|
t.NOOP_METER_PROVIDER = new NoopMeterProvider;
|
|
},
|
|
200: function(e, t, r) {
|
|
var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) {
|
|
if (n === undefined) n = r;
|
|
Object.defineProperty(e, n, {
|
|
enumerable: true,
|
|
get: function() {
|
|
return t[r];
|
|
}
|
|
});
|
|
} : function(e, t, r, n) {
|
|
if (n === undefined) n = r;
|
|
e[n] = t[r];
|
|
});
|
|
var a = this && this.__exportStar || function(e, t) {
|
|
for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r);
|
|
};
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
a(r(46), t);
|
|
},
|
|
651: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t._globalThis = void 0;
|
|
t._globalThis = typeof globalThis === "object" ? globalThis : /*TURBOPACK member replacement*/ __turbopack_context__.g;
|
|
},
|
|
46: function(e, t, r) {
|
|
var n = this && this.__createBinding || (Object.create ? function(e, t, r, n) {
|
|
if (n === undefined) n = r;
|
|
Object.defineProperty(e, n, {
|
|
enumerable: true,
|
|
get: function() {
|
|
return t[r];
|
|
}
|
|
});
|
|
} : function(e, t, r, n) {
|
|
if (n === undefined) n = r;
|
|
e[n] = t[r];
|
|
});
|
|
var a = this && this.__exportStar || function(e, t) {
|
|
for(var r in e)if (r !== "default" && !Object.prototype.hasOwnProperty.call(t, r)) n(t, e, r);
|
|
};
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
a(r(651), t);
|
|
},
|
|
939: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.propagation = void 0;
|
|
const n = r(181);
|
|
t.propagation = n.PropagationAPI.getInstance();
|
|
},
|
|
874: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.NoopTextMapPropagator = void 0;
|
|
class NoopTextMapPropagator {
|
|
inject(e, t) {}
|
|
extract(e, t) {
|
|
return e;
|
|
}
|
|
fields() {
|
|
return [];
|
|
}
|
|
}
|
|
t.NoopTextMapPropagator = NoopTextMapPropagator;
|
|
},
|
|
194: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.defaultTextMapSetter = t.defaultTextMapGetter = void 0;
|
|
t.defaultTextMapGetter = {
|
|
get (e, t) {
|
|
if (e == null) {
|
|
return undefined;
|
|
}
|
|
return e[t];
|
|
},
|
|
keys (e) {
|
|
if (e == null) {
|
|
return [];
|
|
}
|
|
return Object.keys(e);
|
|
}
|
|
};
|
|
t.defaultTextMapSetter = {
|
|
set (e, t, r) {
|
|
if (e == null) {
|
|
return;
|
|
}
|
|
e[t] = r;
|
|
}
|
|
};
|
|
},
|
|
845: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.trace = void 0;
|
|
const n = r(997);
|
|
t.trace = n.TraceAPI.getInstance();
|
|
},
|
|
403: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.NonRecordingSpan = void 0;
|
|
const n = r(476);
|
|
class NonRecordingSpan {
|
|
constructor(e = n.INVALID_SPAN_CONTEXT){
|
|
this._spanContext = e;
|
|
}
|
|
spanContext() {
|
|
return this._spanContext;
|
|
}
|
|
setAttribute(e, t) {
|
|
return this;
|
|
}
|
|
setAttributes(e) {
|
|
return this;
|
|
}
|
|
addEvent(e, t) {
|
|
return this;
|
|
}
|
|
setStatus(e) {
|
|
return this;
|
|
}
|
|
updateName(e) {
|
|
return this;
|
|
}
|
|
end(e) {}
|
|
isRecording() {
|
|
return false;
|
|
}
|
|
recordException(e, t) {}
|
|
}
|
|
t.NonRecordingSpan = NonRecordingSpan;
|
|
},
|
|
614: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.NoopTracer = void 0;
|
|
const n = r(491);
|
|
const a = r(607);
|
|
const o = r(403);
|
|
const i = r(139);
|
|
const c = n.ContextAPI.getInstance();
|
|
class NoopTracer {
|
|
startSpan(e, t, r = c.active()) {
|
|
const n = Boolean(t === null || t === void 0 ? void 0 : t.root);
|
|
if (n) {
|
|
return new o.NonRecordingSpan;
|
|
}
|
|
const s = r && (0, a.getSpanContext)(r);
|
|
if (isSpanContext(s) && (0, i.isSpanContextValid)(s)) {
|
|
return new o.NonRecordingSpan(s);
|
|
} else {
|
|
return new o.NonRecordingSpan;
|
|
}
|
|
}
|
|
startActiveSpan(e, t, r, n) {
|
|
let o;
|
|
let i;
|
|
let s;
|
|
if (arguments.length < 2) {
|
|
return;
|
|
} else if (arguments.length === 2) {
|
|
s = t;
|
|
} else if (arguments.length === 3) {
|
|
o = t;
|
|
s = r;
|
|
} else {
|
|
o = t;
|
|
i = r;
|
|
s = n;
|
|
}
|
|
const u = i !== null && i !== void 0 ? i : c.active();
|
|
const l = this.startSpan(e, o, u);
|
|
const g = (0, a.setSpan)(u, l);
|
|
return c.with(g, s, undefined, l);
|
|
}
|
|
}
|
|
t.NoopTracer = NoopTracer;
|
|
function isSpanContext(e) {
|
|
return typeof e === "object" && typeof e["spanId"] === "string" && typeof e["traceId"] === "string" && typeof e["traceFlags"] === "number";
|
|
}
|
|
},
|
|
124: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.NoopTracerProvider = void 0;
|
|
const n = r(614);
|
|
class NoopTracerProvider {
|
|
getTracer(e, t, r) {
|
|
return new n.NoopTracer;
|
|
}
|
|
}
|
|
t.NoopTracerProvider = NoopTracerProvider;
|
|
},
|
|
125: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.ProxyTracer = void 0;
|
|
const n = r(614);
|
|
const a = new n.NoopTracer;
|
|
class ProxyTracer {
|
|
constructor(e, t, r, n){
|
|
this._provider = e;
|
|
this.name = t;
|
|
this.version = r;
|
|
this.options = n;
|
|
}
|
|
startSpan(e, t, r) {
|
|
return this._getTracer().startSpan(e, t, r);
|
|
}
|
|
startActiveSpan(e, t, r, n) {
|
|
const a = this._getTracer();
|
|
return Reflect.apply(a.startActiveSpan, a, arguments);
|
|
}
|
|
_getTracer() {
|
|
if (this._delegate) {
|
|
return this._delegate;
|
|
}
|
|
const e = this._provider.getDelegateTracer(this.name, this.version, this.options);
|
|
if (!e) {
|
|
return a;
|
|
}
|
|
this._delegate = e;
|
|
return this._delegate;
|
|
}
|
|
}
|
|
t.ProxyTracer = ProxyTracer;
|
|
},
|
|
846: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.ProxyTracerProvider = void 0;
|
|
const n = r(125);
|
|
const a = r(124);
|
|
const o = new a.NoopTracerProvider;
|
|
class ProxyTracerProvider {
|
|
getTracer(e, t, r) {
|
|
var a;
|
|
return (a = this.getDelegateTracer(e, t, r)) !== null && a !== void 0 ? a : new n.ProxyTracer(this, e, t, r);
|
|
}
|
|
getDelegate() {
|
|
var e;
|
|
return (e = this._delegate) !== null && e !== void 0 ? e : o;
|
|
}
|
|
setDelegate(e) {
|
|
this._delegate = e;
|
|
}
|
|
getDelegateTracer(e, t, r) {
|
|
var n;
|
|
return (n = this._delegate) === null || n === void 0 ? void 0 : n.getTracer(e, t, r);
|
|
}
|
|
}
|
|
t.ProxyTracerProvider = ProxyTracerProvider;
|
|
},
|
|
996: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.SamplingDecision = void 0;
|
|
var r;
|
|
(function(e) {
|
|
e[e["NOT_RECORD"] = 0] = "NOT_RECORD";
|
|
e[e["RECORD"] = 1] = "RECORD";
|
|
e[e["RECORD_AND_SAMPLED"] = 2] = "RECORD_AND_SAMPLED";
|
|
})(r = t.SamplingDecision || (t.SamplingDecision = {}));
|
|
},
|
|
607: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.getSpanContext = t.setSpanContext = t.deleteSpan = t.setSpan = t.getActiveSpan = t.getSpan = void 0;
|
|
const n = r(780);
|
|
const a = r(403);
|
|
const o = r(491);
|
|
const i = (0, n.createContextKey)("OpenTelemetry Context Key SPAN");
|
|
function getSpan(e) {
|
|
return e.getValue(i) || undefined;
|
|
}
|
|
t.getSpan = getSpan;
|
|
function getActiveSpan() {
|
|
return getSpan(o.ContextAPI.getInstance().active());
|
|
}
|
|
t.getActiveSpan = getActiveSpan;
|
|
function setSpan(e, t) {
|
|
return e.setValue(i, t);
|
|
}
|
|
t.setSpan = setSpan;
|
|
function deleteSpan(e) {
|
|
return e.deleteValue(i);
|
|
}
|
|
t.deleteSpan = deleteSpan;
|
|
function setSpanContext(e, t) {
|
|
return setSpan(e, new a.NonRecordingSpan(t));
|
|
}
|
|
t.setSpanContext = setSpanContext;
|
|
function getSpanContext(e) {
|
|
var t;
|
|
return (t = getSpan(e)) === null || t === void 0 ? void 0 : t.spanContext();
|
|
}
|
|
t.getSpanContext = getSpanContext;
|
|
},
|
|
325: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.TraceStateImpl = void 0;
|
|
const n = r(564);
|
|
const a = 32;
|
|
const o = 512;
|
|
const i = ",";
|
|
const c = "=";
|
|
class TraceStateImpl {
|
|
constructor(e){
|
|
this._internalState = new Map;
|
|
if (e) this._parse(e);
|
|
}
|
|
set(e, t) {
|
|
const r = this._clone();
|
|
if (r._internalState.has(e)) {
|
|
r._internalState.delete(e);
|
|
}
|
|
r._internalState.set(e, t);
|
|
return r;
|
|
}
|
|
unset(e) {
|
|
const t = this._clone();
|
|
t._internalState.delete(e);
|
|
return t;
|
|
}
|
|
get(e) {
|
|
return this._internalState.get(e);
|
|
}
|
|
serialize() {
|
|
return this._keys().reduce((e, t)=>{
|
|
e.push(t + c + this.get(t));
|
|
return e;
|
|
}, []).join(i);
|
|
}
|
|
_parse(e) {
|
|
if (e.length > o) return;
|
|
this._internalState = e.split(i).reverse().reduce((e, t)=>{
|
|
const r = t.trim();
|
|
const a = r.indexOf(c);
|
|
if (a !== -1) {
|
|
const o = r.slice(0, a);
|
|
const i = r.slice(a + 1, t.length);
|
|
if ((0, n.validateKey)(o) && (0, n.validateValue)(i)) {
|
|
e.set(o, i);
|
|
} else {}
|
|
}
|
|
return e;
|
|
}, new Map);
|
|
if (this._internalState.size > a) {
|
|
this._internalState = new Map(Array.from(this._internalState.entries()).reverse().slice(0, a));
|
|
}
|
|
}
|
|
_keys() {
|
|
return Array.from(this._internalState.keys()).reverse();
|
|
}
|
|
_clone() {
|
|
const e = new TraceStateImpl;
|
|
e._internalState = new Map(this._internalState);
|
|
return e;
|
|
}
|
|
}
|
|
t.TraceStateImpl = TraceStateImpl;
|
|
},
|
|
564: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.validateValue = t.validateKey = void 0;
|
|
const r = "[_0-9a-z-*/]";
|
|
const n = `[a-z]${r}{0,255}`;
|
|
const a = `[a-z0-9]${r}{0,240}@[a-z]${r}{0,13}`;
|
|
const o = new RegExp(`^(?:${n}|${a})$`);
|
|
const i = /^[ -~]{0,255}[!-~]$/;
|
|
const c = /,|=/;
|
|
function validateKey(e) {
|
|
return o.test(e);
|
|
}
|
|
t.validateKey = validateKey;
|
|
function validateValue(e) {
|
|
return i.test(e) && !c.test(e);
|
|
}
|
|
t.validateValue = validateValue;
|
|
},
|
|
98: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.createTraceState = void 0;
|
|
const n = r(325);
|
|
function createTraceState(e) {
|
|
return new n.TraceStateImpl(e);
|
|
}
|
|
t.createTraceState = createTraceState;
|
|
},
|
|
476: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.INVALID_SPAN_CONTEXT = t.INVALID_TRACEID = t.INVALID_SPANID = void 0;
|
|
const n = r(475);
|
|
t.INVALID_SPANID = "0000000000000000";
|
|
t.INVALID_TRACEID = "00000000000000000000000000000000";
|
|
t.INVALID_SPAN_CONTEXT = {
|
|
traceId: t.INVALID_TRACEID,
|
|
spanId: t.INVALID_SPANID,
|
|
traceFlags: n.TraceFlags.NONE
|
|
};
|
|
},
|
|
357: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.SpanKind = void 0;
|
|
var r;
|
|
(function(e) {
|
|
e[e["INTERNAL"] = 0] = "INTERNAL";
|
|
e[e["SERVER"] = 1] = "SERVER";
|
|
e[e["CLIENT"] = 2] = "CLIENT";
|
|
e[e["PRODUCER"] = 3] = "PRODUCER";
|
|
e[e["CONSUMER"] = 4] = "CONSUMER";
|
|
})(r = t.SpanKind || (t.SpanKind = {}));
|
|
},
|
|
139: (e, t, r)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.wrapSpanContext = t.isSpanContextValid = t.isValidSpanId = t.isValidTraceId = void 0;
|
|
const n = r(476);
|
|
const a = r(403);
|
|
const o = /^([0-9a-f]{32})$/i;
|
|
const i = /^[0-9a-f]{16}$/i;
|
|
function isValidTraceId(e) {
|
|
return o.test(e) && e !== n.INVALID_TRACEID;
|
|
}
|
|
t.isValidTraceId = isValidTraceId;
|
|
function isValidSpanId(e) {
|
|
return i.test(e) && e !== n.INVALID_SPANID;
|
|
}
|
|
t.isValidSpanId = isValidSpanId;
|
|
function isSpanContextValid(e) {
|
|
return isValidTraceId(e.traceId) && isValidSpanId(e.spanId);
|
|
}
|
|
t.isSpanContextValid = isSpanContextValid;
|
|
function wrapSpanContext(e) {
|
|
return new a.NonRecordingSpan(e);
|
|
}
|
|
t.wrapSpanContext = wrapSpanContext;
|
|
},
|
|
847: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.SpanStatusCode = void 0;
|
|
var r;
|
|
(function(e) {
|
|
e[e["UNSET"] = 0] = "UNSET";
|
|
e[e["OK"] = 1] = "OK";
|
|
e[e["ERROR"] = 2] = "ERROR";
|
|
})(r = t.SpanStatusCode || (t.SpanStatusCode = {}));
|
|
},
|
|
475: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.TraceFlags = void 0;
|
|
var r;
|
|
(function(e) {
|
|
e[e["NONE"] = 0] = "NONE";
|
|
e[e["SAMPLED"] = 1] = "SAMPLED";
|
|
})(r = t.TraceFlags || (t.TraceFlags = {}));
|
|
},
|
|
521: (e, t)=>{
|
|
Object.defineProperty(t, "__esModule", {
|
|
value: true
|
|
});
|
|
t.VERSION = void 0;
|
|
t.VERSION = "1.6.0";
|
|
}
|
|
};
|
|
var t = {};
|
|
function __nccwpck_require__(r) {
|
|
var n = t[r];
|
|
if (n !== undefined) {
|
|
return n.exports;
|
|
}
|
|
var a = t[r] = {
|
|
exports: {}
|
|
};
|
|
var o = true;
|
|
try {
|
|
e[r].call(a.exports, a, a.exports, __nccwpck_require__);
|
|
o = false;
|
|
} finally{
|
|
if (o) delete t[r];
|
|
}
|
|
return a.exports;
|
|
}
|
|
if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/@opentelemetry/api") + "/";
|
|
var r = {};
|
|
(()=>{
|
|
var e = r;
|
|
Object.defineProperty(e, "__esModule", {
|
|
value: true
|
|
});
|
|
e.trace = e.propagation = e.metrics = e.diag = e.context = e.INVALID_SPAN_CONTEXT = e.INVALID_TRACEID = e.INVALID_SPANID = e.isValidSpanId = e.isValidTraceId = e.isSpanContextValid = e.createTraceState = e.TraceFlags = e.SpanStatusCode = e.SpanKind = e.SamplingDecision = e.ProxyTracerProvider = e.ProxyTracer = e.defaultTextMapSetter = e.defaultTextMapGetter = e.ValueType = e.createNoopMeter = e.DiagLogLevel = e.DiagConsoleLogger = e.ROOT_CONTEXT = e.createContextKey = e.baggageEntryMetadataFromString = void 0;
|
|
var t = __nccwpck_require__(369);
|
|
Object.defineProperty(e, "baggageEntryMetadataFromString", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return t.baggageEntryMetadataFromString;
|
|
}
|
|
});
|
|
var n = __nccwpck_require__(780);
|
|
Object.defineProperty(e, "createContextKey", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return n.createContextKey;
|
|
}
|
|
});
|
|
Object.defineProperty(e, "ROOT_CONTEXT", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return n.ROOT_CONTEXT;
|
|
}
|
|
});
|
|
var a = __nccwpck_require__(972);
|
|
Object.defineProperty(e, "DiagConsoleLogger", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return a.DiagConsoleLogger;
|
|
}
|
|
});
|
|
var o = __nccwpck_require__(957);
|
|
Object.defineProperty(e, "DiagLogLevel", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return o.DiagLogLevel;
|
|
}
|
|
});
|
|
var i = __nccwpck_require__(102);
|
|
Object.defineProperty(e, "createNoopMeter", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return i.createNoopMeter;
|
|
}
|
|
});
|
|
var c = __nccwpck_require__(901);
|
|
Object.defineProperty(e, "ValueType", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return c.ValueType;
|
|
}
|
|
});
|
|
var s = __nccwpck_require__(194);
|
|
Object.defineProperty(e, "defaultTextMapGetter", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return s.defaultTextMapGetter;
|
|
}
|
|
});
|
|
Object.defineProperty(e, "defaultTextMapSetter", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return s.defaultTextMapSetter;
|
|
}
|
|
});
|
|
var u = __nccwpck_require__(125);
|
|
Object.defineProperty(e, "ProxyTracer", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return u.ProxyTracer;
|
|
}
|
|
});
|
|
var l = __nccwpck_require__(846);
|
|
Object.defineProperty(e, "ProxyTracerProvider", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return l.ProxyTracerProvider;
|
|
}
|
|
});
|
|
var g = __nccwpck_require__(996);
|
|
Object.defineProperty(e, "SamplingDecision", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return g.SamplingDecision;
|
|
}
|
|
});
|
|
var p = __nccwpck_require__(357);
|
|
Object.defineProperty(e, "SpanKind", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return p.SpanKind;
|
|
}
|
|
});
|
|
var d = __nccwpck_require__(847);
|
|
Object.defineProperty(e, "SpanStatusCode", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return d.SpanStatusCode;
|
|
}
|
|
});
|
|
var _ = __nccwpck_require__(475);
|
|
Object.defineProperty(e, "TraceFlags", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return _.TraceFlags;
|
|
}
|
|
});
|
|
var f = __nccwpck_require__(98);
|
|
Object.defineProperty(e, "createTraceState", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return f.createTraceState;
|
|
}
|
|
});
|
|
var b = __nccwpck_require__(139);
|
|
Object.defineProperty(e, "isSpanContextValid", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return b.isSpanContextValid;
|
|
}
|
|
});
|
|
Object.defineProperty(e, "isValidTraceId", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return b.isValidTraceId;
|
|
}
|
|
});
|
|
Object.defineProperty(e, "isValidSpanId", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return b.isValidSpanId;
|
|
}
|
|
});
|
|
var v = __nccwpck_require__(476);
|
|
Object.defineProperty(e, "INVALID_SPANID", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return v.INVALID_SPANID;
|
|
}
|
|
});
|
|
Object.defineProperty(e, "INVALID_TRACEID", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return v.INVALID_TRACEID;
|
|
}
|
|
});
|
|
Object.defineProperty(e, "INVALID_SPAN_CONTEXT", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return v.INVALID_SPAN_CONTEXT;
|
|
}
|
|
});
|
|
const O = __nccwpck_require__(67);
|
|
Object.defineProperty(e, "context", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return O.context;
|
|
}
|
|
});
|
|
const P = __nccwpck_require__(506);
|
|
Object.defineProperty(e, "diag", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return P.diag;
|
|
}
|
|
});
|
|
const N = __nccwpck_require__(886);
|
|
Object.defineProperty(e, "metrics", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return N.metrics;
|
|
}
|
|
});
|
|
const S = __nccwpck_require__(939);
|
|
Object.defineProperty(e, "propagation", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return S.propagation;
|
|
}
|
|
});
|
|
const C = __nccwpck_require__(845);
|
|
Object.defineProperty(e, "trace", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return C.trace;
|
|
}
|
|
});
|
|
e["default"] = {
|
|
context: O.context,
|
|
diag: P.diag,
|
|
metrics: N.metrics,
|
|
propagation: S.propagation,
|
|
trace: C.trace
|
|
};
|
|
})();
|
|
module.exports = r;
|
|
})();
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/is-thenable.js [app-route] (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 [app-route] (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) {
|
|
const activeContext = context.active();
|
|
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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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);
|
|
}
|
|
}
|
|
}
|
|
const getTracer = (()=>{
|
|
const tracer = new NextTracerImpl();
|
|
return ()=>tracer;
|
|
})();
|
|
;
|
|
//# sourceMappingURL=tracer.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"ACTION_SUFFIX",
|
|
()=>ACTION_SUFFIX,
|
|
"APP_DIR_ALIAS",
|
|
()=>APP_DIR_ALIAS,
|
|
"CACHE_ONE_YEAR",
|
|
()=>CACHE_ONE_YEAR,
|
|
"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_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_QUERY_PARAM_PREFIX",
|
|
()=>NEXT_QUERY_PARAM_PREFIX,
|
|
"NEXT_RESUME_HEADER",
|
|
()=>NEXT_RESUME_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_PREFETCH_SUFFIX",
|
|
()=>RSC_PREFETCH_SUFFIX,
|
|
"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_PREFETCH_SUFFIX = '.prefetch.rsc';
|
|
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_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_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 CACHE_ONE_YEAR = 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__'
|
|
};
|
|
;
|
|
//# sourceMappingURL=constants.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
|
;
|
|
else {
|
|
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/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)");
|
|
} else //TURBOPACK unreachable
|
|
;
|
|
} else //TURBOPACK unreachable
|
|
;
|
|
}
|
|
} //# sourceMappingURL=module.compiled.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
module.exports = __turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/app-page/module.compiled.js [app-route] (ecmascript)").vendored['react-rsc'].React; //# sourceMappingURL=react.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/client/components/hooks-server-context.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"DynamicServerError",
|
|
()=>DynamicServerError,
|
|
"isDynamicServerError",
|
|
()=>isDynamicServerError
|
|
]);
|
|
const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE';
|
|
class DynamicServerError extends Error {
|
|
constructor(description){
|
|
super(`Dynamic server usage: ${description}`), this.description = description, this.digest = DYNAMIC_ERROR_CODE;
|
|
}
|
|
}
|
|
function isDynamicServerError(err) {
|
|
if (typeof err !== 'object' || err === null || !('digest' in err) || typeof err.digest !== 'string') {
|
|
return false;
|
|
}
|
|
return err.digest === DYNAMIC_ERROR_CODE;
|
|
} //# sourceMappingURL=hooks-server-context.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/client/components/static-generation-bailout.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"StaticGenBailoutError",
|
|
()=>StaticGenBailoutError,
|
|
"isStaticGenBailoutError",
|
|
()=>isStaticGenBailoutError
|
|
]);
|
|
const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT';
|
|
class StaticGenBailoutError extends Error {
|
|
constructor(...args){
|
|
super(...args), this.code = NEXT_STATIC_GEN_BAILOUT;
|
|
}
|
|
}
|
|
function isStaticGenBailoutError(error) {
|
|
if (typeof error !== 'object' || error === null || !('code' in error)) {
|
|
return false;
|
|
}
|
|
return error.code === NEXT_STATIC_GEN_BAILOUT;
|
|
} //# sourceMappingURL=static-generation-bailout.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"isHangingPromiseRejectionError",
|
|
()=>isHangingPromiseRejectionError,
|
|
"makeDevtoolsIOAwarePromise",
|
|
()=>makeDevtoolsIOAwarePromise,
|
|
"makeHangingPromise",
|
|
()=>makeHangingPromise
|
|
]);
|
|
function isHangingPromiseRejectionError(err) {
|
|
if (typeof err !== 'object' || err === null || !('digest' in err)) {
|
|
return false;
|
|
}
|
|
return err.digest === HANGING_PROMISE_REJECTION;
|
|
}
|
|
const HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION';
|
|
class HangingPromiseRejectionError extends Error {
|
|
constructor(route, expression){
|
|
super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION;
|
|
}
|
|
}
|
|
const abortListenersBySignal = new WeakMap();
|
|
function makeHangingPromise(signal, route, expression) {
|
|
if (signal.aborted) {
|
|
return Promise.reject(new HangingPromiseRejectionError(route, expression));
|
|
} else {
|
|
const hangingPromise = new Promise((_, reject)=>{
|
|
const boundRejection = reject.bind(null, new HangingPromiseRejectionError(route, expression));
|
|
let currentListeners = abortListenersBySignal.get(signal);
|
|
if (currentListeners) {
|
|
currentListeners.push(boundRejection);
|
|
} else {
|
|
const listeners = [
|
|
boundRejection
|
|
];
|
|
abortListenersBySignal.set(signal, listeners);
|
|
signal.addEventListener('abort', ()=>{
|
|
for(let i = 0; i < listeners.length; i++){
|
|
listeners[i]();
|
|
}
|
|
}, {
|
|
once: true
|
|
});
|
|
}
|
|
});
|
|
// We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so
|
|
// we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct
|
|
// your own promise out of it you'll need to ensure you handle the error when it rejects.
|
|
hangingPromise.catch(ignoreReject);
|
|
return hangingPromise;
|
|
}
|
|
}
|
|
function ignoreReject() {}
|
|
function makeDevtoolsIOAwarePromise(underlying, requestStore, stage) {
|
|
if (requestStore.stagedRendering) {
|
|
// We resolve each stage in a timeout, so React DevTools will pick this up as IO.
|
|
return requestStore.stagedRendering.delayUntilStage(stage, undefined, underlying);
|
|
}
|
|
// in React DevTools if we resolve in a setTimeout we will observe
|
|
// the promise resolution as something that can suspend a boundary or root.
|
|
return new Promise((resolve)=>{
|
|
// Must use setTimeout to be considered IO React DevTools. setImmediate will not work.
|
|
setTimeout(()=>{
|
|
resolve(underlying);
|
|
}, 0);
|
|
});
|
|
} //# sourceMappingURL=dynamic-rendering-utils.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/lib/framework/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"METADATA_BOUNDARY_NAME",
|
|
()=>METADATA_BOUNDARY_NAME,
|
|
"OUTLET_BOUNDARY_NAME",
|
|
()=>OUTLET_BOUNDARY_NAME,
|
|
"ROOT_LAYOUT_BOUNDARY_NAME",
|
|
()=>ROOT_LAYOUT_BOUNDARY_NAME,
|
|
"VIEWPORT_BOUNDARY_NAME",
|
|
()=>VIEWPORT_BOUNDARY_NAME
|
|
]);
|
|
const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__';
|
|
const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__';
|
|
const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__';
|
|
const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'; //# sourceMappingURL=boundary-constants.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (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));
|
|
}
|
|
} //# sourceMappingURL=scheduler.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/lazy-dynamic/bailout-to-csr.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
// This has to be a shared module which is shared between client component error boundary and dynamic component
|
|
__turbopack_context__.s([
|
|
"BailoutToCSRError",
|
|
()=>BailoutToCSRError,
|
|
"isBailoutToCSRError",
|
|
()=>isBailoutToCSRError
|
|
]);
|
|
const BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING';
|
|
class BailoutToCSRError extends Error {
|
|
constructor(reason){
|
|
super(`Bail out to client-side rendering: ${reason}`), this.reason = reason, this.digest = BAILOUT_TO_CSR;
|
|
}
|
|
}
|
|
function isBailoutToCSRError(err) {
|
|
if (typeof err !== 'object' || err === null || !('digest' in err)) {
|
|
return false;
|
|
}
|
|
return err.digest === BAILOUT_TO_CSR;
|
|
} //# sourceMappingURL=bailout-to-csr.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (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';
|
|
}
|
|
} //# sourceMappingURL=invariant-error.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"createPromiseWithResolvers",
|
|
()=>createPromiseWithResolvers
|
|
]);
|
|
function createPromiseWithResolvers() {
|
|
// Shim of Stage 4 Promise.withResolvers proposal
|
|
let resolve;
|
|
let reject;
|
|
const promise = new Promise((res, rej)=>{
|
|
resolve = res;
|
|
reject = rej;
|
|
});
|
|
return {
|
|
resolve: resolve,
|
|
reject: reject,
|
|
promise
|
|
};
|
|
} //# sourceMappingURL=promise-with-resolvers.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"RenderStage",
|
|
()=>RenderStage,
|
|
"StagedRenderingController",
|
|
()=>StagedRenderingController
|
|
]);
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
var RenderStage = /*#__PURE__*/ function(RenderStage) {
|
|
RenderStage[RenderStage["Static"] = 1] = "Static";
|
|
RenderStage[RenderStage["Runtime"] = 2] = "Runtime";
|
|
RenderStage[RenderStage["Dynamic"] = 3] = "Dynamic";
|
|
return RenderStage;
|
|
}({});
|
|
class StagedRenderingController {
|
|
constructor(abortSignal = null){
|
|
this.abortSignal = abortSignal;
|
|
this.currentStage = 1;
|
|
this.runtimeStagePromise = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])();
|
|
this.dynamicStagePromise = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$promise$2d$with$2d$resolvers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createPromiseWithResolvers"])();
|
|
if (abortSignal) {
|
|
abortSignal.addEventListener('abort', ()=>{
|
|
const { reason } = abortSignal;
|
|
if (this.currentStage < 2) {
|
|
this.runtimeStagePromise.promise.catch(ignoreReject) // avoid unhandled rejections
|
|
;
|
|
this.runtimeStagePromise.reject(reason);
|
|
}
|
|
if (this.currentStage < 3) {
|
|
this.dynamicStagePromise.promise.catch(ignoreReject) // avoid unhandled rejections
|
|
;
|
|
this.dynamicStagePromise.reject(reason);
|
|
}
|
|
}, {
|
|
once: true
|
|
});
|
|
}
|
|
}
|
|
advanceStage(stage) {
|
|
// If we're already at the target stage or beyond, do nothing.
|
|
// (this can happen e.g. if sync IO advanced us to the dynamic stage)
|
|
if (this.currentStage >= stage) {
|
|
return;
|
|
}
|
|
this.currentStage = stage;
|
|
// Note that we might be going directly from Static to Dynamic,
|
|
// so we need to resolve the runtime stage as well.
|
|
if (stage >= 2) {
|
|
this.runtimeStagePromise.resolve();
|
|
}
|
|
if (stage >= 3) {
|
|
this.dynamicStagePromise.resolve();
|
|
}
|
|
}
|
|
getStagePromise(stage) {
|
|
switch(stage){
|
|
case 2:
|
|
{
|
|
return this.runtimeStagePromise.promise;
|
|
}
|
|
case 3:
|
|
{
|
|
return this.dynamicStagePromise.promise;
|
|
}
|
|
default:
|
|
{
|
|
stage;
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Invalid render stage: ${stage}`), "__NEXT_ERROR_CODE", {
|
|
value: "E881",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
}
|
|
}
|
|
waitForStage(stage) {
|
|
return this.getStagePromise(stage);
|
|
}
|
|
delayUntilStage(stage, displayName, resolvedValue) {
|
|
const ioTriggerPromise = this.getStagePromise(stage);
|
|
const promise = makeDevtoolsIOPromiseFromIOTrigger(ioTriggerPromise, displayName, resolvedValue);
|
|
// Analogously to `makeHangingPromise`, we might reject this promise if the signal is invoked.
|
|
// (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it).
|
|
// We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning.
|
|
if (this.abortSignal) {
|
|
promise.catch(ignoreReject);
|
|
}
|
|
return promise;
|
|
}
|
|
}
|
|
function ignoreReject() {}
|
|
// TODO(restart-on-cache-miss): the layering of `delayUntilStage`,
|
|
// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise`
|
|
// is confusing, we should clean it up.
|
|
function makeDevtoolsIOPromiseFromIOTrigger(ioTrigger, displayName, resolvedValue) {
|
|
// If we create a `new Promise` and give it a displayName
|
|
// (with no userspace code above us in the stack)
|
|
// React Devtools will use it as the IO cause when determining "suspended by".
|
|
// In particular, it should shadow any inner IO that resolved/rejected the promise
|
|
// (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage)
|
|
const promise = new Promise((resolve, reject)=>{
|
|
ioTrigger.then(resolve.bind(null, resolvedValue), reject);
|
|
});
|
|
if (displayName !== undefined) {
|
|
// @ts-expect-error
|
|
promise.displayName = displayName;
|
|
}
|
|
return promise;
|
|
} //# sourceMappingURL=staged-rendering.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/app-render/dynamic-rendering.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
/**
|
|
* The functions provided by this module are used to communicate certain properties
|
|
* about the currently running code so that Next.js can make decisions on how to handle
|
|
* the current execution in different rendering modes such as pre-rendering, resuming, and SSR.
|
|
*
|
|
* Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.
|
|
* Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts
|
|
* of a React tree as dynamic while still keeping other parts static. There are really two different kinds of
|
|
* Dynamic indications.
|
|
*
|
|
* The first is simply an intention to be dynamic. unstable_noStore is an example of this where
|
|
* the currently executing code simply declares that the current scope is dynamic but if you use it
|
|
* inside unstable_cache it can still be cached. This type of indication can be removed if we ever
|
|
* make the default dynamic to begin with because the only way you would ever be static is inside
|
|
* a cache scope which this indication does not affect.
|
|
*
|
|
* The second is an indication that a dynamic data source was read. This is a stronger form of dynamic
|
|
* because it means that it is inappropriate to cache this at all. using a dynamic data source inside
|
|
* unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should
|
|
* read that data outside the cache and pass it in as an argument to the cached function.
|
|
*/ // Once postpone is in stable we should switch to importing the postpone export directly
|
|
__turbopack_context__.s([
|
|
"Postpone",
|
|
()=>Postpone,
|
|
"PreludeState",
|
|
()=>PreludeState,
|
|
"abortAndThrowOnSynchronousRequestDataAccess",
|
|
()=>abortAndThrowOnSynchronousRequestDataAccess,
|
|
"abortOnSynchronousPlatformIOAccess",
|
|
()=>abortOnSynchronousPlatformIOAccess,
|
|
"accessedDynamicData",
|
|
()=>accessedDynamicData,
|
|
"annotateDynamicAccess",
|
|
()=>annotateDynamicAccess,
|
|
"consumeDynamicAccess",
|
|
()=>consumeDynamicAccess,
|
|
"createDynamicTrackingState",
|
|
()=>createDynamicTrackingState,
|
|
"createDynamicValidationState",
|
|
()=>createDynamicValidationState,
|
|
"createHangingInputAbortSignal",
|
|
()=>createHangingInputAbortSignal,
|
|
"createRenderInBrowserAbortSignal",
|
|
()=>createRenderInBrowserAbortSignal,
|
|
"delayUntilRuntimeStage",
|
|
()=>delayUntilRuntimeStage,
|
|
"formatDynamicAPIAccesses",
|
|
()=>formatDynamicAPIAccesses,
|
|
"getFirstDynamicReason",
|
|
()=>getFirstDynamicReason,
|
|
"isDynamicPostpone",
|
|
()=>isDynamicPostpone,
|
|
"isPrerenderInterruptedError",
|
|
()=>isPrerenderInterruptedError,
|
|
"logDisallowedDynamicError",
|
|
()=>logDisallowedDynamicError,
|
|
"markCurrentScopeAsDynamic",
|
|
()=>markCurrentScopeAsDynamic,
|
|
"postponeWithTracking",
|
|
()=>postponeWithTracking,
|
|
"throwIfDisallowedDynamic",
|
|
()=>throwIfDisallowedDynamic,
|
|
"throwToInterruptStaticGeneration",
|
|
()=>throwToInterruptStaticGeneration,
|
|
"trackAllowedDynamicAccess",
|
|
()=>trackAllowedDynamicAccess,
|
|
"trackDynamicDataInDynamicRender",
|
|
()=>trackDynamicDataInDynamicRender,
|
|
"trackSynchronousPlatformIOAccessInDev",
|
|
()=>trackSynchronousPlatformIOAccessInDev,
|
|
"useDynamicRouteParams",
|
|
()=>useDynamicRouteParams,
|
|
"useDynamicSearchParams",
|
|
()=>useDynamicSearchParams
|
|
]);
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/hooks-server-context.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/static-generation-bailout.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)");
|
|
var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/framework/boundary-constants.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$bailout$2d$to$2d$csr$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/lazy-dynamic/bailout-to-csr.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
const hasPostpone = typeof __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].unstable_postpone === 'function';
|
|
function createDynamicTrackingState(isDebugDynamicAccesses) {
|
|
return {
|
|
isDebugDynamicAccesses,
|
|
dynamicAccesses: [],
|
|
syncDynamicErrorWithStack: null
|
|
};
|
|
}
|
|
function createDynamicValidationState() {
|
|
return {
|
|
hasSuspenseAboveBody: false,
|
|
hasDynamicMetadata: false,
|
|
hasDynamicViewport: false,
|
|
hasAllowedDynamic: false,
|
|
dynamicErrors: []
|
|
};
|
|
}
|
|
function getFirstDynamicReason(trackingState) {
|
|
var _trackingState_dynamicAccesses_;
|
|
return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression;
|
|
}
|
|
function markCurrentScopeAsDynamic(store, workUnitStore, expression) {
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'cache':
|
|
case 'unstable-cache':
|
|
// Inside cache scopes, marking a scope as dynamic has no effect,
|
|
// because the outer cache scope creates a cache boundary. This is
|
|
// subtly different from reading a dynamic data source, which is
|
|
// forbidden inside a cache scope.
|
|
return;
|
|
case 'private-cache':
|
|
// A private cache scope is already dynamic by definition.
|
|
return;
|
|
case 'prerender-legacy':
|
|
case 'prerender-ppr':
|
|
case 'request':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
// If we're forcing dynamic rendering or we're forcing static rendering, we
|
|
// don't need to do anything here because the entire page is already dynamic
|
|
// or it's static and it should not throw or postpone here.
|
|
if (store.forceDynamic || store.forceStatic) return;
|
|
if (store.dynamicShouldError) {
|
|
throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"](`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", {
|
|
value: "E553",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender-ppr':
|
|
return postponeWithTracking(store.route, expression, workUnitStore.dynamicTracking);
|
|
case 'prerender-legacy':
|
|
workUnitStore.revalidate = 0;
|
|
// We aren't prerendering, but we are generating a static page. We need
|
|
// to bail out of static generation.
|
|
const err = Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DynamicServerError"](`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", {
|
|
value: "E550",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
store.dynamicUsageDescription = expression;
|
|
store.dynamicUsageStack = err.stack;
|
|
throw err;
|
|
case 'request':
|
|
if ("TURBOPACK compile-time truthy", 1) {
|
|
workUnitStore.usedDynamic = true;
|
|
}
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
}
|
|
function throwToInterruptStaticGeneration(expression, store, prerenderStore) {
|
|
// We aren't prerendering but we are generating a static page. We need to bail out of static generation
|
|
const err = Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$hooks$2d$server$2d$context$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["DynamicServerError"](`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", {
|
|
value: "E558",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
prerenderStore.revalidate = 0;
|
|
store.dynamicUsageDescription = expression;
|
|
store.dynamicUsageStack = err.stack;
|
|
throw err;
|
|
}
|
|
function trackDynamicDataInDynamicRender(workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'cache':
|
|
case 'unstable-cache':
|
|
// Inside cache scopes, marking a scope as dynamic has no effect,
|
|
// because the outer cache scope creates a cache boundary. This is
|
|
// subtly different from reading a dynamic data source, which is
|
|
// forbidden inside a cache scope.
|
|
return;
|
|
case 'private-cache':
|
|
// A private cache scope is already dynamic by definition.
|
|
return;
|
|
case 'prerender':
|
|
case 'prerender-runtime':
|
|
case 'prerender-legacy':
|
|
case 'prerender-ppr':
|
|
case 'prerender-client':
|
|
break;
|
|
case 'request':
|
|
if ("TURBOPACK compile-time truthy", 1) {
|
|
workUnitStore.usedDynamic = true;
|
|
}
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) {
|
|
const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`;
|
|
const error = createPrerenderInterruptedError(reason);
|
|
prerenderStore.controller.abort(error);
|
|
const dynamicTracking = prerenderStore.dynamicTracking;
|
|
if (dynamicTracking) {
|
|
dynamicTracking.dynamicAccesses.push({
|
|
// When we aren't debugging, we don't need to create another error for the
|
|
// stack trace.
|
|
stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined,
|
|
expression
|
|
});
|
|
}
|
|
}
|
|
function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) {
|
|
const dynamicTracking = prerenderStore.dynamicTracking;
|
|
abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore);
|
|
// It is important that we set this tracking value after aborting. Aborts are executed
|
|
// synchronously except for the case where you abort during render itself. By setting this
|
|
// value late we can use it to determine if any of the aborted tasks are the task that
|
|
// called the sync IO expression in the first place.
|
|
if (dynamicTracking) {
|
|
if (dynamicTracking.syncDynamicErrorWithStack === null) {
|
|
dynamicTracking.syncDynamicErrorWithStack = errorWithStack;
|
|
}
|
|
}
|
|
}
|
|
function trackSynchronousPlatformIOAccessInDev(requestStore) {
|
|
// We don't actually have a controller to abort but we do the semantic equivalent by
|
|
// advancing the request store out of the prerender stage
|
|
if (requestStore.stagedRendering) {
|
|
// TODO: error for sync IO in the runtime stage
|
|
// (which is not currently covered by the validation render in `spawnDynamicValidationInDev`)
|
|
requestStore.stagedRendering.advanceStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic);
|
|
}
|
|
}
|
|
function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) {
|
|
const prerenderSignal = prerenderStore.controller.signal;
|
|
if (prerenderSignal.aborted === false) {
|
|
// TODO it would be better to move this aborted check into the callsite so we can avoid making
|
|
// the error object when it isn't relevant to the aborting of the prerender however
|
|
// since we need the throw semantics regardless of whether we abort it is easier to land
|
|
// this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer
|
|
// to ideal implementation
|
|
abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore);
|
|
// It is important that we set this tracking value after aborting. Aborts are executed
|
|
// synchronously except for the case where you abort during render itself. By setting this
|
|
// value late we can use it to determine if any of the aborted tasks are the task that
|
|
// called the sync IO expression in the first place.
|
|
const dynamicTracking = prerenderStore.dynamicTracking;
|
|
if (dynamicTracking) {
|
|
if (dynamicTracking.syncDynamicErrorWithStack === null) {
|
|
dynamicTracking.syncDynamicErrorWithStack = errorWithStack;
|
|
}
|
|
}
|
|
}
|
|
throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`);
|
|
}
|
|
function Postpone({ reason, route }) {
|
|
const prerenderStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore();
|
|
const dynamicTracking = prerenderStore && prerenderStore.type === 'prerender-ppr' ? prerenderStore.dynamicTracking : null;
|
|
postponeWithTracking(route, reason, dynamicTracking);
|
|
}
|
|
function postponeWithTracking(route, expression, dynamicTracking) {
|
|
assertPostpone();
|
|
if (dynamicTracking) {
|
|
dynamicTracking.dynamicAccesses.push({
|
|
// When we aren't debugging, we don't need to create another error for the
|
|
// stack trace.
|
|
stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined,
|
|
expression
|
|
});
|
|
}
|
|
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].unstable_postpone(createPostponeReason(route, expression));
|
|
}
|
|
function createPostponeReason(route, expression) {
|
|
return `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` + `React throws this special object to indicate where. It should not be caught by ` + `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`;
|
|
}
|
|
function isDynamicPostpone(err) {
|
|
if (typeof err === 'object' && err !== null && typeof err.message === 'string') {
|
|
return isDynamicPostponeReason(err.message);
|
|
}
|
|
return false;
|
|
}
|
|
function isDynamicPostponeReason(reason) {
|
|
return reason.includes('needs to bail out of prerendering at this point because it used') && reason.includes('Learn more: https://nextjs.org/docs/messages/ppr-caught-error');
|
|
}
|
|
if (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) {
|
|
throw Object.defineProperty(new Error('Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'), "__NEXT_ERROR_CODE", {
|
|
value: "E296",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED';
|
|
function createPrerenderInterruptedError(message) {
|
|
const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
|
value: "E394",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
error.digest = NEXT_PRERENDER_INTERRUPTED;
|
|
return error;
|
|
}
|
|
function isPrerenderInterruptedError(error) {
|
|
return typeof error === 'object' && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && 'name' in error && 'message' in error && error instanceof Error;
|
|
}
|
|
function accessedDynamicData(dynamicAccesses) {
|
|
return dynamicAccesses.length > 0;
|
|
}
|
|
function consumeDynamicAccess(serverDynamic, clientDynamic) {
|
|
// We mutate because we only call this once we are no longer writing
|
|
// to the dynamicTrackingState and it's more efficient than creating a new
|
|
// array.
|
|
serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses);
|
|
return serverDynamic.dynamicAccesses;
|
|
}
|
|
function formatDynamicAPIAccesses(dynamicAccesses) {
|
|
return dynamicAccesses.filter((access)=>typeof access.stack === 'string' && access.stack.length > 0).map(({ expression, stack })=>{
|
|
stack = stack.split('\n') // Remove the "Error: " prefix from the first line of the stack trace as
|
|
// well as the first 4 lines of the stack trace which is the distance
|
|
// from the user code and the `new Error().stack` call.
|
|
.slice(4).filter((line)=>{
|
|
// Exclude Next.js internals from the stack trace.
|
|
if (line.includes('node_modules/next/')) {
|
|
return false;
|
|
}
|
|
// Exclude anonymous functions from the stack trace.
|
|
if (line.includes(' (<anonymous>)')) {
|
|
return false;
|
|
}
|
|
// Exclude Node.js internals from the stack trace.
|
|
if (line.includes(' (node:')) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}).join('\n');
|
|
return `Dynamic API Usage Debug - ${expression}:\n${stack}`;
|
|
});
|
|
}
|
|
function assertPostpone() {
|
|
if (!hasPostpone) {
|
|
throw Object.defineProperty(new Error(`Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`), "__NEXT_ERROR_CODE", {
|
|
value: "E224",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
}
|
|
function createRenderInBrowserAbortSignal() {
|
|
const controller = new AbortController();
|
|
controller.abort(Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$bailout$2d$to$2d$csr$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BailoutToCSRError"]('Render in Browser'), "__NEXT_ERROR_CODE", {
|
|
value: "E721",
|
|
enumerable: false,
|
|
configurable: true
|
|
}));
|
|
return controller.signal;
|
|
}
|
|
function createHangingInputAbortSignal(workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender':
|
|
case 'prerender-runtime':
|
|
const controller = new AbortController();
|
|
if (workUnitStore.cacheSignal) {
|
|
// If we have a cacheSignal it means we're in a prospective render. If
|
|
// the input we're waiting on is coming from another cache, we do want
|
|
// to wait for it so that we can resolve this cache entry too.
|
|
workUnitStore.cacheSignal.inputReady().then(()=>{
|
|
controller.abort();
|
|
});
|
|
} else {
|
|
// Otherwise we're in the final render and we should already have all
|
|
// our caches filled.
|
|
// If the prerender uses stages, we have wait until the runtime stage,
|
|
// at which point all runtime inputs will be resolved.
|
|
// (otherwise, a runtime prerender might consider `cookies()` hanging
|
|
// even though they'd resolve in the next task.)
|
|
//
|
|
// We might still be waiting on some microtasks so we
|
|
// wait one tick before giving up. When we give up, we still want to
|
|
// render the content of this cache as deeply as we can so that we can
|
|
// suspend as deeply as possible in the tree or not at all if we don't
|
|
// end up waiting for the input.
|
|
const runtimeStagePromise = (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getRuntimeStagePromise"])(workUnitStore);
|
|
if (runtimeStagePromise) {
|
|
runtimeStagePromise.then(()=>(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"])(()=>controller.abort()));
|
|
} else {
|
|
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"])(()=>controller.abort());
|
|
}
|
|
}
|
|
return controller.signal;
|
|
case 'prerender-client':
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'request':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
case 'unstable-cache':
|
|
return undefined;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
function annotateDynamicAccess(expression, prerenderStore) {
|
|
const dynamicTracking = prerenderStore.dynamicTracking;
|
|
if (dynamicTracking) {
|
|
dynamicTracking.dynamicAccesses.push({
|
|
stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined,
|
|
expression
|
|
});
|
|
}
|
|
}
|
|
function useDynamicRouteParams(expression) {
|
|
const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore();
|
|
const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore();
|
|
if (workStore && workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender-client':
|
|
case 'prerender':
|
|
{
|
|
const fallbackParams = workUnitStore.fallbackRouteParams;
|
|
if (fallbackParams && fallbackParams.size > 0) {
|
|
// We are in a prerender with cacheComponents semantics. We are going to
|
|
// hang here and never resolve. This will cause the currently
|
|
// rendering component to effectively be a dynamic hole.
|
|
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].use((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeHangingPromise"])(workUnitStore.renderSignal, workStore.route, expression));
|
|
}
|
|
break;
|
|
}
|
|
case 'prerender-ppr':
|
|
{
|
|
const fallbackParams = workUnitStore.fallbackRouteParams;
|
|
if (fallbackParams && fallbackParams.size > 0) {
|
|
return postponeWithTracking(workStore.route, expression, workUnitStore.dynamicTracking);
|
|
}
|
|
break;
|
|
}
|
|
case 'prerender-runtime':
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`\`${expression}\` was called during a runtime prerender. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
|
|
value: "E771",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
case 'cache':
|
|
case 'private-cache':
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
|
|
value: "E745",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
case 'prerender-legacy':
|
|
case 'request':
|
|
case 'unstable-cache':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
}
|
|
function useDynamicSearchParams(expression) {
|
|
const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore();
|
|
const workUnitStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workUnitAsyncStorage"].getStore();
|
|
if (!workStore) {
|
|
// We assume pages router context and just return
|
|
return;
|
|
}
|
|
if (!workUnitStore) {
|
|
(0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["throwForMissingRequestStore"])(expression);
|
|
}
|
|
switch(workUnitStore.type){
|
|
case 'prerender-client':
|
|
{
|
|
__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].use((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeHangingPromise"])(workUnitStore.renderSignal, workStore.route, expression));
|
|
break;
|
|
}
|
|
case 'prerender-legacy':
|
|
case 'prerender-ppr':
|
|
{
|
|
if (workStore.forceStatic) {
|
|
return;
|
|
}
|
|
throw Object.defineProperty(new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$lazy$2d$dynamic$2f$bailout$2d$to$2d$csr$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BailoutToCSRError"](expression), "__NEXT_ERROR_CODE", {
|
|
value: "E394",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
case 'prerender':
|
|
case 'prerender-runtime':
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`\`${expression}\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
|
|
value: "E795",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
case 'cache':
|
|
case 'unstable-cache':
|
|
case 'private-cache':
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
|
|
value: "E745",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
case 'request':
|
|
return;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
const hasSuspenseRegex = /\n\s+at Suspense \(<anonymous>\)/;
|
|
// Common implicit body tags that React will treat as body when placed directly in html
|
|
const bodyAndImplicitTags = 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6';
|
|
// Detects when RootLayoutBoundary (our framework marker component) appears
|
|
// after Suspense in the component stack, indicating the root layout is wrapped
|
|
// within a Suspense boundary. Ensures no body/html/implicit-body components are in between.
|
|
//
|
|
// Example matches:
|
|
// at Suspense (<anonymous>)
|
|
// at __next_root_layout_boundary__ (<anonymous>)
|
|
//
|
|
// Or with other components in between (but not body/html/implicit-body):
|
|
// at Suspense (<anonymous>)
|
|
// at SomeComponent (<anonymous>)
|
|
// at __next_root_layout_boundary__ (<anonymous>)
|
|
const hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(`\\n\\s+at Suspense \\(<anonymous>\\)(?:(?!\\n\\s+at (?:${bodyAndImplicitTags}) \\(<anonymous>\\))[\\s\\S])*?\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ROOT_LAYOUT_BOUNDARY_NAME"]} \\([^\\n]*\\)`);
|
|
const hasMetadataRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["METADATA_BOUNDARY_NAME"]}[\\n\\s]`);
|
|
const hasViewportRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["VIEWPORT_BOUNDARY_NAME"]}[\\n\\s]`);
|
|
const hasOutletRegex = new RegExp(`\\n\\s+at ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$framework$2f$boundary$2d$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["OUTLET_BOUNDARY_NAME"]}[\\n\\s]`);
|
|
function trackAllowedDynamicAccess(workStore, componentStack, dynamicValidation, clientDynamic) {
|
|
if (hasOutletRegex.test(componentStack)) {
|
|
// We don't need to track that this is dynamic. It is only so when something else is also dynamic.
|
|
return;
|
|
} else if (hasMetadataRegex.test(componentStack)) {
|
|
dynamicValidation.hasDynamicMetadata = true;
|
|
return;
|
|
} else if (hasViewportRegex.test(componentStack)) {
|
|
dynamicValidation.hasDynamicViewport = true;
|
|
return;
|
|
} else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) {
|
|
// For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.
|
|
// But if you have Suspense above body, the prelude is empty but we allow that because having Suspense
|
|
// is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.
|
|
dynamicValidation.hasAllowedDynamic = true;
|
|
dynamicValidation.hasSuspenseAboveBody = true;
|
|
return;
|
|
} else if (hasSuspenseRegex.test(componentStack)) {
|
|
// this error had a Suspense boundary above it so we don't need to report it as a source
|
|
// of disallowed
|
|
dynamicValidation.hasAllowedDynamic = true;
|
|
return;
|
|
} else if (clientDynamic.syncDynamicErrorWithStack) {
|
|
// This task was the task that called the sync error.
|
|
dynamicValidation.dynamicErrors.push(clientDynamic.syncDynamicErrorWithStack);
|
|
return;
|
|
} else {
|
|
const message = `Route "${workStore.route}": Uncached data was accessed outside of ` + '<Suspense>. This delays the entire page from rendering, resulting in a ' + 'slow user experience. Learn more: ' + 'https://nextjs.org/docs/messages/blocking-route';
|
|
const error = createErrorWithComponentOrOwnerStack(message, componentStack);
|
|
dynamicValidation.dynamicErrors.push(error);
|
|
return;
|
|
}
|
|
}
|
|
/**
|
|
* In dev mode, we prefer using the owner stack, otherwise the provided
|
|
* component stack is used.
|
|
*/ function createErrorWithComponentOrOwnerStack(message, componentStack) {
|
|
const ownerStack = ("TURBOPACK compile-time value", "development") !== 'production' && __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].captureOwnerStack ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].captureOwnerStack() : null;
|
|
const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
|
value: "E394",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
error.stack = error.name + ': ' + message + (ownerStack ?? componentStack);
|
|
return error;
|
|
}
|
|
var PreludeState = /*#__PURE__*/ function(PreludeState) {
|
|
PreludeState[PreludeState["Full"] = 0] = "Full";
|
|
PreludeState[PreludeState["Empty"] = 1] = "Empty";
|
|
PreludeState[PreludeState["Errored"] = 2] = "Errored";
|
|
return PreludeState;
|
|
}({});
|
|
function logDisallowedDynamicError(workStore, error) {
|
|
console.error(error);
|
|
if (!workStore.dev) {
|
|
if (workStore.hasReadableErrorStacks) {
|
|
console.error(`To get a more detailed stack trace and pinpoint the issue, start the app in development mode by running \`next dev\`, then open "${workStore.route}" in your browser to investigate the error.`);
|
|
} else {
|
|
console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following:
|
|
- Start the app in development mode by running \`next dev\`, then open "${workStore.route}" in your browser to investigate the error.
|
|
- Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`);
|
|
}
|
|
}
|
|
}
|
|
function throwIfDisallowedDynamic(workStore, prelude, dynamicValidation, serverDynamic) {
|
|
if (serverDynamic.syncDynamicErrorWithStack) {
|
|
logDisallowedDynamicError(workStore, serverDynamic.syncDynamicErrorWithStack);
|
|
throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"]();
|
|
}
|
|
if (prelude !== 0) {
|
|
if (dynamicValidation.hasSuspenseAboveBody) {
|
|
// This route has opted into allowing fully dynamic rendering
|
|
// by including a Suspense boundary above the body. In this case
|
|
// a lack of a shell is not considered disallowed so we simply return
|
|
return;
|
|
}
|
|
// We didn't have any sync bailouts but there may be user code which
|
|
// blocked the root. We would have captured these during the prerender
|
|
// and can log them here and then terminate the build/validating render
|
|
const dynamicErrors = dynamicValidation.dynamicErrors;
|
|
if (dynamicErrors.length > 0) {
|
|
for(let i = 0; i < dynamicErrors.length; i++){
|
|
logDisallowedDynamicError(workStore, dynamicErrors[i]);
|
|
}
|
|
throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"]();
|
|
}
|
|
// If we got this far then the only other thing that could be blocking
|
|
// the root is dynamic Viewport. If this is dynamic then
|
|
// you need to opt into that by adding a Suspense boundary above the body
|
|
// to indicate your are ok with fully dynamic rendering.
|
|
if (dynamicValidation.hasDynamicViewport) {
|
|
console.error(`Route "${workStore.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`);
|
|
throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"]();
|
|
}
|
|
if (prelude === 1) {
|
|
// If we ever get this far then we messed up the tracking of invalid dynamic.
|
|
// We still adhere to the constraint that you must produce a shell but invite the
|
|
// user to report this as a bug in Next.js.
|
|
console.error(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`);
|
|
throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"]();
|
|
}
|
|
} else {
|
|
if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.hasDynamicMetadata) {
|
|
console.error(`Route "${workStore.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`);
|
|
throw new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$client$2f$components$2f$static$2d$generation$2d$bailout$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["StaticGenBailoutError"]();
|
|
}
|
|
}
|
|
}
|
|
function delayUntilRuntimeStage(prerenderStore, result) {
|
|
if (prerenderStore.runtimeStagePromise) {
|
|
return prerenderStore.runtimeStagePromise.then(()=>result);
|
|
}
|
|
return result;
|
|
} //# sourceMappingURL=dynamic-rendering.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"cloneResponse",
|
|
()=>cloneResponse
|
|
]);
|
|
const noop = ()=>{};
|
|
let registry;
|
|
if (globalThis.FinalizationRegistry) {
|
|
registry = new FinalizationRegistry((weakRef)=>{
|
|
const stream = weakRef.deref();
|
|
if (stream && !stream.locked) {
|
|
stream.cancel('Response object has been garbage collected').then(noop);
|
|
}
|
|
});
|
|
}
|
|
function cloneResponse(original) {
|
|
// If the response has no body, then we can just return the original response
|
|
// twice because it's immutable.
|
|
if (!original.body) {
|
|
return [
|
|
original,
|
|
original
|
|
];
|
|
}
|
|
const [body1, body2] = original.body.tee();
|
|
const cloned1 = new Response(body1, {
|
|
status: original.status,
|
|
statusText: original.statusText,
|
|
headers: original.headers
|
|
});
|
|
Object.defineProperty(cloned1, 'url', {
|
|
value: original.url,
|
|
// How the original response.url behaves
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: false
|
|
});
|
|
// The Fetch Standard allows users to skip consuming the response body by
|
|
// relying on garbage collection to release connection resources.
|
|
// https://github.com/nodejs/undici?tab=readme-ov-file#garbage-collection
|
|
//
|
|
// To cancel the stream you then need to cancel both resulting branches.
|
|
// Teeing a stream will generally lock it for the duration, preventing other
|
|
// readers from locking it.
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/tee
|
|
// cloned2 is stored in a react cache and cloned for subsequent requests.
|
|
// It is the original request, and is is garbage collected by a
|
|
// FinalizationRegistry in Undici, but since we're tee-ing the stream
|
|
// ourselves, we need to cancel clone1's stream (the response returned from
|
|
// our dedupe fetch) when clone1 is reclaimed, otherwise we leak memory.
|
|
if (registry && cloned1.body) {
|
|
registry.register(cloned1, new WeakRef(cloned1.body));
|
|
}
|
|
const cloned2 = new Response(body2, {
|
|
status: original.status,
|
|
statusText: original.statusText,
|
|
headers: original.headers
|
|
});
|
|
Object.defineProperty(cloned2, 'url', {
|
|
value: original.url,
|
|
// How the original response.url behaves
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: false
|
|
});
|
|
return [
|
|
cloned1,
|
|
cloned2
|
|
];
|
|
} //# sourceMappingURL=clone-response.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/lib/dedupe-fetch.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
/**
|
|
* Based on https://github.com/facebook/react/blob/d4e78c42a94be027b4dc7ed2659a5fddfbf9bd4e/packages/react/src/ReactFetch.js
|
|
*/ __turbopack_context__.s([
|
|
"createDedupeFetch",
|
|
()=>createDedupeFetch
|
|
]);
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
;
|
|
const simpleCacheKey = '["GET",[],null,"follow",null,null,null,null]' // generateCacheKey(new Request('https://blank'));
|
|
;
|
|
// Headers that should not affect deduplication
|
|
// traceparent and tracestate are used for distributed tracing and should not affect cache keys
|
|
const headersToExcludeInCacheKey = new Set([
|
|
'traceparent',
|
|
'tracestate'
|
|
]);
|
|
function generateCacheKey(request) {
|
|
// We pick the fields that goes into the key used to dedupe requests.
|
|
// We don't include the `cache` field, because we end up using whatever
|
|
// caching resulted from the first request.
|
|
// Notably we currently don't consider non-standard (or future) options.
|
|
// This might not be safe. TODO: warn for non-standard extensions differing.
|
|
// IF YOU CHANGE THIS UPDATE THE simpleCacheKey ABOVE.
|
|
const filteredHeaders = Array.from(request.headers.entries()).filter(([key])=>!headersToExcludeInCacheKey.has(key.toLowerCase()));
|
|
return JSON.stringify([
|
|
request.method,
|
|
filteredHeaders,
|
|
request.mode,
|
|
request.redirect,
|
|
request.credentials,
|
|
request.referrer,
|
|
request.referrerPolicy,
|
|
request.integrity
|
|
]);
|
|
}
|
|
function createDedupeFetch(originalFetch) {
|
|
const getCacheEntries = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$server$2f$route$2d$modules$2f$app$2d$page$2f$vendored$2f$rsc$2f$react$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cache"]((url)=>[]);
|
|
return function dedupeFetch(resource, options) {
|
|
if (options && options.signal) {
|
|
// If we're passed a signal, then we assume that
|
|
// someone else controls the lifetime of this object and opts out of
|
|
// caching. It's effectively the opt-out mechanism.
|
|
// Ideally we should be able to check this on the Request but
|
|
// it always gets initialized with its own signal so we don't
|
|
// know if it's supposed to override - unless we also override the
|
|
// Request constructor.
|
|
return originalFetch(resource, options);
|
|
}
|
|
// Normalize the Request
|
|
let url;
|
|
let cacheKey;
|
|
if (typeof resource === 'string' && !options) {
|
|
// Fast path.
|
|
cacheKey = simpleCacheKey;
|
|
url = resource;
|
|
} else {
|
|
// Normalize the request.
|
|
// if resource is not a string or a URL (its an instance of Request)
|
|
// then do not instantiate a new Request but instead
|
|
// reuse the request as to not disturb the body in the event it's a ReadableStream.
|
|
const request = typeof resource === 'string' || resource instanceof URL ? new Request(resource, options) : resource;
|
|
if (request.method !== 'GET' && request.method !== 'HEAD' || request.keepalive) {
|
|
// We currently don't dedupe requests that might have side-effects. Those
|
|
// have to be explicitly cached. We assume that the request doesn't have a
|
|
// body if it's GET or HEAD.
|
|
// keepalive gets treated the same as if you passed a custom cache signal.
|
|
return originalFetch(resource, options);
|
|
}
|
|
cacheKey = generateCacheKey(request);
|
|
url = request.url;
|
|
}
|
|
const cacheEntries = getCacheEntries(url);
|
|
for(let i = 0, j = cacheEntries.length; i < j; i += 1){
|
|
const [key, promise] = cacheEntries[i];
|
|
if (key === cacheKey) {
|
|
return promise.then(()=>{
|
|
const response = cacheEntries[i][2];
|
|
if (!response) 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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('No cached response'), "__NEXT_ERROR_CODE", {
|
|
value: "E579",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
// We're cloning the response using this utility because there exists
|
|
// a bug in the undici library around response cloning. See the
|
|
// following pull request for more details:
|
|
// https://github.com/vercel/next.js/pull/73274
|
|
const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(response);
|
|
cacheEntries[i][2] = cloned2;
|
|
return cloned1;
|
|
});
|
|
}
|
|
}
|
|
// We pass the original arguments here in case normalizing the Request
|
|
// doesn't include all the options in this environment.
|
|
const promise = originalFetch(resource, options);
|
|
const entry = [
|
|
cacheKey,
|
|
promise,
|
|
null
|
|
];
|
|
cacheEntries.push(entry);
|
|
return promise.then((response)=>{
|
|
// We're cloning the response using this utility because there exists
|
|
// a bug in the undici library around response cloning. See the
|
|
// following pull request for more details:
|
|
// https://github.com/vercel/next.js/pull/73274
|
|
const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(response);
|
|
entry[2] = cloned2;
|
|
return cloned1;
|
|
});
|
|
};
|
|
} //# sourceMappingURL=dedupe-fetch.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/lib/detached-promise.js [app-route] (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;
|
|
}
|
|
} //# sourceMappingURL=detached-promise.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/lib/batcher.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/detached-promise.js [app-route] (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$app$2d$route$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;
|
|
}
|
|
} //# sourceMappingURL=batcher.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (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;
|
|
}({}); //# sourceMappingURL=types.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [app-route] (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
|
|
]),
|
|
// <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
|
|
])
|
|
}
|
|
}; //# sourceMappingURL=encoded-tags.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [app-route] (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;
|
|
// 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.slice(0, tagIndex));
|
|
removed.set(a.slice(tagIndex + b.length), tagIndex);
|
|
return removed;
|
|
} else {
|
|
return a;
|
|
}
|
|
} //# sourceMappingURL=uint8array-helpers.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [app-route] (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'; //# sourceMappingURL=constants.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/segment-cache/output-export-prefetch-encoding.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
// In output: export mode, the build id is added to the start of the HTML
|
|
// document, directly after the doctype declaration. During a prefetch, the
|
|
// client performs a range request to get the build id, so it can check whether
|
|
// the target page belongs to the same build.
|
|
//
|
|
// The first 64 bytes of the document are requested. The exact number isn't
|
|
// too important; it must be larger than the build id + doctype + closing and
|
|
// ending comment markers, but it doesn't need to match the end of the
|
|
// comment exactly.
|
|
//
|
|
// Build ids are 21 bytes long in the default implementation, though this
|
|
// can be overridden in the Next.js config. For the purposes of this check,
|
|
// it's OK to only match the start of the id, so we'll truncate it if exceeds
|
|
// a certain length.
|
|
__turbopack_context__.s([
|
|
"DOC_PREFETCH_RANGE_HEADER_VALUE",
|
|
()=>DOC_PREFETCH_RANGE_HEADER_VALUE,
|
|
"doesExportedHtmlMatchBuildId",
|
|
()=>doesExportedHtmlMatchBuildId,
|
|
"insertBuildIdComment",
|
|
()=>insertBuildIdComment
|
|
]);
|
|
const DOCTYPE_PREFIX = '<!DOCTYPE html>' // 15 bytes
|
|
;
|
|
const MAX_BUILD_ID_LENGTH = 24;
|
|
const DOC_PREFETCH_RANGE_HEADER_VALUE = 'bytes=0-63';
|
|
function escapeBuildId(buildId) {
|
|
// If the build id is longer than the given limit, it's OK for our purposes
|
|
// to only match the beginning.
|
|
const truncated = buildId.slice(0, MAX_BUILD_ID_LENGTH);
|
|
// Replace hyphens with underscores so it doesn't break the HTML comment.
|
|
// (Unlikely, but if this did happen it would break the whole document.)
|
|
return truncated.replace(/-/g, '_');
|
|
}
|
|
function insertBuildIdComment(originalHtml, buildId) {
|
|
if (buildId.includes('-->') || // React always inserts a doctype at the start of the document. Skip if it
|
|
// isn't present. Shouldn't happen; suggests an issue elsewhere.
|
|
!originalHtml.startsWith(DOCTYPE_PREFIX)) {
|
|
// Return the original HTML unchanged. This means the document will not
|
|
// be prefetched.
|
|
// TODO: The build id comment is currently only used during prefetches, but
|
|
// if we eventually use this mechanism for regular navigations, we may need
|
|
// to error during build if we fail to insert it for some reason.
|
|
return originalHtml;
|
|
}
|
|
// The comment must be inserted after the doctype.
|
|
return originalHtml.replace(DOCTYPE_PREFIX, DOCTYPE_PREFIX + '<!--' + escapeBuildId(buildId) + '-->');
|
|
}
|
|
function doesExportedHtmlMatchBuildId(partialHtmlDocument, buildId) {
|
|
// Check whether the document starts with the expected buildId.
|
|
return partialHtmlDocument.startsWith(DOCTYPE_PREFIX + '<!--' + escapeBuildId(buildId) + '-->');
|
|
} //# sourceMappingURL=output-export-prefetch-encoding.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [app-route] (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_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_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 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'; //# sourceMappingURL=app-router-headers.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/hash.js [app-route] (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);
|
|
} //# sourceMappingURL=hash.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"computeCacheBustingSearchParam",
|
|
()=>computeCacheBustingSearchParam
|
|
]);
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$hash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/hash.js [app-route] (ecmascript)");
|
|
;
|
|
function computeCacheBustingSearchParam(prefetchHeader, segmentPrefetchHeader, stateTreeHeader, nextUrlHeader) {
|
|
if ((prefetchHeader === undefined || prefetchHeader === '0') && segmentPrefetchHeader === undefined && stateTreeHeader === undefined && nextUrlHeader === undefined) {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["hexHash"])([
|
|
prefetchHeader || '0',
|
|
segmentPrefetchHeader || '0',
|
|
stateTreeHeader || '0',
|
|
nextUrlHeader || '0'
|
|
].join(','));
|
|
} //# sourceMappingURL=cache-busting-search-param.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/stream-utils/node-web-streams-helper.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"chainStreams",
|
|
()=>chainStreams,
|
|
"continueDynamicHTMLResume",
|
|
()=>continueDynamicHTMLResume,
|
|
"continueDynamicPrerender",
|
|
()=>continueDynamicPrerender,
|
|
"continueFizzStream",
|
|
()=>continueFizzStream,
|
|
"continueStaticFallbackPrerender",
|
|
()=>continueStaticFallbackPrerender,
|
|
"continueStaticPrerender",
|
|
()=>continueStaticPrerender,
|
|
"createBufferedTransformStream",
|
|
()=>createBufferedTransformStream,
|
|
"createDocumentClosingStream",
|
|
()=>createDocumentClosingStream,
|
|
"createRootLayoutValidatorStream",
|
|
()=>createRootLayoutValidatorStream,
|
|
"renderToInitialFizzStream",
|
|
()=>renderToInitialFizzStream,
|
|
"streamFromBuffer",
|
|
()=>streamFromBuffer,
|
|
"streamFromString",
|
|
()=>streamFromString,
|
|
"streamToBuffer",
|
|
()=>streamToBuffer,
|
|
"streamToString",
|
|
()=>streamToString
|
|
]);
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/detached-promise.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/encoded-tags.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/uint8array-helpers.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/errors/constants.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2d$cache$2f$output$2d$export$2d$prefetch$2d$encoding$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment-cache/output-export-prefetch-encoding.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/app-router-headers.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/cache-busting-search-param.js [app-route] (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 streamToBuffer(stream) {
|
|
const reader = stream.getReader();
|
|
const chunks = [];
|
|
while(true){
|
|
const { done, value } = await reader.read();
|
|
if (done) {
|
|
break;
|
|
}
|
|
chunks.push(value);
|
|
}
|
|
return Buffer.concat(chunks);
|
|
}
|
|
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$app$2d$route$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$app$2d$route$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 createPrefetchCommentStream(isBuildTimePrerendering, buildId) {
|
|
// Insert an extra comment at the beginning of the HTML document. This must
|
|
// come after the DOCTYPE, which is inserted by React.
|
|
//
|
|
// The first chunk sent by React will contain the doctype. After that, we can
|
|
// pass through the rest of the chunks as-is.
|
|
let didTransformFirstChunk = false;
|
|
return new TransformStream({
|
|
transform (chunk, controller) {
|
|
if (isBuildTimePrerendering && !didTransformFirstChunk) {
|
|
didTransformFirstChunk = true;
|
|
const decoder = new TextDecoder('utf-8', {
|
|
fatal: true
|
|
});
|
|
const chunkStr = decoder.decode(chunk, {
|
|
stream: true
|
|
});
|
|
const updatedChunkStr = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2d$cache$2f$output$2d$export$2d$prefetch$2d$encoding$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["insertBuildIdComment"])(chunkStr, buildId);
|
|
controller.enqueue(encoder.encode(updatedChunkStr));
|
|
return;
|
|
}
|
|
controller.enqueue(chunk);
|
|
}
|
|
});
|
|
}
|
|
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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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));
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
function createClientResumeScriptInsertionTransformStream() {
|
|
const segmentPath = '/_full';
|
|
const cacheBustingHeader = (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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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;
|
|
}
|
|
});
|
|
}
|
|
// 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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$5d$__$28$ecmascript$29$__["ENCODED_TAGS"].CLOSED.HTML);
|
|
controller.enqueue(chunk);
|
|
}
|
|
});
|
|
}
|
|
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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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, isBuildTimePrerendering, buildId, 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 we're generating static HTML we need to wait for it to resolve before continuing.
|
|
if (isStaticGeneration) {
|
|
await renderStream.allReady;
|
|
}
|
|
return chainTransformers(renderStream, [
|
|
// Buffer everything to avoid flushing too frequently
|
|
createBufferedTransformStream(),
|
|
// Add build id comment to start of the HTML document (in export mode)
|
|
createPrefetchCommentStream(isBuildTimePrerendering, buildId),
|
|
// 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 }) {
|
|
return prerenderStream // Buffer everything to avoid flushing too frequently
|
|
.pipeThrough(createBufferedTransformStream()).pipeThrough(createStripDocumentClosingTagsTransform()) // Insert generated tags to head
|
|
.pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML)) // Transform metadata
|
|
.pipeThrough(createMetadataTransformStream(getServerInsertedMetadata));
|
|
}
|
|
async function continueStaticPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, isBuildTimePrerendering, buildId }) {
|
|
return prerenderStream // Buffer everything to avoid flushing too frequently
|
|
.pipeThrough(createBufferedTransformStream()) // Add build id comment to start of the HTML document (in export mode)
|
|
.pipeThrough(createPrefetchCommentStream(isBuildTimePrerendering, buildId)) // Insert generated tags to head
|
|
.pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML)) // Transform metadata
|
|
.pipeThrough(createMetadataTransformStream(getServerInsertedMetadata)) // Insert the inlined data (Flight data, form state, etc.) stream into the HTML
|
|
.pipeThrough(createFlightDataInjectionTransformStream(inlinedDataStream, true)) // Close tags should always be deferred to the end
|
|
.pipeThrough(createMoveSuffixStream());
|
|
}
|
|
async function continueStaticFallbackPrerender(prerenderStream, { inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata, isBuildTimePrerendering, buildId }) {
|
|
// Same as `continueStaticPrerender`, but also inserts an additional script
|
|
// to instruct the client to start fetching the hydration data as early
|
|
// as possible.
|
|
return prerenderStream // Buffer everything to avoid flushing too frequently
|
|
.pipeThrough(createBufferedTransformStream()) // Add build id comment to start of the HTML document (in export mode)
|
|
.pipeThrough(createPrefetchCommentStream(isBuildTimePrerendering, buildId)) // Insert generated tags to head
|
|
.pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML)) // Insert the client resume script into the head
|
|
.pipeThrough(createClientResumeScriptInsertionTransformStream()) // Transform metadata
|
|
.pipeThrough(createMetadataTransformStream(getServerInsertedMetadata)) // Insert the inlined data (Flight data, form state, etc.) stream into the HTML
|
|
.pipeThrough(createFlightDataInjectionTransformStream(inlinedDataStream, true)) // Close tags should always be deferred to the end
|
|
.pipeThrough(createMoveSuffixStream());
|
|
}
|
|
async function continueDynamicHTMLResume(renderStream, { delayDataUntilFirstHtmlChunk, inlinedDataStream, getServerInsertedHTML, getServerInsertedMetadata }) {
|
|
return renderStream // Buffer everything to avoid flushing too frequently
|
|
.pipeThrough(createBufferedTransformStream()) // Insert generated tags to head
|
|
.pipeThrough(createHeadInsertionTransformStream(getServerInsertedHTML)) // Transform metadata
|
|
.pipeThrough(createMetadataTransformStream(getServerInsertedMetadata)) // Insert the inlined data (Flight data, form state, etc.) stream into the HTML
|
|
.pipeThrough(createFlightDataInjectionTransformStream(inlinedDataStream, delayDataUntilFirstHtmlChunk)) // Close tags should always be deferred to the end
|
|
.pipeThrough(createMoveSuffixStream());
|
|
}
|
|
function createDocumentClosingStream() {
|
|
return streamFromString(CLOSE_TAG);
|
|
} //# sourceMappingURL=node-web-streams-helper.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (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);
|
|
} //# sourceMappingURL=request-meta.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (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$app$2d$route$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$app$2d$route$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;
|
|
} //# sourceMappingURL=utils.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [app-route] (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;
|
|
}
|
|
}
|
|
} //# sourceMappingURL=detect-domain-locale.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [app-route] (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(/\/$/, '') || '/';
|
|
} //# sourceMappingURL=remove-trailing-slash.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (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: ''
|
|
};
|
|
} //# sourceMappingURL=parse-path.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path);
|
|
return `${prefix}${pathname}${query}${hash}`;
|
|
} //# sourceMappingURL=add-path-prefix.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path);
|
|
return `${pathname}${suffix}${query}${hash}`;
|
|
} //# sourceMappingURL=add-path-suffix.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/parse-path.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__["parsePath"])(path);
|
|
return pathname === prefix || pathname.startsWith(prefix + '/');
|
|
} //# sourceMappingURL=path-has-prefix.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (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$app$2d$route$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$app$2d$route$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$app$2d$route$5d$__$28$ecmascript$29$__["addPathPrefix"])(path, `/${locale}`);
|
|
} //# sourceMappingURL=add-locale.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-trailing-slash.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-prefix.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-path-suffix.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/add-locale.js [app-route] (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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$5d$__$28$ecmascript$29$__["removeTrailingSlash"])(pathname);
|
|
} //# sourceMappingURL=format-next-pathname-info.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [app-route] (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();
|
|
} //# sourceMappingURL=get-hostname.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
/**
|
|
* 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.
|
|
*/ __turbopack_context__.s([
|
|
"normalizeLocalePath",
|
|
()=>normalizeLocalePath
|
|
]);
|
|
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
|
|
};
|
|
} //# sourceMappingURL=normalize-locale-path.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (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$app$2d$route$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}`;
|
|
} //# sourceMappingURL=remove-path-prefix.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/normalize-locale-path.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$5d$__$28$ecmascript$29$__["normalizeLocalePath"])(pathnameNoDataPrefix, i18n.locales);
|
|
if (result.detectedLocale) {
|
|
info.locale = result.detectedLocale;
|
|
}
|
|
}
|
|
}
|
|
return info;
|
|
} //# sourceMappingURL=get-next-pathname-info.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/web/next-url.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/i18n/detect-domain-locale.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/format-next-pathname-info.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/get-hostname.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
;
|
|
;
|
|
const REGEX_LOCALHOST_HOSTNAME = /(?!^https?:\/\/)(127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)/;
|
|
function parseURL(url, base) {
|
|
return new URL(String(url).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'), base && String(base).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'));
|
|
}
|
|
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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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);
|
|
}
|
|
} //# sourceMappingURL=next-url.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/web/error.js [app-route] (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
|
|
`);
|
|
}
|
|
} //# sourceMappingURL=error.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (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 [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)"); //# sourceMappingURL=cookies.js.map
|
|
;
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/next-url.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/error.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/cookies.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$5d$__$28$ecmascript$29$__["RemovedUAError"]();
|
|
}
|
|
get url() {
|
|
return this[INTERNALS].url;
|
|
}
|
|
} //# sourceMappingURL=request.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (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'; //# sourceMappingURL=helpers.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/request.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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
|
|
}
|
|
});
|
|
}
|
|
} //# sourceMappingURL=next-request.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/client-component-renderer-logger.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
// Combined load times for loading client components
|
|
__turbopack_context__.s([
|
|
"getClientComponentLoaderMetrics",
|
|
()=>getClientComponentLoaderMetrics,
|
|
"wrapClientComponentLoader",
|
|
()=>wrapClientComponentLoader
|
|
]);
|
|
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;
|
|
} //# sourceMappingURL=client-component-renderer-logger.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/detached-promise.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/client-component-renderer-logger.js [app-route] (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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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
|
|
});
|
|
}
|
|
} //# sourceMappingURL=pipe-readable.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/render-result.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/stream-utils/node-web-streams-helper.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$5d$__$28$ecmascript$29$__["streamFromBuffer"])(this.response)
|
|
];
|
|
} else {
|
|
return [
|
|
this.response
|
|
];
|
|
}
|
|
}
|
|
/**
|
|
* 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$app$2d$route$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$app$2d$route$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(this.readable, res, this.waitUntil);
|
|
}
|
|
} //# sourceMappingURL=render-result.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/response-cache/utils.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/render-result.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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,
|
|
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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$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;
|
|
}
|
|
} //# sourceMappingURL=utils.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/batcher.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$scheduler$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/scheduler.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/utils.js [app-route] (ecmascript)");
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
;
|
|
;
|
|
class ResponseCache {
|
|
constructor(minimal_mode){
|
|
this.getBatcher = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$batcher$2e$js__$5b$app$2d$route$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$app$2d$route$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$app$2d$route$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$app$2d$route$5d$__$28$ecmascript$29$__["scheduleOnNextTick"]
|
|
});
|
|
this.minimal_mode = minimal_mode;
|
|
}
|
|
/**
|
|
* 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) {
|
|
var _this_previousCacheItem;
|
|
// 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 && ((_this_previousCacheItem = this.previousCacheItem) == null ? void 0 : _this_previousCacheItem.key) === key && this.previousCacheItem.expiresAt > Date.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$app$2d$route$5d$__$28$ecmascript$29$__["toResponseCacheEntry"])(this.previousCacheItem.entry);
|
|
}
|
|
const { incrementalCache, isOnDemandRevalidate = false, isFallback = false, isRoutePPREnabled = false, isPrefetch = false, waitUntil, routeKind } = context;
|
|
const response = await this.getBatcher.batch({
|
|
key,
|
|
isOnDemandRevalidate
|
|
}, ({ resolve })=>{
|
|
const promise = this.handleGet(key, responseGenerator, {
|
|
incrementalCache,
|
|
isOnDemandRevalidate,
|
|
isFallback,
|
|
isRoutePPREnabled,
|
|
isPrefetch,
|
|
routeKind
|
|
}, 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$app$2d$route$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$app$2d$route$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);
|
|
// Handle null response
|
|
if (!incrementalResponseCacheEntry) {
|
|
// Unset the previous cache item if it was set so we don't use it again.
|
|
if (this.minimal_mode) this.previousCacheItem = undefined;
|
|
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.
|
|
* @returns The revalidated cache entry.
|
|
*/ async revalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved, waitUntil) {
|
|
return this.revalidateBatcher.batch(key, ()=>{
|
|
const promise = this.handleRevalidate(key, incrementalCache, isRoutePPREnabled, isFallback, responseGenerator, previousIncrementalCacheEntry, hasResolved);
|
|
// 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) {
|
|
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$app$2d$route$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) {
|
|
this.previousCacheItem = {
|
|
key,
|
|
entry: incrementalResponseCacheEntry,
|
|
expiresAt: Date.now() + 1000
|
|
};
|
|
} 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;
|
|
}
|
|
}
|
|
} //# sourceMappingURL=index.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/lib/patch-fetch.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"NEXT_PATCH_SYMBOL",
|
|
()=>NEXT_PATCH_SYMBOL,
|
|
"createPatchedFetcher",
|
|
()=>createPatchedFetcher,
|
|
"patchFetch",
|
|
()=>patchFetch,
|
|
"validateRevalidate",
|
|
()=>validateRevalidate,
|
|
"validateTags",
|
|
()=>validateTags
|
|
]);
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/dynamic-rendering.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/dynamic-rendering-utils.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$dedupe$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/dedupe-fetch.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)");
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/clone-response.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/staged-rendering.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
const isEdgeRuntime = ("TURBOPACK compile-time value", "nodejs") === 'edge';
|
|
const NEXT_PATCH_SYMBOL = Symbol.for('next-patch');
|
|
function isFetchPatched() {
|
|
return globalThis[NEXT_PATCH_SYMBOL] === true;
|
|
}
|
|
function validateRevalidate(revalidateVal, route) {
|
|
try {
|
|
let normalizedRevalidate = undefined;
|
|
if (revalidateVal === false) {
|
|
normalizedRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"];
|
|
} else if (typeof revalidateVal === 'number' && !isNaN(revalidateVal) && revalidateVal > -1) {
|
|
normalizedRevalidate = revalidateVal;
|
|
} else if (typeof revalidateVal !== 'undefined') {
|
|
throw Object.defineProperty(new Error(`Invalid revalidate value "${revalidateVal}" on "${route}", must be a non-negative number or false`), "__NEXT_ERROR_CODE", {
|
|
value: "E179",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
return normalizedRevalidate;
|
|
} catch (err) {
|
|
// handle client component error from attempting to check revalidate value
|
|
if (err instanceof Error && err.message.includes('Invalid revalidate')) {
|
|
throw err;
|
|
}
|
|
return undefined;
|
|
}
|
|
}
|
|
function validateTags(tags, description) {
|
|
const validTags = [];
|
|
const invalidTags = [];
|
|
for(let i = 0; i < tags.length; i++){
|
|
const tag = tags[i];
|
|
if (typeof tag !== 'string') {
|
|
invalidTags.push({
|
|
tag,
|
|
reason: 'invalid type, must be a string'
|
|
});
|
|
} else if (tag.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_LENGTH"]) {
|
|
invalidTags.push({
|
|
tag,
|
|
reason: `exceeded max length of ${__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_LENGTH"]}`
|
|
});
|
|
} else {
|
|
validTags.push(tag);
|
|
}
|
|
if (validTags.length > __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAG_MAX_ITEMS"]) {
|
|
console.warn(`Warning: exceeded max tag count for ${description}, dropped tags:`, tags.slice(i).join(', '));
|
|
break;
|
|
}
|
|
}
|
|
if (invalidTags.length > 0) {
|
|
console.warn(`Warning: invalid tags passed to ${description}: `);
|
|
for (const { tag, reason } of invalidTags){
|
|
console.log(`tag: "${tag}" ${reason}`);
|
|
}
|
|
}
|
|
return validTags;
|
|
}
|
|
function trackFetchMetric(workStore, ctx) {
|
|
if (!workStore.shouldTrackFetchMetrics) {
|
|
return;
|
|
}
|
|
workStore.fetchMetrics ??= [];
|
|
workStore.fetchMetrics.push({
|
|
...ctx,
|
|
end: performance.timeOrigin + performance.now(),
|
|
idx: workStore.nextFetchId || 0
|
|
});
|
|
}
|
|
async function createCachedPrerenderResponse(res, cacheKey, incrementalCacheContext, incrementalCache, revalidate, handleUnlock) {
|
|
// We are prerendering at build time or revalidate time with cacheComponents so we
|
|
// need to buffer the response so we can guarantee it can be read in a
|
|
// microtask.
|
|
const bodyBuffer = await res.arrayBuffer();
|
|
const fetchedData = {
|
|
headers: Object.fromEntries(res.headers.entries()),
|
|
body: Buffer.from(bodyBuffer).toString('base64'),
|
|
status: res.status,
|
|
url: res.url
|
|
};
|
|
// We can skip setting the serverComponentsHmrCache because we aren't in dev
|
|
// mode.
|
|
if (incrementalCacheContext) {
|
|
await incrementalCache.set(cacheKey, {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH,
|
|
data: fetchedData,
|
|
revalidate
|
|
}, incrementalCacheContext);
|
|
}
|
|
await handleUnlock();
|
|
// We return a new Response to the caller.
|
|
return new Response(bodyBuffer, {
|
|
headers: res.headers,
|
|
status: res.status,
|
|
statusText: res.statusText
|
|
});
|
|
}
|
|
async function createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheContext, incrementalCache, serverComponentsHmrCache, revalidate, input, handleUnlock) {
|
|
// We're cloning the response using this utility because there exists a bug in
|
|
// the undici library around response cloning. See the following pull request
|
|
// for more details: https://github.com/vercel/next.js/pull/73274
|
|
const [cloned1, cloned2] = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"])(res);
|
|
// We are dynamically rendering including dev mode. We want to return the
|
|
// response to the caller as soon as possible because it might stream over a
|
|
// very long time.
|
|
const cacheSetPromise = cloned1.arrayBuffer().then(async (arrayBuffer)=>{
|
|
const bodyBuffer = Buffer.from(arrayBuffer);
|
|
const fetchedData = {
|
|
headers: Object.fromEntries(cloned1.headers.entries()),
|
|
body: bodyBuffer.toString('base64'),
|
|
status: cloned1.status,
|
|
url: cloned1.url
|
|
};
|
|
serverComponentsHmrCache == null ? void 0 : serverComponentsHmrCache.set(cacheKey, fetchedData);
|
|
if (incrementalCacheContext) {
|
|
await incrementalCache.set(cacheKey, {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH,
|
|
data: fetchedData,
|
|
revalidate
|
|
}, incrementalCacheContext);
|
|
}
|
|
}).catch((error)=>console.warn(`Failed to set fetch cache`, input, error)).finally(handleUnlock);
|
|
const pendingRevalidateKey = `cache-set-${cacheKey}`;
|
|
workStore.pendingRevalidates ??= {};
|
|
if (pendingRevalidateKey in workStore.pendingRevalidates) {
|
|
// there is already a pending revalidate entry that we need to await to
|
|
// avoid race conditions
|
|
await workStore.pendingRevalidates[pendingRevalidateKey];
|
|
}
|
|
workStore.pendingRevalidates[pendingRevalidateKey] = cacheSetPromise.finally(()=>{
|
|
var _workStore_pendingRevalidates;
|
|
// If the pending revalidate is not present in the store, then we have
|
|
// nothing to delete.
|
|
if (!((_workStore_pendingRevalidates = workStore.pendingRevalidates) == null ? void 0 : _workStore_pendingRevalidates[pendingRevalidateKey])) {
|
|
return;
|
|
}
|
|
delete workStore.pendingRevalidates[pendingRevalidateKey];
|
|
});
|
|
return cloned2;
|
|
}
|
|
function createPatchedFetcher(originFetch, { workAsyncStorage, workUnitAsyncStorage }) {
|
|
// Create the patched fetch function.
|
|
const patched = async function fetch(input, init) {
|
|
var _init_method, _init_next;
|
|
let url;
|
|
try {
|
|
url = new URL(input instanceof Request ? input.url : input);
|
|
url.username = '';
|
|
url.password = '';
|
|
} catch {
|
|
// Error caused by malformed URL should be handled by native fetch
|
|
url = undefined;
|
|
}
|
|
const fetchUrl = (url == null ? void 0 : url.href) ?? '';
|
|
const method = (init == null ? void 0 : (_init_method = init.method) == null ? void 0 : _init_method.toUpperCase()) || 'GET';
|
|
// Do create a new span trace for internal fetches in the
|
|
// non-verbose mode.
|
|
const isInternal = (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next.internal) === true;
|
|
const hideSpan = process.env.NEXT_OTEL_FETCH_DISABLED === '1';
|
|
// We don't track fetch metrics for internal fetches
|
|
// so it's not critical that we have a start time, as it won't be recorded.
|
|
// This is to workaround a flaky issue where performance APIs might
|
|
// not be available and will require follow-up investigation.
|
|
const fetchStart = isInternal ? undefined : performance.timeOrigin + performance.now();
|
|
const workStore = workAsyncStorage.getStore();
|
|
const workUnitStore = workUnitAsyncStorage.getStore();
|
|
let cacheSignal = workUnitStore ? (0, __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$unit$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["getCacheSignal"])(workUnitStore) : null;
|
|
if (cacheSignal) {
|
|
cacheSignal.beginRead();
|
|
}
|
|
const result = (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$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().trace(isInternal ? __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$app$2d$route$5d$__$28$ecmascript$29$__["NextNodeServerSpan"].internalFetch : __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$app$2d$route$5d$__$28$ecmascript$29$__["AppRenderSpan"].fetch, {
|
|
hideSpan,
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["SpanKind"].CLIENT,
|
|
spanName: [
|
|
'fetch',
|
|
method,
|
|
fetchUrl
|
|
].filter(Boolean).join(' '),
|
|
attributes: {
|
|
'http.url': fetchUrl,
|
|
'http.method': method,
|
|
'net.peer.name': url == null ? void 0 : url.hostname,
|
|
'net.peer.port': (url == null ? void 0 : url.port) || undefined
|
|
}
|
|
}, async ()=>{
|
|
var _getRequestMeta;
|
|
// If this is an internal fetch, we should not do any special treatment.
|
|
if (isInternal) {
|
|
return originFetch(input, init);
|
|
}
|
|
// If the workStore is not available, we can't do any
|
|
// special treatment of fetch, therefore fallback to the original
|
|
// fetch implementation.
|
|
if (!workStore) {
|
|
return originFetch(input, init);
|
|
}
|
|
// We should also fallback to the original fetch implementation if we
|
|
// are in draft mode, it does not constitute a static generation.
|
|
if (workStore.isDraftMode) {
|
|
return originFetch(input, init);
|
|
}
|
|
const isRequestInput = input && typeof input === 'object' && typeof input.method === 'string';
|
|
const getRequestMeta = (field)=>{
|
|
// If request input is present but init is not, retrieve from input first.
|
|
const value = init == null ? void 0 : init[field];
|
|
return value || (isRequestInput ? input[field] : null);
|
|
};
|
|
let finalRevalidate = undefined;
|
|
const getNextField = (field)=>{
|
|
var _init_next, _init_next1, _input_next;
|
|
return typeof (init == null ? void 0 : (_init_next = init.next) == null ? void 0 : _init_next[field]) !== 'undefined' ? init == null ? void 0 : (_init_next1 = init.next) == null ? void 0 : _init_next1[field] : isRequestInput ? (_input_next = input.next) == null ? void 0 : _input_next[field] : undefined;
|
|
};
|
|
// RequestInit doesn't keep extra fields e.g. next so it's
|
|
// only available if init is used separate
|
|
const originalFetchRevalidate = getNextField('revalidate');
|
|
let currentFetchRevalidate = originalFetchRevalidate;
|
|
const tags = validateTags(getNextField('tags') || [], `fetch ${input.toString()}`);
|
|
let revalidateStore;
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender':
|
|
case 'prerender-runtime':
|
|
// TODO: Stop accumulating tags in client prerender. (fallthrough)
|
|
case 'prerender-client':
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
revalidateStore = workUnitStore;
|
|
break;
|
|
case 'request':
|
|
case 'unstable-cache':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
if (revalidateStore) {
|
|
if (Array.isArray(tags)) {
|
|
// Collect tags onto parent caches or parent prerenders.
|
|
const collectedTags = revalidateStore.tags ?? (revalidateStore.tags = []);
|
|
for (const tag of tags){
|
|
if (!collectedTags.includes(tag)) {
|
|
collectedTags.push(tag);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const implicitTags = workUnitStore == null ? void 0 : workUnitStore.implicitTags;
|
|
let pageFetchCacheMode = workStore.fetchCache;
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'unstable-cache':
|
|
// Inside unstable-cache we treat it the same as force-no-store on
|
|
// the page.
|
|
pageFetchCacheMode = 'force-no-store';
|
|
break;
|
|
case 'prerender':
|
|
case 'prerender-client':
|
|
case 'prerender-runtime':
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'request':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
const isUsingNoStore = !!workStore.isUnstableNoStore;
|
|
let currentFetchCacheConfig = getRequestMeta('cache');
|
|
let cacheReason = '';
|
|
let cacheWarning;
|
|
if (typeof currentFetchCacheConfig === 'string' && typeof currentFetchRevalidate !== 'undefined') {
|
|
// If the revalidate value conflicts with the cache value, we should warn the user and unset the conflicting values.
|
|
const isConflictingRevalidate = currentFetchCacheConfig === 'force-cache' && currentFetchRevalidate === 0 || // revalidate: >0 or revalidate: false and cache: no-store
|
|
currentFetchCacheConfig === 'no-store' && (currentFetchRevalidate > 0 || currentFetchRevalidate === false);
|
|
if (isConflictingRevalidate) {
|
|
cacheWarning = `Specified "cache: ${currentFetchCacheConfig}" and "revalidate: ${currentFetchRevalidate}", only one should be specified.`;
|
|
currentFetchCacheConfig = undefined;
|
|
currentFetchRevalidate = undefined;
|
|
}
|
|
}
|
|
const hasExplicitFetchCacheOptOut = currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store' || // the fetch isn't explicitly caching and the segment level cache config signals not to cache
|
|
// note: `pageFetchCacheMode` is also set by being in an unstable_cache context.
|
|
pageFetchCacheMode === 'force-no-store' || pageFetchCacheMode === 'only-no-store';
|
|
// If no explicit fetch cache mode is set, but dynamic = `force-dynamic` is set,
|
|
// we shouldn't consider caching the fetch. This is because the `dynamic` cache
|
|
// is considered a "top-level" cache mode, whereas something like `fetchCache` is more
|
|
// fine-grained. Top-level modes are responsible for setting reasonable defaults for the
|
|
// other configurations.
|
|
const noFetchConfigAndForceDynamic = !pageFetchCacheMode && !currentFetchCacheConfig && !currentFetchRevalidate && workStore.forceDynamic;
|
|
if (// which will signal the cache to not revalidate
|
|
currentFetchCacheConfig === 'force-cache' && typeof currentFetchRevalidate === 'undefined') {
|
|
currentFetchRevalidate = false;
|
|
} else if (hasExplicitFetchCacheOptOut || noFetchConfigAndForceDynamic) {
|
|
currentFetchRevalidate = 0;
|
|
}
|
|
if (currentFetchCacheConfig === 'no-cache' || currentFetchCacheConfig === 'no-store') {
|
|
cacheReason = `cache: ${currentFetchCacheConfig}`;
|
|
}
|
|
finalRevalidate = validateRevalidate(currentFetchRevalidate, workStore.route);
|
|
const _headers = getRequestMeta('headers');
|
|
const initHeaders = typeof (_headers == null ? void 0 : _headers.get) === 'function' ? _headers : new Headers(_headers || {});
|
|
const hasUnCacheableHeader = initHeaders.get('authorization') || initHeaders.get('cookie');
|
|
const isUnCacheableMethod = ![
|
|
'get',
|
|
'head'
|
|
].includes(((_getRequestMeta = getRequestMeta('method')) == null ? void 0 : _getRequestMeta.toLowerCase()) || 'get');
|
|
/**
|
|
* We automatically disable fetch caching under the following conditions:
|
|
* - Fetch cache configs are not set. Specifically:
|
|
* - A page fetch cache mode is not set (export const fetchCache=...)
|
|
* - A fetch cache mode is not set in the fetch call (fetch(url, { cache: ... }))
|
|
* or the fetch cache mode is set to 'default'
|
|
* - A fetch revalidate value is not set in the fetch call (fetch(url, { revalidate: ... }))
|
|
* - OR the fetch comes after a configuration that triggered dynamic rendering (e.g., reading cookies())
|
|
* and the fetch was considered uncacheable (e.g., POST method or has authorization headers)
|
|
*/ const hasNoExplicitCacheConfig = pageFetchCacheMode == undefined && // eslint-disable-next-line eqeqeq
|
|
(currentFetchCacheConfig == undefined || // when considering whether to opt into the default "no-cache" fetch semantics,
|
|
// a "default" cache config should be treated the same as no cache config
|
|
currentFetchCacheConfig === 'default') && // eslint-disable-next-line eqeqeq
|
|
currentFetchRevalidate == undefined;
|
|
let autoNoCache = Boolean((hasUnCacheableHeader || isUnCacheableMethod) && (revalidateStore == null ? void 0 : revalidateStore.revalidate) === 0);
|
|
let isImplicitBuildTimeCache = false;
|
|
if (!autoNoCache && hasNoExplicitCacheConfig) {
|
|
// We don't enable automatic no-cache behavior during build-time
|
|
// prerendering so that we can still leverage the fetch cache between
|
|
// export workers.
|
|
if (workStore.isBuildTimePrerendering) {
|
|
isImplicitBuildTimeCache = true;
|
|
} else {
|
|
autoNoCache = true;
|
|
}
|
|
}
|
|
// If we have no cache config, and we're in Dynamic I/O prerendering,
|
|
// it'll be a dynamic call. We don't have to issue that dynamic call.
|
|
if (hasNoExplicitCacheConfig && workUnitStore !== undefined) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender':
|
|
case 'prerender-runtime':
|
|
// While we don't want to do caching in the client scope we know the
|
|
// fetch will be dynamic for cacheComponents so we may as well avoid the
|
|
// call here. (fallthrough)
|
|
case 'prerender-client':
|
|
if (cacheSignal) {
|
|
cacheSignal.endRead();
|
|
cacheSignal = null;
|
|
}
|
|
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()');
|
|
case 'request':
|
|
if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) {
|
|
if (cacheSignal) {
|
|
cacheSignal.endRead();
|
|
cacheSignal = null;
|
|
}
|
|
await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic);
|
|
}
|
|
break;
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
case 'unstable-cache':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
switch(pageFetchCacheMode){
|
|
case 'force-no-store':
|
|
{
|
|
cacheReason = 'fetchCache = force-no-store';
|
|
break;
|
|
}
|
|
case 'only-no-store':
|
|
{
|
|
if (currentFetchCacheConfig === 'force-cache' || typeof finalRevalidate !== 'undefined' && finalRevalidate > 0) {
|
|
throw Object.defineProperty(new Error(`cache: 'force-cache' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-no-store'`), "__NEXT_ERROR_CODE", {
|
|
value: "E448",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
cacheReason = 'fetchCache = only-no-store';
|
|
break;
|
|
}
|
|
case 'only-cache':
|
|
{
|
|
if (currentFetchCacheConfig === 'no-store') {
|
|
throw Object.defineProperty(new Error(`cache: 'no-store' used on fetch for ${fetchUrl} with 'export const fetchCache = 'only-cache'`), "__NEXT_ERROR_CODE", {
|
|
value: "E521",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
break;
|
|
}
|
|
case 'force-cache':
|
|
{
|
|
if (typeof currentFetchRevalidate === 'undefined' || currentFetchRevalidate === 0) {
|
|
cacheReason = 'fetchCache = force-cache';
|
|
finalRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"];
|
|
}
|
|
break;
|
|
}
|
|
case 'default-cache':
|
|
case 'default-no-store':
|
|
case 'auto':
|
|
case undefined:
|
|
break;
|
|
default:
|
|
pageFetchCacheMode;
|
|
}
|
|
if (typeof finalRevalidate === 'undefined') {
|
|
if (pageFetchCacheMode === 'default-cache' && !isUsingNoStore) {
|
|
finalRevalidate = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"];
|
|
cacheReason = 'fetchCache = default-cache';
|
|
} else if (pageFetchCacheMode === 'default-no-store') {
|
|
finalRevalidate = 0;
|
|
cacheReason = 'fetchCache = default-no-store';
|
|
} else if (isUsingNoStore) {
|
|
finalRevalidate = 0;
|
|
cacheReason = 'noStore call';
|
|
} else if (autoNoCache) {
|
|
finalRevalidate = 0;
|
|
cacheReason = 'auto no cache';
|
|
} else {
|
|
// TODO: should we consider this case an invariant?
|
|
cacheReason = 'auto cache';
|
|
finalRevalidate = revalidateStore ? revalidateStore.revalidate : __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"];
|
|
}
|
|
} else if (!cacheReason) {
|
|
cacheReason = `revalidate: ${finalRevalidate}`;
|
|
}
|
|
if (// `revalidate: 0` values
|
|
!(workStore.forceStatic && finalRevalidate === 0) && // we don't consider autoNoCache to switch to dynamic for ISR
|
|
!autoNoCache && // If the revalidate value isn't currently set or the value is less
|
|
// than the current revalidate value, we should update the revalidate
|
|
// value.
|
|
revalidateStore && finalRevalidate < revalidateStore.revalidate) {
|
|
// If we were setting the revalidate value to 0, we should try to
|
|
// postpone instead first.
|
|
if (finalRevalidate === 0) {
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender':
|
|
case 'prerender-client':
|
|
case 'prerender-runtime':
|
|
if (cacheSignal) {
|
|
cacheSignal.endRead();
|
|
cacheSignal = null;
|
|
}
|
|
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()');
|
|
case 'request':
|
|
if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) {
|
|
if (cacheSignal) {
|
|
cacheSignal.endRead();
|
|
cacheSignal = null;
|
|
}
|
|
await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic);
|
|
}
|
|
break;
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
case 'unstable-cache':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`);
|
|
}
|
|
// We only want to set the revalidate store's revalidate time if it
|
|
// was explicitly set for the fetch call, i.e.
|
|
// originalFetchRevalidate.
|
|
if (revalidateStore && originalFetchRevalidate === finalRevalidate) {
|
|
revalidateStore.revalidate = finalRevalidate;
|
|
}
|
|
}
|
|
const isCacheableRevalidate = typeof finalRevalidate === 'number' && finalRevalidate > 0;
|
|
let cacheKey;
|
|
const { incrementalCache } = workStore;
|
|
let isHmrRefresh = false;
|
|
let serverComponentsHmrCache;
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'request':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
isHmrRefresh = workUnitStore.isHmrRefresh ?? false;
|
|
serverComponentsHmrCache = workUnitStore.serverComponentsHmrCache;
|
|
break;
|
|
case 'prerender':
|
|
case 'prerender-client':
|
|
case 'prerender-runtime':
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'unstable-cache':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
if (incrementalCache && (isCacheableRevalidate || serverComponentsHmrCache)) {
|
|
try {
|
|
cacheKey = await incrementalCache.generateCacheKey(fetchUrl, isRequestInput ? input : init);
|
|
} catch (err) {
|
|
console.error(`Failed to generate cache key for`, input);
|
|
}
|
|
}
|
|
const fetchIdx = workStore.nextFetchId ?? 1;
|
|
workStore.nextFetchId = fetchIdx + 1;
|
|
let handleUnlock = ()=>{};
|
|
const doOriginalFetch = async (isStale, cacheReasonOverride)=>{
|
|
const requestInputFields = [
|
|
'cache',
|
|
'credentials',
|
|
'headers',
|
|
'integrity',
|
|
'keepalive',
|
|
'method',
|
|
'mode',
|
|
'redirect',
|
|
'referrer',
|
|
'referrerPolicy',
|
|
'window',
|
|
'duplex',
|
|
// don't pass through signal when revalidating
|
|
...isStale ? [] : [
|
|
'signal'
|
|
]
|
|
];
|
|
if (isRequestInput) {
|
|
const reqInput = input;
|
|
const reqOptions = {
|
|
body: reqInput._ogBody || reqInput.body
|
|
};
|
|
for (const field of requestInputFields){
|
|
// @ts-expect-error custom fields
|
|
reqOptions[field] = reqInput[field];
|
|
}
|
|
input = new Request(reqInput.url, reqOptions);
|
|
} else if (init) {
|
|
const { _ogBody, body, signal, ...otherInput } = init;
|
|
init = {
|
|
...otherInput,
|
|
body: _ogBody || body,
|
|
signal: isStale ? undefined : signal
|
|
};
|
|
}
|
|
// add metadata to init without editing the original
|
|
const clonedInit = {
|
|
...init,
|
|
next: {
|
|
...init == null ? void 0 : init.next,
|
|
fetchType: 'origin',
|
|
fetchIdx
|
|
}
|
|
};
|
|
return originFetch(input, clonedInit).then(async (res)=>{
|
|
if (!isStale && fetchStart) {
|
|
trackFetchMetric(workStore, {
|
|
start: fetchStart,
|
|
url: fetchUrl,
|
|
cacheReason: cacheReasonOverride || cacheReason,
|
|
cacheStatus: finalRevalidate === 0 || cacheReasonOverride ? 'skip' : 'miss',
|
|
cacheWarning,
|
|
status: res.status,
|
|
method: clonedInit.method || 'GET'
|
|
});
|
|
}
|
|
if (res.status === 200 && incrementalCache && cacheKey && (isCacheableRevalidate || serverComponentsHmrCache)) {
|
|
const normalizedRevalidate = finalRevalidate >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR"] : finalRevalidate;
|
|
const incrementalCacheConfig = isCacheableRevalidate ? {
|
|
fetchCache: true,
|
|
fetchUrl,
|
|
fetchIdx,
|
|
tags,
|
|
isImplicitBuildTimeCache
|
|
} : undefined;
|
|
switch(workUnitStore == null ? void 0 : workUnitStore.type){
|
|
case 'prerender':
|
|
case 'prerender-client':
|
|
case 'prerender-runtime':
|
|
return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock);
|
|
case 'request':
|
|
if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering && workUnitStore.cacheSignal) {
|
|
// We're filling caches for a staged render,
|
|
// so we need to wait for the response to finish instead of streaming.
|
|
return createCachedPrerenderResponse(res, cacheKey, incrementalCacheConfig, incrementalCache, normalizedRevalidate, handleUnlock);
|
|
}
|
|
// fallthrough
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
case 'unstable-cache':
|
|
case undefined:
|
|
return createCachedDynamicResponse(workStore, res, cacheKey, incrementalCacheConfig, incrementalCache, serverComponentsHmrCache, normalizedRevalidate, input, handleUnlock);
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
// we had response that we determined shouldn't be cached so we return it
|
|
// and don't cache it. This also needs to unlock the cache lock we acquired.
|
|
await handleUnlock();
|
|
return res;
|
|
}).catch((error)=>{
|
|
handleUnlock();
|
|
throw error;
|
|
});
|
|
};
|
|
let cacheReasonOverride;
|
|
let isForegroundRevalidate = false;
|
|
let isHmrRefreshCache = false;
|
|
if (cacheKey && incrementalCache) {
|
|
let cachedFetchData;
|
|
if (isHmrRefresh && serverComponentsHmrCache) {
|
|
cachedFetchData = serverComponentsHmrCache.get(cacheKey);
|
|
isHmrRefreshCache = true;
|
|
}
|
|
if (isCacheableRevalidate && !cachedFetchData) {
|
|
handleUnlock = await incrementalCache.lock(cacheKey);
|
|
const entry = workStore.isOnDemandRevalidate ? null : await incrementalCache.get(cacheKey, {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["IncrementalCacheKind"].FETCH,
|
|
revalidate: finalRevalidate,
|
|
fetchUrl,
|
|
fetchIdx,
|
|
tags,
|
|
softTags: implicitTags == null ? void 0 : implicitTags.tags
|
|
});
|
|
if (hasNoExplicitCacheConfig && workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender':
|
|
case 'prerender-client':
|
|
case 'prerender-runtime':
|
|
// We sometimes use the cache to dedupe fetches that do not
|
|
// specify a cache configuration. In these cases we want to
|
|
// make sure we still exclude them from prerenders if
|
|
// cacheComponents is on so we introduce an artificial task boundary
|
|
// here.
|
|
await getTimeoutBoundary();
|
|
break;
|
|
case 'request':
|
|
if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) {
|
|
await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic);
|
|
}
|
|
break;
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
case 'unstable-cache':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
if (entry) {
|
|
await handleUnlock();
|
|
} else {
|
|
// in dev, incremental cache response will be null in case the browser adds `cache-control: no-cache` in the request headers
|
|
// TODO: it seems like we also hit this after revalidates in dev?
|
|
cacheReasonOverride = 'cache-control: no-cache (hard refresh)';
|
|
}
|
|
if ((entry == null ? void 0 : entry.value) && entry.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$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].FETCH) {
|
|
// when stale and is revalidating we wait for fresh data
|
|
// so the revalidated entry has the updated data
|
|
if (workStore.isStaticGeneration && entry.isStale) {
|
|
isForegroundRevalidate = true;
|
|
} else {
|
|
if (entry.isStale) {
|
|
workStore.pendingRevalidates ??= {};
|
|
if (!workStore.pendingRevalidates[cacheKey]) {
|
|
const pendingRevalidate = doOriginalFetch(true).then(async (response)=>({
|
|
body: await response.arrayBuffer(),
|
|
headers: response.headers,
|
|
status: response.status,
|
|
statusText: response.statusText
|
|
})).finally(()=>{
|
|
workStore.pendingRevalidates ??= {};
|
|
delete workStore.pendingRevalidates[cacheKey || ''];
|
|
});
|
|
// Attach the empty catch here so we don't get a "unhandled
|
|
// promise rejection" warning.
|
|
pendingRevalidate.catch(console.error);
|
|
workStore.pendingRevalidates[cacheKey] = pendingRevalidate;
|
|
}
|
|
}
|
|
cachedFetchData = entry.value.data;
|
|
}
|
|
}
|
|
}
|
|
if (cachedFetchData) {
|
|
if (fetchStart) {
|
|
trackFetchMetric(workStore, {
|
|
start: fetchStart,
|
|
url: fetchUrl,
|
|
cacheReason,
|
|
cacheStatus: isHmrRefreshCache ? 'hmr' : 'hit',
|
|
cacheWarning,
|
|
status: cachedFetchData.status || 200,
|
|
method: (init == null ? void 0 : init.method) || 'GET'
|
|
});
|
|
}
|
|
const response = new Response(Buffer.from(cachedFetchData.body, 'base64'), {
|
|
headers: cachedFetchData.headers,
|
|
status: cachedFetchData.status
|
|
});
|
|
Object.defineProperty(response, 'url', {
|
|
value: cachedFetchData.url
|
|
});
|
|
return response;
|
|
}
|
|
}
|
|
if ((workStore.isStaticGeneration || ("TURBOPACK compile-time value", "development") === 'development' && ("TURBOPACK compile-time value", false) && workUnitStore && // eslint-disable-next-line no-restricted-syntax
|
|
workUnitStore.type === 'request' && workUnitStore.stagedRendering) && init && typeof init === 'object') {
|
|
const { cache } = init;
|
|
// Delete `cache` property as Cloudflare Workers will throw an error
|
|
if ("TURBOPACK compile-time falsy", 0) //TURBOPACK unreachable
|
|
;
|
|
if (cache === 'no-store') {
|
|
// If enabled, we should bail out of static generation.
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender':
|
|
case 'prerender-client':
|
|
case 'prerender-runtime':
|
|
if (cacheSignal) {
|
|
cacheSignal.endRead();
|
|
cacheSignal = null;
|
|
}
|
|
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()');
|
|
case 'request':
|
|
if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) {
|
|
if (cacheSignal) {
|
|
cacheSignal.endRead();
|
|
cacheSignal = null;
|
|
}
|
|
await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic);
|
|
}
|
|
break;
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
case 'unstable-cache':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `no-store fetch ${input} ${workStore.route}`);
|
|
}
|
|
const hasNextConfig = 'next' in init;
|
|
const { next = {} } = init;
|
|
if (typeof next.revalidate === 'number' && revalidateStore && next.revalidate < revalidateStore.revalidate) {
|
|
if (next.revalidate === 0) {
|
|
// If enabled, we should bail out of static generation.
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender':
|
|
case 'prerender-client':
|
|
case 'prerender-runtime':
|
|
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$dynamic$2d$rendering$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["makeHangingPromise"])(workUnitStore.renderSignal, workStore.route, 'fetch()');
|
|
case 'request':
|
|
if (("TURBOPACK compile-time value", "development") === 'development' && workUnitStore.stagedRendering) {
|
|
await workUnitStore.stagedRendering.waitForStage(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$staged$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RenderStage"].Dynamic);
|
|
}
|
|
break;
|
|
case 'cache':
|
|
case 'private-cache':
|
|
case 'unstable-cache':
|
|
case 'prerender-legacy':
|
|
case 'prerender-ppr':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$dynamic$2d$rendering$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["markCurrentScopeAsDynamic"])(workStore, workUnitStore, `revalidate: 0 fetch ${input} ${workStore.route}`);
|
|
}
|
|
if (!workStore.forceStatic || next.revalidate !== 0) {
|
|
revalidateStore.revalidate = next.revalidate;
|
|
}
|
|
}
|
|
if (hasNextConfig) delete init.next;
|
|
}
|
|
// if we are revalidating the whole page via time or on-demand and
|
|
// the fetch cache entry is stale we should still de-dupe the
|
|
// origin hit if it's a cache-able entry
|
|
if (cacheKey && isForegroundRevalidate) {
|
|
const pendingRevalidateKey = cacheKey;
|
|
workStore.pendingRevalidates ??= {};
|
|
let pendingRevalidate = workStore.pendingRevalidates[pendingRevalidateKey];
|
|
if (pendingRevalidate) {
|
|
const revalidatedResult = await pendingRevalidate;
|
|
return new Response(revalidatedResult.body, {
|
|
headers: revalidatedResult.headers,
|
|
status: revalidatedResult.status,
|
|
statusText: revalidatedResult.statusText
|
|
});
|
|
}
|
|
// We used to just resolve the Response and clone it however for
|
|
// static generation with cacheComponents we need the response to be able to
|
|
// be resolved in a microtask and cloning the response will never have
|
|
// a body that can resolve in a microtask in node (as observed through
|
|
// experimentation) So instead we await the body and then when it is
|
|
// available we construct manually cloned Response objects with the
|
|
// body as an ArrayBuffer. This will be resolvable in a microtask
|
|
// making it compatible with cacheComponents.
|
|
const pendingResponse = doOriginalFetch(true, cacheReasonOverride) // We're cloning the response using this utility because there
|
|
// exists a bug in the undici library around response cloning.
|
|
// See the following pull request for more details:
|
|
// https://github.com/vercel/next.js/pull/73274
|
|
.then(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$clone$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["cloneResponse"]);
|
|
pendingRevalidate = pendingResponse.then(async (responses)=>{
|
|
const response = responses[0];
|
|
return {
|
|
body: await response.arrayBuffer(),
|
|
headers: response.headers,
|
|
status: response.status,
|
|
statusText: response.statusText
|
|
};
|
|
}).finally(()=>{
|
|
var _workStore_pendingRevalidates;
|
|
// If the pending revalidate is not present in the store, then
|
|
// we have nothing to delete.
|
|
if (!((_workStore_pendingRevalidates = workStore.pendingRevalidates) == null ? void 0 : _workStore_pendingRevalidates[pendingRevalidateKey])) {
|
|
return;
|
|
}
|
|
delete workStore.pendingRevalidates[pendingRevalidateKey];
|
|
});
|
|
// Attach the empty catch here so we don't get a "unhandled promise
|
|
// rejection" warning
|
|
pendingRevalidate.catch(()=>{});
|
|
workStore.pendingRevalidates[pendingRevalidateKey] = pendingRevalidate;
|
|
return pendingResponse.then((responses)=>responses[1]);
|
|
} else {
|
|
return doOriginalFetch(false, cacheReasonOverride);
|
|
}
|
|
});
|
|
if (cacheSignal) {
|
|
try {
|
|
return await result;
|
|
} finally{
|
|
if (cacheSignal) {
|
|
cacheSignal.endRead();
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
};
|
|
// Attach the necessary properties to the patched fetch function.
|
|
// We don't use this to determine if the fetch function has been patched,
|
|
// but for external consumers to determine if the fetch function has been
|
|
// patched.
|
|
patched.__nextPatched = true;
|
|
patched.__nextGetStaticStore = ()=>workAsyncStorage;
|
|
patched._nextOriginalFetch = originFetch;
|
|
globalThis[NEXT_PATCH_SYMBOL] = true;
|
|
// Assign the function name also as a name property, so that it's preserved
|
|
// even when mangling is enabled.
|
|
Object.defineProperty(patched, 'name', {
|
|
value: 'fetch',
|
|
writable: false
|
|
});
|
|
return patched;
|
|
}
|
|
function patchFetch(options) {
|
|
// If we've already patched fetch, we should not patch it again.
|
|
if (isFetchPatched()) return;
|
|
// Grab the original fetch function. We'll attach this so we can use it in
|
|
// the patched fetch function.
|
|
const original = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$dedupe$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createDedupeFetch"])(globalThis.fetch);
|
|
// Set the global fetch to the patched fetch.
|
|
globalThis.fetch = createPatchedFetcher(original, options);
|
|
}
|
|
let currentTimeoutBoundary = null;
|
|
function getTimeoutBoundary() {
|
|
if (!currentTimeoutBoundary) {
|
|
currentTimeoutBoundary = new Promise((r)=>{
|
|
setTimeout(()=>{
|
|
currentTimeoutBoundary = null;
|
|
r();
|
|
}, 0);
|
|
});
|
|
}
|
|
return currentTimeoutBoundary;
|
|
} //# sourceMappingURL=patch-fetch.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
/**
|
|
* For a given page path, this function ensures that there is a leading slash.
|
|
* If there is not a leading slash, one is added, otherwise it is noop.
|
|
*/ __turbopack_context__.s([
|
|
"ensureLeadingSlash",
|
|
()=>ensureLeadingSlash
|
|
]);
|
|
function ensureLeadingSlash(path) {
|
|
return path.startsWith('/') ? path : `/${path}`;
|
|
} //# sourceMappingURL=ensure-leading-slash.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"DEFAULT_SEGMENT_KEY",
|
|
()=>DEFAULT_SEGMENT_KEY,
|
|
"PAGE_SEGMENT_KEY",
|
|
()=>PAGE_SEGMENT_KEY,
|
|
"addSearchParamsIfPageSegment",
|
|
()=>addSearchParamsIfPageSegment,
|
|
"computeSelectedLayoutSegment",
|
|
()=>computeSelectedLayoutSegment,
|
|
"getSegmentValue",
|
|
()=>getSegmentValue,
|
|
"getSelectedLayoutSegmentPath",
|
|
()=>getSelectedLayoutSegmentPath,
|
|
"isGroupSegment",
|
|
()=>isGroupSegment,
|
|
"isParallelRouteSegment",
|
|
()=>isParallelRouteSegment
|
|
]);
|
|
function getSegmentValue(segment) {
|
|
return Array.isArray(segment) ? segment[1] : segment;
|
|
}
|
|
function isGroupSegment(segment) {
|
|
// Use array[0] for performant purpose
|
|
return segment[0] === '(' && segment.endsWith(')');
|
|
}
|
|
function isParallelRouteSegment(segment) {
|
|
return segment.startsWith('@') && segment !== '@children';
|
|
}
|
|
function addSearchParamsIfPageSegment(segment, searchParams) {
|
|
const isPageSegment = segment.includes(PAGE_SEGMENT_KEY);
|
|
if (isPageSegment) {
|
|
const stringifiedQuery = JSON.stringify(searchParams);
|
|
return stringifiedQuery !== '{}' ? PAGE_SEGMENT_KEY + '?' + stringifiedQuery : PAGE_SEGMENT_KEY;
|
|
}
|
|
return segment;
|
|
}
|
|
function computeSelectedLayoutSegment(segments, parallelRouteKey) {
|
|
if (!segments || segments.length === 0) {
|
|
return null;
|
|
}
|
|
// For 'children', use first segment; for other parallel routes, use last segment
|
|
const rawSegment = parallelRouteKey === 'children' ? segments[0] : segments[segments.length - 1];
|
|
// If the default slot is showing, return null since it's not technically "selected" (it's a fallback)
|
|
// Returning an internal value like `__DEFAULT__` would be confusing
|
|
return rawSegment === DEFAULT_SEGMENT_KEY ? null : rawSegment;
|
|
}
|
|
function getSelectedLayoutSegmentPath(tree, parallelRouteKey, first = true, segmentPath = []) {
|
|
let node;
|
|
if (first) {
|
|
// Use the provided parallel route key on the first parallel route
|
|
node = tree[1][parallelRouteKey];
|
|
} else {
|
|
// After first parallel route prefer children, if there's no children pick the first parallel route.
|
|
const parallelRoutes = tree[1];
|
|
node = parallelRoutes.children ?? Object.values(parallelRoutes)[0];
|
|
}
|
|
if (!node) return segmentPath;
|
|
const segment = node[0];
|
|
let segmentValue = getSegmentValue(segment);
|
|
if (!segmentValue || segmentValue.startsWith(PAGE_SEGMENT_KEY)) {
|
|
return segmentPath;
|
|
}
|
|
segmentPath.push(segmentValue);
|
|
return getSelectedLayoutSegmentPath(node, parallelRouteKey, false, segmentPath);
|
|
}
|
|
const PAGE_SEGMENT_KEY = '__PAGE__';
|
|
const DEFAULT_SEGMENT_KEY = '__DEFAULT__'; //# sourceMappingURL=segment.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"normalizeAppPath",
|
|
()=>normalizeAppPath,
|
|
"normalizeRscURL",
|
|
()=>normalizeRscURL
|
|
]);
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/page-path/ensure-leading-slash.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/segment.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
function normalizeAppPath(route) {
|
|
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$page$2d$path$2f$ensure$2d$leading$2d$slash$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ensureLeadingSlash"])(route.split('/').reduce((pathname, segment, index, segments)=>{
|
|
// Empty segments are ignored.
|
|
if (!segment) {
|
|
return pathname;
|
|
}
|
|
// Groups are ignored.
|
|
if ((0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$segment$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["isGroupSegment"])(segment)) {
|
|
return pathname;
|
|
}
|
|
// Parallel segments are ignored.
|
|
if (segment[0] === '@') {
|
|
return pathname;
|
|
}
|
|
// The last segment (if it's a leaf) should be ignored.
|
|
if ((segment === 'page' || segment === 'route') && index === segments.length - 1) {
|
|
return pathname;
|
|
}
|
|
return `${pathname}/${segment}`;
|
|
}, ''));
|
|
}
|
|
function normalizeRscURL(url) {
|
|
return url.replace(/\.rsc($|\?)/, '$1');
|
|
} //# sourceMappingURL=app-paths.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/app-render/encryption-utils.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"arrayBufferToString",
|
|
()=>arrayBufferToString,
|
|
"decrypt",
|
|
()=>decrypt,
|
|
"encrypt",
|
|
()=>encrypt,
|
|
"getActionEncryptionKey",
|
|
()=>getActionEncryptionKey,
|
|
"getClientReferenceManifestForRsc",
|
|
()=>getClientReferenceManifestForRsc,
|
|
"getServerModuleMap",
|
|
()=>getServerModuleMap,
|
|
"setReferenceManifestsSingleton",
|
|
()=>setReferenceManifestsSingleton,
|
|
"stringToUint8Array",
|
|
()=>stringToUint8Array
|
|
]);
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/invariant-error.js [app-route] (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$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)");
|
|
;
|
|
;
|
|
;
|
|
let __next_loaded_action_key;
|
|
function arrayBufferToString(buffer) {
|
|
const bytes = new Uint8Array(buffer);
|
|
const len = bytes.byteLength;
|
|
// @anonrig: V8 has a limit of 65535 arguments in a function.
|
|
// For len < 65535, this is faster.
|
|
// https://github.com/vercel/next.js/pull/56377#pullrequestreview-1656181623
|
|
if (len < 65535) {
|
|
return String.fromCharCode.apply(null, bytes);
|
|
}
|
|
let binary = '';
|
|
for(let i = 0; i < len; i++){
|
|
binary += String.fromCharCode(bytes[i]);
|
|
}
|
|
return binary;
|
|
}
|
|
function stringToUint8Array(binary) {
|
|
const len = binary.length;
|
|
const arr = new Uint8Array(len);
|
|
for(let i = 0; i < len; i++){
|
|
arr[i] = binary.charCodeAt(i);
|
|
}
|
|
return arr;
|
|
}
|
|
function encrypt(key, iv, data) {
|
|
return crypto.subtle.encrypt({
|
|
name: 'AES-GCM',
|
|
iv
|
|
}, key, data);
|
|
}
|
|
function decrypt(key, iv, data) {
|
|
return crypto.subtle.decrypt({
|
|
name: 'AES-GCM',
|
|
iv
|
|
}, key, data);
|
|
}
|
|
// This is a global singleton that is used to encode/decode the action bound args from
|
|
// the closure. This can't be using a AsyncLocalStorage as it might happen on the module
|
|
// level. Since the client reference manifest won't be mutated, let's use a global singleton
|
|
// to keep it.
|
|
const SERVER_ACTION_MANIFESTS_SINGLETON = Symbol.for('next.server.action-manifests');
|
|
function setReferenceManifestsSingleton({ page, clientReferenceManifest, serverActionsManifest, serverModuleMap }) {
|
|
var _globalThis_SERVER_ACTION_MANIFESTS_SINGLETON;
|
|
// @ts-expect-error
|
|
const clientReferenceManifestsPerPage = (_globalThis_SERVER_ACTION_MANIFESTS_SINGLETON = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON]) == null ? void 0 : _globalThis_SERVER_ACTION_MANIFESTS_SINGLETON.clientReferenceManifestsPerPage;
|
|
// @ts-expect-error
|
|
globalThis[SERVER_ACTION_MANIFESTS_SINGLETON] = {
|
|
clientReferenceManifestsPerPage: {
|
|
...clientReferenceManifestsPerPage,
|
|
[(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(page)]: clientReferenceManifest
|
|
},
|
|
serverActionsManifest,
|
|
serverModuleMap
|
|
};
|
|
}
|
|
function getServerModuleMap() {
|
|
const serverActionsManifestSingleton = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON];
|
|
if (!serverActionsManifestSingleton) {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Missing manifest for Server Actions.'), "__NEXT_ERROR_CODE", {
|
|
value: "E606",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
return serverActionsManifestSingleton.serverModuleMap;
|
|
}
|
|
function getClientReferenceManifestForRsc() {
|
|
const serverActionsManifestSingleton = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON];
|
|
if (!serverActionsManifestSingleton) {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Missing manifest for Server Actions.'), "__NEXT_ERROR_CODE", {
|
|
value: "E606",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const { clientReferenceManifestsPerPage } = serverActionsManifestSingleton;
|
|
const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore();
|
|
if (!workStore) {
|
|
// If there's no work store defined, we can assume that a client reference
|
|
// manifest is needed during module evaluation, e.g. to create a server
|
|
// action using a higher-order function. This might also use client
|
|
// components which need to be serialized by Flight, and therefore client
|
|
// references need to be resolvable. To make this work, we're returning a
|
|
// merged manifest across all pages. This is fine as long as the module IDs
|
|
// are not page specific, which they are not for Webpack. TODO: Fix this in
|
|
// Turbopack.
|
|
return mergeClientReferenceManifests(clientReferenceManifestsPerPage);
|
|
}
|
|
const clientReferenceManifest = clientReferenceManifestsPerPage[workStore.route];
|
|
if (!clientReferenceManifest) {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"](`Missing Client Reference Manifest for ${workStore.route}.`), "__NEXT_ERROR_CODE", {
|
|
value: "E570",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
return clientReferenceManifest;
|
|
}
|
|
async function getActionEncryptionKey() {
|
|
if (__next_loaded_action_key) {
|
|
return __next_loaded_action_key;
|
|
}
|
|
const serverActionsManifestSingleton = globalThis[SERVER_ACTION_MANIFESTS_SINGLETON];
|
|
if (!serverActionsManifestSingleton) {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Missing manifest for Server Actions.'), "__NEXT_ERROR_CODE", {
|
|
value: "E606",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const rawKey = process.env.NEXT_SERVER_ACTIONS_ENCRYPTION_KEY || serverActionsManifestSingleton.serverActionsManifest.encryptionKey;
|
|
if (rawKey === undefined) {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["InvariantError"]('Missing encryption key for Server Actions'), "__NEXT_ERROR_CODE", {
|
|
value: "E571",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
__next_loaded_action_key = await crypto.subtle.importKey('raw', stringToUint8Array(atob(rawKey)), 'AES-GCM', true, [
|
|
'encrypt',
|
|
'decrypt'
|
|
]);
|
|
return __next_loaded_action_key;
|
|
}
|
|
function mergeClientReferenceManifests(clientReferenceManifestsPerPage) {
|
|
const clientReferenceManifests = Object.values(clientReferenceManifestsPerPage);
|
|
const mergedClientReferenceManifest = {
|
|
clientModules: {},
|
|
edgeRscModuleMapping: {},
|
|
rscModuleMapping: {}
|
|
};
|
|
for (const clientReferenceManifest of clientReferenceManifests){
|
|
mergedClientReferenceManifest.clientModules = {
|
|
...mergedClientReferenceManifest.clientModules,
|
|
...clientReferenceManifest.clientModules
|
|
};
|
|
mergedClientReferenceManifest.edgeRscModuleMapping = {
|
|
...mergedClientReferenceManifest.edgeRscModuleMapping,
|
|
...clientReferenceManifest.edgeRscModuleMapping
|
|
};
|
|
mergedClientReferenceManifest.rscModuleMapping = {
|
|
...mergedClientReferenceManifest.rscModuleMapping,
|
|
...clientReferenceManifest.rscModuleMapping
|
|
};
|
|
}
|
|
return mergedClientReferenceManifest;
|
|
} //# sourceMappingURL=encryption-utils.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/app-render/action-utils.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"createServerModuleMap",
|
|
()=>createServerModuleMap,
|
|
"selectWorkerForForwarding",
|
|
()=>selectWorkerForForwarding
|
|
]);
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/path-has-prefix.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)");
|
|
;
|
|
;
|
|
;
|
|
;
|
|
function createServerModuleMap({ serverActionsManifest }) {
|
|
return new Proxy({}, {
|
|
get: (_, id)=>{
|
|
var _serverActionsManifest__id, _serverActionsManifest_;
|
|
const workers = (_serverActionsManifest_ = serverActionsManifest[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node']) == null ? void 0 : (_serverActionsManifest__id = _serverActionsManifest_[id]) == null ? void 0 : _serverActionsManifest__id.workers;
|
|
if (!workers) {
|
|
return undefined;
|
|
}
|
|
const workStore = __TURBOPACK__imported__module__$5b$externals$5d2f$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js__$5b$external$5d$__$28$next$2f$dist$2f$server$2f$app$2d$render$2f$work$2d$async$2d$storage$2e$external$2e$js$2c$__cjs$29$__["workAsyncStorage"].getStore();
|
|
let workerEntry;
|
|
if (workStore) {
|
|
workerEntry = workers[normalizeWorkerPageName(workStore.page)];
|
|
} else {
|
|
// If there's no work store defined, we can assume that a server
|
|
// module map is needed during module evaluation, e.g. to create a
|
|
// server action using a higher-order function. Therefore it should be
|
|
// safe to return any entry from the manifest that matches the action
|
|
// ID. They all refer to the same module ID, which must also exist in
|
|
// the current page bundle. TODO: This is currently not guaranteed in
|
|
// Turbopack, and needs to be fixed.
|
|
workerEntry = Object.values(workers).at(0);
|
|
}
|
|
if (!workerEntry) {
|
|
return undefined;
|
|
}
|
|
const { moduleId, async } = workerEntry;
|
|
return {
|
|
id: moduleId,
|
|
name: id,
|
|
chunks: [],
|
|
async
|
|
};
|
|
}
|
|
});
|
|
}
|
|
function selectWorkerForForwarding(actionId, pageName, serverActionsManifest) {
|
|
var _serverActionsManifest__actionId;
|
|
const workers = (_serverActionsManifest__actionId = serverActionsManifest[("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'node'][actionId]) == null ? void 0 : _serverActionsManifest__actionId.workers;
|
|
const workerName = normalizeWorkerPageName(pageName);
|
|
// no workers, nothing to forward to
|
|
if (!workers) return;
|
|
// if there is a worker for this page, no need to forward it.
|
|
if (workers[workerName]) {
|
|
return;
|
|
}
|
|
// otherwise, grab the first worker that has a handler for this action id
|
|
return denormalizeWorkerPageName(Object.keys(workers)[0]);
|
|
}
|
|
/**
|
|
* The flight entry loader keys actions by bundlePath.
|
|
* bundlePath corresponds with the relative path (including 'app') to the page entrypoint.
|
|
*/ function normalizeWorkerPageName(pageName) {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["pathHasPrefix"])(pageName, 'app')) {
|
|
return pageName;
|
|
}
|
|
return 'app' + pageName;
|
|
}
|
|
/**
|
|
* Converts a bundlePath (relative path to the entrypoint) to a routable page name
|
|
*/ function denormalizeWorkerPageName(bundlePath) {
|
|
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$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])((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$app$2d$route$5d$__$28$ecmascript$29$__["removePathPrefix"])(bundlePath, 'app'));
|
|
} //# sourceMappingURL=action-utils.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"ReflectAdapter",
|
|
()=>ReflectAdapter
|
|
]);
|
|
class ReflectAdapter {
|
|
static get(target, prop, receiver) {
|
|
const value = Reflect.get(target, prop, receiver);
|
|
if (typeof value === 'function') {
|
|
return value.bind(target);
|
|
}
|
|
return value;
|
|
}
|
|
static set(target, prop, value, receiver) {
|
|
return Reflect.set(target, prop, value, receiver);
|
|
}
|
|
static has(target, prop) {
|
|
return Reflect.has(target, prop);
|
|
}
|
|
static deleteProperty(target, prop) {
|
|
return Reflect.deleteProperty(target, prop);
|
|
}
|
|
} //# sourceMappingURL=reflect.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"HeadersAdapter",
|
|
()=>HeadersAdapter,
|
|
"ReadonlyHeadersError",
|
|
()=>ReadonlyHeadersError
|
|
]);
|
|
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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)");
|
|
;
|
|
class ReadonlyHeadersError extends Error {
|
|
constructor(){
|
|
super('Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers');
|
|
}
|
|
static callable() {
|
|
throw new ReadonlyHeadersError();
|
|
}
|
|
}
|
|
class HeadersAdapter extends Headers {
|
|
constructor(headers){
|
|
// We've already overridden the methods that would be called, so we're just
|
|
// calling the super constructor to ensure that the instanceof check works.
|
|
super();
|
|
this.headers = new Proxy(headers, {
|
|
get (target, prop, receiver) {
|
|
// Because this is just an object, we expect that all "get" operations
|
|
// are for properties. If it's a "get" for a symbol, we'll just return
|
|
// the symbol.
|
|
if (typeof prop === 'symbol') {
|
|
return __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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver);
|
|
}
|
|
const lowercased = prop.toLowerCase();
|
|
// Let's find the original casing of the key. This assumes that there is
|
|
// no mixed case keys (e.g. "Content-Type" and "content-type") in the
|
|
// headers object.
|
|
const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased);
|
|
// If the original casing doesn't exist, return undefined.
|
|
if (typeof original === 'undefined') return;
|
|
// If the original casing exists, return the value.
|
|
return __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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, original, receiver);
|
|
},
|
|
set (target, prop, value, receiver) {
|
|
if (typeof prop === 'symbol') {
|
|
return __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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, prop, value, receiver);
|
|
}
|
|
const lowercased = prop.toLowerCase();
|
|
// Let's find the original casing of the key. This assumes that there is
|
|
// no mixed case keys (e.g. "Content-Type" and "content-type") in the
|
|
// headers object.
|
|
const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased);
|
|
// If the original casing doesn't exist, use the prop as the key.
|
|
return __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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].set(target, original ?? prop, value, receiver);
|
|
},
|
|
has (target, prop) {
|
|
if (typeof prop === 'symbol') return __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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, prop);
|
|
const lowercased = prop.toLowerCase();
|
|
// Let's find the original casing of the key. This assumes that there is
|
|
// no mixed case keys (e.g. "Content-Type" and "content-type") in the
|
|
// headers object.
|
|
const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased);
|
|
// If the original casing doesn't exist, return false.
|
|
if (typeof original === 'undefined') return false;
|
|
// If the original casing exists, return true.
|
|
return __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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].has(target, original);
|
|
},
|
|
deleteProperty (target, prop) {
|
|
if (typeof prop === 'symbol') return __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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, prop);
|
|
const lowercased = prop.toLowerCase();
|
|
// Let's find the original casing of the key. This assumes that there is
|
|
// no mixed case keys (e.g. "Content-Type" and "content-type") in the
|
|
// headers object.
|
|
const original = Object.keys(headers).find((o)=>o.toLowerCase() === lowercased);
|
|
// If the original casing doesn't exist, return true.
|
|
if (typeof original === 'undefined') return true;
|
|
// If the original casing exists, delete the property.
|
|
return __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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].deleteProperty(target, original);
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Seals a Headers instance to prevent modification by throwing an error when
|
|
* any mutating method is called.
|
|
*/ static seal(headers) {
|
|
return new Proxy(headers, {
|
|
get (target, prop, receiver) {
|
|
switch(prop){
|
|
case 'append':
|
|
case 'delete':
|
|
case 'set':
|
|
return ReadonlyHeadersError.callable;
|
|
default:
|
|
return __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$reflect$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["ReflectAdapter"].get(target, prop, receiver);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
/**
|
|
* Merges a header value into a string. This stores multiple values as an
|
|
* array, so we need to merge them into a string.
|
|
*
|
|
* @param value a header value
|
|
* @returns a merged header value (a string)
|
|
*/ merge(value) {
|
|
if (Array.isArray(value)) return value.join(', ');
|
|
return value;
|
|
}
|
|
/**
|
|
* Creates a Headers instance from a plain object or a Headers instance.
|
|
*
|
|
* @param headers a plain object or a Headers instance
|
|
* @returns a headers instance
|
|
*/ static from(headers) {
|
|
if (headers instanceof Headers) return headers;
|
|
return new HeadersAdapter(headers);
|
|
}
|
|
append(name, value) {
|
|
const existing = this.headers[name];
|
|
if (typeof existing === 'string') {
|
|
this.headers[name] = [
|
|
existing,
|
|
value
|
|
];
|
|
} else if (Array.isArray(existing)) {
|
|
existing.push(value);
|
|
} else {
|
|
this.headers[name] = value;
|
|
}
|
|
}
|
|
delete(name) {
|
|
delete this.headers[name];
|
|
}
|
|
get(name) {
|
|
const value = this.headers[name];
|
|
if (typeof value !== 'undefined') return this.merge(value);
|
|
return null;
|
|
}
|
|
has(name) {
|
|
return typeof this.headers[name] !== 'undefined';
|
|
}
|
|
set(name, value) {
|
|
this.headers[name] = value;
|
|
}
|
|
forEach(callbackfn, thisArg) {
|
|
for (const [name, value] of this.entries()){
|
|
callbackfn.call(thisArg, value, name, this);
|
|
}
|
|
}
|
|
*entries() {
|
|
for (const key of Object.keys(this.headers)){
|
|
const name = key.toLowerCase();
|
|
// We assert here that this is a string because we got it from the
|
|
// Object.keys() call above.
|
|
const value = this.get(name);
|
|
yield [
|
|
name,
|
|
value
|
|
];
|
|
}
|
|
}
|
|
*keys() {
|
|
for (const key of Object.keys(this.headers)){
|
|
const name = key.toLowerCase();
|
|
yield name;
|
|
}
|
|
}
|
|
*values() {
|
|
for (const key of Object.keys(this.headers)){
|
|
// We assert here that this is a string because we got it from the
|
|
// Object.keys() call above.
|
|
const value = this.get(key);
|
|
yield value;
|
|
}
|
|
}
|
|
[Symbol.iterator]() {
|
|
return this.entries();
|
|
}
|
|
} //# sourceMappingURL=headers.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
|
|
(()=>{
|
|
"use strict";
|
|
if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/cookie") + "/";
|
|
var e = {};
|
|
(()=>{
|
|
var r = e;
|
|
/*!
|
|
* cookie
|
|
* Copyright(c) 2012-2014 Roman Shtylman
|
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
|
* MIT Licensed
|
|
*/ r.parse = parse;
|
|
r.serialize = serialize;
|
|
var i = decodeURIComponent;
|
|
var t = encodeURIComponent;
|
|
var a = /; */;
|
|
var n = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
|
|
function parse(e, r) {
|
|
if (typeof e !== "string") {
|
|
throw new TypeError("argument str must be a string");
|
|
}
|
|
var t = {};
|
|
var n = r || {};
|
|
var o = e.split(a);
|
|
var s = n.decode || i;
|
|
for(var p = 0; p < o.length; p++){
|
|
var f = o[p];
|
|
var u = f.indexOf("=");
|
|
if (u < 0) {
|
|
continue;
|
|
}
|
|
var v = f.substr(0, u).trim();
|
|
var c = f.substr(++u, f.length).trim();
|
|
if ('"' == c[0]) {
|
|
c = c.slice(1, -1);
|
|
}
|
|
if (undefined == t[v]) {
|
|
t[v] = tryDecode(c, s);
|
|
}
|
|
}
|
|
return t;
|
|
}
|
|
function serialize(e, r, i) {
|
|
var a = i || {};
|
|
var o = a.encode || t;
|
|
if (typeof o !== "function") {
|
|
throw new TypeError("option encode is invalid");
|
|
}
|
|
if (!n.test(e)) {
|
|
throw new TypeError("argument name is invalid");
|
|
}
|
|
var s = o(r);
|
|
if (s && !n.test(s)) {
|
|
throw new TypeError("argument val is invalid");
|
|
}
|
|
var p = e + "=" + s;
|
|
if (null != a.maxAge) {
|
|
var f = a.maxAge - 0;
|
|
if (isNaN(f) || !isFinite(f)) {
|
|
throw new TypeError("option maxAge is invalid");
|
|
}
|
|
p += "; Max-Age=" + Math.floor(f);
|
|
}
|
|
if (a.domain) {
|
|
if (!n.test(a.domain)) {
|
|
throw new TypeError("option domain is invalid");
|
|
}
|
|
p += "; Domain=" + a.domain;
|
|
}
|
|
if (a.path) {
|
|
if (!n.test(a.path)) {
|
|
throw new TypeError("option path is invalid");
|
|
}
|
|
p += "; Path=" + a.path;
|
|
}
|
|
if (a.expires) {
|
|
if (typeof a.expires.toUTCString !== "function") {
|
|
throw new TypeError("option expires is invalid");
|
|
}
|
|
p += "; Expires=" + a.expires.toUTCString();
|
|
}
|
|
if (a.httpOnly) {
|
|
p += "; HttpOnly";
|
|
}
|
|
if (a.secure) {
|
|
p += "; Secure";
|
|
}
|
|
if (a.sameSite) {
|
|
var u = typeof a.sameSite === "string" ? a.sameSite.toLowerCase() : a.sameSite;
|
|
switch(u){
|
|
case true:
|
|
p += "; SameSite=Strict";
|
|
break;
|
|
case "lax":
|
|
p += "; SameSite=Lax";
|
|
break;
|
|
case "strict":
|
|
p += "; SameSite=Strict";
|
|
break;
|
|
case "none":
|
|
p += "; SameSite=None";
|
|
break;
|
|
default:
|
|
throw new TypeError("option sameSite is invalid");
|
|
}
|
|
}
|
|
return p;
|
|
}
|
|
function tryDecode(e, r) {
|
|
try {
|
|
return r(e);
|
|
} catch (r) {
|
|
return e;
|
|
}
|
|
}
|
|
})();
|
|
module.exports = e;
|
|
})();
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/api-utils/index.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"ApiError",
|
|
()=>ApiError,
|
|
"COOKIE_NAME_PRERENDER_BYPASS",
|
|
()=>COOKIE_NAME_PRERENDER_BYPASS,
|
|
"COOKIE_NAME_PRERENDER_DATA",
|
|
()=>COOKIE_NAME_PRERENDER_DATA,
|
|
"RESPONSE_LIMIT_DEFAULT",
|
|
()=>RESPONSE_LIMIT_DEFAULT,
|
|
"SYMBOL_CLEARED_COOKIES",
|
|
()=>SYMBOL_CLEARED_COOKIES,
|
|
"SYMBOL_PREVIEW_DATA",
|
|
()=>SYMBOL_PREVIEW_DATA,
|
|
"checkIsOnDemandRevalidate",
|
|
()=>checkIsOnDemandRevalidate,
|
|
"clearPreviewData",
|
|
()=>clearPreviewData,
|
|
"redirect",
|
|
()=>redirect,
|
|
"sendError",
|
|
()=>sendError,
|
|
"sendStatusCode",
|
|
()=>sendStatusCode,
|
|
"setLazyProp",
|
|
()=>setLazyProp,
|
|
"wrapApiHandler",
|
|
()=>wrapApiHandler
|
|
]);
|
|
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$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/headers.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
;
|
|
;
|
|
function wrapApiHandler(page, handler) {
|
|
return (...args)=>{
|
|
(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$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])().setRootSpanAttribute('next.route', page);
|
|
// Call API route method
|
|
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$app$2d$route$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$app$2d$route$5d$__$28$ecmascript$29$__["NodeSpan"].runHandler, {
|
|
spanName: `executing api route (pages) ${page}`
|
|
}, ()=>handler(...args));
|
|
};
|
|
}
|
|
function sendStatusCode(res, statusCode) {
|
|
res.statusCode = statusCode;
|
|
return res;
|
|
}
|
|
function redirect(res, statusOrUrl, url) {
|
|
if (typeof statusOrUrl === 'string') {
|
|
url = statusOrUrl;
|
|
statusOrUrl = 307;
|
|
}
|
|
if (typeof statusOrUrl !== 'number' || typeof url !== 'string') {
|
|
throw Object.defineProperty(new Error(`Invalid redirect arguments. Please use a single argument URL, e.g. res.redirect('/destination') or use a status code and URL, e.g. res.redirect(307, '/destination').`), "__NEXT_ERROR_CODE", {
|
|
value: "E389",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
res.writeHead(statusOrUrl, {
|
|
Location: url
|
|
});
|
|
res.write(url);
|
|
res.end();
|
|
return res;
|
|
}
|
|
function checkIsOnDemandRevalidate(req, previewProps) {
|
|
const headers = __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$headers$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["HeadersAdapter"].from(req.headers);
|
|
const previewModeId = headers.get(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_HEADER"]);
|
|
const isOnDemandRevalidate = previewModeId === previewProps.previewModeId;
|
|
const revalidateOnlyGenerated = headers.has(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER"]);
|
|
return {
|
|
isOnDemandRevalidate,
|
|
revalidateOnlyGenerated
|
|
};
|
|
}
|
|
const COOKIE_NAME_PRERENDER_BYPASS = `__prerender_bypass`;
|
|
const COOKIE_NAME_PRERENDER_DATA = `__next_preview_data`;
|
|
const RESPONSE_LIMIT_DEFAULT = 4 * 1024 * 1024;
|
|
const SYMBOL_PREVIEW_DATA = Symbol(COOKIE_NAME_PRERENDER_DATA);
|
|
const SYMBOL_CLEARED_COOKIES = Symbol(COOKIE_NAME_PRERENDER_BYPASS);
|
|
function clearPreviewData(res, options = {}) {
|
|
if (SYMBOL_CLEARED_COOKIES in res) {
|
|
return res;
|
|
}
|
|
const { serialize } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)");
|
|
const previous = res.getHeader('Set-Cookie');
|
|
res.setHeader(`Set-Cookie`, [
|
|
...typeof previous === 'string' ? [
|
|
previous
|
|
] : Array.isArray(previous) ? previous : [],
|
|
serialize(COOKIE_NAME_PRERENDER_BYPASS, '', {
|
|
// To delete a cookie, set `expires` to a date in the past:
|
|
// https://tools.ietf.org/html/rfc6265#section-4.1.1
|
|
// `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.
|
|
expires: new Date(0),
|
|
httpOnly: true,
|
|
sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax',
|
|
secure: ("TURBOPACK compile-time value", "development") !== 'development',
|
|
path: '/',
|
|
...options.path !== undefined ? {
|
|
path: options.path
|
|
} : undefined
|
|
}),
|
|
serialize(COOKIE_NAME_PRERENDER_DATA, '', {
|
|
// To delete a cookie, set `expires` to a date in the past:
|
|
// https://tools.ietf.org/html/rfc6265#section-4.1.1
|
|
// `Max-Age: 0` is not valid, thus ignored, and the cookie is persisted.
|
|
expires: new Date(0),
|
|
httpOnly: true,
|
|
sameSite: ("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : 'lax',
|
|
secure: ("TURBOPACK compile-time value", "development") !== 'development',
|
|
path: '/',
|
|
...options.path !== undefined ? {
|
|
path: options.path
|
|
} : undefined
|
|
})
|
|
]);
|
|
Object.defineProperty(res, SYMBOL_CLEARED_COOKIES, {
|
|
value: true,
|
|
enumerable: false
|
|
});
|
|
return res;
|
|
}
|
|
class ApiError extends Error {
|
|
constructor(statusCode, message){
|
|
super(message);
|
|
this.statusCode = statusCode;
|
|
}
|
|
}
|
|
function sendError(res, statusCode, message) {
|
|
res.statusCode = statusCode;
|
|
res.statusMessage = message;
|
|
res.end(message);
|
|
}
|
|
function setLazyProp({ req }, prop, getter) {
|
|
const opts = {
|
|
configurable: true,
|
|
enumerable: true
|
|
};
|
|
const optsReset = {
|
|
...opts,
|
|
writable: true
|
|
};
|
|
Object.defineProperty(req, prop, {
|
|
...opts,
|
|
get: ()=>{
|
|
const value = getter();
|
|
// we set the property on the object to avoid recalculating it
|
|
Object.defineProperty(req, prop, {
|
|
...optsReset,
|
|
value
|
|
});
|
|
return value;
|
|
},
|
|
set: (value)=>{
|
|
Object.defineProperty(req, prop, {
|
|
...optsReset,
|
|
value
|
|
});
|
|
}
|
|
});
|
|
} //# sourceMappingURL=index.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-route] (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;
|
|
}({}); //# sourceMappingURL=redirect-status-code.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
/**
|
|
* Parse cookies from the `headers` of request
|
|
* @param req request object
|
|
*/ __turbopack_context__.s([
|
|
"getCookieParser",
|
|
()=>getCookieParser
|
|
]);
|
|
function getCookieParser(headers) {
|
|
return function parseCookie() {
|
|
const { cookie } = headers;
|
|
if (!cookie) {
|
|
return {};
|
|
}
|
|
const { parse: parseCookieFn } = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/cookie/index.js [app-route] (ecmascript)");
|
|
return parseCookieFn(Array.isArray(cookie) ? cookie.join('; ') : cookie);
|
|
};
|
|
} //# sourceMappingURL=get-cookie-parser.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/base-http/index.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"BaseNextRequest",
|
|
()=>BaseNextRequest,
|
|
"BaseNextResponse",
|
|
()=>BaseNextResponse
|
|
]);
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/client/components/redirect-status-code.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/get-cookie-parser.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
class BaseNextRequest {
|
|
constructor(method, url, body){
|
|
this.method = method;
|
|
this.url = url;
|
|
this.body = body;
|
|
}
|
|
// Utils implemented using the abstract methods above
|
|
get cookies() {
|
|
if (this._cookies) return this._cookies;
|
|
return this._cookies = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$get$2d$cookie$2d$parser$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getCookieParser"])(this.headers)();
|
|
}
|
|
}
|
|
class BaseNextResponse {
|
|
constructor(destination){
|
|
this.destination = destination;
|
|
}
|
|
// Utils implemented using the abstract methods above
|
|
redirect(destination, statusCode) {
|
|
this.setHeader('Location', destination);
|
|
this.statusCode = statusCode;
|
|
// Since IE11 doesn't support the 308 header add backwards
|
|
// compatibility using refresh header
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["RedirectStatusCode"].PermanentRedirect) {
|
|
this.setHeader('Refresh', `0;url=${destination}`);
|
|
}
|
|
return this;
|
|
}
|
|
} //# sourceMappingURL=index.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/base-http/node.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"NodeNextRequest",
|
|
()=>NodeNextRequest,
|
|
"NodeNextResponse",
|
|
()=>NodeNextResponse
|
|
]);
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/api-utils/index.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/index.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
;
|
|
let prop;
|
|
class NodeNextRequest extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseNextRequest"] {
|
|
static #_ = prop = _NEXT_REQUEST_META = __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"];
|
|
constructor(_req){
|
|
var _this__req;
|
|
super(_req.method.toUpperCase(), _req.url, _req), this._req = _req, this.headers = this._req.headers, this.fetchMetrics = (_this__req = this._req) == null ? void 0 : _this__req.fetchMetrics, this[_NEXT_REQUEST_META] = this._req[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] || {}, this.streaming = false;
|
|
}
|
|
get originalRequest() {
|
|
// Need to mimic these changes to the original req object for places where we use it:
|
|
// render.tsx, api/ssg requests
|
|
this._req[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_REQUEST_META"]];
|
|
this._req.url = this.url;
|
|
this._req.cookies = this.cookies;
|
|
return this._req;
|
|
}
|
|
set originalRequest(value) {
|
|
this._req = value;
|
|
}
|
|
/**
|
|
* Returns the request body as a Web Readable Stream. The body here can only
|
|
* be read once as the body will start flowing as soon as the data handler
|
|
* is attached.
|
|
*
|
|
* @internal
|
|
*/ stream() {
|
|
if (this.streaming) {
|
|
throw Object.defineProperty(new Error('Invariant: NodeNextRequest.stream() can only be called once'), "__NEXT_ERROR_CODE", {
|
|
value: "E467",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
this.streaming = true;
|
|
return new ReadableStream({
|
|
start: (controller)=>{
|
|
this._req.on('data', (chunk)=>{
|
|
controller.enqueue(new Uint8Array(chunk));
|
|
});
|
|
this._req.on('end', ()=>{
|
|
controller.close();
|
|
});
|
|
this._req.on('error', (err)=>{
|
|
controller.error(err);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
class NodeNextResponse extends __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["BaseNextResponse"] {
|
|
get originalResponse() {
|
|
if (__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"] in this) {
|
|
this._res[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]] = this[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$api$2d$utils$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["SYMBOL_CLEARED_COOKIES"]];
|
|
}
|
|
return this._res;
|
|
}
|
|
constructor(_res){
|
|
super(_res), this._res = _res, this.textBody = undefined;
|
|
}
|
|
get sent() {
|
|
return this._res.finished || this._res.headersSent;
|
|
}
|
|
get statusCode() {
|
|
return this._res.statusCode;
|
|
}
|
|
set statusCode(value) {
|
|
this._res.statusCode = value;
|
|
}
|
|
get statusMessage() {
|
|
return this._res.statusMessage;
|
|
}
|
|
set statusMessage(value) {
|
|
this._res.statusMessage = value;
|
|
}
|
|
setHeader(name, value) {
|
|
this._res.setHeader(name, value);
|
|
return this;
|
|
}
|
|
removeHeader(name) {
|
|
this._res.removeHeader(name);
|
|
return this;
|
|
}
|
|
getHeaderValues(name) {
|
|
const values = this._res.getHeader(name);
|
|
if (values === undefined) return undefined;
|
|
return (Array.isArray(values) ? values : [
|
|
values
|
|
]).map((value)=>value.toString());
|
|
}
|
|
hasHeader(name) {
|
|
return this._res.hasHeader(name);
|
|
}
|
|
getHeader(name) {
|
|
const values = this.getHeaderValues(name);
|
|
return Array.isArray(values) ? values.join(',') : undefined;
|
|
}
|
|
getHeaders() {
|
|
return this._res.getHeaders();
|
|
}
|
|
appendHeader(name, value) {
|
|
const currentValues = this.getHeaderValues(name) ?? [];
|
|
if (!currentValues.includes(value)) {
|
|
this._res.setHeader(name, [
|
|
...currentValues,
|
|
value
|
|
]);
|
|
}
|
|
return this;
|
|
}
|
|
body(value) {
|
|
this.textBody = value;
|
|
return this;
|
|
}
|
|
send() {
|
|
this._res.end(this.textBody);
|
|
}
|
|
onClose(callback) {
|
|
this.originalResponse.on('close', callback);
|
|
}
|
|
}
|
|
var _NEXT_REQUEST_META; //# sourceMappingURL=node.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [app-route] (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;
|
|
} //# sourceMappingURL=utils.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/send-response.js [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"sendResponse",
|
|
()=>sendResponse
|
|
]);
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/helpers.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/pipe-readable.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
;
|
|
async function sendResponse(req, res, response, waitUntil) {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["isNodeNextResponse"])(res)) {
|
|
var _response_headers;
|
|
// Copy over the response status.
|
|
res.statusCode = response.status;
|
|
res.statusMessage = response.statusText;
|
|
// TODO: this is not spec-compliant behavior and we should not restrict
|
|
// headers that are allowed to appear many times.
|
|
//
|
|
// See:
|
|
// https://github.com/vercel/next.js/pull/70127
|
|
const headersWithMultipleValuesAllowed = [
|
|
// can add more headers to this list if needed
|
|
'set-cookie',
|
|
'www-authenticate',
|
|
'proxy-authenticate',
|
|
'vary'
|
|
];
|
|
(_response_headers = response.headers) == null ? void 0 : _response_headers.forEach((value, name)=>{
|
|
// `x-middleware-set-cookie` is an internal header not needed for the response
|
|
if (name.toLowerCase() === 'x-middleware-set-cookie') {
|
|
return;
|
|
}
|
|
// The append handling is special cased for `set-cookie`.
|
|
if (name.toLowerCase() === 'set-cookie') {
|
|
// TODO: (wyattjoh) replace with native response iteration when we can upgrade undici
|
|
for (const cookie of (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$web$2f$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["splitCookiesString"])(value)){
|
|
res.appendHeader(name, cookie);
|
|
}
|
|
} else {
|
|
// only append the header if it is either not present in the outbound response
|
|
// or if the header supports multiple values
|
|
const isHeaderPresent = typeof res.getHeader(name) !== 'undefined';
|
|
if (headersWithMultipleValuesAllowed.includes(name.toLowerCase()) || !isHeaderPresent) {
|
|
res.appendHeader(name, value);
|
|
}
|
|
}
|
|
});
|
|
/**
|
|
* The response can't be directly piped to the underlying response. The
|
|
* following is duplicated from the edge runtime handler.
|
|
*
|
|
* See packages/next/server/next-server.ts
|
|
*/ const { originalResponse } = res;
|
|
// A response body must not be sent for HEAD requests. See https://httpwg.org/specs/rfc9110.html#HEAD
|
|
if (response.body && req.method !== 'HEAD') {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["pipeToNodeResponse"])(response.body, originalResponse, waitUntil);
|
|
} else {
|
|
originalResponse.end();
|
|
}
|
|
}
|
|
} //# sourceMappingURL=send-response.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/server/lib/cache-control.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__["CACHE_ONE_YEAR"]}${swrHeader}`;
|
|
} //# sourceMappingURL=cache-control.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "detectDomainLocale", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return 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;
|
|
}
|
|
}
|
|
} //# sourceMappingURL=detect-domain-locale.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"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`
|
|
* - `/` -> `/`
|
|
*/ Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "removeTrailingSlash", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return removeTrailingSlash;
|
|
}
|
|
});
|
|
function removeTrailingSlash(route) {
|
|
return route.replace(/\/$/, '') || '/';
|
|
} //# sourceMappingURL=remove-trailing-slash.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"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
|
|
*/ Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "parsePath", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return 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: ''
|
|
};
|
|
} //# sourceMappingURL=parse-path.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "addPathPrefix", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return addPathPrefix;
|
|
}
|
|
});
|
|
const _parsepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)");
|
|
function addPathPrefix(path, prefix) {
|
|
if (!path.startsWith('/') || !prefix) {
|
|
return path;
|
|
}
|
|
const { pathname, query, hash } = (0, _parsepath.parsePath)(path);
|
|
return `${prefix}${pathname}${query}${hash}`;
|
|
} //# sourceMappingURL=add-path-prefix.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "addPathSuffix", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return addPathSuffix;
|
|
}
|
|
});
|
|
const _parsepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)");
|
|
function addPathSuffix(path, suffix) {
|
|
if (!path.startsWith('/') || !suffix) {
|
|
return path;
|
|
}
|
|
const { pathname, query, hash } = (0, _parsepath.parsePath)(path);
|
|
return `${pathname}${suffix}${query}${hash}`;
|
|
} //# sourceMappingURL=add-path-suffix.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "pathHasPrefix", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return pathHasPrefix;
|
|
}
|
|
});
|
|
const _parsepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/parse-path.js [app-route] (ecmascript)");
|
|
function pathHasPrefix(path, prefix) {
|
|
if (typeof path !== 'string') {
|
|
return false;
|
|
}
|
|
const { pathname } = (0, _parsepath.parsePath)(path);
|
|
return pathname === prefix || pathname.startsWith(prefix + '/');
|
|
} //# sourceMappingURL=path-has-prefix.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "addLocale", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return addLocale;
|
|
}
|
|
});
|
|
const _addpathprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)");
|
|
const _pathhasprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-route] (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, _pathhasprefix.pathHasPrefix)(lower, '/api')) return path;
|
|
if ((0, _pathhasprefix.pathHasPrefix)(lower, `/${locale.toLowerCase()}`)) return path;
|
|
}
|
|
// Add the locale prefix to the path.
|
|
return (0, _addpathprefix.addPathPrefix)(path, `/${locale}`);
|
|
} //# sourceMappingURL=add-locale.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "formatNextPathnameInfo", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return formatNextPathnameInfo;
|
|
}
|
|
});
|
|
const _removetrailingslash = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js [app-route] (ecmascript)");
|
|
const _addpathprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js [app-route] (ecmascript)");
|
|
const _addpathsuffix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js [app-route] (ecmascript)");
|
|
const _addlocale = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/add-locale.js [app-route] (ecmascript)");
|
|
function formatNextPathnameInfo(info) {
|
|
let pathname = (0, _addlocale.addLocale)(info.pathname, info.locale, info.buildId ? undefined : info.defaultLocale, info.ignorePrefix);
|
|
if (info.buildId || !info.trailingSlash) {
|
|
pathname = (0, _removetrailingslash.removeTrailingSlash)(pathname);
|
|
}
|
|
if (info.buildId) {
|
|
pathname = (0, _addpathsuffix.addPathSuffix)((0, _addpathprefix.addPathPrefix)(pathname, `/_next/data/${info.buildId}`), info.pathname === '/' ? 'index.json' : '.json');
|
|
}
|
|
pathname = (0, _addpathprefix.addPathPrefix)(pathname, info.basePath);
|
|
return !info.buildId && info.trailingSlash ? !pathname.endsWith('/') ? (0, _addpathsuffix.addPathSuffix)(pathname, '/') : pathname : (0, _removetrailingslash.removeTrailingSlash)(pathname);
|
|
} //# sourceMappingURL=format-next-pathname-info.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/get-hostname.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "getHostname", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return 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();
|
|
} //# sourceMappingURL=get-hostname.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "normalizeLocalePath", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return 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
|
|
};
|
|
} //# sourceMappingURL=normalize-locale-path.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "removePathPrefix", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return removePathPrefix;
|
|
}
|
|
});
|
|
const _pathhasprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-route] (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, _pathhasprefix.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}`;
|
|
} //# sourceMappingURL=remove-path-prefix.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "getNextPathnameInfo", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return getNextPathnameInfo;
|
|
}
|
|
});
|
|
const _normalizelocalepath = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js [app-route] (ecmascript)");
|
|
const _removepathprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js [app-route] (ecmascript)");
|
|
const _pathhasprefix = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js [app-route] (ecmascript)");
|
|
function getNextPathnameInfo(pathname, options) {
|
|
const { basePath, i18n, trailingSlash } = options.nextConfig ?? {};
|
|
const info = {
|
|
pathname,
|
|
trailingSlash: pathname !== '/' ? pathname.endsWith('/') : trailingSlash
|
|
};
|
|
if (basePath && (0, _pathhasprefix.pathHasPrefix)(info.pathname, basePath)) {
|
|
info.pathname = (0, _removepathprefix.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, _normalizelocalepath.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, _normalizelocalepath.normalizeLocalePath)(pathnameNoDataPrefix, i18n.locales);
|
|
if (result.detectedLocale) {
|
|
info.locale = result.detectedLocale;
|
|
}
|
|
}
|
|
}
|
|
return info;
|
|
} //# sourceMappingURL=get-next-pathname-info.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/next-url.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "NextURL", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return NextURL;
|
|
}
|
|
});
|
|
const _detectdomainlocale = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js [app-route] (ecmascript)");
|
|
const _formatnextpathnameinfo = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js [app-route] (ecmascript)");
|
|
const _gethostname = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/get-hostname.js [app-route] (ecmascript)");
|
|
const _getnextpathnameinfo = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js [app-route] (ecmascript)");
|
|
const REGEX_LOCALHOST_HOSTNAME = /(?!^https?:\/\/)(127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}|\[::1\]|localhost)/;
|
|
function parseURL(url, base) {
|
|
return new URL(String(url).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'), base && String(base).replace(REGEX_LOCALHOST_HOSTNAME, 'localhost'));
|
|
}
|
|
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, _getnextpathnameinfo.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, _gethostname.getHostname)(this[Internal].url, this[Internal].options.headers);
|
|
this[Internal].domainLocale = this[Internal].options.i18nProvider ? this[Internal].options.i18nProvider.detectDomainLocale(hostname) : (0, _detectdomainlocale.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, _formatnextpathnameinfo.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);
|
|
}
|
|
} //# sourceMappingURL=next-url.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/lib/constants.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
ACTION_SUFFIX: null,
|
|
APP_DIR_ALIAS: null,
|
|
CACHE_ONE_YEAR: null,
|
|
DOT_NEXT_ALIAS: null,
|
|
ESLINT_DEFAULT_DIRS: null,
|
|
GSP_NO_RETURNED_VALUE: null,
|
|
GSSP_COMPONENT_MEMBER_ERROR: null,
|
|
GSSP_NO_RETURNED_VALUE: null,
|
|
HTML_CONTENT_TYPE_HEADER: null,
|
|
INFINITE_CACHE: null,
|
|
INSTRUMENTATION_HOOK_FILENAME: null,
|
|
JSON_CONTENT_TYPE_HEADER: null,
|
|
MATCHED_PATH_HEADER: null,
|
|
MIDDLEWARE_FILENAME: null,
|
|
MIDDLEWARE_LOCATION_REGEXP: null,
|
|
NEXT_BODY_SUFFIX: null,
|
|
NEXT_CACHE_IMPLICIT_TAG_ID: null,
|
|
NEXT_CACHE_REVALIDATED_TAGS_HEADER: null,
|
|
NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: null,
|
|
NEXT_CACHE_SOFT_TAG_MAX_LENGTH: null,
|
|
NEXT_CACHE_TAGS_HEADER: null,
|
|
NEXT_CACHE_TAG_MAX_ITEMS: null,
|
|
NEXT_CACHE_TAG_MAX_LENGTH: null,
|
|
NEXT_DATA_SUFFIX: null,
|
|
NEXT_INTERCEPTION_MARKER_PREFIX: null,
|
|
NEXT_META_SUFFIX: null,
|
|
NEXT_QUERY_PARAM_PREFIX: null,
|
|
NEXT_RESUME_HEADER: null,
|
|
NON_STANDARD_NODE_ENV: null,
|
|
PAGES_DIR_ALIAS: null,
|
|
PRERENDER_REVALIDATE_HEADER: null,
|
|
PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: null,
|
|
PROXY_FILENAME: null,
|
|
PROXY_LOCATION_REGEXP: null,
|
|
PUBLIC_DIR_MIDDLEWARE_CONFLICT: null,
|
|
ROOT_DIR_ALIAS: null,
|
|
RSC_ACTION_CLIENT_WRAPPER_ALIAS: null,
|
|
RSC_ACTION_ENCRYPTION_ALIAS: null,
|
|
RSC_ACTION_PROXY_ALIAS: null,
|
|
RSC_ACTION_VALIDATE_ALIAS: null,
|
|
RSC_CACHE_WRAPPER_ALIAS: null,
|
|
RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: null,
|
|
RSC_MOD_REF_PROXY_ALIAS: null,
|
|
RSC_PREFETCH_SUFFIX: null,
|
|
RSC_SEGMENTS_DIR_SUFFIX: null,
|
|
RSC_SEGMENT_SUFFIX: null,
|
|
RSC_SUFFIX: null,
|
|
SERVER_PROPS_EXPORT_ERROR: null,
|
|
SERVER_PROPS_GET_INIT_PROPS_CONFLICT: null,
|
|
SERVER_PROPS_SSG_CONFLICT: null,
|
|
SERVER_RUNTIME: null,
|
|
SSG_FALLBACK_EXPORT_ERROR: null,
|
|
SSG_GET_INITIAL_PROPS_CONFLICT: null,
|
|
STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: null,
|
|
TEXT_PLAIN_CONTENT_TYPE_HEADER: null,
|
|
UNSTABLE_REVALIDATE_RENAME_ERROR: null,
|
|
WEBPACK_LAYERS: null,
|
|
WEBPACK_RESOURCE_QUERIES: null,
|
|
WEB_SOCKET_MAX_RECONNECTIONS: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
ACTION_SUFFIX: function() {
|
|
return ACTION_SUFFIX;
|
|
},
|
|
APP_DIR_ALIAS: function() {
|
|
return APP_DIR_ALIAS;
|
|
},
|
|
CACHE_ONE_YEAR: function() {
|
|
return CACHE_ONE_YEAR;
|
|
},
|
|
DOT_NEXT_ALIAS: function() {
|
|
return DOT_NEXT_ALIAS;
|
|
},
|
|
ESLINT_DEFAULT_DIRS: function() {
|
|
return ESLINT_DEFAULT_DIRS;
|
|
},
|
|
GSP_NO_RETURNED_VALUE: function() {
|
|
return GSP_NO_RETURNED_VALUE;
|
|
},
|
|
GSSP_COMPONENT_MEMBER_ERROR: function() {
|
|
return GSSP_COMPONENT_MEMBER_ERROR;
|
|
},
|
|
GSSP_NO_RETURNED_VALUE: function() {
|
|
return GSSP_NO_RETURNED_VALUE;
|
|
},
|
|
HTML_CONTENT_TYPE_HEADER: function() {
|
|
return HTML_CONTENT_TYPE_HEADER;
|
|
},
|
|
INFINITE_CACHE: function() {
|
|
return INFINITE_CACHE;
|
|
},
|
|
INSTRUMENTATION_HOOK_FILENAME: function() {
|
|
return INSTRUMENTATION_HOOK_FILENAME;
|
|
},
|
|
JSON_CONTENT_TYPE_HEADER: function() {
|
|
return JSON_CONTENT_TYPE_HEADER;
|
|
},
|
|
MATCHED_PATH_HEADER: function() {
|
|
return MATCHED_PATH_HEADER;
|
|
},
|
|
MIDDLEWARE_FILENAME: function() {
|
|
return MIDDLEWARE_FILENAME;
|
|
},
|
|
MIDDLEWARE_LOCATION_REGEXP: function() {
|
|
return MIDDLEWARE_LOCATION_REGEXP;
|
|
},
|
|
NEXT_BODY_SUFFIX: function() {
|
|
return NEXT_BODY_SUFFIX;
|
|
},
|
|
NEXT_CACHE_IMPLICIT_TAG_ID: function() {
|
|
return NEXT_CACHE_IMPLICIT_TAG_ID;
|
|
},
|
|
NEXT_CACHE_REVALIDATED_TAGS_HEADER: function() {
|
|
return NEXT_CACHE_REVALIDATED_TAGS_HEADER;
|
|
},
|
|
NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER: function() {
|
|
return NEXT_CACHE_REVALIDATE_TAG_TOKEN_HEADER;
|
|
},
|
|
NEXT_CACHE_SOFT_TAG_MAX_LENGTH: function() {
|
|
return NEXT_CACHE_SOFT_TAG_MAX_LENGTH;
|
|
},
|
|
NEXT_CACHE_TAGS_HEADER: function() {
|
|
return NEXT_CACHE_TAGS_HEADER;
|
|
},
|
|
NEXT_CACHE_TAG_MAX_ITEMS: function() {
|
|
return NEXT_CACHE_TAG_MAX_ITEMS;
|
|
},
|
|
NEXT_CACHE_TAG_MAX_LENGTH: function() {
|
|
return NEXT_CACHE_TAG_MAX_LENGTH;
|
|
},
|
|
NEXT_DATA_SUFFIX: function() {
|
|
return NEXT_DATA_SUFFIX;
|
|
},
|
|
NEXT_INTERCEPTION_MARKER_PREFIX: function() {
|
|
return NEXT_INTERCEPTION_MARKER_PREFIX;
|
|
},
|
|
NEXT_META_SUFFIX: function() {
|
|
return NEXT_META_SUFFIX;
|
|
},
|
|
NEXT_QUERY_PARAM_PREFIX: function() {
|
|
return NEXT_QUERY_PARAM_PREFIX;
|
|
},
|
|
NEXT_RESUME_HEADER: function() {
|
|
return NEXT_RESUME_HEADER;
|
|
},
|
|
NON_STANDARD_NODE_ENV: function() {
|
|
return NON_STANDARD_NODE_ENV;
|
|
},
|
|
PAGES_DIR_ALIAS: function() {
|
|
return PAGES_DIR_ALIAS;
|
|
},
|
|
PRERENDER_REVALIDATE_HEADER: function() {
|
|
return PRERENDER_REVALIDATE_HEADER;
|
|
},
|
|
PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER: function() {
|
|
return PRERENDER_REVALIDATE_ONLY_GENERATED_HEADER;
|
|
},
|
|
PROXY_FILENAME: function() {
|
|
return PROXY_FILENAME;
|
|
},
|
|
PROXY_LOCATION_REGEXP: function() {
|
|
return PROXY_LOCATION_REGEXP;
|
|
},
|
|
PUBLIC_DIR_MIDDLEWARE_CONFLICT: function() {
|
|
return PUBLIC_DIR_MIDDLEWARE_CONFLICT;
|
|
},
|
|
ROOT_DIR_ALIAS: function() {
|
|
return ROOT_DIR_ALIAS;
|
|
},
|
|
RSC_ACTION_CLIENT_WRAPPER_ALIAS: function() {
|
|
return RSC_ACTION_CLIENT_WRAPPER_ALIAS;
|
|
},
|
|
RSC_ACTION_ENCRYPTION_ALIAS: function() {
|
|
return RSC_ACTION_ENCRYPTION_ALIAS;
|
|
},
|
|
RSC_ACTION_PROXY_ALIAS: function() {
|
|
return RSC_ACTION_PROXY_ALIAS;
|
|
},
|
|
RSC_ACTION_VALIDATE_ALIAS: function() {
|
|
return RSC_ACTION_VALIDATE_ALIAS;
|
|
},
|
|
RSC_CACHE_WRAPPER_ALIAS: function() {
|
|
return RSC_CACHE_WRAPPER_ALIAS;
|
|
},
|
|
RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS: function() {
|
|
return RSC_DYNAMIC_IMPORT_WRAPPER_ALIAS;
|
|
},
|
|
RSC_MOD_REF_PROXY_ALIAS: function() {
|
|
return RSC_MOD_REF_PROXY_ALIAS;
|
|
},
|
|
RSC_PREFETCH_SUFFIX: function() {
|
|
return RSC_PREFETCH_SUFFIX;
|
|
},
|
|
RSC_SEGMENTS_DIR_SUFFIX: function() {
|
|
return RSC_SEGMENTS_DIR_SUFFIX;
|
|
},
|
|
RSC_SEGMENT_SUFFIX: function() {
|
|
return RSC_SEGMENT_SUFFIX;
|
|
},
|
|
RSC_SUFFIX: function() {
|
|
return RSC_SUFFIX;
|
|
},
|
|
SERVER_PROPS_EXPORT_ERROR: function() {
|
|
return SERVER_PROPS_EXPORT_ERROR;
|
|
},
|
|
SERVER_PROPS_GET_INIT_PROPS_CONFLICT: function() {
|
|
return SERVER_PROPS_GET_INIT_PROPS_CONFLICT;
|
|
},
|
|
SERVER_PROPS_SSG_CONFLICT: function() {
|
|
return SERVER_PROPS_SSG_CONFLICT;
|
|
},
|
|
SERVER_RUNTIME: function() {
|
|
return SERVER_RUNTIME;
|
|
},
|
|
SSG_FALLBACK_EXPORT_ERROR: function() {
|
|
return SSG_FALLBACK_EXPORT_ERROR;
|
|
},
|
|
SSG_GET_INITIAL_PROPS_CONFLICT: function() {
|
|
return SSG_GET_INITIAL_PROPS_CONFLICT;
|
|
},
|
|
STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR: function() {
|
|
return STATIC_STATUS_PAGE_GET_INITIAL_PROPS_ERROR;
|
|
},
|
|
TEXT_PLAIN_CONTENT_TYPE_HEADER: function() {
|
|
return TEXT_PLAIN_CONTENT_TYPE_HEADER;
|
|
},
|
|
UNSTABLE_REVALIDATE_RENAME_ERROR: function() {
|
|
return UNSTABLE_REVALIDATE_RENAME_ERROR;
|
|
},
|
|
WEBPACK_LAYERS: function() {
|
|
return WEBPACK_LAYERS;
|
|
},
|
|
WEBPACK_RESOURCE_QUERIES: function() {
|
|
return WEBPACK_RESOURCE_QUERIES;
|
|
},
|
|
WEB_SOCKET_MAX_RECONNECTIONS: function() {
|
|
return 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_PREFETCH_SUFFIX = '.prefetch.rsc';
|
|
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_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_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 CACHE_ONE_YEAR = 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__'
|
|
}; //# sourceMappingURL=constants.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/utils.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
fromNodeOutgoingHttpHeaders: null,
|
|
normalizeNextQueryParam: null,
|
|
splitCookiesString: null,
|
|
toNodeOutgoingHttpHeaders: null,
|
|
validateURL: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
fromNodeOutgoingHttpHeaders: function() {
|
|
return fromNodeOutgoingHttpHeaders;
|
|
},
|
|
normalizeNextQueryParam: function() {
|
|
return normalizeNextQueryParam;
|
|
},
|
|
splitCookiesString: function() {
|
|
return splitCookiesString;
|
|
},
|
|
toNodeOutgoingHttpHeaders: function() {
|
|
return toNodeOutgoingHttpHeaders;
|
|
},
|
|
validateURL: function() {
|
|
return validateURL;
|
|
}
|
|
});
|
|
const _constants = __turbopack_context__.r("[project]/node_modules/next/dist/lib/constants.js [app-route] (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 = [
|
|
_constants.NEXT_QUERY_PARAM_PREFIX,
|
|
_constants.NEXT_INTERCEPTION_MARKER_PREFIX
|
|
];
|
|
for (const prefix of prefixes){
|
|
if (key !== prefix && key.startsWith(prefix)) {
|
|
return key.substring(prefix.length);
|
|
}
|
|
}
|
|
return null;
|
|
} //# sourceMappingURL=utils.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/error.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
PageSignatureError: null,
|
|
RemovedPageError: null,
|
|
RemovedUAError: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
PageSignatureError: function() {
|
|
return PageSignatureError;
|
|
},
|
|
RemovedPageError: function() {
|
|
return RemovedPageError;
|
|
},
|
|
RemovedUAError: function() {
|
|
return 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
|
|
`);
|
|
}
|
|
} //# sourceMappingURL=error.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
RequestCookies: null,
|
|
ResponseCookies: null,
|
|
stringifyCookie: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
RequestCookies: function() {
|
|
return _cookies.RequestCookies;
|
|
},
|
|
ResponseCookies: function() {
|
|
return _cookies.ResponseCookies;
|
|
},
|
|
stringifyCookie: function() {
|
|
return _cookies.stringifyCookie;
|
|
}
|
|
});
|
|
const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js [app-route] (ecmascript)"); //# sourceMappingURL=cookies.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/spec-extension/request.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
INTERNALS: null,
|
|
NextRequest: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
INTERNALS: function() {
|
|
return INTERNALS;
|
|
},
|
|
NextRequest: function() {
|
|
return NextRequest;
|
|
}
|
|
});
|
|
const _nexturl = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/next-url.js [app-route] (ecmascript)");
|
|
const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/utils.js [app-route] (ecmascript)");
|
|
const _error = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/error.js [app-route] (ecmascript)");
|
|
const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (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, _utils.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 _nexturl.NextURL(url, {
|
|
headers: (0, _utils.toNodeOutgoingHttpHeaders)(this.headers),
|
|
nextConfig: init.nextConfig
|
|
});
|
|
this[INTERNALS] = {
|
|
cookies: new _cookies.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 _error.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 _error.RemovedUAError();
|
|
}
|
|
get url() {
|
|
return this[INTERNALS].url;
|
|
}
|
|
} //# sourceMappingURL=request.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "ReflectAdapter", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return ReflectAdapter;
|
|
}
|
|
});
|
|
class ReflectAdapter {
|
|
static get(target, prop, receiver) {
|
|
const value = Reflect.get(target, prop, receiver);
|
|
if (typeof value === 'function') {
|
|
return value.bind(target);
|
|
}
|
|
return value;
|
|
}
|
|
static set(target, prop, value, receiver) {
|
|
return Reflect.set(target, prop, value, receiver);
|
|
}
|
|
static has(target, prop) {
|
|
return Reflect.has(target, prop);
|
|
}
|
|
static deleteProperty(target, prop) {
|
|
return Reflect.deleteProperty(target, prop);
|
|
}
|
|
} //# sourceMappingURL=reflect.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/spec-extension/response.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "NextResponse", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return NextResponse;
|
|
}
|
|
});
|
|
const _cookies = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (ecmascript)");
|
|
const _nexturl = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/next-url.js [app-route] (ecmascript)");
|
|
const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/utils.js [app-route] (ecmascript)");
|
|
const _reflect = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js [app-route] (ecmascript)");
|
|
const _cookies1 = __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/cookies.js [app-route] (ecmascript)");
|
|
const INTERNALS = Symbol('internal response');
|
|
const REDIRECTS = new Set([
|
|
301,
|
|
302,
|
|
303,
|
|
307,
|
|
308
|
|
]);
|
|
function handleMiddlewareField(init, headers) {
|
|
var _init_request;
|
|
if (init == null ? void 0 : (_init_request = init.request) == null ? void 0 : _init_request.headers) {
|
|
if (!(init.request.headers instanceof Headers)) {
|
|
throw Object.defineProperty(new Error('request.headers must be an instance of Headers'), "__NEXT_ERROR_CODE", {
|
|
value: "E119",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const keys = [];
|
|
for (const [key, value] of init.request.headers){
|
|
headers.set('x-middleware-request-' + key, value);
|
|
keys.push(key);
|
|
}
|
|
headers.set('x-middleware-override-headers', keys.join(','));
|
|
}
|
|
}
|
|
class NextResponse extends Response {
|
|
constructor(body, init = {}){
|
|
super(body, init);
|
|
const headers = this.headers;
|
|
const cookies = new _cookies1.ResponseCookies(headers);
|
|
const cookiesProxy = new Proxy(cookies, {
|
|
get (target, prop, receiver) {
|
|
switch(prop){
|
|
case 'delete':
|
|
case 'set':
|
|
{
|
|
return (...args)=>{
|
|
const result = Reflect.apply(target[prop], target, args);
|
|
const newHeaders = new Headers(headers);
|
|
if (result instanceof _cookies1.ResponseCookies) {
|
|
headers.set('x-middleware-set-cookie', result.getAll().map((cookie)=>(0, _cookies.stringifyCookie)(cookie)).join(','));
|
|
}
|
|
handleMiddlewareField(init, newHeaders);
|
|
return result;
|
|
};
|
|
}
|
|
default:
|
|
return _reflect.ReflectAdapter.get(target, prop, receiver);
|
|
}
|
|
}
|
|
});
|
|
this[INTERNALS] = {
|
|
cookies: cookiesProxy,
|
|
url: init.url ? new _nexturl.NextURL(init.url, {
|
|
headers: (0, _utils.toNodeOutgoingHttpHeaders)(headers),
|
|
nextConfig: init.nextConfig
|
|
}) : undefined
|
|
};
|
|
}
|
|
[Symbol.for('edge-runtime.inspect.custom')]() {
|
|
return {
|
|
cookies: this.cookies,
|
|
url: this.url,
|
|
// rest of props come from Response
|
|
body: this.body,
|
|
bodyUsed: this.bodyUsed,
|
|
headers: Object.fromEntries(this.headers),
|
|
ok: this.ok,
|
|
redirected: this.redirected,
|
|
status: this.status,
|
|
statusText: this.statusText,
|
|
type: this.type
|
|
};
|
|
}
|
|
get cookies() {
|
|
return this[INTERNALS].cookies;
|
|
}
|
|
static json(body, init) {
|
|
const response = Response.json(body, init);
|
|
return new NextResponse(response.body, response);
|
|
}
|
|
static redirect(url, init) {
|
|
const status = typeof init === 'number' ? init : (init == null ? void 0 : init.status) ?? 307;
|
|
if (!REDIRECTS.has(status)) {
|
|
throw Object.defineProperty(new RangeError('Failed to execute "redirect" on "response": Invalid status code'), "__NEXT_ERROR_CODE", {
|
|
value: "E529",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const initObj = typeof init === 'object' ? init : {};
|
|
const headers = new Headers(initObj == null ? void 0 : initObj.headers);
|
|
headers.set('Location', (0, _utils.validateURL)(url));
|
|
return new NextResponse(null, {
|
|
...initObj,
|
|
headers,
|
|
status
|
|
});
|
|
}
|
|
static rewrite(destination, init) {
|
|
const headers = new Headers(init == null ? void 0 : init.headers);
|
|
headers.set('x-middleware-rewrite', (0, _utils.validateURL)(destination));
|
|
handleMiddlewareField(init, headers);
|
|
return new NextResponse(null, {
|
|
...init,
|
|
headers
|
|
});
|
|
}
|
|
static next(init) {
|
|
const headers = new Headers(init == null ? void 0 : init.headers);
|
|
headers.set('x-middleware-next', '1');
|
|
handleMiddlewareField(init, headers);
|
|
return new NextResponse(null, {
|
|
...init,
|
|
headers
|
|
});
|
|
}
|
|
} //# sourceMappingURL=response.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/spec-extension/image-response.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
/**
|
|
* @deprecated ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead.
|
|
* Migration with codemods: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#next-og-import
|
|
*/ Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "ImageResponse", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return ImageResponse;
|
|
}
|
|
});
|
|
function ImageResponse() {
|
|
throw Object.defineProperty(new Error('ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead'), "__NEXT_ERROR_CODE", {
|
|
value: "E183",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
} //# sourceMappingURL=image-response.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/compiled/ua-parser-js/ua-parser.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
|
|
(()=>{
|
|
var i = {
|
|
226: function(i, e) {
|
|
(function(o, a) {
|
|
"use strict";
|
|
var r = "1.0.35", t = "", n = "?", s = "function", b = "undefined", w = "object", l = "string", d = "major", c = "model", u = "name", p = "type", m = "vendor", f = "version", h = "architecture", v = "console", g = "mobile", k = "tablet", x = "smarttv", _ = "wearable", y = "embedded", q = 350;
|
|
var T = "Amazon", S = "Apple", z = "ASUS", N = "BlackBerry", A = "Browser", C = "Chrome", E = "Edge", O = "Firefox", U = "Google", j = "Huawei", P = "LG", R = "Microsoft", M = "Motorola", B = "Opera", V = "Samsung", D = "Sharp", I = "Sony", W = "Viera", F = "Xiaomi", G = "Zebra", H = "Facebook", L = "Chromium OS", Z = "Mac OS";
|
|
var extend = function(i, e) {
|
|
var o = {};
|
|
for(var a in i){
|
|
if (e[a] && e[a].length % 2 === 0) {
|
|
o[a] = e[a].concat(i[a]);
|
|
} else {
|
|
o[a] = i[a];
|
|
}
|
|
}
|
|
return o;
|
|
}, enumerize = function(i) {
|
|
var e = {};
|
|
for(var o = 0; o < i.length; o++){
|
|
e[i[o].toUpperCase()] = i[o];
|
|
}
|
|
return e;
|
|
}, has = function(i, e) {
|
|
return typeof i === l ? lowerize(e).indexOf(lowerize(i)) !== -1 : false;
|
|
}, lowerize = function(i) {
|
|
return i.toLowerCase();
|
|
}, majorize = function(i) {
|
|
return typeof i === l ? i.replace(/[^\d\.]/g, t).split(".")[0] : a;
|
|
}, trim = function(i, e) {
|
|
if (typeof i === l) {
|
|
i = i.replace(/^\s\s*/, t);
|
|
return typeof e === b ? i : i.substring(0, q);
|
|
}
|
|
};
|
|
var rgxMapper = function(i, e) {
|
|
var o = 0, r, t, n, b, l, d;
|
|
while(o < e.length && !l){
|
|
var c = e[o], u = e[o + 1];
|
|
r = t = 0;
|
|
while(r < c.length && !l){
|
|
if (!c[r]) {
|
|
break;
|
|
}
|
|
l = c[r++].exec(i);
|
|
if (!!l) {
|
|
for(n = 0; n < u.length; n++){
|
|
d = l[++t];
|
|
b = u[n];
|
|
if (typeof b === w && b.length > 0) {
|
|
if (b.length === 2) {
|
|
if (typeof b[1] == s) {
|
|
this[b[0]] = b[1].call(this, d);
|
|
} else {
|
|
this[b[0]] = b[1];
|
|
}
|
|
} else if (b.length === 3) {
|
|
if (typeof b[1] === s && !(b[1].exec && b[1].test)) {
|
|
this[b[0]] = d ? b[1].call(this, d, b[2]) : a;
|
|
} else {
|
|
this[b[0]] = d ? d.replace(b[1], b[2]) : a;
|
|
}
|
|
} else if (b.length === 4) {
|
|
this[b[0]] = d ? b[3].call(this, d.replace(b[1], b[2])) : a;
|
|
}
|
|
} else {
|
|
this[b] = d ? d : a;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
o += 2;
|
|
}
|
|
}, strMapper = function(i, e) {
|
|
for(var o in e){
|
|
if (typeof e[o] === w && e[o].length > 0) {
|
|
for(var r = 0; r < e[o].length; r++){
|
|
if (has(e[o][r], i)) {
|
|
return o === n ? a : o;
|
|
}
|
|
}
|
|
} else if (has(e[o], i)) {
|
|
return o === n ? a : o;
|
|
}
|
|
}
|
|
return i;
|
|
};
|
|
var $ = {
|
|
"1.0": "/8",
|
|
1.2: "/1",
|
|
1.3: "/3",
|
|
"2.0": "/412",
|
|
"2.0.2": "/416",
|
|
"2.0.3": "/417",
|
|
"2.0.4": "/419",
|
|
"?": "/"
|
|
}, X = {
|
|
ME: "4.90",
|
|
"NT 3.11": "NT3.51",
|
|
"NT 4.0": "NT4.0",
|
|
2e3: "NT 5.0",
|
|
XP: [
|
|
"NT 5.1",
|
|
"NT 5.2"
|
|
],
|
|
Vista: "NT 6.0",
|
|
7: "NT 6.1",
|
|
8: "NT 6.2",
|
|
8.1: "NT 6.3",
|
|
10: [
|
|
"NT 6.4",
|
|
"NT 10.0"
|
|
],
|
|
RT: "ARM"
|
|
};
|
|
var K = {
|
|
browser: [
|
|
[
|
|
/\b(?:crmo|crios)\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Chrome"
|
|
]
|
|
],
|
|
[
|
|
/edg(?:e|ios|a)?\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Edge"
|
|
]
|
|
],
|
|
[
|
|
/(opera mini)\/([-\w\.]+)/i,
|
|
/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,
|
|
/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/opios[\/ ]+([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
B + " Mini"
|
|
]
|
|
],
|
|
[
|
|
/\bopr\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
B
|
|
]
|
|
],
|
|
[
|
|
/(kindle)\/([\w\.]+)/i,
|
|
/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,
|
|
/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,
|
|
/(ba?idubrowser)[\/ ]?([\w\.]+)/i,
|
|
/(?:ms|\()(ie) ([\w\.]+)/i,
|
|
/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,
|
|
/(heytap|ovi)browser\/([\d\.]+)/i,
|
|
/(weibo)__([\d\.]+)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"UC" + A
|
|
]
|
|
],
|
|
[
|
|
/microm.+\bqbcore\/([\w\.]+)/i,
|
|
/\bqbcore\/([\w\.]+).+microm/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"WeChat(Win) Desktop"
|
|
]
|
|
],
|
|
[
|
|
/micromessenger\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"WeChat"
|
|
]
|
|
],
|
|
[
|
|
/konqueror\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Konqueror"
|
|
]
|
|
],
|
|
[
|
|
/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"IE"
|
|
]
|
|
],
|
|
[
|
|
/ya(?:search)?browser\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Yandex"
|
|
]
|
|
],
|
|
[
|
|
/(avast|avg)\/([\w\.]+)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
/(.+)/,
|
|
"$1 Secure " + A
|
|
],
|
|
f
|
|
],
|
|
[
|
|
/\bfocus\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
O + " Focus"
|
|
]
|
|
],
|
|
[
|
|
/\bopt\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
B + " Touch"
|
|
]
|
|
],
|
|
[
|
|
/coc_coc\w+\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Coc Coc"
|
|
]
|
|
],
|
|
[
|
|
/dolfin\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Dolphin"
|
|
]
|
|
],
|
|
[
|
|
/coast\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
B + " Coast"
|
|
]
|
|
],
|
|
[
|
|
/miuibrowser\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"MIUI " + A
|
|
]
|
|
],
|
|
[
|
|
/fxios\/([-\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
O
|
|
]
|
|
],
|
|
[
|
|
/\bqihu|(qi?ho?o?|360)browser/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
"360 " + A
|
|
]
|
|
],
|
|
[
|
|
/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
/(.+)/,
|
|
"$1 " + A
|
|
],
|
|
f
|
|
],
|
|
[
|
|
/(comodo_dragon)\/([\w\.]+)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
/_/g,
|
|
" "
|
|
],
|
|
f
|
|
],
|
|
[
|
|
/(electron)\/([\w\.]+) safari/i,
|
|
/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,
|
|
/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/(metasr)[\/ ]?([\w\.]+)/i,
|
|
/(lbbrowser)/i,
|
|
/\[(linkedin)app\]/i
|
|
],
|
|
[
|
|
u
|
|
],
|
|
[
|
|
/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
H
|
|
],
|
|
f
|
|
],
|
|
[
|
|
/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,
|
|
/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,
|
|
/safari (line)\/([\w\.]+)/i,
|
|
/\b(line)\/([\w\.]+)\/iab/i,
|
|
/(chromium|instagram)[\/ ]([-\w\.]+)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/\bgsa\/([\w\.]+) .*safari\//i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"GSA"
|
|
]
|
|
],
|
|
[
|
|
/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"TikTok"
|
|
]
|
|
],
|
|
[
|
|
/headlesschrome(?:\/([\w\.]+)| )/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
C + " Headless"
|
|
]
|
|
],
|
|
[
|
|
/ wv\).+(chrome)\/([\w\.]+)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
C + " WebView"
|
|
],
|
|
f
|
|
],
|
|
[
|
|
/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Android " + A
|
|
]
|
|
],
|
|
[
|
|
/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Mobile Safari"
|
|
]
|
|
],
|
|
[
|
|
/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i
|
|
],
|
|
[
|
|
f,
|
|
u
|
|
],
|
|
[
|
|
/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i
|
|
],
|
|
[
|
|
u,
|
|
[
|
|
f,
|
|
strMapper,
|
|
$
|
|
]
|
|
],
|
|
[
|
|
/(webkit|khtml)\/([\w\.]+)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/(navigator|netscape\d?)\/([-\w\.]+)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
"Netscape"
|
|
],
|
|
f
|
|
],
|
|
[
|
|
/mobile vr; rv:([\w\.]+)\).+firefox/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
O + " Reality"
|
|
]
|
|
],
|
|
[
|
|
/ekiohf.+(flow)\/([\w\.]+)/i,
|
|
/(swiftfox)/i,
|
|
/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,
|
|
/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,
|
|
/(firefox)\/([\w\.]+)/i,
|
|
/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,
|
|
/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,
|
|
/(links) \(([\w\.]+)/i,
|
|
/panasonic;(viera)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/(cobalt)\/([\w\.]+)/i
|
|
],
|
|
[
|
|
u,
|
|
[
|
|
f,
|
|
/master.|lts./,
|
|
""
|
|
]
|
|
]
|
|
],
|
|
cpu: [
|
|
[
|
|
/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i
|
|
],
|
|
[
|
|
[
|
|
h,
|
|
"amd64"
|
|
]
|
|
],
|
|
[
|
|
/(ia32(?=;))/i
|
|
],
|
|
[
|
|
[
|
|
h,
|
|
lowerize
|
|
]
|
|
],
|
|
[
|
|
/((?:i[346]|x)86)[;\)]/i
|
|
],
|
|
[
|
|
[
|
|
h,
|
|
"ia32"
|
|
]
|
|
],
|
|
[
|
|
/\b(aarch64|arm(v?8e?l?|_?64))\b/i
|
|
],
|
|
[
|
|
[
|
|
h,
|
|
"arm64"
|
|
]
|
|
],
|
|
[
|
|
/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i
|
|
],
|
|
[
|
|
[
|
|
h,
|
|
"armhf"
|
|
]
|
|
],
|
|
[
|
|
/windows (ce|mobile); ppc;/i
|
|
],
|
|
[
|
|
[
|
|
h,
|
|
"arm"
|
|
]
|
|
],
|
|
[
|
|
/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i
|
|
],
|
|
[
|
|
[
|
|
h,
|
|
/ower/,
|
|
t,
|
|
lowerize
|
|
]
|
|
],
|
|
[
|
|
/(sun4\w)[;\)]/i
|
|
],
|
|
[
|
|
[
|
|
h,
|
|
"sparc"
|
|
]
|
|
],
|
|
[
|
|
/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i
|
|
],
|
|
[
|
|
[
|
|
h,
|
|
lowerize
|
|
]
|
|
]
|
|
],
|
|
device: [
|
|
[
|
|
/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
V
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,
|
|
/samsung[- ]([-\w]+)/i,
|
|
/sec-(sgh\w+)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
V
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
S
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\((ipad);[-\w\),; ]+apple/i,
|
|
/applecoremedia\/[\w\.]+ \((ipad)/i,
|
|
/\b(ipad)\d\d?,\d\d?[;\]].+ios/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
S
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/(macintosh);/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
S
|
|
]
|
|
],
|
|
[
|
|
/\b(sh-?[altvz]?\d\d[a-ekm]?)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
D
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
j
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/(?:huawei|honor)([-\w ]+)[;\)]/i,
|
|
/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
j
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(poco[\w ]+)(?: bui|\))/i,
|
|
/\b; (\w+) build\/hm\1/i,
|
|
/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,
|
|
/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,
|
|
/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i
|
|
],
|
|
[
|
|
[
|
|
c,
|
|
/_/g,
|
|
" "
|
|
],
|
|
[
|
|
m,
|
|
F
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i
|
|
],
|
|
[
|
|
[
|
|
c,
|
|
/_/g,
|
|
" "
|
|
],
|
|
[
|
|
m,
|
|
F
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/; (\w+) bui.+ oppo/i,
|
|
/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"OPPO"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/vivo (\w+)(?: bui|\))/i,
|
|
/\b(v[12]\d{3}\w?[at])(?: bui|;)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Vivo"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(rmx[12]\d{3})(?: bui|;|\))/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Realme"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,
|
|
/\bmot(?:orola)?[- ](\w*)/i,
|
|
/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
M
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(mz60\d|xoom[2 ]{0,2}) build\//i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
M
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
P
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,
|
|
/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,
|
|
/\blg-?([\d\w]+) bui/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
P
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(ideatab[-\w ]+)/i,
|
|
/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Lenovo"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/(?:maemo|nokia).*(n900|lumia \d+)/i,
|
|
/nokia[-_ ]?([-\w\.]*)/i
|
|
],
|
|
[
|
|
[
|
|
c,
|
|
/_/g,
|
|
" "
|
|
],
|
|
[
|
|
m,
|
|
"Nokia"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(pixel c)\b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
U
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
U
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
I
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/sony tablet [ps]/i,
|
|
/\b(?:sony)?sgp\w+(?: bui|\))/i
|
|
],
|
|
[
|
|
[
|
|
c,
|
|
"Xperia Tablet"
|
|
],
|
|
[
|
|
m,
|
|
I
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/ (kb2005|in20[12]5|be20[12][59])\b/i,
|
|
/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"OnePlus"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(alexa)webm/i,
|
|
/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,
|
|
/(kf[a-z]+)( bui|\)).+silk\//i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
T
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i
|
|
],
|
|
[
|
|
[
|
|
c,
|
|
/(.+)/g,
|
|
"Fire Phone $1"
|
|
],
|
|
[
|
|
m,
|
|
T
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(playbook);[-\w\),; ]+(rim)/i
|
|
],
|
|
[
|
|
c,
|
|
m,
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b((?:bb[a-f]|st[hv])100-\d)/i,
|
|
/\(bb10; (\w+)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
N
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
z
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
z
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(nexus 9)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"HTC"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,
|
|
/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,
|
|
/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i
|
|
],
|
|
[
|
|
m,
|
|
[
|
|
c,
|
|
/_/g,
|
|
" "
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Acer"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/droid.+; (m[1-5] note) bui/i,
|
|
/\bmz-([-\w]{2,})/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Meizu"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,
|
|
/(hp) ([\w ]+\w)/i,
|
|
/(asus)-?(\w+)/i,
|
|
/(microsoft); (lumia[\w ]+)/i,
|
|
/(lenovo)[-_ ]?([-\w]+)/i,
|
|
/(jolla)/i,
|
|
/(oppo) ?([\w ]+) bui/i
|
|
],
|
|
[
|
|
m,
|
|
c,
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(kobo)\s(ereader|touch)/i,
|
|
/(archos) (gamepad2?)/i,
|
|
/(hp).+(touchpad(?!.+tablet)|tablet)/i,
|
|
/(kindle)\/([\w\.]+)/i,
|
|
/(nook)[\w ]+build\/(\w+)/i,
|
|
/(dell) (strea[kpr\d ]*[\dko])/i,
|
|
/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,
|
|
/(trinity)[- ]*(t\d{3}) bui/i,
|
|
/(gigaset)[- ]+(q\w{1,9}) bui/i,
|
|
/(vodafone) ([\w ]+)(?:\)| bui)/i
|
|
],
|
|
[
|
|
m,
|
|
c,
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/(surface duo)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
R
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/droid [\d\.]+; (fp\du?)(?: b|\))/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Fairphone"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(u304aa)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"AT&T"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\bsie-(\w*)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Siemens"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(rct\w+) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"RCA"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b(venue[\d ]{2,7}) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Dell"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b(q(?:mv|ta)\w+) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Verizon"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Barnes & Noble"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b(tm\d{3}\w+) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"NuVision"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b(k88) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"ZTE"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b(nx\d{3}j) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"ZTE"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(gen\d{3}) b.+49h/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Swiss"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(zur\d{3}) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Swiss"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b((zeki)?tb.*\b) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Zeki"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b([yr]\d{2}) b/i,
|
|
/\b(dragon[- ]+touch |dt)(\w{5}) b/i
|
|
],
|
|
[
|
|
[
|
|
m,
|
|
"Dragon Touch"
|
|
],
|
|
c,
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b(ns-?\w{0,9}) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Insignia"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b((nxa|next)-?\w{0,9}) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"NextBook"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i
|
|
],
|
|
[
|
|
[
|
|
m,
|
|
"Voice"
|
|
],
|
|
c,
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(lvtel\-)?(v1[12]) b/i
|
|
],
|
|
[
|
|
[
|
|
m,
|
|
"LvTel"
|
|
],
|
|
c,
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(ph-1) /i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Essential"
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/\b(v(100md|700na|7011|917g).*\b) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Envizen"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b(trio[-\w\. ]+) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"MachSpeed"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\btu_(1491) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Rotor"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/(shield[\w ]+) b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Nvidia"
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/(sprint) (\w+)/i
|
|
],
|
|
[
|
|
m,
|
|
c,
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(kin\.[onetw]{3})/i
|
|
],
|
|
[
|
|
[
|
|
c,
|
|
/\./g,
|
|
" "
|
|
],
|
|
[
|
|
m,
|
|
R
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
G
|
|
],
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
G
|
|
],
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/smart-tv.+(samsung)/i
|
|
],
|
|
[
|
|
m,
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/hbbtv.+maple;(\d+)/i
|
|
],
|
|
[
|
|
[
|
|
c,
|
|
/^/,
|
|
"SmartTV"
|
|
],
|
|
[
|
|
m,
|
|
V
|
|
],
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i
|
|
],
|
|
[
|
|
[
|
|
m,
|
|
P
|
|
],
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/(apple) ?tv/i
|
|
],
|
|
[
|
|
m,
|
|
[
|
|
c,
|
|
S + " TV"
|
|
],
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/crkey/i
|
|
],
|
|
[
|
|
[
|
|
c,
|
|
C + "cast"
|
|
],
|
|
[
|
|
m,
|
|
U
|
|
],
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/droid.+aft(\w)( bui|\))/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
T
|
|
],
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/\(dtv[\);].+(aquos)/i,
|
|
/(aquos-tv[\w ]+)\)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
D
|
|
],
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/(bravia[\w ]+)( bui|\))/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
I
|
|
],
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/(mitv-\w{5}) bui/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
F
|
|
],
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/Hbbtv.*(technisat) (.*);/i
|
|
],
|
|
[
|
|
m,
|
|
c,
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,
|
|
/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i
|
|
],
|
|
[
|
|
[
|
|
m,
|
|
trim
|
|
],
|
|
[
|
|
c,
|
|
trim
|
|
],
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i
|
|
],
|
|
[
|
|
[
|
|
p,
|
|
x
|
|
]
|
|
],
|
|
[
|
|
/(ouya)/i,
|
|
/(nintendo) ([wids3utch]+)/i
|
|
],
|
|
[
|
|
m,
|
|
c,
|
|
[
|
|
p,
|
|
v
|
|
]
|
|
],
|
|
[
|
|
/droid.+; (shield) bui/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Nvidia"
|
|
],
|
|
[
|
|
p,
|
|
v
|
|
]
|
|
],
|
|
[
|
|
/(playstation [345portablevi]+)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
I
|
|
],
|
|
[
|
|
p,
|
|
v
|
|
]
|
|
],
|
|
[
|
|
/\b(xbox(?: one)?(?!; xbox))[\); ]/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
R
|
|
],
|
|
[
|
|
p,
|
|
v
|
|
]
|
|
],
|
|
[
|
|
/((pebble))app/i
|
|
],
|
|
[
|
|
m,
|
|
c,
|
|
[
|
|
p,
|
|
_
|
|
]
|
|
],
|
|
[
|
|
/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
S
|
|
],
|
|
[
|
|
p,
|
|
_
|
|
]
|
|
],
|
|
[
|
|
/droid.+; (glass) \d/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
U
|
|
],
|
|
[
|
|
p,
|
|
_
|
|
]
|
|
],
|
|
[
|
|
/droid.+; (wt63?0{2,3})\)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
G
|
|
],
|
|
[
|
|
p,
|
|
_
|
|
]
|
|
],
|
|
[
|
|
/(quest( 2| pro)?)/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
H
|
|
],
|
|
[
|
|
p,
|
|
_
|
|
]
|
|
],
|
|
[
|
|
/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i
|
|
],
|
|
[
|
|
m,
|
|
[
|
|
p,
|
|
y
|
|
]
|
|
],
|
|
[
|
|
/(aeobc)\b/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
T
|
|
],
|
|
[
|
|
p,
|
|
y
|
|
]
|
|
],
|
|
[
|
|
/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i
|
|
],
|
|
[
|
|
[
|
|
p,
|
|
k
|
|
]
|
|
],
|
|
[
|
|
/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i
|
|
],
|
|
[
|
|
[
|
|
p,
|
|
g
|
|
]
|
|
],
|
|
[
|
|
/(android[-\w\. ]{0,9});.+buil/i
|
|
],
|
|
[
|
|
c,
|
|
[
|
|
m,
|
|
"Generic"
|
|
]
|
|
]
|
|
],
|
|
engine: [
|
|
[
|
|
/windows.+ edge\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
E + "HTML"
|
|
]
|
|
],
|
|
[
|
|
/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Blink"
|
|
]
|
|
],
|
|
[
|
|
/(presto)\/([\w\.]+)/i,
|
|
/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,
|
|
/ekioh(flow)\/([\w\.]+)/i,
|
|
/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,
|
|
/(icab)[\/ ]([23]\.[\d\.]+)/i,
|
|
/\b(libweb)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/rv\:([\w\.]{1,9})\b.+(gecko)/i
|
|
],
|
|
[
|
|
f,
|
|
u
|
|
]
|
|
],
|
|
os: [
|
|
[
|
|
/microsoft (windows) (vista|xp)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/(windows) nt 6\.2; (arm)/i,
|
|
/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,
|
|
/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i
|
|
],
|
|
[
|
|
u,
|
|
[
|
|
f,
|
|
strMapper,
|
|
X
|
|
]
|
|
],
|
|
[
|
|
/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
"Windows"
|
|
],
|
|
[
|
|
f,
|
|
strMapper,
|
|
X
|
|
]
|
|
],
|
|
[
|
|
/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,
|
|
/ios;fbsv\/([\d\.]+)/i,
|
|
/cfnetwork\/.+darwin/i
|
|
],
|
|
[
|
|
[
|
|
f,
|
|
/_/g,
|
|
"."
|
|
],
|
|
[
|
|
u,
|
|
"iOS"
|
|
]
|
|
],
|
|
[
|
|
/(mac os x) ?([\w\. ]*)/i,
|
|
/(macintosh|mac_powerpc\b)(?!.+haiku)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
Z
|
|
],
|
|
[
|
|
f,
|
|
/_/g,
|
|
"."
|
|
]
|
|
],
|
|
[
|
|
/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i
|
|
],
|
|
[
|
|
f,
|
|
u
|
|
],
|
|
[
|
|
/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,
|
|
/(blackberry)\w*\/([\w\.]*)/i,
|
|
/(tizen|kaios)[\/ ]([\w\.]+)/i,
|
|
/\((series40);/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/\(bb(10);/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
N
|
|
]
|
|
],
|
|
[
|
|
/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"Symbian"
|
|
]
|
|
],
|
|
[
|
|
/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
O + " OS"
|
|
]
|
|
],
|
|
[
|
|
/web0s;.+rt(tv)/i,
|
|
/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"webOS"
|
|
]
|
|
],
|
|
[
|
|
/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
"watchOS"
|
|
]
|
|
],
|
|
[
|
|
/crkey\/([\d\.]+)/i
|
|
],
|
|
[
|
|
f,
|
|
[
|
|
u,
|
|
C + "cast"
|
|
]
|
|
],
|
|
[
|
|
/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
L
|
|
],
|
|
f
|
|
],
|
|
[
|
|
/panasonic;(viera)/i,
|
|
/(netrange)mmh/i,
|
|
/(nettv)\/(\d+\.[\w\.]+)/i,
|
|
/(nintendo|playstation) ([wids345portablevuch]+)/i,
|
|
/(xbox); +xbox ([^\);]+)/i,
|
|
/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,
|
|
/(mint)[\/\(\) ]?(\w*)/i,
|
|
/(mageia|vectorlinux)[; ]/i,
|
|
/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,
|
|
/(hurd|linux) ?([\w\.]*)/i,
|
|
/(gnu) ?([\w\.]*)/i,
|
|
/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,
|
|
/(haiku) (\w+)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
],
|
|
[
|
|
/(sunos) ?([\w\.\d]*)/i
|
|
],
|
|
[
|
|
[
|
|
u,
|
|
"Solaris"
|
|
],
|
|
f
|
|
],
|
|
[
|
|
/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,
|
|
/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,
|
|
/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,
|
|
/(unix) ?([\w\.]*)/i
|
|
],
|
|
[
|
|
u,
|
|
f
|
|
]
|
|
]
|
|
};
|
|
var UAParser = function(i, e) {
|
|
if (typeof i === w) {
|
|
e = i;
|
|
i = a;
|
|
}
|
|
if (!(this instanceof UAParser)) {
|
|
return new UAParser(i, e).getResult();
|
|
}
|
|
var r = typeof o !== b && o.navigator ? o.navigator : a;
|
|
var n = i || (r && r.userAgent ? r.userAgent : t);
|
|
var v = r && r.userAgentData ? r.userAgentData : a;
|
|
var x = e ? extend(K, e) : K;
|
|
var _ = r && r.userAgent == n;
|
|
this.getBrowser = function() {
|
|
var i = {};
|
|
i[u] = a;
|
|
i[f] = a;
|
|
rgxMapper.call(i, n, x.browser);
|
|
i[d] = majorize(i[f]);
|
|
if (_ && r && r.brave && typeof r.brave.isBrave == s) {
|
|
i[u] = "Brave";
|
|
}
|
|
return i;
|
|
};
|
|
this.getCPU = function() {
|
|
var i = {};
|
|
i[h] = a;
|
|
rgxMapper.call(i, n, x.cpu);
|
|
return i;
|
|
};
|
|
this.getDevice = function() {
|
|
var i = {};
|
|
i[m] = a;
|
|
i[c] = a;
|
|
i[p] = a;
|
|
rgxMapper.call(i, n, x.device);
|
|
if (_ && !i[p] && v && v.mobile) {
|
|
i[p] = g;
|
|
}
|
|
if (_ && i[c] == "Macintosh" && r && typeof r.standalone !== b && r.maxTouchPoints && r.maxTouchPoints > 2) {
|
|
i[c] = "iPad";
|
|
i[p] = k;
|
|
}
|
|
return i;
|
|
};
|
|
this.getEngine = function() {
|
|
var i = {};
|
|
i[u] = a;
|
|
i[f] = a;
|
|
rgxMapper.call(i, n, x.engine);
|
|
return i;
|
|
};
|
|
this.getOS = function() {
|
|
var i = {};
|
|
i[u] = a;
|
|
i[f] = a;
|
|
rgxMapper.call(i, n, x.os);
|
|
if (_ && !i[u] && v && v.platform != "Unknown") {
|
|
i[u] = v.platform.replace(/chrome os/i, L).replace(/macos/i, Z);
|
|
}
|
|
return i;
|
|
};
|
|
this.getResult = function() {
|
|
return {
|
|
ua: this.getUA(),
|
|
browser: this.getBrowser(),
|
|
engine: this.getEngine(),
|
|
os: this.getOS(),
|
|
device: this.getDevice(),
|
|
cpu: this.getCPU()
|
|
};
|
|
};
|
|
this.getUA = function() {
|
|
return n;
|
|
};
|
|
this.setUA = function(i) {
|
|
n = typeof i === l && i.length > q ? trim(i, q) : i;
|
|
return this;
|
|
};
|
|
this.setUA(n);
|
|
return this;
|
|
};
|
|
UAParser.VERSION = r;
|
|
UAParser.BROWSER = enumerize([
|
|
u,
|
|
f,
|
|
d
|
|
]);
|
|
UAParser.CPU = enumerize([
|
|
h
|
|
]);
|
|
UAParser.DEVICE = enumerize([
|
|
c,
|
|
m,
|
|
p,
|
|
v,
|
|
g,
|
|
x,
|
|
k,
|
|
_,
|
|
y
|
|
]);
|
|
UAParser.ENGINE = UAParser.OS = enumerize([
|
|
u,
|
|
f
|
|
]);
|
|
if (typeof e !== b) {
|
|
if ("object" !== b && i.exports) {
|
|
e = i.exports = UAParser;
|
|
}
|
|
e.UAParser = UAParser;
|
|
} else {
|
|
if (typeof define === s && define.amd) {
|
|
((r)=>r !== undefined && __turbopack_context__.v(r))(function() {
|
|
return UAParser;
|
|
}(__turbopack_context__.r, exports, module));
|
|
} else if (typeof o !== b) {
|
|
o.UAParser = UAParser;
|
|
}
|
|
}
|
|
var Q = typeof o !== b && (o.jQuery || o.Zepto);
|
|
if (Q && !Q.ua) {
|
|
var Y = new UAParser;
|
|
Q.ua = Y.getResult();
|
|
Q.ua.get = function() {
|
|
return Y.getUA();
|
|
};
|
|
Q.ua.set = function(i) {
|
|
Y.setUA(i);
|
|
var e = Y.getResult();
|
|
for(var o in e){
|
|
Q.ua[o] = e[o];
|
|
}
|
|
};
|
|
}
|
|
})(("TURBOPACK compile-time falsy", 0) ? "TURBOPACK unreachable" : this);
|
|
}
|
|
};
|
|
var e = {};
|
|
function __nccwpck_require__(o) {
|
|
var a = e[o];
|
|
if (a !== undefined) {
|
|
return a.exports;
|
|
}
|
|
var r = e[o] = {
|
|
exports: {}
|
|
};
|
|
var t = true;
|
|
try {
|
|
i[o].call(r.exports, r, r.exports, __nccwpck_require__);
|
|
t = false;
|
|
} finally{
|
|
if (t) delete e[o];
|
|
}
|
|
return r.exports;
|
|
}
|
|
if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = ("TURBOPACK compile-time value", "/ROOT/node_modules/next/dist/compiled/ua-parser-js") + "/";
|
|
var o = __nccwpck_require__(226);
|
|
module.exports = o;
|
|
})();
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/spec-extension/user-agent.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
isBot: null,
|
|
userAgent: null,
|
|
userAgentFromString: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
isBot: function() {
|
|
return isBot;
|
|
},
|
|
userAgent: function() {
|
|
return userAgent;
|
|
},
|
|
userAgentFromString: function() {
|
|
return userAgentFromString;
|
|
}
|
|
});
|
|
const _uaparserjs = /*#__PURE__*/ _interop_require_default(__turbopack_context__.r("[project]/node_modules/next/dist/compiled/ua-parser-js/ua-parser.js [app-route] (ecmascript)"));
|
|
function _interop_require_default(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
}
|
|
function isBot(input) {
|
|
return /Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Google-InspectionTool|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver/i.test(input);
|
|
}
|
|
function userAgentFromString(input) {
|
|
return {
|
|
...(0, _uaparserjs.default)(input),
|
|
isBot: input === undefined ? false : isBot(input)
|
|
};
|
|
}
|
|
function userAgent({ headers }) {
|
|
return userAgentFromString(headers.get('user-agent') || undefined);
|
|
} //# sourceMappingURL=user-agent.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/web/spec-extension/url-pattern.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "URLPattern", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return GlobalURLPattern;
|
|
}
|
|
});
|
|
const GlobalURLPattern = typeof URLPattern === 'undefined' ? undefined : URLPattern; //# sourceMappingURL=url-pattern.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/after/after.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "after", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return after;
|
|
}
|
|
});
|
|
const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)");
|
|
function after(task) {
|
|
const workStore = _workasyncstorageexternal.workAsyncStorage.getStore();
|
|
if (!workStore) {
|
|
// TODO(after): the linked docs page talks about *dynamic* APIs, which after soon won't be anymore
|
|
throw Object.defineProperty(new Error('`after` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context'), "__NEXT_ERROR_CODE", {
|
|
value: "E468",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const { afterContext } = workStore;
|
|
return afterContext.after(task);
|
|
} //# sourceMappingURL=after.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/after/index.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && __export(__turbopack_context__.r("[project]/node_modules/next/dist/server/after/after.js [app-route] (ecmascript)"));
|
|
_export_star(__turbopack_context__.r("[project]/node_modules/next/dist/server/after/after.js [app-route] (ecmascript)"), exports);
|
|
function _export_star(from, to) {
|
|
Object.keys(from).forEach(function(k) {
|
|
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
Object.defineProperty(to, k, {
|
|
enumerable: true,
|
|
get: function() {
|
|
return from[k];
|
|
}
|
|
});
|
|
}
|
|
});
|
|
return from;
|
|
} //# sourceMappingURL=index.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/client/components/hooks-server-context.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
DynamicServerError: null,
|
|
isDynamicServerError: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
DynamicServerError: function() {
|
|
return DynamicServerError;
|
|
},
|
|
isDynamicServerError: function() {
|
|
return isDynamicServerError;
|
|
}
|
|
});
|
|
const DYNAMIC_ERROR_CODE = 'DYNAMIC_SERVER_USAGE';
|
|
class DynamicServerError extends Error {
|
|
constructor(description){
|
|
super(`Dynamic server usage: ${description}`), this.description = description, this.digest = DYNAMIC_ERROR_CODE;
|
|
}
|
|
}
|
|
function isDynamicServerError(err) {
|
|
if (typeof err !== 'object' || err === null || !('digest' in err) || typeof err.digest !== 'string') {
|
|
return false;
|
|
}
|
|
return err.digest === DYNAMIC_ERROR_CODE;
|
|
}
|
|
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;
|
|
} //# sourceMappingURL=hooks-server-context.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
StaticGenBailoutError: null,
|
|
isStaticGenBailoutError: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
StaticGenBailoutError: function() {
|
|
return StaticGenBailoutError;
|
|
},
|
|
isStaticGenBailoutError: function() {
|
|
return isStaticGenBailoutError;
|
|
}
|
|
});
|
|
const NEXT_STATIC_GEN_BAILOUT = 'NEXT_STATIC_GEN_BAILOUT';
|
|
class StaticGenBailoutError extends Error {
|
|
constructor(...args){
|
|
super(...args), this.code = NEXT_STATIC_GEN_BAILOUT;
|
|
}
|
|
}
|
|
function isStaticGenBailoutError(error) {
|
|
if (typeof error !== 'object' || error === null || !('code' in error)) {
|
|
return false;
|
|
}
|
|
return error.code === NEXT_STATIC_GEN_BAILOUT;
|
|
}
|
|
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;
|
|
} //# sourceMappingURL=static-generation-bailout.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
isHangingPromiseRejectionError: null,
|
|
makeDevtoolsIOAwarePromise: null,
|
|
makeHangingPromise: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
isHangingPromiseRejectionError: function() {
|
|
return isHangingPromiseRejectionError;
|
|
},
|
|
makeDevtoolsIOAwarePromise: function() {
|
|
return makeDevtoolsIOAwarePromise;
|
|
},
|
|
makeHangingPromise: function() {
|
|
return makeHangingPromise;
|
|
}
|
|
});
|
|
function isHangingPromiseRejectionError(err) {
|
|
if (typeof err !== 'object' || err === null || !('digest' in err)) {
|
|
return false;
|
|
}
|
|
return err.digest === HANGING_PROMISE_REJECTION;
|
|
}
|
|
const HANGING_PROMISE_REJECTION = 'HANGING_PROMISE_REJECTION';
|
|
class HangingPromiseRejectionError extends Error {
|
|
constructor(route, expression){
|
|
super(`During prerendering, ${expression} rejects when the prerender is complete. Typically these errors are handled by React but if you move ${expression} to a different context by using \`setTimeout\`, \`after\`, or similar functions you may observe this error and you should handle it in that context. This occurred at route "${route}".`), this.route = route, this.expression = expression, this.digest = HANGING_PROMISE_REJECTION;
|
|
}
|
|
}
|
|
const abortListenersBySignal = new WeakMap();
|
|
function makeHangingPromise(signal, route, expression) {
|
|
if (signal.aborted) {
|
|
return Promise.reject(new HangingPromiseRejectionError(route, expression));
|
|
} else {
|
|
const hangingPromise = new Promise((_, reject)=>{
|
|
const boundRejection = reject.bind(null, new HangingPromiseRejectionError(route, expression));
|
|
let currentListeners = abortListenersBySignal.get(signal);
|
|
if (currentListeners) {
|
|
currentListeners.push(boundRejection);
|
|
} else {
|
|
const listeners = [
|
|
boundRejection
|
|
];
|
|
abortListenersBySignal.set(signal, listeners);
|
|
signal.addEventListener('abort', ()=>{
|
|
for(let i = 0; i < listeners.length; i++){
|
|
listeners[i]();
|
|
}
|
|
}, {
|
|
once: true
|
|
});
|
|
}
|
|
});
|
|
// We are fine if no one actually awaits this promise. We shouldn't consider this an unhandled rejection so
|
|
// we attach a noop catch handler here to suppress this warning. If you actually await somewhere or construct
|
|
// your own promise out of it you'll need to ensure you handle the error when it rejects.
|
|
hangingPromise.catch(ignoreReject);
|
|
return hangingPromise;
|
|
}
|
|
}
|
|
function ignoreReject() {}
|
|
function makeDevtoolsIOAwarePromise(underlying, requestStore, stage) {
|
|
if (requestStore.stagedRendering) {
|
|
// We resolve each stage in a timeout, so React DevTools will pick this up as IO.
|
|
return requestStore.stagedRendering.delayUntilStage(stage, undefined, underlying);
|
|
}
|
|
// in React DevTools if we resolve in a setTimeout we will observe
|
|
// the promise resolution as something that can suspend a boundary or root.
|
|
return new Promise((resolve)=>{
|
|
// Must use setTimeout to be considered IO React DevTools. setImmediate will not work.
|
|
setTimeout(()=>{
|
|
resolve(underlying);
|
|
}, 0);
|
|
});
|
|
} //# sourceMappingURL=dynamic-rendering-utils.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/lib/framework/boundary-constants.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
METADATA_BOUNDARY_NAME: null,
|
|
OUTLET_BOUNDARY_NAME: null,
|
|
ROOT_LAYOUT_BOUNDARY_NAME: null,
|
|
VIEWPORT_BOUNDARY_NAME: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
METADATA_BOUNDARY_NAME: function() {
|
|
return METADATA_BOUNDARY_NAME;
|
|
},
|
|
OUTLET_BOUNDARY_NAME: function() {
|
|
return OUTLET_BOUNDARY_NAME;
|
|
},
|
|
ROOT_LAYOUT_BOUNDARY_NAME: function() {
|
|
return ROOT_LAYOUT_BOUNDARY_NAME;
|
|
},
|
|
VIEWPORT_BOUNDARY_NAME: function() {
|
|
return VIEWPORT_BOUNDARY_NAME;
|
|
}
|
|
});
|
|
const METADATA_BOUNDARY_NAME = '__next_metadata_boundary__';
|
|
const VIEWPORT_BOUNDARY_NAME = '__next_viewport_boundary__';
|
|
const OUTLET_BOUNDARY_NAME = '__next_outlet_boundary__';
|
|
const ROOT_LAYOUT_BOUNDARY_NAME = '__next_root_layout_boundary__'; //# sourceMappingURL=boundary-constants.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/lib/scheduler.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
atLeastOneTask: null,
|
|
scheduleImmediate: null,
|
|
scheduleOnNextTick: null,
|
|
waitAtLeastOneReactRenderTask: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
atLeastOneTask: function() {
|
|
return atLeastOneTask;
|
|
},
|
|
scheduleImmediate: function() {
|
|
return scheduleImmediate;
|
|
},
|
|
scheduleOnNextTick: function() {
|
|
return scheduleOnNextTick;
|
|
},
|
|
waitAtLeastOneReactRenderTask: function() {
|
|
return 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));
|
|
}
|
|
} //# sourceMappingURL=scheduler.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
// This has to be a shared module which is shared between client component error boundary and dynamic component
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
BailoutToCSRError: null,
|
|
isBailoutToCSRError: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
BailoutToCSRError: function() {
|
|
return BailoutToCSRError;
|
|
},
|
|
isBailoutToCSRError: function() {
|
|
return isBailoutToCSRError;
|
|
}
|
|
});
|
|
const BAILOUT_TO_CSR = 'BAILOUT_TO_CLIENT_SIDE_RENDERING';
|
|
class BailoutToCSRError extends Error {
|
|
constructor(reason){
|
|
super(`Bail out to client-side rendering: ${reason}`), this.reason = reason, this.digest = BAILOUT_TO_CSR;
|
|
}
|
|
}
|
|
function isBailoutToCSRError(err) {
|
|
if (typeof err !== 'object' || err === null || !('digest' in err)) {
|
|
return false;
|
|
}
|
|
return err.digest === BAILOUT_TO_CSR;
|
|
} //# sourceMappingURL=bailout-to-csr.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "InvariantError", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return 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';
|
|
}
|
|
} //# sourceMappingURL=invariant-error.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "createPromiseWithResolvers", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return createPromiseWithResolvers;
|
|
}
|
|
});
|
|
function createPromiseWithResolvers() {
|
|
// Shim of Stage 4 Promise.withResolvers proposal
|
|
let resolve;
|
|
let reject;
|
|
const promise = new Promise((res, rej)=>{
|
|
resolve = res;
|
|
reject = rej;
|
|
});
|
|
return {
|
|
resolve: resolve,
|
|
reject: reject,
|
|
promise
|
|
};
|
|
} //# sourceMappingURL=promise-with-resolvers.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/app-render/staged-rendering.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
RenderStage: null,
|
|
StagedRenderingController: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
RenderStage: function() {
|
|
return RenderStage;
|
|
},
|
|
StagedRenderingController: function() {
|
|
return StagedRenderingController;
|
|
}
|
|
});
|
|
const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)");
|
|
const _promisewithresolvers = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/promise-with-resolvers.js [app-route] (ecmascript)");
|
|
var RenderStage = /*#__PURE__*/ function(RenderStage) {
|
|
RenderStage[RenderStage["Static"] = 1] = "Static";
|
|
RenderStage[RenderStage["Runtime"] = 2] = "Runtime";
|
|
RenderStage[RenderStage["Dynamic"] = 3] = "Dynamic";
|
|
return RenderStage;
|
|
}({});
|
|
class StagedRenderingController {
|
|
constructor(abortSignal = null){
|
|
this.abortSignal = abortSignal;
|
|
this.currentStage = 1;
|
|
this.runtimeStagePromise = (0, _promisewithresolvers.createPromiseWithResolvers)();
|
|
this.dynamicStagePromise = (0, _promisewithresolvers.createPromiseWithResolvers)();
|
|
if (abortSignal) {
|
|
abortSignal.addEventListener('abort', ()=>{
|
|
const { reason } = abortSignal;
|
|
if (this.currentStage < 2) {
|
|
this.runtimeStagePromise.promise.catch(ignoreReject) // avoid unhandled rejections
|
|
;
|
|
this.runtimeStagePromise.reject(reason);
|
|
}
|
|
if (this.currentStage < 3) {
|
|
this.dynamicStagePromise.promise.catch(ignoreReject) // avoid unhandled rejections
|
|
;
|
|
this.dynamicStagePromise.reject(reason);
|
|
}
|
|
}, {
|
|
once: true
|
|
});
|
|
}
|
|
}
|
|
advanceStage(stage) {
|
|
// If we're already at the target stage or beyond, do nothing.
|
|
// (this can happen e.g. if sync IO advanced us to the dynamic stage)
|
|
if (this.currentStage >= stage) {
|
|
return;
|
|
}
|
|
this.currentStage = stage;
|
|
// Note that we might be going directly from Static to Dynamic,
|
|
// so we need to resolve the runtime stage as well.
|
|
if (stage >= 2) {
|
|
this.runtimeStagePromise.resolve();
|
|
}
|
|
if (stage >= 3) {
|
|
this.dynamicStagePromise.resolve();
|
|
}
|
|
}
|
|
getStagePromise(stage) {
|
|
switch(stage){
|
|
case 2:
|
|
{
|
|
return this.runtimeStagePromise.promise;
|
|
}
|
|
case 3:
|
|
{
|
|
return this.dynamicStagePromise.promise;
|
|
}
|
|
default:
|
|
{
|
|
stage;
|
|
throw Object.defineProperty(new _invarianterror.InvariantError(`Invalid render stage: ${stage}`), "__NEXT_ERROR_CODE", {
|
|
value: "E881",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
}
|
|
}
|
|
waitForStage(stage) {
|
|
return this.getStagePromise(stage);
|
|
}
|
|
delayUntilStage(stage, displayName, resolvedValue) {
|
|
const ioTriggerPromise = this.getStagePromise(stage);
|
|
const promise = makeDevtoolsIOPromiseFromIOTrigger(ioTriggerPromise, displayName, resolvedValue);
|
|
// Analogously to `makeHangingPromise`, we might reject this promise if the signal is invoked.
|
|
// (e.g. in the case where we don't want want the render to proceed to the dynamic stage and abort it).
|
|
// We shouldn't consider this an unhandled rejection, so we attach a noop catch handler here to suppress this warning.
|
|
if (this.abortSignal) {
|
|
promise.catch(ignoreReject);
|
|
}
|
|
return promise;
|
|
}
|
|
}
|
|
function ignoreReject() {}
|
|
// TODO(restart-on-cache-miss): the layering of `delayUntilStage`,
|
|
// `makeDevtoolsIOPromiseFromIOTrigger` and and `makeDevtoolsIOAwarePromise`
|
|
// is confusing, we should clean it up.
|
|
function makeDevtoolsIOPromiseFromIOTrigger(ioTrigger, displayName, resolvedValue) {
|
|
// If we create a `new Promise` and give it a displayName
|
|
// (with no userspace code above us in the stack)
|
|
// React Devtools will use it as the IO cause when determining "suspended by".
|
|
// In particular, it should shadow any inner IO that resolved/rejected the promise
|
|
// (in case of staged rendering, this will be the `setTimeout` that triggers the relevant stage)
|
|
const promise = new Promise((resolve, reject)=>{
|
|
ioTrigger.then(resolve.bind(null, resolvedValue), reject);
|
|
});
|
|
if (displayName !== undefined) {
|
|
// @ts-expect-error
|
|
promise.displayName = displayName;
|
|
}
|
|
return promise;
|
|
} //# sourceMappingURL=staged-rendering.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/app-render/dynamic-rendering.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
/**
|
|
* The functions provided by this module are used to communicate certain properties
|
|
* about the currently running code so that Next.js can make decisions on how to handle
|
|
* the current execution in different rendering modes such as pre-rendering, resuming, and SSR.
|
|
*
|
|
* Today Next.js treats all code as potentially static. Certain APIs may only make sense when dynamically rendering.
|
|
* Traditionally this meant deopting the entire render to dynamic however with PPR we can now deopt parts
|
|
* of a React tree as dynamic while still keeping other parts static. There are really two different kinds of
|
|
* Dynamic indications.
|
|
*
|
|
* The first is simply an intention to be dynamic. unstable_noStore is an example of this where
|
|
* the currently executing code simply declares that the current scope is dynamic but if you use it
|
|
* inside unstable_cache it can still be cached. This type of indication can be removed if we ever
|
|
* make the default dynamic to begin with because the only way you would ever be static is inside
|
|
* a cache scope which this indication does not affect.
|
|
*
|
|
* The second is an indication that a dynamic data source was read. This is a stronger form of dynamic
|
|
* because it means that it is inappropriate to cache this at all. using a dynamic data source inside
|
|
* unstable_cache should error. If you want to use some dynamic data inside unstable_cache you should
|
|
* read that data outside the cache and pass it in as an argument to the cached function.
|
|
*/ Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
Postpone: null,
|
|
PreludeState: null,
|
|
abortAndThrowOnSynchronousRequestDataAccess: null,
|
|
abortOnSynchronousPlatformIOAccess: null,
|
|
accessedDynamicData: null,
|
|
annotateDynamicAccess: null,
|
|
consumeDynamicAccess: null,
|
|
createDynamicTrackingState: null,
|
|
createDynamicValidationState: null,
|
|
createHangingInputAbortSignal: null,
|
|
createRenderInBrowserAbortSignal: null,
|
|
delayUntilRuntimeStage: null,
|
|
formatDynamicAPIAccesses: null,
|
|
getFirstDynamicReason: null,
|
|
isDynamicPostpone: null,
|
|
isPrerenderInterruptedError: null,
|
|
logDisallowedDynamicError: null,
|
|
markCurrentScopeAsDynamic: null,
|
|
postponeWithTracking: null,
|
|
throwIfDisallowedDynamic: null,
|
|
throwToInterruptStaticGeneration: null,
|
|
trackAllowedDynamicAccess: null,
|
|
trackDynamicDataInDynamicRender: null,
|
|
trackSynchronousPlatformIOAccessInDev: null,
|
|
useDynamicRouteParams: null,
|
|
useDynamicSearchParams: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
Postpone: function() {
|
|
return Postpone;
|
|
},
|
|
PreludeState: function() {
|
|
return PreludeState;
|
|
},
|
|
abortAndThrowOnSynchronousRequestDataAccess: function() {
|
|
return abortAndThrowOnSynchronousRequestDataAccess;
|
|
},
|
|
abortOnSynchronousPlatformIOAccess: function() {
|
|
return abortOnSynchronousPlatformIOAccess;
|
|
},
|
|
accessedDynamicData: function() {
|
|
return accessedDynamicData;
|
|
},
|
|
annotateDynamicAccess: function() {
|
|
return annotateDynamicAccess;
|
|
},
|
|
consumeDynamicAccess: function() {
|
|
return consumeDynamicAccess;
|
|
},
|
|
createDynamicTrackingState: function() {
|
|
return createDynamicTrackingState;
|
|
},
|
|
createDynamicValidationState: function() {
|
|
return createDynamicValidationState;
|
|
},
|
|
createHangingInputAbortSignal: function() {
|
|
return createHangingInputAbortSignal;
|
|
},
|
|
createRenderInBrowserAbortSignal: function() {
|
|
return createRenderInBrowserAbortSignal;
|
|
},
|
|
delayUntilRuntimeStage: function() {
|
|
return delayUntilRuntimeStage;
|
|
},
|
|
formatDynamicAPIAccesses: function() {
|
|
return formatDynamicAPIAccesses;
|
|
},
|
|
getFirstDynamicReason: function() {
|
|
return getFirstDynamicReason;
|
|
},
|
|
isDynamicPostpone: function() {
|
|
return isDynamicPostpone;
|
|
},
|
|
isPrerenderInterruptedError: function() {
|
|
return isPrerenderInterruptedError;
|
|
},
|
|
logDisallowedDynamicError: function() {
|
|
return logDisallowedDynamicError;
|
|
},
|
|
markCurrentScopeAsDynamic: function() {
|
|
return markCurrentScopeAsDynamic;
|
|
},
|
|
postponeWithTracking: function() {
|
|
return postponeWithTracking;
|
|
},
|
|
throwIfDisallowedDynamic: function() {
|
|
return throwIfDisallowedDynamic;
|
|
},
|
|
throwToInterruptStaticGeneration: function() {
|
|
return throwToInterruptStaticGeneration;
|
|
},
|
|
trackAllowedDynamicAccess: function() {
|
|
return trackAllowedDynamicAccess;
|
|
},
|
|
trackDynamicDataInDynamicRender: function() {
|
|
return trackDynamicDataInDynamicRender;
|
|
},
|
|
trackSynchronousPlatformIOAccessInDev: function() {
|
|
return trackSynchronousPlatformIOAccessInDev;
|
|
},
|
|
useDynamicRouteParams: function() {
|
|
return useDynamicRouteParams;
|
|
},
|
|
useDynamicSearchParams: function() {
|
|
return useDynamicSearchParams;
|
|
}
|
|
});
|
|
const _react = /*#__PURE__*/ _interop_require_default(__turbopack_context__.r("[project]/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js [app-route] (ecmascript)"));
|
|
const _hooksservercontext = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/hooks-server-context.js [app-route] (ecmascript)");
|
|
const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)");
|
|
const _workunitasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)");
|
|
const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)");
|
|
const _dynamicrenderingutils = __turbopack_context__.r("[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [app-route] (ecmascript)");
|
|
const _boundaryconstants = __turbopack_context__.r("[project]/node_modules/next/dist/lib/framework/boundary-constants.js [app-route] (ecmascript)");
|
|
const _scheduler = __turbopack_context__.r("[project]/node_modules/next/dist/lib/scheduler.js [app-route] (ecmascript)");
|
|
const _bailouttocsr = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js [app-route] (ecmascript)");
|
|
const _invarianterror = __turbopack_context__.r("[project]/node_modules/next/dist/shared/lib/invariant-error.js [app-route] (ecmascript)");
|
|
const _stagedrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/staged-rendering.js [app-route] (ecmascript)");
|
|
function _interop_require_default(obj) {
|
|
return obj && obj.__esModule ? obj : {
|
|
default: obj
|
|
};
|
|
}
|
|
const hasPostpone = typeof _react.default.unstable_postpone === 'function';
|
|
function createDynamicTrackingState(isDebugDynamicAccesses) {
|
|
return {
|
|
isDebugDynamicAccesses,
|
|
dynamicAccesses: [],
|
|
syncDynamicErrorWithStack: null
|
|
};
|
|
}
|
|
function createDynamicValidationState() {
|
|
return {
|
|
hasSuspenseAboveBody: false,
|
|
hasDynamicMetadata: false,
|
|
hasDynamicViewport: false,
|
|
hasAllowedDynamic: false,
|
|
dynamicErrors: []
|
|
};
|
|
}
|
|
function getFirstDynamicReason(trackingState) {
|
|
var _trackingState_dynamicAccesses_;
|
|
return (_trackingState_dynamicAccesses_ = trackingState.dynamicAccesses[0]) == null ? void 0 : _trackingState_dynamicAccesses_.expression;
|
|
}
|
|
function markCurrentScopeAsDynamic(store, workUnitStore, expression) {
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'cache':
|
|
case 'unstable-cache':
|
|
// Inside cache scopes, marking a scope as dynamic has no effect,
|
|
// because the outer cache scope creates a cache boundary. This is
|
|
// subtly different from reading a dynamic data source, which is
|
|
// forbidden inside a cache scope.
|
|
return;
|
|
case 'private-cache':
|
|
// A private cache scope is already dynamic by definition.
|
|
return;
|
|
case 'prerender-legacy':
|
|
case 'prerender-ppr':
|
|
case 'request':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
// If we're forcing dynamic rendering or we're forcing static rendering, we
|
|
// don't need to do anything here because the entire page is already dynamic
|
|
// or it's static and it should not throw or postpone here.
|
|
if (store.forceDynamic || store.forceStatic) return;
|
|
if (store.dynamicShouldError) {
|
|
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${store.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", {
|
|
value: "E553",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender-ppr':
|
|
return postponeWithTracking(store.route, expression, workUnitStore.dynamicTracking);
|
|
case 'prerender-legacy':
|
|
workUnitStore.revalidate = 0;
|
|
// We aren't prerendering, but we are generating a static page. We need
|
|
// to bail out of static generation.
|
|
const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", {
|
|
value: "E550",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
store.dynamicUsageDescription = expression;
|
|
store.dynamicUsageStack = err.stack;
|
|
throw err;
|
|
case 'request':
|
|
if ("TURBOPACK compile-time truthy", 1) {
|
|
workUnitStore.usedDynamic = true;
|
|
}
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
}
|
|
function throwToInterruptStaticGeneration(expression, store, prerenderStore) {
|
|
// We aren't prerendering but we are generating a static page. We need to bail out of static generation
|
|
const err = Object.defineProperty(new _hooksservercontext.DynamicServerError(`Route ${store.route} couldn't be rendered statically because it used \`${expression}\`. See more info here: https://nextjs.org/docs/messages/dynamic-server-error`), "__NEXT_ERROR_CODE", {
|
|
value: "E558",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
prerenderStore.revalidate = 0;
|
|
store.dynamicUsageDescription = expression;
|
|
store.dynamicUsageStack = err.stack;
|
|
throw err;
|
|
}
|
|
function trackDynamicDataInDynamicRender(workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'cache':
|
|
case 'unstable-cache':
|
|
// Inside cache scopes, marking a scope as dynamic has no effect,
|
|
// because the outer cache scope creates a cache boundary. This is
|
|
// subtly different from reading a dynamic data source, which is
|
|
// forbidden inside a cache scope.
|
|
return;
|
|
case 'private-cache':
|
|
// A private cache scope is already dynamic by definition.
|
|
return;
|
|
case 'prerender':
|
|
case 'prerender-runtime':
|
|
case 'prerender-legacy':
|
|
case 'prerender-ppr':
|
|
case 'prerender-client':
|
|
break;
|
|
case 'request':
|
|
if ("TURBOPACK compile-time truthy", 1) {
|
|
workUnitStore.usedDynamic = true;
|
|
}
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
function abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore) {
|
|
const reason = `Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`;
|
|
const error = createPrerenderInterruptedError(reason);
|
|
prerenderStore.controller.abort(error);
|
|
const dynamicTracking = prerenderStore.dynamicTracking;
|
|
if (dynamicTracking) {
|
|
dynamicTracking.dynamicAccesses.push({
|
|
// When we aren't debugging, we don't need to create another error for the
|
|
// stack trace.
|
|
stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined,
|
|
expression
|
|
});
|
|
}
|
|
}
|
|
function abortOnSynchronousPlatformIOAccess(route, expression, errorWithStack, prerenderStore) {
|
|
const dynamicTracking = prerenderStore.dynamicTracking;
|
|
abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore);
|
|
// It is important that we set this tracking value after aborting. Aborts are executed
|
|
// synchronously except for the case where you abort during render itself. By setting this
|
|
// value late we can use it to determine if any of the aborted tasks are the task that
|
|
// called the sync IO expression in the first place.
|
|
if (dynamicTracking) {
|
|
if (dynamicTracking.syncDynamicErrorWithStack === null) {
|
|
dynamicTracking.syncDynamicErrorWithStack = errorWithStack;
|
|
}
|
|
}
|
|
}
|
|
function trackSynchronousPlatformIOAccessInDev(requestStore) {
|
|
// We don't actually have a controller to abort but we do the semantic equivalent by
|
|
// advancing the request store out of the prerender stage
|
|
if (requestStore.stagedRendering) {
|
|
// TODO: error for sync IO in the runtime stage
|
|
// (which is not currently covered by the validation render in `spawnDynamicValidationInDev`)
|
|
requestStore.stagedRendering.advanceStage(_stagedrendering.RenderStage.Dynamic);
|
|
}
|
|
}
|
|
function abortAndThrowOnSynchronousRequestDataAccess(route, expression, errorWithStack, prerenderStore) {
|
|
const prerenderSignal = prerenderStore.controller.signal;
|
|
if (prerenderSignal.aborted === false) {
|
|
// TODO it would be better to move this aborted check into the callsite so we can avoid making
|
|
// the error object when it isn't relevant to the aborting of the prerender however
|
|
// since we need the throw semantics regardless of whether we abort it is easier to land
|
|
// this way. See how this was handled with `abortOnSynchronousPlatformIOAccess` for a closer
|
|
// to ideal implementation
|
|
abortOnSynchronousDynamicDataAccess(route, expression, prerenderStore);
|
|
// It is important that we set this tracking value after aborting. Aborts are executed
|
|
// synchronously except for the case where you abort during render itself. By setting this
|
|
// value late we can use it to determine if any of the aborted tasks are the task that
|
|
// called the sync IO expression in the first place.
|
|
const dynamicTracking = prerenderStore.dynamicTracking;
|
|
if (dynamicTracking) {
|
|
if (dynamicTracking.syncDynamicErrorWithStack === null) {
|
|
dynamicTracking.syncDynamicErrorWithStack = errorWithStack;
|
|
}
|
|
}
|
|
}
|
|
throw createPrerenderInterruptedError(`Route ${route} needs to bail out of prerendering at this point because it used ${expression}.`);
|
|
}
|
|
function Postpone({ reason, route }) {
|
|
const prerenderStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
|
const dynamicTracking = prerenderStore && prerenderStore.type === 'prerender-ppr' ? prerenderStore.dynamicTracking : null;
|
|
postponeWithTracking(route, reason, dynamicTracking);
|
|
}
|
|
function postponeWithTracking(route, expression, dynamicTracking) {
|
|
assertPostpone();
|
|
if (dynamicTracking) {
|
|
dynamicTracking.dynamicAccesses.push({
|
|
// When we aren't debugging, we don't need to create another error for the
|
|
// stack trace.
|
|
stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined,
|
|
expression
|
|
});
|
|
}
|
|
_react.default.unstable_postpone(createPostponeReason(route, expression));
|
|
}
|
|
function createPostponeReason(route, expression) {
|
|
return `Route ${route} needs to bail out of prerendering at this point because it used ${expression}. ` + `React throws this special object to indicate where. It should not be caught by ` + `your own try/catch. Learn more: https://nextjs.org/docs/messages/ppr-caught-error`;
|
|
}
|
|
function isDynamicPostpone(err) {
|
|
if (typeof err === 'object' && err !== null && typeof err.message === 'string') {
|
|
return isDynamicPostponeReason(err.message);
|
|
}
|
|
return false;
|
|
}
|
|
function isDynamicPostponeReason(reason) {
|
|
return reason.includes('needs to bail out of prerendering at this point because it used') && reason.includes('Learn more: https://nextjs.org/docs/messages/ppr-caught-error');
|
|
}
|
|
if (isDynamicPostponeReason(createPostponeReason('%%%', '^^^')) === false) {
|
|
throw Object.defineProperty(new Error('Invariant: isDynamicPostpone misidentified a postpone reason. This is a bug in Next.js'), "__NEXT_ERROR_CODE", {
|
|
value: "E296",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
const NEXT_PRERENDER_INTERRUPTED = 'NEXT_PRERENDER_INTERRUPTED';
|
|
function createPrerenderInterruptedError(message) {
|
|
const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
|
value: "E394",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
error.digest = NEXT_PRERENDER_INTERRUPTED;
|
|
return error;
|
|
}
|
|
function isPrerenderInterruptedError(error) {
|
|
return typeof error === 'object' && error !== null && error.digest === NEXT_PRERENDER_INTERRUPTED && 'name' in error && 'message' in error && error instanceof Error;
|
|
}
|
|
function accessedDynamicData(dynamicAccesses) {
|
|
return dynamicAccesses.length > 0;
|
|
}
|
|
function consumeDynamicAccess(serverDynamic, clientDynamic) {
|
|
// We mutate because we only call this once we are no longer writing
|
|
// to the dynamicTrackingState and it's more efficient than creating a new
|
|
// array.
|
|
serverDynamic.dynamicAccesses.push(...clientDynamic.dynamicAccesses);
|
|
return serverDynamic.dynamicAccesses;
|
|
}
|
|
function formatDynamicAPIAccesses(dynamicAccesses) {
|
|
return dynamicAccesses.filter((access)=>typeof access.stack === 'string' && access.stack.length > 0).map(({ expression, stack })=>{
|
|
stack = stack.split('\n') // Remove the "Error: " prefix from the first line of the stack trace as
|
|
// well as the first 4 lines of the stack trace which is the distance
|
|
// from the user code and the `new Error().stack` call.
|
|
.slice(4).filter((line)=>{
|
|
// Exclude Next.js internals from the stack trace.
|
|
if (line.includes('node_modules/next/')) {
|
|
return false;
|
|
}
|
|
// Exclude anonymous functions from the stack trace.
|
|
if (line.includes(' (<anonymous>)')) {
|
|
return false;
|
|
}
|
|
// Exclude Node.js internals from the stack trace.
|
|
if (line.includes(' (node:')) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}).join('\n');
|
|
return `Dynamic API Usage Debug - ${expression}:\n${stack}`;
|
|
});
|
|
}
|
|
function assertPostpone() {
|
|
if (!hasPostpone) {
|
|
throw Object.defineProperty(new Error(`Invariant: React.unstable_postpone is not defined. This suggests the wrong version of React was loaded. This is a bug in Next.js`), "__NEXT_ERROR_CODE", {
|
|
value: "E224",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
}
|
|
function createRenderInBrowserAbortSignal() {
|
|
const controller = new AbortController();
|
|
controller.abort(Object.defineProperty(new _bailouttocsr.BailoutToCSRError('Render in Browser'), "__NEXT_ERROR_CODE", {
|
|
value: "E721",
|
|
enumerable: false,
|
|
configurable: true
|
|
}));
|
|
return controller.signal;
|
|
}
|
|
function createHangingInputAbortSignal(workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender':
|
|
case 'prerender-runtime':
|
|
const controller = new AbortController();
|
|
if (workUnitStore.cacheSignal) {
|
|
// If we have a cacheSignal it means we're in a prospective render. If
|
|
// the input we're waiting on is coming from another cache, we do want
|
|
// to wait for it so that we can resolve this cache entry too.
|
|
workUnitStore.cacheSignal.inputReady().then(()=>{
|
|
controller.abort();
|
|
});
|
|
} else {
|
|
// Otherwise we're in the final render and we should already have all
|
|
// our caches filled.
|
|
// If the prerender uses stages, we have wait until the runtime stage,
|
|
// at which point all runtime inputs will be resolved.
|
|
// (otherwise, a runtime prerender might consider `cookies()` hanging
|
|
// even though they'd resolve in the next task.)
|
|
//
|
|
// We might still be waiting on some microtasks so we
|
|
// wait one tick before giving up. When we give up, we still want to
|
|
// render the content of this cache as deeply as we can so that we can
|
|
// suspend as deeply as possible in the tree or not at all if we don't
|
|
// end up waiting for the input.
|
|
const runtimeStagePromise = (0, _workunitasyncstorageexternal.getRuntimeStagePromise)(workUnitStore);
|
|
if (runtimeStagePromise) {
|
|
runtimeStagePromise.then(()=>(0, _scheduler.scheduleOnNextTick)(()=>controller.abort()));
|
|
} else {
|
|
(0, _scheduler.scheduleOnNextTick)(()=>controller.abort());
|
|
}
|
|
}
|
|
return controller.signal;
|
|
case 'prerender-client':
|
|
case 'prerender-ppr':
|
|
case 'prerender-legacy':
|
|
case 'request':
|
|
case 'cache':
|
|
case 'private-cache':
|
|
case 'unstable-cache':
|
|
return undefined;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
function annotateDynamicAccess(expression, prerenderStore) {
|
|
const dynamicTracking = prerenderStore.dynamicTracking;
|
|
if (dynamicTracking) {
|
|
dynamicTracking.dynamicAccesses.push({
|
|
stack: dynamicTracking.isDebugDynamicAccesses ? new Error().stack : undefined,
|
|
expression
|
|
});
|
|
}
|
|
}
|
|
function useDynamicRouteParams(expression) {
|
|
const workStore = _workasyncstorageexternal.workAsyncStorage.getStore();
|
|
const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
|
if (workStore && workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'prerender-client':
|
|
case 'prerender':
|
|
{
|
|
const fallbackParams = workUnitStore.fallbackRouteParams;
|
|
if (fallbackParams && fallbackParams.size > 0) {
|
|
// We are in a prerender with cacheComponents semantics. We are going to
|
|
// hang here and never resolve. This will cause the currently
|
|
// rendering component to effectively be a dynamic hole.
|
|
_react.default.use((0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, expression));
|
|
}
|
|
break;
|
|
}
|
|
case 'prerender-ppr':
|
|
{
|
|
const fallbackParams = workUnitStore.fallbackRouteParams;
|
|
if (fallbackParams && fallbackParams.size > 0) {
|
|
return postponeWithTracking(workStore.route, expression, workUnitStore.dynamicTracking);
|
|
}
|
|
break;
|
|
}
|
|
case 'prerender-runtime':
|
|
throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called during a runtime prerender. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
|
|
value: "E771",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
case 'cache':
|
|
case 'private-cache':
|
|
throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
|
|
value: "E745",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
case 'prerender-legacy':
|
|
case 'request':
|
|
case 'unstable-cache':
|
|
break;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
}
|
|
function useDynamicSearchParams(expression) {
|
|
const workStore = _workasyncstorageexternal.workAsyncStorage.getStore();
|
|
const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
|
if (!workStore) {
|
|
// We assume pages router context and just return
|
|
return;
|
|
}
|
|
if (!workUnitStore) {
|
|
(0, _workunitasyncstorageexternal.throwForMissingRequestStore)(expression);
|
|
}
|
|
switch(workUnitStore.type){
|
|
case 'prerender-client':
|
|
{
|
|
_react.default.use((0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, expression));
|
|
break;
|
|
}
|
|
case 'prerender-legacy':
|
|
case 'prerender-ppr':
|
|
{
|
|
if (workStore.forceStatic) {
|
|
return;
|
|
}
|
|
throw Object.defineProperty(new _bailouttocsr.BailoutToCSRError(expression), "__NEXT_ERROR_CODE", {
|
|
value: "E394",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
case 'prerender':
|
|
case 'prerender-runtime':
|
|
throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called from a Server Component. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
|
|
value: "E795",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
case 'cache':
|
|
case 'unstable-cache':
|
|
case 'private-cache':
|
|
throw Object.defineProperty(new _invarianterror.InvariantError(`\`${expression}\` was called inside a cache scope. Next.js should be preventing ${expression} from being included in server components statically, but did not in this case.`), "__NEXT_ERROR_CODE", {
|
|
value: "E745",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
case 'request':
|
|
return;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
const hasSuspenseRegex = /\n\s+at Suspense \(<anonymous>\)/;
|
|
// Common implicit body tags that React will treat as body when placed directly in html
|
|
const bodyAndImplicitTags = 'body|div|main|section|article|aside|header|footer|nav|form|p|span|h1|h2|h3|h4|h5|h6';
|
|
// Detects when RootLayoutBoundary (our framework marker component) appears
|
|
// after Suspense in the component stack, indicating the root layout is wrapped
|
|
// within a Suspense boundary. Ensures no body/html/implicit-body components are in between.
|
|
//
|
|
// Example matches:
|
|
// at Suspense (<anonymous>)
|
|
// at __next_root_layout_boundary__ (<anonymous>)
|
|
//
|
|
// Or with other components in between (but not body/html/implicit-body):
|
|
// at Suspense (<anonymous>)
|
|
// at SomeComponent (<anonymous>)
|
|
// at __next_root_layout_boundary__ (<anonymous>)
|
|
const hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex = new RegExp(`\\n\\s+at Suspense \\(<anonymous>\\)(?:(?!\\n\\s+at (?:${bodyAndImplicitTags}) \\(<anonymous>\\))[\\s\\S])*?\\n\\s+at ${_boundaryconstants.ROOT_LAYOUT_BOUNDARY_NAME} \\([^\\n]*\\)`);
|
|
const hasMetadataRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.METADATA_BOUNDARY_NAME}[\\n\\s]`);
|
|
const hasViewportRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.VIEWPORT_BOUNDARY_NAME}[\\n\\s]`);
|
|
const hasOutletRegex = new RegExp(`\\n\\s+at ${_boundaryconstants.OUTLET_BOUNDARY_NAME}[\\n\\s]`);
|
|
function trackAllowedDynamicAccess(workStore, componentStack, dynamicValidation, clientDynamic) {
|
|
if (hasOutletRegex.test(componentStack)) {
|
|
// We don't need to track that this is dynamic. It is only so when something else is also dynamic.
|
|
return;
|
|
} else if (hasMetadataRegex.test(componentStack)) {
|
|
dynamicValidation.hasDynamicMetadata = true;
|
|
return;
|
|
} else if (hasViewportRegex.test(componentStack)) {
|
|
dynamicValidation.hasDynamicViewport = true;
|
|
return;
|
|
} else if (hasSuspenseBeforeRootLayoutWithoutBodyOrImplicitBodyRegex.test(componentStack)) {
|
|
// For Suspense within body, the prelude wouldn't be empty so it wouldn't violate the empty static shells rule.
|
|
// But if you have Suspense above body, the prelude is empty but we allow that because having Suspense
|
|
// is an explicit signal from the user that they acknowledge the empty shell and want dynamic rendering.
|
|
dynamicValidation.hasAllowedDynamic = true;
|
|
dynamicValidation.hasSuspenseAboveBody = true;
|
|
return;
|
|
} else if (hasSuspenseRegex.test(componentStack)) {
|
|
// this error had a Suspense boundary above it so we don't need to report it as a source
|
|
// of disallowed
|
|
dynamicValidation.hasAllowedDynamic = true;
|
|
return;
|
|
} else if (clientDynamic.syncDynamicErrorWithStack) {
|
|
// This task was the task that called the sync error.
|
|
dynamicValidation.dynamicErrors.push(clientDynamic.syncDynamicErrorWithStack);
|
|
return;
|
|
} else {
|
|
const message = `Route "${workStore.route}": Uncached data was accessed outside of ` + '<Suspense>. This delays the entire page from rendering, resulting in a ' + 'slow user experience. Learn more: ' + 'https://nextjs.org/docs/messages/blocking-route';
|
|
const error = createErrorWithComponentOrOwnerStack(message, componentStack);
|
|
dynamicValidation.dynamicErrors.push(error);
|
|
return;
|
|
}
|
|
}
|
|
/**
|
|
* In dev mode, we prefer using the owner stack, otherwise the provided
|
|
* component stack is used.
|
|
*/ function createErrorWithComponentOrOwnerStack(message, componentStack) {
|
|
const ownerStack = ("TURBOPACK compile-time value", "development") !== 'production' && _react.default.captureOwnerStack ? _react.default.captureOwnerStack() : null;
|
|
const error = Object.defineProperty(new Error(message), "__NEXT_ERROR_CODE", {
|
|
value: "E394",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
error.stack = error.name + ': ' + message + (ownerStack ?? componentStack);
|
|
return error;
|
|
}
|
|
var PreludeState = /*#__PURE__*/ function(PreludeState) {
|
|
PreludeState[PreludeState["Full"] = 0] = "Full";
|
|
PreludeState[PreludeState["Empty"] = 1] = "Empty";
|
|
PreludeState[PreludeState["Errored"] = 2] = "Errored";
|
|
return PreludeState;
|
|
}({});
|
|
function logDisallowedDynamicError(workStore, error) {
|
|
console.error(error);
|
|
if (!workStore.dev) {
|
|
if (workStore.hasReadableErrorStacks) {
|
|
console.error(`To get a more detailed stack trace and pinpoint the issue, start the app in development mode by running \`next dev\`, then open "${workStore.route}" in your browser to investigate the error.`);
|
|
} else {
|
|
console.error(`To get a more detailed stack trace and pinpoint the issue, try one of the following:
|
|
- Start the app in development mode by running \`next dev\`, then open "${workStore.route}" in your browser to investigate the error.
|
|
- Rerun the production build with \`next build --debug-prerender\` to generate better stack traces.`);
|
|
}
|
|
}
|
|
}
|
|
function throwIfDisallowedDynamic(workStore, prelude, dynamicValidation, serverDynamic) {
|
|
if (serverDynamic.syncDynamicErrorWithStack) {
|
|
logDisallowedDynamicError(workStore, serverDynamic.syncDynamicErrorWithStack);
|
|
throw new _staticgenerationbailout.StaticGenBailoutError();
|
|
}
|
|
if (prelude !== 0) {
|
|
if (dynamicValidation.hasSuspenseAboveBody) {
|
|
// This route has opted into allowing fully dynamic rendering
|
|
// by including a Suspense boundary above the body. In this case
|
|
// a lack of a shell is not considered disallowed so we simply return
|
|
return;
|
|
}
|
|
// We didn't have any sync bailouts but there may be user code which
|
|
// blocked the root. We would have captured these during the prerender
|
|
// and can log them here and then terminate the build/validating render
|
|
const dynamicErrors = dynamicValidation.dynamicErrors;
|
|
if (dynamicErrors.length > 0) {
|
|
for(let i = 0; i < dynamicErrors.length; i++){
|
|
logDisallowedDynamicError(workStore, dynamicErrors[i]);
|
|
}
|
|
throw new _staticgenerationbailout.StaticGenBailoutError();
|
|
}
|
|
// If we got this far then the only other thing that could be blocking
|
|
// the root is dynamic Viewport. If this is dynamic then
|
|
// you need to opt into that by adding a Suspense boundary above the body
|
|
// to indicate your are ok with fully dynamic rendering.
|
|
if (dynamicValidation.hasDynamicViewport) {
|
|
console.error(`Route "${workStore.route}" has a \`generateViewport\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) without explicitly allowing fully dynamic rendering. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-viewport`);
|
|
throw new _staticgenerationbailout.StaticGenBailoutError();
|
|
}
|
|
if (prelude === 1) {
|
|
// If we ever get this far then we messed up the tracking of invalid dynamic.
|
|
// We still adhere to the constraint that you must produce a shell but invite the
|
|
// user to report this as a bug in Next.js.
|
|
console.error(`Route "${workStore.route}" did not produce a static shell and Next.js was unable to determine a reason. This is a bug in Next.js.`);
|
|
throw new _staticgenerationbailout.StaticGenBailoutError();
|
|
}
|
|
} else {
|
|
if (dynamicValidation.hasAllowedDynamic === false && dynamicValidation.hasDynamicMetadata) {
|
|
console.error(`Route "${workStore.route}" has a \`generateMetadata\` that depends on Request data (\`cookies()\`, etc...) or uncached external data (\`fetch(...)\`, etc...) when the rest of the route does not. See more info here: https://nextjs.org/docs/messages/next-prerender-dynamic-metadata`);
|
|
throw new _staticgenerationbailout.StaticGenBailoutError();
|
|
}
|
|
}
|
|
}
|
|
function delayUntilRuntimeStage(prerenderStore, result) {
|
|
if (prerenderStore.runtimeStagePromise) {
|
|
return prerenderStore.runtimeStagePromise.then(()=>result);
|
|
}
|
|
return result;
|
|
} //# sourceMappingURL=dynamic-rendering.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/request/utils.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
0 && (module.exports = {
|
|
isRequestAPICallableInsideAfter: null,
|
|
throwForSearchParamsAccessInUseCache: null,
|
|
throwWithStaticGenerationBailoutErrorWithDynamicError: null
|
|
});
|
|
function _export(target, all) {
|
|
for(var name in all)Object.defineProperty(target, name, {
|
|
enumerable: true,
|
|
get: all[name]
|
|
});
|
|
}
|
|
_export(exports, {
|
|
isRequestAPICallableInsideAfter: function() {
|
|
return isRequestAPICallableInsideAfter;
|
|
},
|
|
throwForSearchParamsAccessInUseCache: function() {
|
|
return throwForSearchParamsAccessInUseCache;
|
|
},
|
|
throwWithStaticGenerationBailoutErrorWithDynamicError: function() {
|
|
return throwWithStaticGenerationBailoutErrorWithDynamicError;
|
|
}
|
|
});
|
|
const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)");
|
|
const _aftertaskasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)");
|
|
function throwWithStaticGenerationBailoutErrorWithDynamicError(route, expression) {
|
|
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${route} with \`dynamic = "error"\` couldn't be rendered statically because it used ${expression}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", {
|
|
value: "E543",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
function throwForSearchParamsAccessInUseCache(workStore, constructorOpt) {
|
|
const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", {
|
|
value: "E842",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Error.captureStackTrace(error, constructorOpt);
|
|
workStore.invalidDynamicUsageError ??= error;
|
|
throw error;
|
|
}
|
|
function isRequestAPICallableInsideAfter() {
|
|
const afterTaskStore = _aftertaskasyncstorageexternal.afterTaskAsyncStorage.getStore();
|
|
return (afterTaskStore == null ? void 0 : afterTaskStore.rootTaskSpawnPhase) === 'action';
|
|
} //# sourceMappingURL=utils.js.map
|
|
}),
|
|
"[project]/node_modules/next/dist/server/request/connection.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
Object.defineProperty(exports, "connection", {
|
|
enumerable: true,
|
|
get: function() {
|
|
return connection;
|
|
}
|
|
});
|
|
const _workasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)");
|
|
const _workunitasyncstorageexternal = __turbopack_context__.r("[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)");
|
|
const _dynamicrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/dynamic-rendering.js [app-route] (ecmascript)");
|
|
const _staticgenerationbailout = __turbopack_context__.r("[project]/node_modules/next/dist/client/components/static-generation-bailout.js [app-route] (ecmascript)");
|
|
const _dynamicrenderingutils = __turbopack_context__.r("[project]/node_modules/next/dist/server/dynamic-rendering-utils.js [app-route] (ecmascript)");
|
|
const _utils = __turbopack_context__.r("[project]/node_modules/next/dist/server/request/utils.js [app-route] (ecmascript)");
|
|
const _stagedrendering = __turbopack_context__.r("[project]/node_modules/next/dist/server/app-render/staged-rendering.js [app-route] (ecmascript)");
|
|
function connection() {
|
|
const callingExpression = 'connection';
|
|
const workStore = _workasyncstorageexternal.workAsyncStorage.getStore();
|
|
const workUnitStore = _workunitasyncstorageexternal.workUnitAsyncStorage.getStore();
|
|
if (workStore) {
|
|
if (workUnitStore && workUnitStore.phase === 'after' && !(0, _utils.isRequestAPICallableInsideAfter)()) {
|
|
throw Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside \`after()\`. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but \`after()\` executes after the request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`), "__NEXT_ERROR_CODE", {
|
|
value: "E827",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
if (workStore.forceStatic) {
|
|
// When using forceStatic, we override all other logic and always just
|
|
// return a resolving promise without tracking.
|
|
return Promise.resolve(undefined);
|
|
}
|
|
if (workStore.dynamicShouldError) {
|
|
throw Object.defineProperty(new _staticgenerationbailout.StaticGenBailoutError(`Route ${workStore.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`connection()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`), "__NEXT_ERROR_CODE", {
|
|
value: "E847",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
if (workUnitStore) {
|
|
switch(workUnitStore.type){
|
|
case 'cache':
|
|
{
|
|
const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside "use cache". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual request, but caches must be able to be produced before a request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", {
|
|
value: "E841",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Error.captureStackTrace(error, connection);
|
|
workStore.invalidDynamicUsageError ??= error;
|
|
throw error;
|
|
}
|
|
case 'private-cache':
|
|
{
|
|
// It might not be intuitive to throw for private caches as well, but
|
|
// we don't consider runtime prefetches as "actual requests" (in the
|
|
// navigation sense), despite allowing them to read cookies.
|
|
const error = Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside "use cache: private". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual navigation request, but caches must be able to be produced before a navigation request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`), "__NEXT_ERROR_CODE", {
|
|
value: "E837",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
Error.captureStackTrace(error, connection);
|
|
workStore.invalidDynamicUsageError ??= error;
|
|
throw error;
|
|
}
|
|
case 'unstable-cache':
|
|
throw Object.defineProperty(new Error(`Route ${workStore.route} used \`connection()\` inside a function cached with \`unstable_cache()\`. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but caches must be able to be produced before a Request so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`), "__NEXT_ERROR_CODE", {
|
|
value: "E840",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
case 'prerender':
|
|
case 'prerender-client':
|
|
case 'prerender-runtime':
|
|
// We return a promise that never resolves to allow the prerender to
|
|
// stall at this point.
|
|
return (0, _dynamicrenderingutils.makeHangingPromise)(workUnitStore.renderSignal, workStore.route, '`connection()`');
|
|
case 'prerender-ppr':
|
|
// We use React's postpone API to interrupt rendering here to create a
|
|
// dynamic hole
|
|
return (0, _dynamicrendering.postponeWithTracking)(workStore.route, 'connection', workUnitStore.dynamicTracking);
|
|
case 'prerender-legacy':
|
|
// We throw an error here to interrupt prerendering to mark the route
|
|
// as dynamic
|
|
return (0, _dynamicrendering.throwToInterruptStaticGeneration)('connection', workStore, workUnitStore);
|
|
case 'request':
|
|
(0, _dynamicrendering.trackDynamicDataInDynamicRender)(workUnitStore);
|
|
if ("TURBOPACK compile-time truthy", 1) {
|
|
// Semantically we only need the dev tracking when running in `next dev`
|
|
// but since you would never use next dev with production NODE_ENV we use this
|
|
// as a proxy so we can statically exclude this code from production builds.
|
|
if (workUnitStore.asyncApiPromises) {
|
|
return workUnitStore.asyncApiPromises.connection;
|
|
}
|
|
return (0, _dynamicrenderingutils.makeDevtoolsIOAwarePromise)(undefined, workUnitStore, _stagedrendering.RenderStage.Dynamic);
|
|
} else //TURBOPACK unreachable
|
|
;
|
|
default:
|
|
workUnitStore;
|
|
}
|
|
}
|
|
}
|
|
// If we end up here, there was no work store or work unit store present.
|
|
(0, _workunitasyncstorageexternal.throwForMissingRequestStore)(callingExpression);
|
|
} //# sourceMappingURL=connection.js.map
|
|
}),
|
|
"[project]/node_modules/next/server.js [app-route] (ecmascript)", ((__turbopack_context__, module, exports) => {
|
|
|
|
const serverExports = {
|
|
NextRequest: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/request.js [app-route] (ecmascript)").NextRequest,
|
|
NextResponse: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/response.js [app-route] (ecmascript)").NextResponse,
|
|
ImageResponse: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/image-response.js [app-route] (ecmascript)").ImageResponse,
|
|
userAgentFromString: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/user-agent.js [app-route] (ecmascript)").userAgentFromString,
|
|
userAgent: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/user-agent.js [app-route] (ecmascript)").userAgent,
|
|
URLPattern: __turbopack_context__.r("[project]/node_modules/next/dist/server/web/spec-extension/url-pattern.js [app-route] (ecmascript)").URLPattern,
|
|
after: __turbopack_context__.r("[project]/node_modules/next/dist/server/after/index.js [app-route] (ecmascript)").after,
|
|
connection: __turbopack_context__.r("[project]/node_modules/next/dist/server/request/connection.js [app-route] (ecmascript)").connection
|
|
};
|
|
// https://nodejs.org/api/esm.html#commonjs-namespaces
|
|
// When importing CommonJS modules, the module.exports object is provided as the default export
|
|
module.exports = serverExports;
|
|
// make import { xxx } from 'next/server' work
|
|
exports.NextRequest = serverExports.NextRequest;
|
|
exports.NextResponse = serverExports.NextResponse;
|
|
exports.ImageResponse = serverExports.ImageResponse;
|
|
exports.userAgentFromString = serverExports.userAgentFromString;
|
|
exports.userAgent = serverExports.userAgent;
|
|
exports.URLPattern = serverExports.URLPattern;
|
|
exports.after = serverExports.after;
|
|
exports.connection = serverExports.connection;
|
|
}),
|
|
"[project]/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/app/api/config/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)", ((__turbopack_context__) => {
|
|
"use strict";
|
|
|
|
__turbopack_context__.s([
|
|
"handler",
|
|
()=>handler,
|
|
"patchFetch",
|
|
()=>patchFetch,
|
|
"routeModule",
|
|
()=>routeModule,
|
|
"serverHooks",
|
|
()=>serverHooks,
|
|
"workAsyncStorage",
|
|
()=>workAsyncStorage,
|
|
"workUnitAsyncStorage",
|
|
()=>workUnitAsyncStorage
|
|
]);
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$route$2f$module$2e$compiled$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-modules/app-route/module.compiled.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/route-kind.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$patch$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/patch-fetch.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/request-meta.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/tracer.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$encryption$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/encryption-utils.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$action$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/app-render/action-utils.js [app-route] (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$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/shared/lib/router/utils/app-paths.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/base-http/node.js [app-route] (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$adapters$2f$next$2d$request$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/spec-extension/adapters/next-request.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/trace/constants.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/instrumentation/utils.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/send-response.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/web/utils.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/lib/cache-control.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/lib/constants.js [app-route] (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$server$2f$response$2d$cache$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$locals$3e$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/index.js [app-route] (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$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/node_modules/next/dist/esm/server/response-cache/types.js [app-route] (ecmascript)");
|
|
var __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$api$2f$config$2f$route$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/app/api/config/route.ts [app-route] (ecmascript)");
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
;
|
|
// We inject the nextConfigOutput here so that we can use them in the route
|
|
// module.
|
|
const nextConfigOutput = "";
|
|
const routeModule = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$modules$2f$app$2d$route$2f$module$2e$compiled$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["AppRouteRouteModule"]({
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE,
|
|
page: "/api/config/route",
|
|
pathname: "/api/config",
|
|
filename: "route",
|
|
bundlePath: ""
|
|
},
|
|
distDir: ("TURBOPACK compile-time value", ".next/dev") || '',
|
|
relativeProjectDir: ("TURBOPACK compile-time value", "") || '',
|
|
resolvedPagePath: "[project]/app/api/config/route.ts",
|
|
nextConfigOutput,
|
|
userland: __TURBOPACK__imported__module__$5b$project$5d2f$app$2f$api$2f$config$2f$route$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__
|
|
});
|
|
// Pull out the exports that we need to expose from the module. This should
|
|
// be eliminated when we've moved the other routes to the new format. These
|
|
// are used to hook into the route.
|
|
const { workAsyncStorage, workUnitAsyncStorage, serverHooks } = routeModule;
|
|
function patchFetch() {
|
|
return (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$lib$2f$patch$2d$fetch$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["patchFetch"])({
|
|
workAsyncStorage,
|
|
workUnitAsyncStorage
|
|
});
|
|
}
|
|
;
|
|
async function handler(req, res, ctx) {
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["addRequestMeta"])(req, 'devRequestTimingInternalsEnd', process.hrtime.bigint());
|
|
}
|
|
let srcPage = "/api/config/route";
|
|
// 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 null;
|
|
}
|
|
const { buildId, params, nextConfig, parsedUrl, isDraftMode, prerenderManifest, routerServerContext, isOnDemandRevalidate, revalidateOnlyGenerated, resolvedPathname, clientReferenceManifest, serverActionsManifest } = prepareResult;
|
|
const normalizedSrcPage = (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$shared$2f$lib$2f$router$2f$utils$2f$app$2d$paths$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["normalizeAppPath"])(srcPage);
|
|
let isIsr = Boolean(prerenderManifest.dynamicRoutes[normalizedSrcPage] || prerenderManifest.routes[resolvedPathname]);
|
|
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');
|
|
}
|
|
return null;
|
|
};
|
|
if (isIsr && !isDraftMode) {
|
|
const isPrerendered = Boolean(prerenderManifest.routes[resolvedPathname]);
|
|
const prerenderInfo = prerenderManifest.dynamicRoutes[normalizedSrcPage];
|
|
if (prerenderInfo) {
|
|
if (prerenderInfo.fallback === false && !isPrerendered) {
|
|
if (nextConfig.experimental.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"]();
|
|
}
|
|
}
|
|
}
|
|
let cacheKey = null;
|
|
if (isIsr && !routeModule.isDev && !isDraftMode) {
|
|
cacheKey = resolvedPathname;
|
|
// ensure /index and / is normalized to one key
|
|
cacheKey = cacheKey === '/index' ? '/' : cacheKey;
|
|
}
|
|
const supportsDynamicResponse = routeModule.isDev === true || // If this is not SSG or does not have static paths, then it supports
|
|
// dynamic HTML.
|
|
!isIsr;
|
|
// This is a revalidation request if the request is for a static
|
|
// page and it is not being resumed from a postponed render and
|
|
// it is not a dynamic RSC request then it is a revalidation
|
|
// request.
|
|
const isStaticGeneration = isIsr && !supportsDynamicResponse;
|
|
// Before rendering (which initializes component tree modules), we have to
|
|
// set the reference manifests to our global store so Server Action's
|
|
// encryption util can access to them at the top level of the page module.
|
|
if (serverActionsManifest && clientReferenceManifest) {
|
|
(0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$encryption$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["setReferenceManifestsSingleton"])({
|
|
page: srcPage,
|
|
clientReferenceManifest,
|
|
serverActionsManifest,
|
|
serverModuleMap: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$app$2d$render$2f$action$2d$utils$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["createServerModuleMap"])({
|
|
serverActionsManifest
|
|
})
|
|
});
|
|
}
|
|
const method = req.method || 'GET';
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["getTracer"])();
|
|
const activeSpan = tracer.getActiveScopeSpan();
|
|
const context = {
|
|
params,
|
|
prerenderManifest,
|
|
renderOpts: {
|
|
experimental: {
|
|
authInterrupts: Boolean(nextConfig.experimental.authInterrupts)
|
|
},
|
|
cacheComponents: Boolean(nextConfig.cacheComponents),
|
|
supportsDynamicResponse,
|
|
incrementalCache: (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'incrementalCache'),
|
|
cacheLifeProfiles: nextConfig.cacheLife,
|
|
waitUntil: ctx.waitUntil,
|
|
onClose: (cb)=>{
|
|
res.on('close', cb);
|
|
},
|
|
onAfterTaskError: undefined,
|
|
onInstrumentationRequestError: (error, _request, errorContext)=>routeModule.onRequestError(req, error, errorContext, routerServerContext)
|
|
},
|
|
sharedContext: {
|
|
buildId
|
|
}
|
|
};
|
|
const nodeNextReq = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeNextRequest"](req);
|
|
const nodeNextRes = new __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$base$2d$http$2f$node$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NodeNextResponse"](res);
|
|
const nextReq = __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$app$2d$route$5d$__$28$ecmascript$29$__["NextRequestAdapter"].fromNodeNextRequest(nodeNextReq, (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$app$2d$route$5d$__$28$ecmascript$29$__["signalFromNodeResponse"])(res));
|
|
try {
|
|
const invokeRouteModule = async (span)=>{
|
|
return routeModule.handle(nextReq, context).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$app$2d$route$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);
|
|
} else {
|
|
span.updateName(`${method} ${srcPage}`);
|
|
}
|
|
});
|
|
};
|
|
const isMinimalMode = Boolean(("TURBOPACK compile-time value", false) || (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$request$2d$meta$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getRequestMeta"])(req, 'minimalMode'));
|
|
const handleResponse = async (currentSpan)=>{
|
|
var _cacheEntry_value;
|
|
const responseGenerator = async ({ previousCacheEntry })=>{
|
|
try {
|
|
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;
|
|
}
|
|
const response = await invokeRouteModule(currentSpan);
|
|
req.fetchMetrics = context.renderOpts.fetchMetrics;
|
|
let pendingWaitUntil = context.renderOpts.pendingWaitUntil;
|
|
// Attempt using provided waitUntil if available
|
|
// if it's not we fallback to sendResponse's handling
|
|
if (pendingWaitUntil) {
|
|
if (ctx.waitUntil) {
|
|
ctx.waitUntil(pendingWaitUntil);
|
|
pendingWaitUntil = undefined;
|
|
}
|
|
}
|
|
const cacheTags = context.renderOpts.collectedTags;
|
|
// If the request is for a static response, we can cache it so long
|
|
// as it's not edge.
|
|
if (isIsr) {
|
|
const blob = await response.blob();
|
|
// Copy the headers from the response.
|
|
const 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$app$2d$route$5d$__$28$ecmascript$29$__["toNodeOutgoingHttpHeaders"])(response.headers);
|
|
if (cacheTags) {
|
|
headers[__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]] = cacheTags;
|
|
}
|
|
if (!headers['content-type'] && blob.type) {
|
|
headers['content-type'] = blob.type;
|
|
}
|
|
const revalidate = typeof context.renderOpts.collectedRevalidate === 'undefined' || context.renderOpts.collectedRevalidate >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? false : context.renderOpts.collectedRevalidate;
|
|
const expire = typeof context.renderOpts.collectedExpire === 'undefined' || context.renderOpts.collectedExpire >= __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["INFINITE_CACHE"] ? undefined : context.renderOpts.collectedExpire;
|
|
// Create the cache entry for the response.
|
|
const 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$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE,
|
|
status: response.status,
|
|
body: Buffer.from(await blob.arrayBuffer()),
|
|
headers
|
|
},
|
|
cacheControl: {
|
|
revalidate,
|
|
expire
|
|
}
|
|
};
|
|
return cacheEntry;
|
|
} else {
|
|
// send response without caching if not ISR
|
|
await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, response, context.renderOpts.pendingWaitUntil);
|
|
return null;
|
|
}
|
|
} 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) {
|
|
await routeModule.onRequestError(req, err, {
|
|
routerKind: 'App Router',
|
|
routePath: srcPage,
|
|
routeType: 'route',
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["getRevalidateReason"])({
|
|
isStaticGeneration,
|
|
isOnDemandRevalidate
|
|
})
|
|
}, routerServerContext);
|
|
}
|
|
throw err;
|
|
}
|
|
};
|
|
const cacheEntry = await routeModule.handleResponse({
|
|
req,
|
|
nextConfig,
|
|
cacheKey,
|
|
routeKind: __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$route$2d$kind$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["RouteKind"].APP_ROUTE,
|
|
isFallback: false,
|
|
prerenderManifest,
|
|
isRoutePPREnabled: false,
|
|
isOnDemandRevalidate,
|
|
revalidateOnlyGenerated,
|
|
responseGenerator,
|
|
waitUntil: ctx.waitUntil,
|
|
isMinimalMode
|
|
});
|
|
// we don't create a cacheEntry for ISR
|
|
if (!isIsr) {
|
|
return null;
|
|
}
|
|
if ((cacheEntry == null ? void 0 : (_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$app$2d$route$5d$__$28$ecmascript$29$__["CachedRouteKind"].APP_ROUTE) {
|
|
var _cacheEntry_value1;
|
|
throw Object.defineProperty(new Error(`Invariant: app-route received invalid cache entry ${cacheEntry == null ? void 0 : (_cacheEntry_value1 = cacheEntry.value) == null ? void 0 : _cacheEntry_value1.kind}`), "__NEXT_ERROR_CODE", {
|
|
value: "E701",
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
if (!isMinimalMode) {
|
|
res.setHeader('x-nextjs-cache', isOnDemandRevalidate ? 'REVALIDATED' : cacheEntry.isMiss ? 'MISS' : cacheEntry.isStale ? 'STALE' : 'HIT');
|
|
}
|
|
// Draft mode should never be cached
|
|
if (isDraftMode) {
|
|
res.setHeader('Cache-Control', 'private, no-cache, no-store, max-age=0, must-revalidate');
|
|
}
|
|
const 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$app$2d$route$5d$__$28$ecmascript$29$__["fromNodeOutgoingHttpHeaders"])(cacheEntry.value.headers);
|
|
if (!(isMinimalMode && isIsr)) {
|
|
headers.delete(__TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$lib$2f$constants$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NEXT_CACHE_TAGS_HEADER"]);
|
|
}
|
|
// If cache control is already set on the response we don't
|
|
// override it to allow users to customize it via next.config
|
|
if (cacheEntry.cacheControl && !res.getHeader('Cache-Control') && !headers.get('Cache-Control')) {
|
|
headers.set('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$app$2d$route$5d$__$28$ecmascript$29$__["getCacheControlHeader"])(cacheEntry.cacheControl));
|
|
}
|
|
await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, new Response(cacheEntry.value.body, {
|
|
headers,
|
|
status: cacheEntry.value.status || 200
|
|
}));
|
|
return null;
|
|
};
|
|
// TODO: activeSpan code path is for when wrapped by
|
|
// next-server can be removed when this is no longer used
|
|
if (activeSpan) {
|
|
await handleResponse(activeSpan);
|
|
} else {
|
|
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$app$2d$route$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$app$2d$route$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"])) {
|
|
await routeModule.onRequestError(req, err, {
|
|
routerKind: 'App Router',
|
|
routePath: normalizedSrcPage,
|
|
routeType: 'route',
|
|
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$app$2d$route$5d$__$28$ecmascript$29$__["getRevalidateReason"])({
|
|
isStaticGeneration,
|
|
isOnDemandRevalidate
|
|
})
|
|
});
|
|
}
|
|
// rethrow so that we can handle serving error page
|
|
// If this is during static generation, throw the error again.
|
|
if (isIsr) throw err;
|
|
// Otherwise, send a 500 response.
|
|
await (0, __TURBOPACK__imported__module__$5b$project$5d2f$node_modules$2f$next$2f$dist$2f$esm$2f$server$2f$send$2d$response$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendResponse"])(nodeNextReq, nodeNextRes, new Response(null, {
|
|
status: 500
|
|
}));
|
|
return null;
|
|
}
|
|
} //# sourceMappingURL=app-route.js.map
|
|
}),
|
|
];
|
|
|
|
//# sourceMappingURL=node_modules_next_9048f309._.js.map
|