vinext 0.0.23 → 0.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/dist/check.d.ts.map +1 -1
- package/dist/check.js +3 -2
- package/dist/check.js.map +1 -1
- package/dist/client/entry.js +1 -1
- package/dist/client/entry.js.map +1 -1
- package/dist/config/config-matchers.d.ts +21 -0
- package/dist/config/config-matchers.d.ts.map +1 -1
- package/dist/config/config-matchers.js +59 -9
- package/dist/config/config-matchers.js.map +1 -1
- package/dist/config/next-config.d.ts +8 -2
- package/dist/config/next-config.d.ts.map +1 -1
- package/dist/config/next-config.js +90 -35
- package/dist/config/next-config.js.map +1 -1
- package/dist/deploy.d.ts +10 -0
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +140 -56
- package/dist/deploy.js.map +1 -1
- package/dist/index.d.ts +14 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +195 -25
- package/dist/index.js.map +1 -1
- package/dist/plugins/async-hooks-stub.d.ts +16 -0
- package/dist/plugins/async-hooks-stub.d.ts.map +1 -0
- package/dist/plugins/async-hooks-stub.js +45 -0
- package/dist/plugins/async-hooks-stub.js.map +1 -0
- package/dist/routing/app-router.d.ts +12 -6
- package/dist/routing/app-router.d.ts.map +1 -1
- package/dist/routing/app-router.js +19 -40
- package/dist/routing/app-router.js.map +1 -1
- package/dist/routing/pages-router.d.ts.map +1 -1
- package/dist/routing/pages-router.js +3 -9
- package/dist/routing/pages-router.js.map +1 -1
- package/dist/routing/utils.d.ts +9 -0
- package/dist/routing/utils.d.ts.map +1 -1
- package/dist/routing/utils.js +10 -0
- package/dist/routing/utils.js.map +1 -1
- package/dist/server/api-handler.d.ts.map +1 -1
- package/dist/server/api-handler.js +6 -0
- package/dist/server/api-handler.js.map +1 -1
- package/dist/server/app-dev-server.d.ts +2 -2
- package/dist/server/app-dev-server.d.ts.map +1 -1
- package/dist/server/app-dev-server.js +294 -133
- package/dist/server/app-dev-server.js.map +1 -1
- package/dist/server/dev-module-runner.d.ts +84 -0
- package/dist/server/dev-module-runner.d.ts.map +1 -0
- package/dist/server/dev-module-runner.js +105 -0
- package/dist/server/dev-module-runner.js.map +1 -0
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/instrumentation.d.ts +52 -9
- package/dist/server/instrumentation.d.ts.map +1 -1
- package/dist/server/instrumentation.js +52 -15
- package/dist/server/instrumentation.js.map +1 -1
- package/dist/server/middleware.d.ts +7 -3
- package/dist/server/middleware.d.ts.map +1 -1
- package/dist/server/middleware.js +16 -6
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/prod-server.d.ts +8 -2
- package/dist/server/prod-server.d.ts.map +1 -1
- package/dist/server/prod-server.js +56 -35
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/worker-utils.d.ts +15 -0
- package/dist/server/worker-utils.d.ts.map +1 -0
- package/dist/server/worker-utils.js +41 -0
- package/dist/server/worker-utils.js.map +1 -0
- package/dist/shims/cache.d.ts.map +1 -1
- package/dist/shims/cache.js +14 -2
- package/dist/shims/cache.js.map +1 -1
- package/dist/shims/fetch-cache.d.ts.map +1 -1
- package/dist/shims/fetch-cache.js +139 -29
- package/dist/shims/fetch-cache.js.map +1 -1
- package/dist/shims/form.d.ts.map +1 -1
- package/dist/shims/form.js +2 -3
- package/dist/shims/form.js.map +1 -1
- package/dist/shims/headers.d.ts +6 -0
- package/dist/shims/headers.d.ts.map +1 -1
- package/dist/shims/headers.js +8 -0
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/layout-segment-context.d.ts +5 -4
- package/dist/shims/layout-segment-context.d.ts.map +1 -1
- package/dist/shims/layout-segment-context.js +6 -5
- package/dist/shims/layout-segment-context.js.map +1 -1
- package/dist/shims/link.d.ts.map +1 -1
- package/dist/shims/link.js +32 -17
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/navigation.d.ts +14 -11
- package/dist/shims/navigation.d.ts.map +1 -1
- package/dist/shims/navigation.js +122 -102
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/router.d.ts.map +1 -1
- package/dist/shims/router.js +37 -21
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/server.d.ts +2 -0
- package/dist/shims/server.d.ts.map +1 -1
- package/dist/shims/server.js +4 -0
- package/dist/shims/server.js.map +1 -1
- package/dist/shims/url-utils.d.ts +13 -0
- package/dist/shims/url-utils.d.ts.map +1 -0
- package/dist/shims/url-utils.js +28 -0
- package/dist/shims/url-utils.js.map +1 -0
- package/dist/utils/project.d.ts +13 -1
- package/dist/utils/project.d.ts.map +1 -1
- package/dist/utils/project.js +63 -13
- package/dist/utils/project.js.map +1 -1
- package/package.json +6 -1
package/dist/shims/router.js
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { useState, useEffect, useCallback, useMemo, createElement } from "react";
|
|
9
9
|
import { RouterContext } from "./internal/router-context.js";
|
|
10
10
|
import { isValidModulePath } from "../client/validate-module-path.js";
|
|
11
|
+
import { toSameOriginPath } from "./url-utils.js";
|
|
11
12
|
/** basePath from next.config.js, injected by the plugin at build time */
|
|
12
13
|
const __basePath = process.env.__NEXT_ROUTER_BASEPATH ?? "";
|
|
13
14
|
/** Prepend basePath to a path for browser URLs / fetches */
|
|
@@ -195,8 +196,7 @@ let _navInProgress = false;
|
|
|
195
196
|
async function navigateClient(url) {
|
|
196
197
|
if (typeof window === "undefined")
|
|
197
198
|
return;
|
|
198
|
-
const
|
|
199
|
-
const root = win.__VINEXT_ROOT__;
|
|
199
|
+
const root = window.__VINEXT_ROOT__;
|
|
200
200
|
if (!root) {
|
|
201
201
|
// No React root yet — fall back to hard navigation
|
|
202
202
|
window.location.href = url;
|
|
@@ -222,7 +222,7 @@ async function navigateClient(url) {
|
|
|
222
222
|
}
|
|
223
223
|
const nextData = JSON.parse(match[1]);
|
|
224
224
|
const { pageProps } = nextData.props;
|
|
225
|
-
|
|
225
|
+
window.__NEXT_DATA__ = nextData;
|
|
226
226
|
// Get the page module URL from __NEXT_DATA__.__vinext (preferred),
|
|
227
227
|
// or fall back to parsing the hydration script
|
|
228
228
|
let pageModuleUrl = nextData.__vinext?.pageModuleUrl;
|
|
@@ -253,7 +253,7 @@ async function navigateClient(url) {
|
|
|
253
253
|
// Import React for createElement
|
|
254
254
|
const React = (await import("react")).default;
|
|
255
255
|
// Re-render with the new page, loading _app if needed
|
|
256
|
-
let AppComponent =
|
|
256
|
+
let AppComponent = window.__VINEXT_APP__;
|
|
257
257
|
const appModuleUrl = nextData.__vinext?.appModuleUrl;
|
|
258
258
|
if (!AppComponent && appModuleUrl) {
|
|
259
259
|
if (!isValidModulePath(appModuleUrl)) {
|
|
@@ -263,7 +263,7 @@ async function navigateClient(url) {
|
|
|
263
263
|
try {
|
|
264
264
|
const appModule = await import(/* @vite-ignore */ appModuleUrl);
|
|
265
265
|
AppComponent = appModule.default;
|
|
266
|
-
|
|
266
|
+
window.__VINEXT_APP__ = AppComponent;
|
|
267
267
|
}
|
|
268
268
|
catch {
|
|
269
269
|
// _app not available — continue without it
|
|
@@ -354,11 +354,15 @@ export function useRouter() {
|
|
|
354
354
|
return () => window.removeEventListener("vinext:navigate", onNavigate);
|
|
355
355
|
}, []);
|
|
356
356
|
const push = useCallback(async (url, _as, options) => {
|
|
357
|
-
|
|
358
|
-
// External URLs — delegate to browser
|
|
357
|
+
let resolved = applyNavigationLocale(resolveUrl(url), options?.locale);
|
|
358
|
+
// External URLs — delegate to browser (unless same-origin)
|
|
359
359
|
if (isExternalUrl(resolved)) {
|
|
360
|
-
|
|
361
|
-
|
|
360
|
+
const localPath = toSameOriginPath(resolved);
|
|
361
|
+
if (localPath == null) {
|
|
362
|
+
window.location.assign(resolved);
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
365
|
+
resolved = localPath;
|
|
362
366
|
}
|
|
363
367
|
// Hash-only change — no page fetch needed
|
|
364
368
|
if (isHashOnlyChange(resolved)) {
|
|
@@ -390,11 +394,15 @@ export function useRouter() {
|
|
|
390
394
|
return true;
|
|
391
395
|
}, []);
|
|
392
396
|
const replace = useCallback(async (url, _as, options) => {
|
|
393
|
-
|
|
394
|
-
// External URLs — delegate to browser
|
|
397
|
+
let resolved = applyNavigationLocale(resolveUrl(url), options?.locale);
|
|
398
|
+
// External URLs — delegate to browser (unless same-origin)
|
|
395
399
|
if (isExternalUrl(resolved)) {
|
|
396
|
-
|
|
397
|
-
|
|
400
|
+
const localPath = toSameOriginPath(resolved);
|
|
401
|
+
if (localPath == null) {
|
|
402
|
+
window.location.replace(resolved);
|
|
403
|
+
return true;
|
|
404
|
+
}
|
|
405
|
+
resolved = localPath;
|
|
398
406
|
}
|
|
399
407
|
// Hash-only change — no page fetch needed
|
|
400
408
|
if (isHashOnlyChange(resolved)) {
|
|
@@ -498,11 +506,15 @@ export function wrapWithRouterContext(element) {
|
|
|
498
506
|
// Also export a default Router singleton for `import Router from 'next/router'`
|
|
499
507
|
const Router = {
|
|
500
508
|
push: async (url, _as, options) => {
|
|
501
|
-
|
|
502
|
-
// External URLs
|
|
509
|
+
let resolved = applyNavigationLocale(resolveUrl(url), options?.locale);
|
|
510
|
+
// External URLs (unless same-origin)
|
|
503
511
|
if (isExternalUrl(resolved)) {
|
|
504
|
-
|
|
505
|
-
|
|
512
|
+
const localPath = toSameOriginPath(resolved);
|
|
513
|
+
if (localPath == null) {
|
|
514
|
+
window.location.assign(resolved);
|
|
515
|
+
return true;
|
|
516
|
+
}
|
|
517
|
+
resolved = localPath;
|
|
506
518
|
}
|
|
507
519
|
// Hash-only change
|
|
508
520
|
if (isHashOnlyChange(resolved)) {
|
|
@@ -531,11 +543,15 @@ const Router = {
|
|
|
531
543
|
return true;
|
|
532
544
|
},
|
|
533
545
|
replace: async (url, _as, options) => {
|
|
534
|
-
|
|
535
|
-
// External URLs
|
|
546
|
+
let resolved = applyNavigationLocale(resolveUrl(url), options?.locale);
|
|
547
|
+
// External URLs (unless same-origin)
|
|
536
548
|
if (isExternalUrl(resolved)) {
|
|
537
|
-
|
|
538
|
-
|
|
549
|
+
const localPath = toSameOriginPath(resolved);
|
|
550
|
+
if (localPath == null) {
|
|
551
|
+
window.location.replace(resolved);
|
|
552
|
+
return true;
|
|
553
|
+
}
|
|
554
|
+
resolved = localPath;
|
|
539
555
|
}
|
|
540
556
|
// Hash-only change
|
|
541
557
|
if (isHashOnlyChange(resolved)) {
|
package/dist/shims/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/shims/router.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAqB,MAAM,OAAO,CAAC;AACpG,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,yEAAyE;AACzE,MAAM,UAAU,GAAW,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC;AAEpE,4DAA4D;AAC5D,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC;IAC1B,OAAO,UAAU,GAAG,CAAC,CAAC;AACxB,CAAC;AAED,oDAAoD;AACpD,SAAS,aAAa,CAAC,CAAS;IAC9B,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC;IAC1B,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;IACvE,OAAO,CAAC,CAAC;AACX,CAAC;AAiED,SAAS,kBAAkB;IACzB,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6C,CAAC;IAEvE,OAAO;QACL,EAAE,CAAC,KAAa,EAAE,OAAqC;YACrD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YAC3D,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,GAAG,CAAC,KAAa,EAAE,OAAqC;YACtD,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,KAAa,EAAE,GAAG,IAAe;YACpC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,4BAA4B;AAC5B,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;AAE1C,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC;IACjC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW,EAAE,MAAe;IAChE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,GAAG,CAAC;IACzD,MAAM,aAAa,GAAI,MAAc,CAAC,yBAAyB,CAAC;IAChE,sCAAsC;IACtC,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,GAAG,CAAC;IACzC,sBAAsB;IACtB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,MAAM,EAAE;QAAE,OAAO,GAAG,CAAC;IACtE,OAAO,IAAI,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;AAC9D,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;IAClG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,OAAO;IACT,CAAC;IACD,MAAM,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,EAAE;QAAE,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,mFAAmF;AACnF,SAAS,kBAAkB;IACzB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IACzC,MAAM,CAAC,OAAO,CAAC,YAAY,CACzB,EAAE,GAAG,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC,OAAO,EAAE,EAChF,EAAE,CACH,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,kBAAkB,IAAI,KAAK,EAAE,CAAC;QACtE,MAAM,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,GAAG,KAGpD,CAAC;QACF,qBAAqB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAcD,8EAA8E;AAC9E,0EAA0E;AAC1E,kEAAkE;AAClE,gEAAgE;AAChE,8EAA8E;AAE9E,IAAI,WAAW,GAAsB,IAAI,CAAC;AAE1C,IAAI,cAAc,GAAG,GAAsB,EAAE,CAAC,WAAW,CAAC;AAC1D,IAAI,kBAAkB,GAAG,CAAC,GAAsB,EAAQ,EAAE,GAAG,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAElF;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,SAG7C;IACC,cAAc,GAAG,SAAS,CAAC,aAAa,CAAC;IACzC,kBAAkB,GAAG,SAAS,CAAC,aAAa,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAsB;IAClD,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,SAAS,sBAAsB,CAAC,OAAe;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,6DAA6D;IAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;IAC9E,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,yCAAyC;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,mBAAmB;IAK1B,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAA2B,EAAE,CAAC;YACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC9D,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACvE,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACnD,CAAC;IACD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,yFAAyF;IACzF,iFAAiF;IACjF,MAAM,QAAQ,GAAI,MAAc,CAAC,aAAa,CAAC;IAC/C,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChD,MAAM,eAAe,GAAG,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9D,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACrB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;IACD,mDAAmD;IACnD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACrB,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,KAAK,UAAU,cAAc,CAAC,GAAW;IACvC,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO;IAE1C,MAAM,GAAG,GAAG,MAAa,CAAC;IAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC;IACjC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,mDAAmD;QACnD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,+DAA+D;IAC/D,IAAI,cAAc;QAAE,OAAO;IAC3B,cAAc,GAAG,IAAI,CAAC;IAEtB,IAAI,CAAC;QACH,mCAAmC;QACnC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QACnE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAE9B,sCAAsC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QAChF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;QACrC,GAAG,CAAC,aAAa,GAAG,QAAQ,CAAC;QAE7B,mEAAmE;QACnE,+CAA+C;QAC/C,IAAI,aAAa,GACf,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;QAEnC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,mEAAmE;YACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACrE,aAAa,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,sEAAsE;QACtE,uDAAuD;QACvD,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,KAAK,CAAC,sDAAsD,EAAE,aAAa,CAAC,CAAC;YACrF,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,yCAAyC;QACzC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAClE,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,CAAC;QAEzC,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,iCAAiC;QACjC,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QAE9C,sDAAsD;QACtD,IAAI,YAAY,GAAG,GAAG,CAAC,cAAc,CAAC;QACtC,MAAM,YAAY,GAChB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;QAElC,IAAI,CAAC,YAAY,IAAI,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,qDAAqD,EAAE,YAAY,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;oBAChE,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;oBACjC,GAAG,CAAC,cAAc,GAAG,YAAY,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC;oBACP,2CAA2C;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC;QACZ,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,YAAY,EAAE;gBAC1C,SAAS,EAAE,aAAa;gBACxB,SAAS;aACV,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAC1D,CAAC;QAED,+DAA+D;QAC/D,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QACzD,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC;IAC7B,CAAC;YAAS,CAAC;QACT,cAAc,GAAG,KAAK,CAAC;IACzB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CACvB,QAAgB,EAChB,KAAwC,EACxC,MAAc,EACd,OAOC;IAED,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW;QAC1C,CAAC,CAAC,SAAS,EAAE,MAAM;QACnB,CAAC,CAAE,MAAc,CAAC,iBAAiB,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,MAAM,KAAK,WAAW;QAC3C,CAAC,CAAC,SAAS,EAAE,OAAO;QACpB,CAAC,CAAE,MAAc,CAAC,kBAAkB,CAAC;IACvC,MAAM,aAAa,GAAG,OAAO,MAAM,KAAK,WAAW;QACjD,CAAC,CAAC,SAAS,EAAE,aAAa;QAC1B,CAAC,CAAE,MAAc,CAAC,yBAAyB,CAAC;IAE9C,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,WAAW;QACzC,CAAC,CAAC,CAAE,MAAc,CAAC,aAAa,EAAE,IAAI,IAAI,QAAQ,CAAC;QACnD,CAAC,CAAC,QAAQ,CAAC;IAEb,OAAO;QACL,QAAQ;QACR,KAAK;QACL,KAAK;QACL,MAAM;QACN,QAAQ,EAAE,UAAU;QACpB,MAAM;QACN,OAAO;QACP,aAAa;QACb,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,OAAO,MAAM,KAAK,WAAW,IAAK,MAAc,CAAC,aAAa,EAAE,UAAU,KAAK,IAAI;QAC/F,GAAG,OAAO;QACV,MAAM,EAAE,YAAY;KACrB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAAC;IAE9E,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,CAAC,CAAgB,EAAE,EAAE;YACtC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAChC,yDAAyD;YACzD,KAAK,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC/E,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,0DAA0D;IAC1D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,UAAU,GAAG,CAAC,CAAC,EAAe,EAAE,EAAE;YACtC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAClC,CAAC,CAAkB,CAAC;QACpB,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QACvD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IACzE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,WAAW,CACtB,KAAK,EAAE,GAAuB,EAAE,GAAY,EAAE,OAA2B,EAAoB,EAAE;QAC7F,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzE,sCAAsC;QACtC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0CAA0C;QAC1C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/F,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kBAAkB,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAChC,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;QAEnD,qEAAqE;QACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,IAAI,EAAE,CAAC;YACT,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,GAAuB,EAAE,GAAY,EAAE,OAA2B,EAAoB,EAAE;QAC7F,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzE,sCAAsC;QACtC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0CAA0C;QAC1C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClG,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;YAChC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAChC,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;QAEnD,qEAAqE;QACrE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,IAAI,EAAE,CAAC;YACT,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE;QAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,GAAW,EAAiB,EAAE;QAChE,qDAAqD;QACrD,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,MAAM,GAAG,OAAO,CACpB,GAAe,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;QAC1D,IAAI;QACJ,OAAO;QACP,IAAI;QACJ,MAAM;QACN,QAAQ;QACR,cAAc,EAAE,CAAC,EAA0B,EAAE,EAAE,GAAG,iBAAiB,GAAG,EAAE,CAAC,CAAC,CAAC;KAC5E,CAAC,EACF,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CACjE,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,wEAAwE;AACxE,oDAAoD;AACpD,IAAI,iBAAqD,CAAC;AAE1D,+EAA+E;AAC/E,+EAA+E;AAC/E,mCAAmC;AACnC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,CAAgB,EAAE,EAAE;QACvD,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrE,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAEhF,gCAAgC;QAChC,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,cAAc,GAAI,iBAA4C,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/H,IAAI,CAAC,cAAc;gBAAE,OAAO;QAC9B,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAC9C,KAAK,cAAc,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;YACxC,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YACjD,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAqB;IACzD,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAE1D,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE;QAC5D,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,cAAc,EAAE,MAAM,CAAC,cAAc;KACtC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,OAAO,CAAiB,CAAC;AAChG,CAAC;AAED,gFAAgF;AAChF,MAAM,MAAM,GAAG;IACb,IAAI,EAAE,KAAK,EAAE,GAAuB,EAAE,GAAY,EAAE,OAA2B,EAAE,EAAE;QACjF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzE,gBAAgB;QAChB,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;QACnB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC/F,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kBAAkB,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,IAAI,EAAE,CAAC;YACT,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAuB,EAAE,GAAY,EAAE,OAA2B,EAAE,EAAE;QACpF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzE,gBAAgB;QAChB,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mBAAmB;QACnB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YAClG,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,QAAQ,CAAC,CAAC;QAEnD,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,IAAI,IAAI,EAAE,CAAC;YACT,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,EAAE,MAAM,KAAK,KAAK,EAAE,CAAC;YACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;IACjC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;IACtC,QAAQ,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;QAC9B,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,UAAU,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,cAAc,EAAE,CAAC,EAA0B,EAAE,EAAE;QAC7C,iBAAiB,GAAG,EAAE,CAAC;IACzB,CAAC;IACD,MAAM,EAAE,YAAY;CACrB,CAAC;AAEF,eAAe,MAAM,CAAC","sourcesContent":["/**\n * next/router shim\n *\n * Provides useRouter() hook and Router singleton for Pages Router.\n * Backed by the browser History API. Supports client-side navigation\n * by fetching new page data and re-rendering the React root.\n */\nimport { useState, useEffect, useCallback, useMemo, createElement, type ReactElement } from \"react\";\nimport { RouterContext } from \"./internal/router-context.js\";\nimport { isValidModulePath } from \"../client/validate-module-path.js\";\n\n/** basePath from next.config.js, injected by the plugin at build time */\nconst __basePath: string = process.env.__NEXT_ROUTER_BASEPATH ?? \"\";\n\n/** Prepend basePath to a path for browser URLs / fetches */\nfunction withBasePath(p: string): string {\n if (!__basePath) return p;\n return __basePath + p;\n}\n\n/** Strip basePath prefix from a browser pathname */\nfunction stripBasePath(p: string): string {\n if (!__basePath) return p;\n if (p.startsWith(__basePath)) return p.slice(__basePath.length) || \"/\";\n return p;\n}\n\ntype BeforePopStateCallback = (state: { url: string; as: string; options: { shallow: boolean } }) => boolean;\n\ninterface NextRouter {\n /** Current pathname */\n pathname: string;\n /** Current route pattern (e.g., \"/posts/[id]\") */\n route: string;\n /** Query parameters */\n query: Record<string, string | string[]>;\n /** Full URL including query string */\n asPath: string;\n /** Base path */\n basePath: string;\n /** Current locale */\n locale?: string;\n /** Available locales */\n locales?: string[];\n /** Default locale */\n defaultLocale?: string;\n /** Whether the router is ready */\n isReady: boolean;\n /** Whether this is a preview */\n isPreview: boolean;\n /** Whether this is a fallback page */\n isFallback: boolean;\n\n /** Navigate to a new URL */\n push(url: string | UrlObject, as?: string, options?: TransitionOptions): Promise<boolean>;\n /** Replace current URL */\n replace(url: string | UrlObject, as?: string, options?: TransitionOptions): Promise<boolean>;\n /** Go back */\n back(): void;\n /** Reload the page */\n reload(): void;\n /** Prefetch a page (injects <link rel=\"prefetch\">) */\n prefetch(url: string): Promise<void>;\n /** Register a callback to run before popstate navigation */\n beforePopState(cb: BeforePopStateCallback): void;\n /** Listen for route changes */\n events: RouterEvents;\n}\n\ninterface UrlObject {\n pathname?: string;\n query?: Record<string, string>;\n}\n\ninterface TransitionOptions {\n shallow?: boolean;\n scroll?: boolean;\n locale?: string;\n}\n\n// Route event handler types (used by consumers via router.events)\ntype _RouteChangeHandler = (url: string) => void;\ntype _RouteErrorHandler = (err: Error, url: string) => void;\n\ninterface RouterEvents {\n on(event: string, handler: (...args: unknown[]) => void): void;\n off(event: string, handler: (...args: unknown[]) => void): void;\n emit(event: string, ...args: unknown[]): void;\n}\n\nfunction createRouterEvents(): RouterEvents {\n const listeners = new Map<string, Set<(...args: unknown[]) => void>>();\n\n return {\n on(event: string, handler: (...args: unknown[]) => void) {\n if (!listeners.has(event)) listeners.set(event, new Set());\n listeners.get(event)!.add(handler);\n },\n off(event: string, handler: (...args: unknown[]) => void) {\n listeners.get(event)?.delete(handler);\n },\n emit(event: string, ...args: unknown[]) {\n listeners.get(event)?.forEach((handler) => handler(...args));\n },\n };\n}\n\n// Singleton events instance\nconst routerEvents = createRouterEvents();\n\nfunction resolveUrl(url: string | UrlObject): string {\n if (typeof url === \"string\") return url;\n let result = url.pathname ?? \"/\";\n if (url.query) {\n const params = new URLSearchParams(url.query);\n result += `?${params.toString()}`;\n }\n return result;\n}\n\n/**\n * Apply locale prefix to a URL for client-side navigation.\n * Same logic as Link's applyLocaleToHref but reads from window globals.\n */\nexport function applyNavigationLocale(url: string, locale?: string): string {\n if (!locale || typeof window === \"undefined\") return url;\n const defaultLocale = (window as any).__VINEXT_DEFAULT_LOCALE__;\n // Default locale doesn't get a prefix\n if (locale === defaultLocale) return url;\n // Don't double-prefix\n if (url.startsWith(`/${locale}/`) || url === `/${locale}`) return url;\n return `/${locale}${url.startsWith(\"/\") ? url : `/${url}`}`;\n}\n\n/** Check if a URL is external (any URL scheme per RFC 3986, or protocol-relative) */\nexport function isExternalUrl(url: string): boolean {\n return /^[a-z][a-z0-9+.-]*:/i.test(url) || url.startsWith(\"//\");\n}\n\n/** Check if a href is only a hash change relative to the current URL */\nexport function isHashOnlyChange(href: string): boolean {\n if (href.startsWith(\"#\")) return true;\n if (typeof window === \"undefined\") return false;\n try {\n const current = new URL(window.location.href);\n const next = new URL(href, window.location.href);\n return current.pathname === next.pathname && current.search === next.search && next.hash !== \"\";\n } catch {\n return false;\n }\n}\n\n/** Scroll to hash target element, or top if no hash */\nfunction scrollToHash(hash: string): void {\n if (!hash || hash === \"#\") {\n window.scrollTo(0, 0);\n return;\n }\n const el = document.getElementById(hash.slice(1));\n if (el) el.scrollIntoView({ behavior: \"auto\" });\n}\n\n/** Save current scroll position into history state for back/forward restoration */\nfunction saveScrollPosition(): void {\n const state = window.history.state ?? {};\n window.history.replaceState(\n { ...state, __vinext_scrollX: window.scrollX, __vinext_scrollY: window.scrollY },\n \"\",\n );\n}\n\n/** Restore scroll position from history state */\nfunction restoreScrollPosition(state: unknown): void {\n if (state && typeof state === \"object\" && \"__vinext_scrollY\" in state) {\n const { __vinext_scrollX: x, __vinext_scrollY: y } = state as {\n __vinext_scrollX: number;\n __vinext_scrollY: number;\n };\n requestAnimationFrame(() => window.scrollTo(x, y));\n }\n}\n\n/**\n * SSR context - set by the dev server before rendering each page.\n */\ninterface SSRContext {\n pathname: string;\n query: Record<string, string | string[]>;\n asPath: string;\n locale?: string;\n locales?: string[];\n defaultLocale?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Server-side SSR state uses a registration pattern so this module can be\n// bundled for the browser. The ALS-backed implementation lives in\n// router-state.ts (server-only) and registers itself on import.\n// ---------------------------------------------------------------------------\n\nlet _ssrContext: SSRContext | null = null;\n\nlet _getSSRContext = (): SSRContext | null => _ssrContext;\nlet _setSSRContextImpl = (ctx: SSRContext | null): void => { _ssrContext = ctx; };\n\n/**\n * Register ALS-backed state accessors. Called by router-state.ts on import.\n * @internal\n */\nexport function _registerRouterStateAccessors(accessors: {\n getSSRContext: () => SSRContext | null;\n setSSRContext: (ctx: SSRContext | null) => void;\n}): void {\n _getSSRContext = accessors.getSSRContext;\n _setSSRContextImpl = accessors.setSSRContext;\n}\n\nexport function setSSRContext(ctx: SSRContext | null): void {\n _setSSRContextImpl(ctx);\n}\n\n/**\n * Extract param names from a Next.js route pattern.\n * E.g., \"/posts/[id]\" → [\"id\"], \"/docs/[...slug]\" → [\"slug\"],\n * \"/shop/[[...path]]\" → [\"path\"], \"/blog/[year]/[month]\" → [\"year\", \"month\"]\n * Also handles internal format: \"/posts/:id\" → [\"id\"], \"/docs/:slug+\" → [\"slug\"]\n */\nfunction extractRouteParamNames(pattern: string): string[] {\n const names: string[] = [];\n // Match Next.js bracket format: [id], [...slug], [[...slug]]\n const bracketMatches = pattern.matchAll(/\\[{1,2}(?:\\.\\.\\.)?([\\w-]+)\\]{1,2}/g);\n for (const m of bracketMatches) {\n names.push(m[1]);\n }\n if (names.length > 0) return names;\n // Fallback: match internal :param format\n const colonMatches = pattern.matchAll(/:([\\w-]+)[+*]?/g);\n for (const m of colonMatches) {\n names.push(m[1]);\n }\n return names;\n}\n\nfunction getPathnameAndQuery(): {\n pathname: string;\n query: Record<string, string>;\n asPath: string;\n} {\n if (typeof window === \"undefined\") {\n const _ssrCtx = _getSSRContext();\n if (_ssrCtx) {\n const query: Record<string, string> = {};\n for (const [key, value] of Object.entries(_ssrCtx.query)) {\n query[key] = Array.isArray(value) ? value.join(\",\") : value;\n }\n return { pathname: _ssrCtx.pathname, query, asPath: _ssrCtx.asPath };\n }\n return { pathname: \"/\", query: {}, asPath: \"/\" };\n }\n const pathname = stripBasePath(window.location.pathname);\n const query: Record<string, string> = {};\n // Include dynamic route params from __NEXT_DATA__ (e.g., { id: \"42\" } from /posts/[id]).\n // Only include keys that are part of the route pattern (not stale query params).\n const nextData = (window as any).__NEXT_DATA__;\n if (nextData && nextData.query && nextData.page) {\n const routeParamNames = extractRouteParamNames(nextData.page);\n for (const key of routeParamNames) {\n const value = nextData.query[key];\n if (typeof value === \"string\") {\n query[key] = value;\n } else if (Array.isArray(value)) {\n query[key] = value.join(\",\");\n }\n }\n }\n // URL search params always reflect the current URL\n const params = new URLSearchParams(window.location.search);\n for (const [key, value] of params) {\n query[key] = value;\n }\n const asPath = pathname + window.location.search;\n return { pathname, query, asPath };\n}\n\n/**\n * Perform client-side navigation: fetch the target page's HTML,\n * extract __NEXT_DATA__, and re-render the React root.\n */\nlet _navInProgress = false;\nasync function navigateClient(url: string): Promise<void> {\n if (typeof window === \"undefined\") return;\n\n const win = window as any;\n const root = win.__VINEXT_ROOT__;\n if (!root) {\n // No React root yet — fall back to hard navigation\n window.location.href = url;\n return;\n }\n\n // Prevent re-entrant navigation (e.g., double popstate events)\n if (_navInProgress) return;\n _navInProgress = true;\n\n try {\n // Fetch the target page's SSR HTML\n const res = await fetch(url, { headers: { Accept: \"text/html\" } });\n if (!res.ok) {\n window.location.href = url;\n return;\n }\n\n const html = await res.text();\n\n // Extract __NEXT_DATA__ from the HTML\n const match = html.match(/<script>window\\.__NEXT_DATA__\\s*=\\s*(.*?)<\\/script>/);\n if (!match) {\n window.location.href = url;\n return;\n }\n\n const nextData = JSON.parse(match[1]);\n const { pageProps } = nextData.props;\n win.__NEXT_DATA__ = nextData;\n\n // Get the page module URL from __NEXT_DATA__.__vinext (preferred),\n // or fall back to parsing the hydration script\n let pageModuleUrl: string | undefined =\n nextData.__vinext?.pageModuleUrl;\n\n if (!pageModuleUrl) {\n // Legacy fallback: try to find the module URL in the inline script\n const moduleMatch = html.match(/import\\(\"([^\"]+)\"\\);\\s*\\n\\s*const PageComponent/);\n const altMatch = html.match(/await import\\(\"([^\"]+pages\\/[^\"]+)\"\\)/);\n pageModuleUrl = moduleMatch?.[1] ?? altMatch?.[1] ?? undefined;\n }\n\n if (!pageModuleUrl) {\n window.location.href = url;\n return;\n }\n\n // Validate the module URL before importing — defense-in-depth against\n // unexpected __NEXT_DATA__ or malformed HTML responses\n if (!isValidModulePath(pageModuleUrl)) {\n console.error(\"[vinext] Blocked import of invalid page module path:\", pageModuleUrl);\n window.location.href = url;\n return;\n }\n\n // Dynamically import the new page module\n const pageModule = await import(/* @vite-ignore */ pageModuleUrl);\n const PageComponent = pageModule.default;\n\n if (!PageComponent) {\n window.location.href = url;\n return;\n }\n\n // Import React for createElement\n const React = (await import(\"react\")).default;\n\n // Re-render with the new page, loading _app if needed\n let AppComponent = win.__VINEXT_APP__;\n const appModuleUrl: string | undefined =\n nextData.__vinext?.appModuleUrl;\n\n if (!AppComponent && appModuleUrl) {\n if (!isValidModulePath(appModuleUrl)) {\n console.error(\"[vinext] Blocked import of invalid app module path:\", appModuleUrl);\n } else {\n try {\n const appModule = await import(/* @vite-ignore */ appModuleUrl);\n AppComponent = appModule.default;\n win.__VINEXT_APP__ = AppComponent;\n } catch {\n // _app not available — continue without it\n }\n }\n }\n\n let element;\n if (AppComponent) {\n element = React.createElement(AppComponent, {\n Component: PageComponent,\n pageProps,\n });\n } else {\n element = React.createElement(PageComponent, pageProps);\n }\n\n // Wrap with RouterContext.Provider so next/compat/router works\n element = wrapWithRouterContext(element);\n\n root.render(element);\n } catch (err) {\n console.error(\"[vinext] Client navigation failed:\", err);\n routerEvents.emit(\"routeChangeError\", err, url);\n window.location.href = url;\n } finally {\n _navInProgress = false;\n }\n}\n\n/**\n * Build the full router value object from the current pathname, query, asPath,\n * and a set of navigation methods. Shared by useRouter() (which passes\n * hook-derived callbacks) and wrapWithRouterContext() (which passes the Router\n * singleton methods) so the shape stays in sync.\n */\nfunction buildRouterValue(\n pathname: string,\n query: Record<string, string | string[]>,\n asPath: string,\n methods: {\n push: NextRouter[\"push\"];\n replace: NextRouter[\"replace\"];\n back: NextRouter[\"back\"];\n reload: NextRouter[\"reload\"];\n prefetch: NextRouter[\"prefetch\"];\n beforePopState: NextRouter[\"beforePopState\"];\n },\n): NextRouter {\n const _ssrState = _getSSRContext();\n const locale = typeof window === \"undefined\"\n ? _ssrState?.locale\n : (window as any).__VINEXT_LOCALE__;\n const locales = typeof window === \"undefined\"\n ? _ssrState?.locales\n : (window as any).__VINEXT_LOCALES__;\n const defaultLocale = typeof window === \"undefined\"\n ? _ssrState?.defaultLocale\n : (window as any).__VINEXT_DEFAULT_LOCALE__;\n\n const route = typeof window !== \"undefined\"\n ? ((window as any).__NEXT_DATA__?.page ?? pathname)\n : pathname;\n\n return {\n pathname,\n route,\n query,\n asPath,\n basePath: __basePath,\n locale,\n locales,\n defaultLocale,\n isReady: true,\n isPreview: false,\n isFallback: typeof window !== \"undefined\" && (window as any).__NEXT_DATA__?.isFallback === true,\n ...methods,\n events: routerEvents,\n };\n}\n\n/**\n * useRouter hook - Pages Router compatible.\n */\nexport function useRouter(): NextRouter {\n const [{ pathname, query, asPath }, setState] = useState(getPathnameAndQuery);\n\n useEffect(() => {\n const onPopState = (e: PopStateEvent) => {\n setState(getPathnameAndQuery());\n // Re-render with the new page on back/forward navigation\n void navigateClient(window.location.pathname + window.location.search).then(() => {\n restoreScrollPosition(e.state);\n });\n };\n window.addEventListener(\"popstate\", onPopState);\n return () => window.removeEventListener(\"popstate\", onPopState);\n }, []);\n\n // Listen for custom navigation events from Link component\n useEffect(() => {\n const onNavigate = ((_e: CustomEvent) => {\n setState(getPathnameAndQuery());\n }) as EventListener;\n window.addEventListener(\"vinext:navigate\", onNavigate);\n return () => window.removeEventListener(\"vinext:navigate\", onNavigate);\n }, []);\n\n const push = useCallback(\n async (url: string | UrlObject, _as?: string, options?: TransitionOptions): Promise<boolean> => {\n const resolved = applyNavigationLocale(resolveUrl(url), options?.locale);\n\n // External URLs — delegate to browser\n if (isExternalUrl(resolved)) {\n window.location.assign(resolved);\n return true;\n }\n\n // Hash-only change — no page fetch needed\n if (isHashOnlyChange(resolved)) {\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n window.history.pushState({}, \"\", resolved.startsWith(\"#\") ? resolved : withBasePath(resolved));\n scrollToHash(hash);\n setState(getPathnameAndQuery());\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n }\n\n saveScrollPosition();\n const full = withBasePath(resolved);\n routerEvents.emit(\"routeChangeStart\", resolved);\n window.history.pushState({}, \"\", full);\n if (!options?.shallow) {\n await navigateClient(full);\n }\n setState(getPathnameAndQuery());\n routerEvents.emit(\"routeChangeComplete\", resolved);\n\n // Scroll: handle hash target, else scroll to top unless scroll:false\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n if (hash) {\n scrollToHash(hash);\n } else if (options?.scroll !== false) {\n window.scrollTo(0, 0);\n }\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n },\n [],\n );\n\n const replace = useCallback(\n async (url: string | UrlObject, _as?: string, options?: TransitionOptions): Promise<boolean> => {\n const resolved = applyNavigationLocale(resolveUrl(url), options?.locale);\n\n // External URLs — delegate to browser\n if (isExternalUrl(resolved)) {\n window.location.replace(resolved);\n return true;\n }\n\n // Hash-only change — no page fetch needed\n if (isHashOnlyChange(resolved)) {\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n window.history.replaceState({}, \"\", resolved.startsWith(\"#\") ? resolved : withBasePath(resolved));\n scrollToHash(hash);\n setState(getPathnameAndQuery());\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n }\n\n const full = withBasePath(resolved);\n routerEvents.emit(\"routeChangeStart\", resolved);\n window.history.replaceState({}, \"\", full);\n if (!options?.shallow) {\n await navigateClient(full);\n }\n setState(getPathnameAndQuery());\n routerEvents.emit(\"routeChangeComplete\", resolved);\n\n // Scroll: handle hash target, else scroll to top unless scroll:false\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n if (hash) {\n scrollToHash(hash);\n } else if (options?.scroll !== false) {\n window.scrollTo(0, 0);\n }\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n },\n [],\n );\n\n const back = useCallback(() => {\n window.history.back();\n }, []);\n\n const reload = useCallback(() => {\n window.location.reload();\n }, []);\n\n const prefetch = useCallback(async (url: string): Promise<void> => {\n // Inject a <link rel=\"prefetch\"> for the target page\n if (typeof document !== \"undefined\") {\n const link = document.createElement(\"link\");\n link.rel = \"prefetch\";\n link.href = url;\n link.as = \"document\";\n document.head.appendChild(link);\n }\n }, []);\n\n const router = useMemo(\n (): NextRouter => buildRouterValue(pathname, query, asPath, {\n push,\n replace,\n back,\n reload,\n prefetch,\n beforePopState: (cb: BeforePopStateCallback) => { _beforePopStateCb = cb; },\n }),\n [pathname, query, asPath, push, replace, back, reload, prefetch],\n );\n\n return router;\n}\n\n// beforePopState callback: called before handling browser back/forward.\n// If it returns false, the navigation is cancelled.\nlet _beforePopStateCb: BeforePopStateCallback | undefined;\n\n// Module-level popstate listener: handles browser back/forward by re-rendering\n// the React root with the page at the new URL. This runs regardless of whether\n// any component calls useRouter().\nif (typeof window !== \"undefined\") {\n window.addEventListener(\"popstate\", (e: PopStateEvent) => {\n const browserUrl = window.location.pathname + window.location.search;\n const appUrl = stripBasePath(window.location.pathname) + window.location.search;\n\n // Check beforePopState callback\n if (_beforePopStateCb !== undefined) {\n const shouldContinue = (_beforePopStateCb as BeforePopStateCallback)({ url: appUrl, as: appUrl, options: { shallow: false } });\n if (!shouldContinue) return;\n }\n\n routerEvents.emit(\"routeChangeStart\", appUrl);\n void navigateClient(browserUrl).then(() => {\n routerEvents.emit(\"routeChangeComplete\", appUrl);\n restoreScrollPosition(e.state);\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n });\n });\n}\n\n/**\n * Wrap a React element in a RouterContext.Provider so that\n * next/compat/router's useRouter() returns the real Pages Router value.\n *\n * This is a plain function, NOT a React component — it builds the router\n * value object directly from the current SSR context (server) or\n * window.location + Router singleton (client), avoiding duplicate state\n * that a hook-based component would create.\n */\nexport function wrapWithRouterContext(element: ReactElement): ReactElement {\n const { pathname, query, asPath } = getPathnameAndQuery();\n\n const routerValue = buildRouterValue(pathname, query, asPath, {\n push: Router.push,\n replace: Router.replace,\n back: Router.back,\n reload: Router.reload,\n prefetch: Router.prefetch,\n beforePopState: Router.beforePopState,\n });\n\n return createElement(RouterContext.Provider, { value: routerValue }, element) as ReactElement;\n}\n\n// Also export a default Router singleton for `import Router from 'next/router'`\nconst Router = {\n push: async (url: string | UrlObject, _as?: string, options?: TransitionOptions) => {\n const resolved = applyNavigationLocale(resolveUrl(url), options?.locale);\n\n // External URLs\n if (isExternalUrl(resolved)) {\n window.location.assign(resolved);\n return true;\n }\n\n // Hash-only change\n if (isHashOnlyChange(resolved)) {\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n window.history.pushState({}, \"\", resolved.startsWith(\"#\") ? resolved : withBasePath(resolved));\n scrollToHash(hash);\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n }\n\n saveScrollPosition();\n const full = withBasePath(resolved);\n routerEvents.emit(\"routeChangeStart\", resolved);\n window.history.pushState({}, \"\", full);\n if (!options?.shallow) {\n await navigateClient(full);\n }\n routerEvents.emit(\"routeChangeComplete\", resolved);\n\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n if (hash) {\n scrollToHash(hash);\n } else if (options?.scroll !== false) {\n window.scrollTo(0, 0);\n }\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n },\n replace: async (url: string | UrlObject, _as?: string, options?: TransitionOptions) => {\n const resolved = applyNavigationLocale(resolveUrl(url), options?.locale);\n\n // External URLs\n if (isExternalUrl(resolved)) {\n window.location.replace(resolved);\n return true;\n }\n\n // Hash-only change\n if (isHashOnlyChange(resolved)) {\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n window.history.replaceState({}, \"\", resolved.startsWith(\"#\") ? resolved : withBasePath(resolved));\n scrollToHash(hash);\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n }\n\n const full = withBasePath(resolved);\n routerEvents.emit(\"routeChangeStart\", resolved);\n window.history.replaceState({}, \"\", full);\n if (!options?.shallow) {\n await navigateClient(full);\n }\n routerEvents.emit(\"routeChangeComplete\", resolved);\n\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n if (hash) {\n scrollToHash(hash);\n } else if (options?.scroll !== false) {\n window.scrollTo(0, 0);\n }\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n },\n back: () => window.history.back(),\n reload: () => window.location.reload(),\n prefetch: async (url: string) => {\n if (typeof document !== \"undefined\") {\n const link = document.createElement(\"link\");\n link.rel = \"prefetch\";\n link.href = url;\n link.as = \"document\";\n document.head.appendChild(link);\n }\n },\n beforePopState: (cb: BeforePopStateCallback) => {\n _beforePopStateCb = cb;\n },\n events: routerEvents,\n};\n\nexport default Router;\n"]}
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/shims/router.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * next/router shim\n *\n * Provides useRouter() hook and Router singleton for Pages Router.\n * Backed by the browser History API. Supports client-side navigation\n * by fetching new page data and re-rendering the React root.\n */\nimport { useState, useEffect, useCallback, useMemo, createElement, type ReactElement } from \"react\";\nimport { RouterContext } from \"./internal/router-context.js\";\nimport { isValidModulePath } from \"../client/validate-module-path.js\";\nimport { toSameOriginPath } from \"./url-utils.js\";\n\n/** basePath from next.config.js, injected by the plugin at build time */\nconst __basePath: string = process.env.__NEXT_ROUTER_BASEPATH ?? \"\";\n\n/** Prepend basePath to a path for browser URLs / fetches */\nfunction withBasePath(p: string): string {\n if (!__basePath) return p;\n return __basePath + p;\n}\n\n/** Strip basePath prefix from a browser pathname */\nfunction stripBasePath(p: string): string {\n if (!__basePath) return p;\n if (p.startsWith(__basePath)) return p.slice(__basePath.length) || \"/\";\n return p;\n}\n\ntype BeforePopStateCallback = (state: { url: string; as: string; options: { shallow: boolean } }) => boolean;\n\ninterface NextRouter {\n /** Current pathname */\n pathname: string;\n /** Current route pattern (e.g., \"/posts/[id]\") */\n route: string;\n /** Query parameters */\n query: Record<string, string | string[]>;\n /** Full URL including query string */\n asPath: string;\n /** Base path */\n basePath: string;\n /** Current locale */\n locale?: string;\n /** Available locales */\n locales?: string[];\n /** Default locale */\n defaultLocale?: string;\n /** Whether the router is ready */\n isReady: boolean;\n /** Whether this is a preview */\n isPreview: boolean;\n /** Whether this is a fallback page */\n isFallback: boolean;\n\n /** Navigate to a new URL */\n push(url: string | UrlObject, as?: string, options?: TransitionOptions): Promise<boolean>;\n /** Replace current URL */\n replace(url: string | UrlObject, as?: string, options?: TransitionOptions): Promise<boolean>;\n /** Go back */\n back(): void;\n /** Reload the page */\n reload(): void;\n /** Prefetch a page (injects <link rel=\"prefetch\">) */\n prefetch(url: string): Promise<void>;\n /** Register a callback to run before popstate navigation */\n beforePopState(cb: BeforePopStateCallback): void;\n /** Listen for route changes */\n events: RouterEvents;\n}\n\ninterface UrlObject {\n pathname?: string;\n query?: Record<string, string>;\n}\n\ninterface TransitionOptions {\n shallow?: boolean;\n scroll?: boolean;\n locale?: string;\n}\n\n// Route event handler types (used by consumers via router.events)\ntype _RouteChangeHandler = (url: string) => void;\ntype _RouteErrorHandler = (err: Error, url: string) => void;\n\ninterface RouterEvents {\n on(event: string, handler: (...args: unknown[]) => void): void;\n off(event: string, handler: (...args: unknown[]) => void): void;\n emit(event: string, ...args: unknown[]): void;\n}\n\nfunction createRouterEvents(): RouterEvents {\n const listeners = new Map<string, Set<(...args: unknown[]) => void>>();\n\n return {\n on(event: string, handler: (...args: unknown[]) => void) {\n if (!listeners.has(event)) listeners.set(event, new Set());\n listeners.get(event)!.add(handler);\n },\n off(event: string, handler: (...args: unknown[]) => void) {\n listeners.get(event)?.delete(handler);\n },\n emit(event: string, ...args: unknown[]) {\n listeners.get(event)?.forEach((handler) => handler(...args));\n },\n };\n}\n\n// Singleton events instance\nconst routerEvents = createRouterEvents();\n\nfunction resolveUrl(url: string | UrlObject): string {\n if (typeof url === \"string\") return url;\n let result = url.pathname ?? \"/\";\n if (url.query) {\n const params = new URLSearchParams(url.query);\n result += `?${params.toString()}`;\n }\n return result;\n}\n\n/**\n * Apply locale prefix to a URL for client-side navigation.\n * Same logic as Link's applyLocaleToHref but reads from window globals.\n */\nexport function applyNavigationLocale(url: string, locale?: string): string {\n if (!locale || typeof window === \"undefined\") return url;\n const defaultLocale = window.__VINEXT_DEFAULT_LOCALE__;\n // Default locale doesn't get a prefix\n if (locale === defaultLocale) return url;\n // Don't double-prefix\n if (url.startsWith(`/${locale}/`) || url === `/${locale}`) return url;\n return `/${locale}${url.startsWith(\"/\") ? url : `/${url}`}`;\n}\n\n/** Check if a URL is external (any URL scheme per RFC 3986, or protocol-relative) */\nexport function isExternalUrl(url: string): boolean {\n return /^[a-z][a-z0-9+.-]*:/i.test(url) || url.startsWith(\"//\");\n}\n\n/** Check if a href is only a hash change relative to the current URL */\nexport function isHashOnlyChange(href: string): boolean {\n if (href.startsWith(\"#\")) return true;\n if (typeof window === \"undefined\") return false;\n try {\n const current = new URL(window.location.href);\n const next = new URL(href, window.location.href);\n return current.pathname === next.pathname && current.search === next.search && next.hash !== \"\";\n } catch {\n return false;\n }\n}\n\n/** Scroll to hash target element, or top if no hash */\nfunction scrollToHash(hash: string): void {\n if (!hash || hash === \"#\") {\n window.scrollTo(0, 0);\n return;\n }\n const el = document.getElementById(hash.slice(1));\n if (el) el.scrollIntoView({ behavior: \"auto\" });\n}\n\n/** Save current scroll position into history state for back/forward restoration */\nfunction saveScrollPosition(): void {\n const state = window.history.state ?? {};\n window.history.replaceState(\n { ...state, __vinext_scrollX: window.scrollX, __vinext_scrollY: window.scrollY },\n \"\",\n );\n}\n\n/** Restore scroll position from history state */\nfunction restoreScrollPosition(state: unknown): void {\n if (state && typeof state === \"object\" && \"__vinext_scrollY\" in state) {\n const { __vinext_scrollX: x, __vinext_scrollY: y } = state as {\n __vinext_scrollX: number;\n __vinext_scrollY: number;\n };\n requestAnimationFrame(() => window.scrollTo(x, y));\n }\n}\n\n/**\n * SSR context - set by the dev server before rendering each page.\n */\ninterface SSRContext {\n pathname: string;\n query: Record<string, string | string[]>;\n asPath: string;\n locale?: string;\n locales?: string[];\n defaultLocale?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Server-side SSR state uses a registration pattern so this module can be\n// bundled for the browser. The ALS-backed implementation lives in\n// router-state.ts (server-only) and registers itself on import.\n// ---------------------------------------------------------------------------\n\nlet _ssrContext: SSRContext | null = null;\n\nlet _getSSRContext = (): SSRContext | null => _ssrContext;\nlet _setSSRContextImpl = (ctx: SSRContext | null): void => { _ssrContext = ctx; };\n\n/**\n * Register ALS-backed state accessors. Called by router-state.ts on import.\n * @internal\n */\nexport function _registerRouterStateAccessors(accessors: {\n getSSRContext: () => SSRContext | null;\n setSSRContext: (ctx: SSRContext | null) => void;\n}): void {\n _getSSRContext = accessors.getSSRContext;\n _setSSRContextImpl = accessors.setSSRContext;\n}\n\nexport function setSSRContext(ctx: SSRContext | null): void {\n _setSSRContextImpl(ctx);\n}\n\n/**\n * Extract param names from a Next.js route pattern.\n * E.g., \"/posts/[id]\" → [\"id\"], \"/docs/[...slug]\" → [\"slug\"],\n * \"/shop/[[...path]]\" → [\"path\"], \"/blog/[year]/[month]\" → [\"year\", \"month\"]\n * Also handles internal format: \"/posts/:id\" → [\"id\"], \"/docs/:slug+\" → [\"slug\"]\n */\nfunction extractRouteParamNames(pattern: string): string[] {\n const names: string[] = [];\n // Match Next.js bracket format: [id], [...slug], [[...slug]]\n const bracketMatches = pattern.matchAll(/\\[{1,2}(?:\\.\\.\\.)?([\\w-]+)\\]{1,2}/g);\n for (const m of bracketMatches) {\n names.push(m[1]);\n }\n if (names.length > 0) return names;\n // Fallback: match internal :param format\n const colonMatches = pattern.matchAll(/:([\\w-]+)[+*]?/g);\n for (const m of colonMatches) {\n names.push(m[1]);\n }\n return names;\n}\n\nfunction getPathnameAndQuery(): {\n pathname: string;\n query: Record<string, string>;\n asPath: string;\n} {\n if (typeof window === \"undefined\") {\n const _ssrCtx = _getSSRContext();\n if (_ssrCtx) {\n const query: Record<string, string> = {};\n for (const [key, value] of Object.entries(_ssrCtx.query)) {\n query[key] = Array.isArray(value) ? value.join(\",\") : value;\n }\n return { pathname: _ssrCtx.pathname, query, asPath: _ssrCtx.asPath };\n }\n return { pathname: \"/\", query: {}, asPath: \"/\" };\n }\n const pathname = stripBasePath(window.location.pathname);\n const query: Record<string, string> = {};\n // Include dynamic route params from __NEXT_DATA__ (e.g., { id: \"42\" } from /posts/[id]).\n // Only include keys that are part of the route pattern (not stale query params).\n const nextData = window.__NEXT_DATA__;\n if (nextData && nextData.query && nextData.page) {\n const routeParamNames = extractRouteParamNames(nextData.page);\n for (const key of routeParamNames) {\n const value = nextData.query[key];\n if (typeof value === \"string\") {\n query[key] = value;\n } else if (Array.isArray(value)) {\n query[key] = value.join(\",\");\n }\n }\n }\n // URL search params always reflect the current URL\n const params = new URLSearchParams(window.location.search);\n for (const [key, value] of params) {\n query[key] = value;\n }\n const asPath = pathname + window.location.search;\n return { pathname, query, asPath };\n}\n\n/**\n * Perform client-side navigation: fetch the target page's HTML,\n * extract __NEXT_DATA__, and re-render the React root.\n */\nlet _navInProgress = false;\nasync function navigateClient(url: string): Promise<void> {\n if (typeof window === \"undefined\") return;\n\n const root = window.__VINEXT_ROOT__;\n if (!root) {\n // No React root yet — fall back to hard navigation\n window.location.href = url;\n return;\n }\n\n // Prevent re-entrant navigation (e.g., double popstate events)\n if (_navInProgress) return;\n _navInProgress = true;\n\n try {\n // Fetch the target page's SSR HTML\n const res = await fetch(url, { headers: { Accept: \"text/html\" } });\n if (!res.ok) {\n window.location.href = url;\n return;\n }\n\n const html = await res.text();\n\n // Extract __NEXT_DATA__ from the HTML\n const match = html.match(/<script>window\\.__NEXT_DATA__\\s*=\\s*(.*?)<\\/script>/);\n if (!match) {\n window.location.href = url;\n return;\n }\n\n const nextData = JSON.parse(match[1]);\n const { pageProps } = nextData.props;\n window.__NEXT_DATA__ = nextData;\n\n // Get the page module URL from __NEXT_DATA__.__vinext (preferred),\n // or fall back to parsing the hydration script\n let pageModuleUrl: string | undefined =\n nextData.__vinext?.pageModuleUrl;\n\n if (!pageModuleUrl) {\n // Legacy fallback: try to find the module URL in the inline script\n const moduleMatch = html.match(/import\\(\"([^\"]+)\"\\);\\s*\\n\\s*const PageComponent/);\n const altMatch = html.match(/await import\\(\"([^\"]+pages\\/[^\"]+)\"\\)/);\n pageModuleUrl = moduleMatch?.[1] ?? altMatch?.[1] ?? undefined;\n }\n\n if (!pageModuleUrl) {\n window.location.href = url;\n return;\n }\n\n // Validate the module URL before importing — defense-in-depth against\n // unexpected __NEXT_DATA__ or malformed HTML responses\n if (!isValidModulePath(pageModuleUrl)) {\n console.error(\"[vinext] Blocked import of invalid page module path:\", pageModuleUrl);\n window.location.href = url;\n return;\n }\n\n // Dynamically import the new page module\n const pageModule = await import(/* @vite-ignore */ pageModuleUrl);\n const PageComponent = pageModule.default;\n\n if (!PageComponent) {\n window.location.href = url;\n return;\n }\n\n // Import React for createElement\n const React = (await import(\"react\")).default;\n\n // Re-render with the new page, loading _app if needed\n let AppComponent = window.__VINEXT_APP__;\n const appModuleUrl: string | undefined =\n nextData.__vinext?.appModuleUrl;\n\n if (!AppComponent && appModuleUrl) {\n if (!isValidModulePath(appModuleUrl)) {\n console.error(\"[vinext] Blocked import of invalid app module path:\", appModuleUrl);\n } else {\n try {\n const appModule = await import(/* @vite-ignore */ appModuleUrl);\n AppComponent = appModule.default;\n window.__VINEXT_APP__ = AppComponent;\n } catch {\n // _app not available — continue without it\n }\n }\n }\n\n let element;\n if (AppComponent) {\n element = React.createElement(AppComponent, {\n Component: PageComponent,\n pageProps,\n });\n } else {\n element = React.createElement(PageComponent, pageProps);\n }\n\n // Wrap with RouterContext.Provider so next/compat/router works\n element = wrapWithRouterContext(element);\n\n root.render(element);\n } catch (err) {\n console.error(\"[vinext] Client navigation failed:\", err);\n routerEvents.emit(\"routeChangeError\", err, url);\n window.location.href = url;\n } finally {\n _navInProgress = false;\n }\n}\n\n/**\n * Build the full router value object from the current pathname, query, asPath,\n * and a set of navigation methods. Shared by useRouter() (which passes\n * hook-derived callbacks) and wrapWithRouterContext() (which passes the Router\n * singleton methods) so the shape stays in sync.\n */\nfunction buildRouterValue(\n pathname: string,\n query: Record<string, string | string[]>,\n asPath: string,\n methods: {\n push: NextRouter[\"push\"];\n replace: NextRouter[\"replace\"];\n back: NextRouter[\"back\"];\n reload: NextRouter[\"reload\"];\n prefetch: NextRouter[\"prefetch\"];\n beforePopState: NextRouter[\"beforePopState\"];\n },\n): NextRouter {\n const _ssrState = _getSSRContext();\n const locale = typeof window === \"undefined\"\n ? _ssrState?.locale\n : window.__VINEXT_LOCALE__;\n const locales = typeof window === \"undefined\"\n ? _ssrState?.locales\n : window.__VINEXT_LOCALES__;\n const defaultLocale = typeof window === \"undefined\"\n ? _ssrState?.defaultLocale\n : window.__VINEXT_DEFAULT_LOCALE__;\n\n const route = typeof window !== \"undefined\"\n ? (window.__NEXT_DATA__?.page ?? pathname)\n : pathname;\n\n return {\n pathname,\n route,\n query,\n asPath,\n basePath: __basePath,\n locale,\n locales,\n defaultLocale,\n isReady: true,\n isPreview: false,\n isFallback: typeof window !== \"undefined\" && window.__NEXT_DATA__?.isFallback === true,\n ...methods,\n events: routerEvents,\n };\n}\n\n/**\n * useRouter hook - Pages Router compatible.\n */\nexport function useRouter(): NextRouter {\n const [{ pathname, query, asPath }, setState] = useState(getPathnameAndQuery);\n\n useEffect(() => {\n const onPopState = (e: PopStateEvent) => {\n setState(getPathnameAndQuery());\n // Re-render with the new page on back/forward navigation\n void navigateClient(window.location.pathname + window.location.search).then(() => {\n restoreScrollPosition(e.state);\n });\n };\n window.addEventListener(\"popstate\", onPopState);\n return () => window.removeEventListener(\"popstate\", onPopState);\n }, []);\n\n // Listen for custom navigation events from Link component\n useEffect(() => {\n const onNavigate = ((_e: CustomEvent) => {\n setState(getPathnameAndQuery());\n }) as EventListener;\n window.addEventListener(\"vinext:navigate\", onNavigate);\n return () => window.removeEventListener(\"vinext:navigate\", onNavigate);\n }, []);\n\n const push = useCallback(\n async (url: string | UrlObject, _as?: string, options?: TransitionOptions): Promise<boolean> => {\n let resolved = applyNavigationLocale(resolveUrl(url), options?.locale);\n\n // External URLs — delegate to browser (unless same-origin)\n if (isExternalUrl(resolved)) {\n const localPath = toSameOriginPath(resolved);\n if (localPath == null) {\n window.location.assign(resolved);\n return true;\n }\n resolved = localPath;\n }\n\n // Hash-only change — no page fetch needed\n if (isHashOnlyChange(resolved)) {\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n window.history.pushState({}, \"\", resolved.startsWith(\"#\") ? resolved : withBasePath(resolved));\n scrollToHash(hash);\n setState(getPathnameAndQuery());\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n }\n\n saveScrollPosition();\n const full = withBasePath(resolved);\n routerEvents.emit(\"routeChangeStart\", resolved);\n window.history.pushState({}, \"\", full);\n if (!options?.shallow) {\n await navigateClient(full);\n }\n setState(getPathnameAndQuery());\n routerEvents.emit(\"routeChangeComplete\", resolved);\n\n // Scroll: handle hash target, else scroll to top unless scroll:false\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n if (hash) {\n scrollToHash(hash);\n } else if (options?.scroll !== false) {\n window.scrollTo(0, 0);\n }\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n },\n [],\n );\n\n const replace = useCallback(\n async (url: string | UrlObject, _as?: string, options?: TransitionOptions): Promise<boolean> => {\n let resolved = applyNavigationLocale(resolveUrl(url), options?.locale);\n\n // External URLs — delegate to browser (unless same-origin)\n if (isExternalUrl(resolved)) {\n const localPath = toSameOriginPath(resolved);\n if (localPath == null) {\n window.location.replace(resolved);\n return true;\n }\n resolved = localPath;\n }\n\n // Hash-only change — no page fetch needed\n if (isHashOnlyChange(resolved)) {\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n window.history.replaceState({}, \"\", resolved.startsWith(\"#\") ? resolved : withBasePath(resolved));\n scrollToHash(hash);\n setState(getPathnameAndQuery());\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n }\n\n const full = withBasePath(resolved);\n routerEvents.emit(\"routeChangeStart\", resolved);\n window.history.replaceState({}, \"\", full);\n if (!options?.shallow) {\n await navigateClient(full);\n }\n setState(getPathnameAndQuery());\n routerEvents.emit(\"routeChangeComplete\", resolved);\n\n // Scroll: handle hash target, else scroll to top unless scroll:false\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n if (hash) {\n scrollToHash(hash);\n } else if (options?.scroll !== false) {\n window.scrollTo(0, 0);\n }\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n },\n [],\n );\n\n const back = useCallback(() => {\n window.history.back();\n }, []);\n\n const reload = useCallback(() => {\n window.location.reload();\n }, []);\n\n const prefetch = useCallback(async (url: string): Promise<void> => {\n // Inject a <link rel=\"prefetch\"> for the target page\n if (typeof document !== \"undefined\") {\n const link = document.createElement(\"link\");\n link.rel = \"prefetch\";\n link.href = url;\n link.as = \"document\";\n document.head.appendChild(link);\n }\n }, []);\n\n const router = useMemo(\n (): NextRouter => buildRouterValue(pathname, query, asPath, {\n push,\n replace,\n back,\n reload,\n prefetch,\n beforePopState: (cb: BeforePopStateCallback) => { _beforePopStateCb = cb; },\n }),\n [pathname, query, asPath, push, replace, back, reload, prefetch],\n );\n\n return router;\n}\n\n// beforePopState callback: called before handling browser back/forward.\n// If it returns false, the navigation is cancelled.\nlet _beforePopStateCb: BeforePopStateCallback | undefined;\n\n// Module-level popstate listener: handles browser back/forward by re-rendering\n// the React root with the page at the new URL. This runs regardless of whether\n// any component calls useRouter().\nif (typeof window !== \"undefined\") {\n window.addEventListener(\"popstate\", (e: PopStateEvent) => {\n const browserUrl = window.location.pathname + window.location.search;\n const appUrl = stripBasePath(window.location.pathname) + window.location.search;\n\n // Check beforePopState callback\n if (_beforePopStateCb !== undefined) {\n const shouldContinue = (_beforePopStateCb as BeforePopStateCallback)({ url: appUrl, as: appUrl, options: { shallow: false } });\n if (!shouldContinue) return;\n }\n\n routerEvents.emit(\"routeChangeStart\", appUrl);\n void navigateClient(browserUrl).then(() => {\n routerEvents.emit(\"routeChangeComplete\", appUrl);\n restoreScrollPosition(e.state);\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n });\n });\n}\n\n/**\n * Wrap a React element in a RouterContext.Provider so that\n * next/compat/router's useRouter() returns the real Pages Router value.\n *\n * This is a plain function, NOT a React component — it builds the router\n * value object directly from the current SSR context (server) or\n * window.location + Router singleton (client), avoiding duplicate state\n * that a hook-based component would create.\n */\nexport function wrapWithRouterContext(element: ReactElement): ReactElement {\n const { pathname, query, asPath } = getPathnameAndQuery();\n\n const routerValue = buildRouterValue(pathname, query, asPath, {\n push: Router.push,\n replace: Router.replace,\n back: Router.back,\n reload: Router.reload,\n prefetch: Router.prefetch,\n beforePopState: Router.beforePopState,\n });\n\n return createElement(RouterContext.Provider, { value: routerValue }, element) as ReactElement;\n}\n\n// Also export a default Router singleton for `import Router from 'next/router'`\nconst Router = {\n push: async (url: string | UrlObject, _as?: string, options?: TransitionOptions) => {\n let resolved = applyNavigationLocale(resolveUrl(url), options?.locale);\n\n // External URLs (unless same-origin)\n if (isExternalUrl(resolved)) {\n const localPath = toSameOriginPath(resolved);\n if (localPath == null) {\n window.location.assign(resolved);\n return true;\n }\n resolved = localPath;\n }\n\n // Hash-only change\n if (isHashOnlyChange(resolved)) {\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n window.history.pushState({}, \"\", resolved.startsWith(\"#\") ? resolved : withBasePath(resolved));\n scrollToHash(hash);\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n }\n\n saveScrollPosition();\n const full = withBasePath(resolved);\n routerEvents.emit(\"routeChangeStart\", resolved);\n window.history.pushState({}, \"\", full);\n if (!options?.shallow) {\n await navigateClient(full);\n }\n routerEvents.emit(\"routeChangeComplete\", resolved);\n\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n if (hash) {\n scrollToHash(hash);\n } else if (options?.scroll !== false) {\n window.scrollTo(0, 0);\n }\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n },\n replace: async (url: string | UrlObject, _as?: string, options?: TransitionOptions) => {\n let resolved = applyNavigationLocale(resolveUrl(url), options?.locale);\n\n // External URLs (unless same-origin)\n if (isExternalUrl(resolved)) {\n const localPath = toSameOriginPath(resolved);\n if (localPath == null) {\n window.location.replace(resolved);\n return true;\n }\n resolved = localPath;\n }\n\n // Hash-only change\n if (isHashOnlyChange(resolved)) {\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n window.history.replaceState({}, \"\", resolved.startsWith(\"#\") ? resolved : withBasePath(resolved));\n scrollToHash(hash);\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n }\n\n const full = withBasePath(resolved);\n routerEvents.emit(\"routeChangeStart\", resolved);\n window.history.replaceState({}, \"\", full);\n if (!options?.shallow) {\n await navigateClient(full);\n }\n routerEvents.emit(\"routeChangeComplete\", resolved);\n\n const hash = resolved.includes(\"#\") ? resolved.slice(resolved.indexOf(\"#\")) : \"\";\n if (hash) {\n scrollToHash(hash);\n } else if (options?.scroll !== false) {\n window.scrollTo(0, 0);\n }\n window.dispatchEvent(new CustomEvent(\"vinext:navigate\"));\n return true;\n },\n back: () => window.history.back(),\n reload: () => window.location.reload(),\n prefetch: async (url: string) => {\n if (typeof document !== \"undefined\") {\n const link = document.createElement(\"link\");\n link.rel = \"prefetch\";\n link.href = url;\n link.as = \"document\";\n document.head.appendChild(link);\n }\n },\n beforePopState: (cb: BeforePopStateCallback) => {\n _beforePopStateCb = cb;\n },\n events: routerEvents,\n};\n\nexport default Router;\n"]}
|
package/dist/shims/server.d.ts
CHANGED
|
@@ -131,6 +131,8 @@ export declare class NextFetchEvent {
|
|
|
131
131
|
page: string;
|
|
132
132
|
});
|
|
133
133
|
waitUntil(promise: Promise<unknown>): void;
|
|
134
|
+
/** Drain all waitUntil promises. Returns a single promise that settles when all are done. */
|
|
135
|
+
drainWaitUntil(): Promise<PromiseSettledResult<unknown>[]>;
|
|
134
136
|
}
|
|
135
137
|
/**
|
|
136
138
|
* Parse user agent string. Minimal implementation — for full UA parsing,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/shims/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAiB;gBAErB,KAAK,EAAE,GAAG,GAAG,WAAW,EAAE,IAAI,CAAC,EAAE,WAAW;IAyBxD,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,OAAO,IAAI,cAAc,CAE5B;IAED;;;OAGG;IACH,IAAI,EAAE,IAAI,MAAM,GAAG,SAAS,CAK3B;IAED;;;OAGG;IACH,IAAI,GAAG,IAAI;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAWjH;CACF;AAMD,qBAAa,YAAY,CAAC,KAAK,GAAG,OAAO,CAAE,SAAQ,QAAQ;IACzD,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,YAAY;IAKvD,IAAI,OAAO,IAAI,eAAe,CAE7B;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC;IAWlF;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,YAAY;IAQ9E;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,sBAAsB,GAAG,YAAY;IAOtF;;;OAGG;IACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,sBAAsB,GAAG,YAAY;CAWzD;AAQD,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAM;gBAEN,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG;IAIpD,IAAI,IAAI,IAAI,MAAM,CAA2B;IAC7C,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAA6B;IAEnD,IAAI,MAAM,IAAI,MAAM,CAA6B;IAEjD,IAAI,QAAQ,IAAI,MAAM,CAA+B;IACrD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAiC;IAE3D,IAAI,QAAQ,IAAI,MAAM,CAA+B;IACrD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAiC;IAE3D,IAAI,QAAQ,IAAI,MAAM,CAA+B;IACrD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAiC;IAE3D,IAAI,IAAI,IAAI,MAAM,CAA2B;IAC7C,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAA6B;IAEnD,IAAI,QAAQ,IAAI,MAAM,CAA+B;IACrD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAiC;IAE3D,IAAI,IAAI,IAAI,MAAM,CAA2B;IAC7C,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAA6B;IAEnD,IAAI,QAAQ,IAAI,MAAM,CAA+B;IACrD,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAiC;IAE3D,IAAI,MAAM,IAAI,MAAM,CAA6B;IACjD,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAA+B;IAEvD,IAAI,YAAY,IAAI,eAAe,CAAmC;IAEtE,IAAI,IAAI,IAAI,MAAM,CAA2B;IAC7C,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAA6B;IAEnD,KAAK,IAAI,OAAO;IAIhB,QAAQ,IAAI,MAAM;CAGnB;AAMD,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAU;gBAEd,OAAO,EAAE,OAAO;IAI5B,OAAO,CAAC,MAAM;IAad,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAK1C,MAAM,IAAI,WAAW,EAAE;IAIvB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAI7D;AAuBD,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAU;gBAEd,OAAO,EAAE,OAAO;IAI5B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI;IAoB/D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAgB1C,MAAM,IAAI,WAAW,EAAE;IAevB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CAc7D;AAED,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CACtC;AAMD,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC;AAErF,MAAM,MAAM,cAAc,GAAG,CAC3B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,cAAc,KAClB,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAE1D;;;GAGG;AACH,qBAAa,cAAc;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,kBAAkB,CAA0B;gBAExC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAIpC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/shims/server.ts"],"names":[],"mappings":"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"}
|
package/dist/shims/server.js
CHANGED
|
@@ -330,6 +330,10 @@ export class NextFetchEvent {
|
|
|
330
330
|
waitUntil(promise) {
|
|
331
331
|
this._waitUntilPromises.push(promise);
|
|
332
332
|
}
|
|
333
|
+
/** Drain all waitUntil promises. Returns a single promise that settles when all are done. */
|
|
334
|
+
drainWaitUntil() {
|
|
335
|
+
return Promise.allSettled(this._waitUntilPromises);
|
|
336
|
+
}
|
|
333
337
|
}
|
|
334
338
|
// ---------------------------------------------------------------------------
|
|
335
339
|
// Utility exports
|
package/dist/shims/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/shims/server.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * next/server shim\n *\n * Provides NextRequest, NextResponse, and related types that work with\n * standard Web APIs (Request/Response). This means they work on Node,\n * Cloudflare Workers, Deno, and any WinterCG-compatible runtime.\n *\n * This is a pragmatic subset — we implement the most commonly used APIs\n * rather than bug-for-bug parity with Next.js internals.\n */\n\n// ---------------------------------------------------------------------------\n// NextRequest\n// ---------------------------------------------------------------------------\n\nexport class NextRequest extends Request {\n private _nextUrl: NextURL;\n private _cookies: RequestCookies;\n\n constructor(input: URL | RequestInfo, init?: RequestInit) {\n // Handle the case where input is a Request object - we need to extract URL and init\n // to avoid Node.js undici issues with passing Request objects directly to super()\n if (input instanceof Request) {\n const req = input;\n super(req.url, {\n method: req.method,\n headers: req.headers,\n body: req.body,\n // @ts-expect-error - duplex is not in RequestInit type but needed for streams\n duplex: req.body ? \"half\" : undefined,\n ...init,\n });\n } else {\n super(input, init);\n }\n const url = typeof input === \"string\"\n ? new URL(input, \"http://localhost\")\n : input instanceof URL\n ? input\n : new URL(input.url, \"http://localhost\");\n this._nextUrl = new NextURL(url);\n this._cookies = new RequestCookies(this.headers);\n }\n\n get nextUrl(): NextURL {\n return this._nextUrl;\n }\n\n get cookies(): RequestCookies {\n return this._cookies;\n }\n\n /**\n * Client IP address. Prefers Cloudflare's trusted CF-Connecting-IP header\n * over the spoofable X-Forwarded-For. Returns undefined if unavailable.\n */\n get ip(): string | undefined {\n return this.headers.get(\"cf-connecting-ip\")\n ?? this.headers.get(\"x-real-ip\")\n ?? this.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim()\n ?? undefined;\n }\n\n /**\n * Geolocation data. Platform-dependent (e.g., Cloudflare, Vercel).\n * Returns undefined if not available.\n */\n get geo(): { city?: string; country?: string; region?: string; latitude?: string; longitude?: string } | undefined {\n // Check Cloudflare-style headers, Vercel-style headers\n const country = this.headers.get(\"cf-ipcountry\") ?? this.headers.get(\"x-vercel-ip-country\") ?? undefined;\n if (!country) return undefined;\n return {\n country,\n city: this.headers.get(\"cf-ipcity\") ?? this.headers.get(\"x-vercel-ip-city\") ?? undefined,\n region: this.headers.get(\"cf-region\") ?? this.headers.get(\"x-vercel-ip-country-region\") ?? undefined,\n latitude: this.headers.get(\"cf-iplatitude\") ?? this.headers.get(\"x-vercel-ip-latitude\") ?? undefined,\n longitude: this.headers.get(\"cf-iplongitude\") ?? this.headers.get(\"x-vercel-ip-longitude\") ?? undefined,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// NextResponse\n// ---------------------------------------------------------------------------\n\nexport class NextResponse<_Body = unknown> extends Response {\n private _cookies: ResponseCookies;\n\n constructor(body?: BodyInit | null, init?: ResponseInit) {\n super(body, init);\n this._cookies = new ResponseCookies(this.headers);\n }\n\n get cookies(): ResponseCookies {\n return this._cookies;\n }\n\n /**\n * Create a JSON response.\n */\n static json<JsonBody>(body: JsonBody, init?: ResponseInit): NextResponse<JsonBody> {\n const headers = new Headers(init?.headers);\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n return new NextResponse(JSON.stringify(body), {\n ...init,\n headers,\n }) as NextResponse<JsonBody>;\n }\n\n /**\n * Create a redirect response.\n */\n static redirect(url: string | URL, init?: number | ResponseInit): NextResponse {\n const status = typeof init === \"number\" ? init : init?.status ?? 307;\n const destination = typeof url === \"string\" ? url : url.toString();\n const headers = new Headers(typeof init === \"object\" ? init?.headers : undefined);\n headers.set(\"Location\", destination);\n return new NextResponse(null, { status, headers });\n }\n\n /**\n * Create a rewrite response (middleware pattern).\n * Sets the x-middleware-rewrite header.\n */\n static rewrite(destination: string | URL, init?: MiddlewareResponseInit): NextResponse {\n const url = typeof destination === \"string\" ? destination : destination.toString();\n const headers = new Headers(init?.headers);\n headers.set(\"x-middleware-rewrite\", url);\n return new NextResponse(null, { ...init, headers });\n }\n\n /**\n * Continue to the next handler (middleware pattern).\n * Sets the x-middleware-next header.\n */\n static next(init?: MiddlewareResponseInit): NextResponse {\n const headers = new Headers(init?.headers);\n headers.set(\"x-middleware-next\", \"1\");\n // Forward request headers if provided\n if (init?.request?.headers) {\n for (const [key, value] of init.request.headers.entries()) {\n headers.set(`x-middleware-request-${key}`, value);\n }\n }\n return new NextResponse(null, { ...init, headers });\n }\n}\n\n\n\n// ---------------------------------------------------------------------------\n// NextURL — lightweight URL wrapper with pathname helpers\n// ---------------------------------------------------------------------------\n\nexport class NextURL {\n private _url: URL;\n\n constructor(input: string | URL, base?: string | URL) {\n this._url = new URL(input.toString(), base);\n }\n\n get href(): string { return this._url.href; }\n set href(value: string) { this._url.href = value; }\n\n get origin(): string { return this._url.origin; }\n\n get protocol(): string { return this._url.protocol; }\n set protocol(value: string) { this._url.protocol = value; }\n\n get username(): string { return this._url.username; }\n set username(value: string) { this._url.username = value; }\n\n get password(): string { return this._url.password; }\n set password(value: string) { this._url.password = value; }\n\n get host(): string { return this._url.host; }\n set host(value: string) { this._url.host = value; }\n\n get hostname(): string { return this._url.hostname; }\n set hostname(value: string) { this._url.hostname = value; }\n\n get port(): string { return this._url.port; }\n set port(value: string) { this._url.port = value; }\n\n get pathname(): string { return this._url.pathname; }\n set pathname(value: string) { this._url.pathname = value; }\n\n get search(): string { return this._url.search; }\n set search(value: string) { this._url.search = value; }\n\n get searchParams(): URLSearchParams { return this._url.searchParams; }\n\n get hash(): string { return this._url.hash; }\n set hash(value: string) { this._url.hash = value; }\n\n clone(): NextURL {\n return new NextURL(this._url.href);\n }\n\n toString(): string {\n return this._url.toString();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cookie helpers (minimal implementations)\n// ---------------------------------------------------------------------------\n\ninterface CookieEntry {\n name: string;\n value: string;\n}\n\nexport class RequestCookies {\n private _headers: Headers;\n\n constructor(headers: Headers) {\n this._headers = headers;\n }\n\n private _parse(): Map<string, string> {\n const map = new Map<string, string>();\n const cookie = this._headers.get(\"cookie\") ?? \"\";\n for (const part of cookie.split(\";\")) {\n const eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n const name = part.slice(0, eq).trim();\n const value = part.slice(eq + 1).trim();\n map.set(name, value);\n }\n return map;\n }\n\n get(name: string): CookieEntry | undefined {\n const value = this._parse().get(name);\n return value !== undefined ? { name, value } : undefined;\n }\n\n getAll(): CookieEntry[] {\n return [...this._parse().entries()].map(([name, value]) => ({ name, value }));\n }\n\n has(name: string): boolean {\n return this._parse().has(name);\n }\n\n [Symbol.iterator](): IterableIterator<[string, CookieEntry]> {\n const entries = this.getAll().map((c) => [c.name, c] as [string, CookieEntry]);\n return entries[Symbol.iterator]();\n }\n}\n\n/**\n * RFC 6265 §4.1.1: cookie-name is a token (RFC 2616 §2.2).\n * Allowed: any visible ASCII (0x21-0x7E) except separators: ()<>@,;:\\\"/[]?={}\n */\nconst VALID_COOKIE_NAME_RE = /^[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2E\\x30-\\x39\\x41-\\x5A\\x5E-\\x7A\\x7C\\x7E]+$/;\n\nfunction validateCookieName(name: string): void {\n if (!name || !VALID_COOKIE_NAME_RE.test(name)) {\n throw new Error(`Invalid cookie name: ${JSON.stringify(name)}`);\n }\n}\n\nfunction validateCookieAttributeValue(value: string, attributeName: string): void {\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if (code <= 0x1F || code === 0x7F || value[i] === \";\") {\n throw new Error(`Invalid cookie ${attributeName} value: ${JSON.stringify(value)}`);\n }\n }\n}\n\nexport class ResponseCookies {\n private _headers: Headers;\n\n constructor(headers: Headers) {\n this._headers = headers;\n }\n\n set(name: string, value: string, options?: CookieOptions): this {\n validateCookieName(name);\n const parts = [`${name}=${encodeURIComponent(value)}`];\n if (options?.path) {\n validateCookieAttributeValue(options.path, \"Path\");\n parts.push(`Path=${options.path}`);\n }\n if (options?.domain) {\n validateCookieAttributeValue(options.domain, \"Domain\");\n parts.push(`Domain=${options.domain}`);\n }\n if (options?.maxAge !== undefined) parts.push(`Max-Age=${options.maxAge}`);\n if (options?.expires) parts.push(`Expires=${options.expires.toUTCString()}`);\n if (options?.httpOnly) parts.push(\"HttpOnly\");\n if (options?.secure) parts.push(\"Secure\");\n if (options?.sameSite) parts.push(`SameSite=${options.sameSite}`);\n this._headers.append(\"Set-Cookie\", parts.join(\"; \"));\n return this;\n }\n\n get(name: string): CookieEntry | undefined {\n for (const header of this._headers.getSetCookie()) {\n const eq = header.indexOf(\"=\");\n if (eq === -1) continue;\n const cookieName = header.slice(0, eq);\n if (cookieName === name) {\n const semi = header.indexOf(\";\", eq);\n const raw = header.slice(eq + 1, semi === -1 ? undefined : semi);\n let value: string;\n try { value = decodeURIComponent(raw); } catch { value = raw; }\n return { name, value };\n }\n }\n return undefined;\n }\n\n getAll(): CookieEntry[] {\n const entries: CookieEntry[] = [];\n for (const header of this._headers.getSetCookie()) {\n const eq = header.indexOf(\"=\");\n if (eq === -1) continue;\n const cookieName = header.slice(0, eq);\n const semi = header.indexOf(\";\", eq);\n const raw = header.slice(eq + 1, semi === -1 ? undefined : semi);\n let value: string;\n try { value = decodeURIComponent(raw); } catch { value = raw; }\n entries.push({ name: cookieName, value });\n }\n return entries;\n }\n\n delete(name: string): this {\n this.set(name, \"\", { maxAge: 0, path: \"/\" });\n return this;\n }\n\n [Symbol.iterator](): IterableIterator<[string, CookieEntry]> {\n const entries: [string, CookieEntry][] = [];\n for (const header of this._headers.getSetCookie()) {\n const eq = header.indexOf(\"=\");\n if (eq === -1) continue;\n const cookieName = header.slice(0, eq);\n const semi = header.indexOf(\";\", eq);\n const raw = header.slice(eq + 1, semi === -1 ? undefined : semi);\n let value: string;\n try { value = decodeURIComponent(raw); } catch { value = raw; }\n entries.push([cookieName, { name: cookieName, value }]);\n }\n return entries[Symbol.iterator]();\n }\n}\n\ninterface CookieOptions {\n path?: string;\n domain?: string;\n maxAge?: number;\n expires?: Date;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface MiddlewareResponseInit extends ResponseInit {\n request?: {\n headers?: Headers;\n };\n}\n\nexport type NextMiddlewareResult = NextResponse | Response | null | undefined | void;\n\nexport type NextMiddleware = (\n request: NextRequest,\n event: NextFetchEvent,\n) => NextMiddlewareResult | Promise<NextMiddlewareResult>;\n\n/**\n * Minimal NextFetchEvent — extends FetchEvent where available,\n * otherwise provides the waitUntil pattern standalone.\n */\nexport class NextFetchEvent {\n sourcePage: string;\n private _waitUntilPromises: Promise<unknown>[] = [];\n\n constructor(params: { page: string }) {\n this.sourcePage = params.page;\n }\n\n waitUntil(promise: Promise<unknown>): void {\n this._waitUntilPromises.push(promise);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Utility exports\n// ---------------------------------------------------------------------------\n\n/**\n * Parse user agent string. Minimal implementation — for full UA parsing,\n * apps should use a dedicated library like `ua-parser-js`.\n */\nexport function userAgentFromString(ua: string | undefined): UserAgent {\n const input = ua ?? \"\";\n return {\n isBot: /bot|crawler|spider|crawling/i.test(input),\n ua: input,\n browser: {},\n device: {},\n engine: {},\n os: {},\n cpu: {},\n };\n}\n\nexport function userAgent({ headers }: { headers: Headers }): UserAgent {\n return userAgentFromString(headers.get(\"user-agent\") ?? undefined);\n}\n\nexport interface UserAgent {\n isBot: boolean;\n ua: string;\n browser: { name?: string; version?: string; major?: string };\n device: { model?: string; type?: string; vendor?: string };\n engine: { name?: string; version?: string };\n os: { name?: string; version?: string };\n cpu: { architecture?: string };\n}\n\n/**\n * after() — schedule work after the response is sent.\n * In a real server, this would use the platform's waitUntil.\n * Here we simply run it as a microtask (best-effort).\n */\nexport function after<T>(task: Promise<T> | (() => T | Promise<T>)): void {\n const promise = typeof task === \"function\" ? Promise.resolve().then(task) : task;\n promise.catch((err) => {\n console.error(\"[vinext] after() task failed:\", err);\n });\n}\n\n/**\n * connection() — signals that the response requires a live connection\n * (not a static/cached response). Opts the page out of ISR caching\n * and sets Cache-Control: no-store on the response.\n */\nexport async function connection(): Promise<void> {\n const { markDynamicUsage, throwIfInsideCacheScope } = await import(\"./headers.js\");\n throwIfInsideCacheScope(\"connection()\");\n markDynamicUsage();\n}\n\n/**\n * URLPattern re-export — used in middleware for route matching.\n * Available natively in Node 20+, Cloudflare Workers, Deno.\n * Falls back to urlpattern-polyfill if the global is not available.\n */\nexport const URLPattern: typeof globalThis.URLPattern =\n globalThis.URLPattern ??\n (() => {\n throw new Error(\n \"URLPattern is not available in this runtime. \" +\n \"Install the `urlpattern-polyfill` package or upgrade to Node 20+.\",\n );\n });\n"]}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/shims/server.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * next/server shim\n *\n * Provides NextRequest, NextResponse, and related types that work with\n * standard Web APIs (Request/Response). This means they work on Node,\n * Cloudflare Workers, Deno, and any WinterCG-compatible runtime.\n *\n * This is a pragmatic subset — we implement the most commonly used APIs\n * rather than bug-for-bug parity with Next.js internals.\n */\n\n// ---------------------------------------------------------------------------\n// NextRequest\n// ---------------------------------------------------------------------------\n\nexport class NextRequest extends Request {\n private _nextUrl: NextURL;\n private _cookies: RequestCookies;\n\n constructor(input: URL | RequestInfo, init?: RequestInit) {\n // Handle the case where input is a Request object - we need to extract URL and init\n // to avoid Node.js undici issues with passing Request objects directly to super()\n if (input instanceof Request) {\n const req = input;\n super(req.url, {\n method: req.method,\n headers: req.headers,\n body: req.body,\n // @ts-expect-error - duplex is not in RequestInit type but needed for streams\n duplex: req.body ? \"half\" : undefined,\n ...init,\n });\n } else {\n super(input, init);\n }\n const url = typeof input === \"string\"\n ? new URL(input, \"http://localhost\")\n : input instanceof URL\n ? input\n : new URL(input.url, \"http://localhost\");\n this._nextUrl = new NextURL(url);\n this._cookies = new RequestCookies(this.headers);\n }\n\n get nextUrl(): NextURL {\n return this._nextUrl;\n }\n\n get cookies(): RequestCookies {\n return this._cookies;\n }\n\n /**\n * Client IP address. Prefers Cloudflare's trusted CF-Connecting-IP header\n * over the spoofable X-Forwarded-For. Returns undefined if unavailable.\n */\n get ip(): string | undefined {\n return this.headers.get(\"cf-connecting-ip\")\n ?? this.headers.get(\"x-real-ip\")\n ?? this.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim()\n ?? undefined;\n }\n\n /**\n * Geolocation data. Platform-dependent (e.g., Cloudflare, Vercel).\n * Returns undefined if not available.\n */\n get geo(): { city?: string; country?: string; region?: string; latitude?: string; longitude?: string } | undefined {\n // Check Cloudflare-style headers, Vercel-style headers\n const country = this.headers.get(\"cf-ipcountry\") ?? this.headers.get(\"x-vercel-ip-country\") ?? undefined;\n if (!country) return undefined;\n return {\n country,\n city: this.headers.get(\"cf-ipcity\") ?? this.headers.get(\"x-vercel-ip-city\") ?? undefined,\n region: this.headers.get(\"cf-region\") ?? this.headers.get(\"x-vercel-ip-country-region\") ?? undefined,\n latitude: this.headers.get(\"cf-iplatitude\") ?? this.headers.get(\"x-vercel-ip-latitude\") ?? undefined,\n longitude: this.headers.get(\"cf-iplongitude\") ?? this.headers.get(\"x-vercel-ip-longitude\") ?? undefined,\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// NextResponse\n// ---------------------------------------------------------------------------\n\nexport class NextResponse<_Body = unknown> extends Response {\n private _cookies: ResponseCookies;\n\n constructor(body?: BodyInit | null, init?: ResponseInit) {\n super(body, init);\n this._cookies = new ResponseCookies(this.headers);\n }\n\n get cookies(): ResponseCookies {\n return this._cookies;\n }\n\n /**\n * Create a JSON response.\n */\n static json<JsonBody>(body: JsonBody, init?: ResponseInit): NextResponse<JsonBody> {\n const headers = new Headers(init?.headers);\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n return new NextResponse(JSON.stringify(body), {\n ...init,\n headers,\n }) as NextResponse<JsonBody>;\n }\n\n /**\n * Create a redirect response.\n */\n static redirect(url: string | URL, init?: number | ResponseInit): NextResponse {\n const status = typeof init === \"number\" ? init : init?.status ?? 307;\n const destination = typeof url === \"string\" ? url : url.toString();\n const headers = new Headers(typeof init === \"object\" ? init?.headers : undefined);\n headers.set(\"Location\", destination);\n return new NextResponse(null, { status, headers });\n }\n\n /**\n * Create a rewrite response (middleware pattern).\n * Sets the x-middleware-rewrite header.\n */\n static rewrite(destination: string | URL, init?: MiddlewareResponseInit): NextResponse {\n const url = typeof destination === \"string\" ? destination : destination.toString();\n const headers = new Headers(init?.headers);\n headers.set(\"x-middleware-rewrite\", url);\n return new NextResponse(null, { ...init, headers });\n }\n\n /**\n * Continue to the next handler (middleware pattern).\n * Sets the x-middleware-next header.\n */\n static next(init?: MiddlewareResponseInit): NextResponse {\n const headers = new Headers(init?.headers);\n headers.set(\"x-middleware-next\", \"1\");\n // Forward request headers if provided\n if (init?.request?.headers) {\n for (const [key, value] of init.request.headers.entries()) {\n headers.set(`x-middleware-request-${key}`, value);\n }\n }\n return new NextResponse(null, { ...init, headers });\n }\n}\n\n\n\n// ---------------------------------------------------------------------------\n// NextURL — lightweight URL wrapper with pathname helpers\n// ---------------------------------------------------------------------------\n\nexport class NextURL {\n private _url: URL;\n\n constructor(input: string | URL, base?: string | URL) {\n this._url = new URL(input.toString(), base);\n }\n\n get href(): string { return this._url.href; }\n set href(value: string) { this._url.href = value; }\n\n get origin(): string { return this._url.origin; }\n\n get protocol(): string { return this._url.protocol; }\n set protocol(value: string) { this._url.protocol = value; }\n\n get username(): string { return this._url.username; }\n set username(value: string) { this._url.username = value; }\n\n get password(): string { return this._url.password; }\n set password(value: string) { this._url.password = value; }\n\n get host(): string { return this._url.host; }\n set host(value: string) { this._url.host = value; }\n\n get hostname(): string { return this._url.hostname; }\n set hostname(value: string) { this._url.hostname = value; }\n\n get port(): string { return this._url.port; }\n set port(value: string) { this._url.port = value; }\n\n get pathname(): string { return this._url.pathname; }\n set pathname(value: string) { this._url.pathname = value; }\n\n get search(): string { return this._url.search; }\n set search(value: string) { this._url.search = value; }\n\n get searchParams(): URLSearchParams { return this._url.searchParams; }\n\n get hash(): string { return this._url.hash; }\n set hash(value: string) { this._url.hash = value; }\n\n clone(): NextURL {\n return new NextURL(this._url.href);\n }\n\n toString(): string {\n return this._url.toString();\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cookie helpers (minimal implementations)\n// ---------------------------------------------------------------------------\n\ninterface CookieEntry {\n name: string;\n value: string;\n}\n\nexport class RequestCookies {\n private _headers: Headers;\n\n constructor(headers: Headers) {\n this._headers = headers;\n }\n\n private _parse(): Map<string, string> {\n const map = new Map<string, string>();\n const cookie = this._headers.get(\"cookie\") ?? \"\";\n for (const part of cookie.split(\";\")) {\n const eq = part.indexOf(\"=\");\n if (eq === -1) continue;\n const name = part.slice(0, eq).trim();\n const value = part.slice(eq + 1).trim();\n map.set(name, value);\n }\n return map;\n }\n\n get(name: string): CookieEntry | undefined {\n const value = this._parse().get(name);\n return value !== undefined ? { name, value } : undefined;\n }\n\n getAll(): CookieEntry[] {\n return [...this._parse().entries()].map(([name, value]) => ({ name, value }));\n }\n\n has(name: string): boolean {\n return this._parse().has(name);\n }\n\n [Symbol.iterator](): IterableIterator<[string, CookieEntry]> {\n const entries = this.getAll().map((c) => [c.name, c] as [string, CookieEntry]);\n return entries[Symbol.iterator]();\n }\n}\n\n/**\n * RFC 6265 §4.1.1: cookie-name is a token (RFC 2616 §2.2).\n * Allowed: any visible ASCII (0x21-0x7E) except separators: ()<>@,;:\\\"/[]?={}\n */\nconst VALID_COOKIE_NAME_RE = /^[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2E\\x30-\\x39\\x41-\\x5A\\x5E-\\x7A\\x7C\\x7E]+$/;\n\nfunction validateCookieName(name: string): void {\n if (!name || !VALID_COOKIE_NAME_RE.test(name)) {\n throw new Error(`Invalid cookie name: ${JSON.stringify(name)}`);\n }\n}\n\nfunction validateCookieAttributeValue(value: string, attributeName: string): void {\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i);\n if (code <= 0x1F || code === 0x7F || value[i] === \";\") {\n throw new Error(`Invalid cookie ${attributeName} value: ${JSON.stringify(value)}`);\n }\n }\n}\n\nexport class ResponseCookies {\n private _headers: Headers;\n\n constructor(headers: Headers) {\n this._headers = headers;\n }\n\n set(name: string, value: string, options?: CookieOptions): this {\n validateCookieName(name);\n const parts = [`${name}=${encodeURIComponent(value)}`];\n if (options?.path) {\n validateCookieAttributeValue(options.path, \"Path\");\n parts.push(`Path=${options.path}`);\n }\n if (options?.domain) {\n validateCookieAttributeValue(options.domain, \"Domain\");\n parts.push(`Domain=${options.domain}`);\n }\n if (options?.maxAge !== undefined) parts.push(`Max-Age=${options.maxAge}`);\n if (options?.expires) parts.push(`Expires=${options.expires.toUTCString()}`);\n if (options?.httpOnly) parts.push(\"HttpOnly\");\n if (options?.secure) parts.push(\"Secure\");\n if (options?.sameSite) parts.push(`SameSite=${options.sameSite}`);\n this._headers.append(\"Set-Cookie\", parts.join(\"; \"));\n return this;\n }\n\n get(name: string): CookieEntry | undefined {\n for (const header of this._headers.getSetCookie()) {\n const eq = header.indexOf(\"=\");\n if (eq === -1) continue;\n const cookieName = header.slice(0, eq);\n if (cookieName === name) {\n const semi = header.indexOf(\";\", eq);\n const raw = header.slice(eq + 1, semi === -1 ? undefined : semi);\n let value: string;\n try { value = decodeURIComponent(raw); } catch { value = raw; }\n return { name, value };\n }\n }\n return undefined;\n }\n\n getAll(): CookieEntry[] {\n const entries: CookieEntry[] = [];\n for (const header of this._headers.getSetCookie()) {\n const eq = header.indexOf(\"=\");\n if (eq === -1) continue;\n const cookieName = header.slice(0, eq);\n const semi = header.indexOf(\";\", eq);\n const raw = header.slice(eq + 1, semi === -1 ? undefined : semi);\n let value: string;\n try { value = decodeURIComponent(raw); } catch { value = raw; }\n entries.push({ name: cookieName, value });\n }\n return entries;\n }\n\n delete(name: string): this {\n this.set(name, \"\", { maxAge: 0, path: \"/\" });\n return this;\n }\n\n [Symbol.iterator](): IterableIterator<[string, CookieEntry]> {\n const entries: [string, CookieEntry][] = [];\n for (const header of this._headers.getSetCookie()) {\n const eq = header.indexOf(\"=\");\n if (eq === -1) continue;\n const cookieName = header.slice(0, eq);\n const semi = header.indexOf(\";\", eq);\n const raw = header.slice(eq + 1, semi === -1 ? undefined : semi);\n let value: string;\n try { value = decodeURIComponent(raw); } catch { value = raw; }\n entries.push([cookieName, { name: cookieName, value }]);\n }\n return entries[Symbol.iterator]();\n }\n}\n\ninterface CookieOptions {\n path?: string;\n domain?: string;\n maxAge?: number;\n expires?: Date;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n}\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface MiddlewareResponseInit extends ResponseInit {\n request?: {\n headers?: Headers;\n };\n}\n\nexport type NextMiddlewareResult = NextResponse | Response | null | undefined | void;\n\nexport type NextMiddleware = (\n request: NextRequest,\n event: NextFetchEvent,\n) => NextMiddlewareResult | Promise<NextMiddlewareResult>;\n\n/**\n * Minimal NextFetchEvent — extends FetchEvent where available,\n * otherwise provides the waitUntil pattern standalone.\n */\nexport class NextFetchEvent {\n sourcePage: string;\n private _waitUntilPromises: Promise<unknown>[] = [];\n\n constructor(params: { page: string }) {\n this.sourcePage = params.page;\n }\n\n waitUntil(promise: Promise<unknown>): void {\n this._waitUntilPromises.push(promise);\n }\n\n /** Drain all waitUntil promises. Returns a single promise that settles when all are done. */\n drainWaitUntil(): Promise<PromiseSettledResult<unknown>[]> {\n return Promise.allSettled(this._waitUntilPromises);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Utility exports\n// ---------------------------------------------------------------------------\n\n/**\n * Parse user agent string. Minimal implementation — for full UA parsing,\n * apps should use a dedicated library like `ua-parser-js`.\n */\nexport function userAgentFromString(ua: string | undefined): UserAgent {\n const input = ua ?? \"\";\n return {\n isBot: /bot|crawler|spider|crawling/i.test(input),\n ua: input,\n browser: {},\n device: {},\n engine: {},\n os: {},\n cpu: {},\n };\n}\n\nexport function userAgent({ headers }: { headers: Headers }): UserAgent {\n return userAgentFromString(headers.get(\"user-agent\") ?? undefined);\n}\n\nexport interface UserAgent {\n isBot: boolean;\n ua: string;\n browser: { name?: string; version?: string; major?: string };\n device: { model?: string; type?: string; vendor?: string };\n engine: { name?: string; version?: string };\n os: { name?: string; version?: string };\n cpu: { architecture?: string };\n}\n\n/**\n * after() — schedule work after the response is sent.\n * In a real server, this would use the platform's waitUntil.\n * Here we simply run it as a microtask (best-effort).\n */\nexport function after<T>(task: Promise<T> | (() => T | Promise<T>)): void {\n const promise = typeof task === \"function\" ? Promise.resolve().then(task) : task;\n promise.catch((err) => {\n console.error(\"[vinext] after() task failed:\", err);\n });\n}\n\n/**\n * connection() — signals that the response requires a live connection\n * (not a static/cached response). Opts the page out of ISR caching\n * and sets Cache-Control: no-store on the response.\n */\nexport async function connection(): Promise<void> {\n const { markDynamicUsage, throwIfInsideCacheScope } = await import(\"./headers.js\");\n throwIfInsideCacheScope(\"connection()\");\n markDynamicUsage();\n}\n\n/**\n * URLPattern re-export — used in middleware for route matching.\n * Available natively in Node 20+, Cloudflare Workers, Deno.\n * Falls back to urlpattern-polyfill if the global is not available.\n */\nexport const URLPattern: typeof globalThis.URLPattern =\n globalThis.URLPattern ??\n (() => {\n throw new Error(\n \"URLPattern is not available in this runtime. \" +\n \"Install the `urlpattern-polyfill` package or upgrade to Node 20+.\",\n );\n });\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared URL utilities for same-origin detection.
|
|
3
|
+
*
|
|
4
|
+
* Used by link.tsx, navigation.ts, and router.ts to normalize
|
|
5
|
+
* same-origin absolute URLs to local paths for client-side navigation.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* If `url` is an absolute same-origin URL, return the local path
|
|
9
|
+
* (pathname + search + hash). Returns null for truly external URLs
|
|
10
|
+
* or on the server (where origin is unknown).
|
|
11
|
+
*/
|
|
12
|
+
export declare function toSameOriginPath(url: string): string | null;
|
|
13
|
+
//# sourceMappingURL=url-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-utils.d.ts","sourceRoot":"","sources":["../../src/shims/url-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAa3D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared URL utilities for same-origin detection.
|
|
3
|
+
*
|
|
4
|
+
* Used by link.tsx, navigation.ts, and router.ts to normalize
|
|
5
|
+
* same-origin absolute URLs to local paths for client-side navigation.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* If `url` is an absolute same-origin URL, return the local path
|
|
9
|
+
* (pathname + search + hash). Returns null for truly external URLs
|
|
10
|
+
* or on the server (where origin is unknown).
|
|
11
|
+
*/
|
|
12
|
+
export function toSameOriginPath(url) {
|
|
13
|
+
if (typeof window === "undefined")
|
|
14
|
+
return null;
|
|
15
|
+
try {
|
|
16
|
+
const parsed = url.startsWith("//")
|
|
17
|
+
? new URL(url, window.location.origin)
|
|
18
|
+
: new URL(url);
|
|
19
|
+
if (parsed.origin === window.location.origin) {
|
|
20
|
+
return parsed.pathname + parsed.search + parsed.hash;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// not a valid absolute URL — ignore
|
|
25
|
+
}
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=url-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-utils.js","sourceRoot":"","sources":["../../src/shims/url-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YACjC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7C,OAAO,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["/**\n * Shared URL utilities for same-origin detection.\n *\n * Used by link.tsx, navigation.ts, and router.ts to normalize\n * same-origin absolute URLs to local paths for client-side navigation.\n */\n\n/**\n * If `url` is an absolute same-origin URL, return the local path\n * (pathname + search + hash). Returns null for truly external URLs\n * or on the server (where origin is unknown).\n */\nexport function toSameOriginPath(url: string): string | null {\n if (typeof window === \"undefined\") return null;\n try {\n const parsed = url.startsWith(\"//\")\n ? new URL(url, window.location.origin)\n : new URL(url);\n if (parsed.origin === window.location.origin) {\n return parsed.pathname + parsed.search + parsed.hash;\n }\n } catch {\n // not a valid absolute URL — ignore\n }\n return null;\n}\n"]}
|