vinext 0.0.50 → 0.0.51
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/dist/build/google-fonts/fallback-metrics-data.js +14031 -0
- package/dist/build/google-fonts/fallback-metrics-data.js.map +1 -0
- package/dist/build/google-fonts/fallback-metrics.d.ts +13 -0
- package/dist/build/google-fonts/fallback-metrics.js +46 -0
- package/dist/build/google-fonts/fallback-metrics.js.map +1 -0
- package/dist/build/precompress.d.ts +13 -2
- package/dist/build/precompress.js +12 -3
- package/dist/build/precompress.js.map +1 -1
- package/dist/build/prerender.d.ts +1 -1
- package/dist/build/prerender.js +44 -14
- package/dist/build/prerender.js.map +1 -1
- package/dist/build/report.d.ts +5 -4
- package/dist/build/report.js +196 -348
- package/dist/build/report.js.map +1 -1
- package/dist/check.js +1 -0
- package/dist/check.js.map +1 -1
- package/dist/cli.js +60 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/window-next.d.ts +3 -1
- package/dist/client/window-next.js.map +1 -1
- package/dist/config/dotenv.d.ts +11 -1
- package/dist/config/dotenv.js.map +1 -1
- package/dist/config/next-config.d.ts +87 -3
- package/dist/config/next-config.js +222 -6
- package/dist/config/next-config.js.map +1 -1
- package/dist/config/tsconfig-paths.d.ts +13 -0
- package/dist/config/tsconfig-paths.js +117 -0
- package/dist/config/tsconfig-paths.js.map +1 -0
- package/dist/deploy.js +3 -2
- package/dist/deploy.js.map +1 -1
- package/dist/entries/app-browser-entry.d.ts +2 -2
- package/dist/entries/app-browser-entry.js +26 -1
- package/dist/entries/app-browser-entry.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts +19 -1
- package/dist/entries/app-rsc-entry.js +38 -12
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/app-rsc-manifest.d.ts +9 -0
- package/dist/entries/app-rsc-manifest.js +4 -1
- package/dist/entries/app-rsc-manifest.js.map +1 -1
- package/dist/entries/pages-client-entry.js +3 -5
- package/dist/entries/pages-client-entry.js.map +1 -1
- package/dist/entries/pages-server-entry.js +19 -1
- package/dist/entries/pages-server-entry.js.map +1 -1
- package/dist/index.js +130 -37
- package/dist/index.js.map +1 -1
- package/dist/plugins/client-reference-dedup.d.ts +15 -2
- package/dist/plugins/client-reference-dedup.js +138 -16
- package/dist/plugins/client-reference-dedup.js.map +1 -1
- package/dist/plugins/fonts.d.ts +2 -2
- package/dist/plugins/fonts.js +15 -6
- package/dist/plugins/fonts.js.map +1 -1
- package/dist/plugins/sass.d.ts +34 -0
- package/dist/plugins/sass.js +22 -0
- package/dist/plugins/sass.js.map +1 -0
- package/dist/routing/app-route-graph.d.ts +31 -2
- package/dist/routing/app-route-graph.js +82 -10
- package/dist/routing/app-route-graph.js.map +1 -1
- package/dist/routing/route-pattern.d.ts +56 -1
- package/dist/routing/route-pattern.js +60 -1
- package/dist/routing/route-pattern.js.map +1 -1
- package/dist/server/app-browser-action-result.d.ts +27 -2
- package/dist/server/app-browser-action-result.js +63 -2
- package/dist/server/app-browser-action-result.js.map +1 -1
- package/dist/server/app-browser-entry.js +262 -108
- package/dist/server/app-browser-entry.js.map +1 -1
- package/dist/server/app-browser-hydration.d.ts +13 -1
- package/dist/server/app-browser-hydration.js +9 -1
- package/dist/server/app-browser-hydration.js.map +1 -1
- package/dist/server/app-browser-navigation-controller.d.ts +14 -1
- package/dist/server/app-browser-navigation-controller.js +28 -9
- package/dist/server/app-browser-navigation-controller.js.map +1 -1
- package/dist/server/app-browser-popstate.d.ts +16 -0
- package/dist/server/app-browser-popstate.js +17 -0
- package/dist/server/app-browser-popstate.js.map +1 -0
- package/dist/server/app-browser-rsc-redirect.d.ts +28 -0
- package/dist/server/app-browser-rsc-redirect.js +37 -0
- package/dist/server/app-browser-rsc-redirect.js.map +1 -0
- package/dist/server/app-browser-state.d.ts +11 -7
- package/dist/server/app-browser-state.js +45 -27
- package/dist/server/app-browser-state.js.map +1 -1
- package/dist/server/app-browser-stream.d.ts +5 -4
- package/dist/server/app-browser-stream.js +5 -6
- package/dist/server/app-browser-stream.js.map +1 -1
- package/dist/server/app-browser-visible-commit.d.ts +5 -0
- package/dist/server/app-browser-visible-commit.js +38 -5
- package/dist/server/app-browser-visible-commit.js.map +1 -1
- package/dist/server/app-elements-wire.d.ts +38 -6
- package/dist/server/app-elements-wire.js +106 -6
- package/dist/server/app-elements-wire.js.map +1 -1
- package/dist/server/app-elements.d.ts +2 -2
- package/dist/server/app-elements.js +2 -2
- package/dist/server/app-elements.js.map +1 -1
- package/dist/server/app-fallback-renderer.d.ts +10 -1
- package/dist/server/app-fallback-renderer.js +37 -1
- package/dist/server/app-fallback-renderer.js.map +1 -1
- package/dist/server/app-history-state.d.ts +26 -0
- package/dist/server/app-history-state.js +53 -0
- package/dist/server/app-history-state.js.map +1 -0
- package/dist/server/app-page-boundary-render.d.ts +10 -1
- package/dist/server/app-page-boundary-render.js +13 -6
- package/dist/server/app-page-boundary-render.js.map +1 -1
- package/dist/server/app-page-boundary.js +3 -2
- package/dist/server/app-page-boundary.js.map +1 -1
- package/dist/server/app-page-cache.d.ts +13 -0
- package/dist/server/app-page-cache.js +25 -8
- package/dist/server/app-page-cache.js.map +1 -1
- package/dist/server/app-page-dispatch.d.ts +5 -0
- package/dist/server/app-page-dispatch.js +68 -11
- package/dist/server/app-page-dispatch.js.map +1 -1
- package/dist/server/app-page-element-builder.d.ts +7 -0
- package/dist/server/app-page-element-builder.js +32 -4
- package/dist/server/app-page-element-builder.js.map +1 -1
- package/dist/server/app-page-execution.js +2 -3
- package/dist/server/app-page-execution.js.map +1 -1
- package/dist/server/app-page-head.d.ts +7 -0
- package/dist/server/app-page-head.js +2 -1
- package/dist/server/app-page-head.js.map +1 -1
- package/dist/server/app-page-probe.d.ts +23 -1
- package/dist/server/app-page-probe.js +29 -1
- package/dist/server/app-page-probe.js.map +1 -1
- package/dist/server/app-page-render-observation.d.ts +35 -0
- package/dist/server/app-page-render-observation.js +68 -0
- package/dist/server/app-page-render-observation.js.map +1 -0
- package/dist/server/app-page-render.d.ts +5 -1
- package/dist/server/app-page-render.js +79 -3
- package/dist/server/app-page-render.js.map +1 -1
- package/dist/server/app-page-request.d.ts +1 -0
- package/dist/server/app-page-request.js.map +1 -1
- package/dist/server/app-page-response.js +3 -2
- package/dist/server/app-page-response.js.map +1 -1
- package/dist/server/app-page-route-wiring.d.ts +3 -1
- package/dist/server/app-page-route-wiring.js +42 -14
- package/dist/server/app-page-route-wiring.js.map +1 -1
- package/dist/server/app-page-stream.d.ts +2 -0
- package/dist/server/app-page-stream.js +1 -0
- package/dist/server/app-page-stream.js.map +1 -1
- package/dist/server/app-router-entry.js +1 -13
- package/dist/server/app-router-entry.js.map +1 -1
- package/dist/server/app-rsc-cache-busting.d.ts +19 -1
- package/dist/server/app-rsc-cache-busting.js +36 -1
- package/dist/server/app-rsc-cache-busting.js.map +1 -1
- package/dist/server/app-rsc-embedded-chunks.d.ts +9 -0
- package/dist/server/app-rsc-embedded-chunks.js +34 -0
- package/dist/server/app-rsc-embedded-chunks.js.map +1 -0
- package/dist/server/app-rsc-errors.d.ts +4 -1
- package/dist/server/app-rsc-errors.js +1 -1
- package/dist/server/app-rsc-errors.js.map +1 -1
- package/dist/server/app-rsc-handler.d.ts +12 -4
- package/dist/server/app-rsc-handler.js +6 -1
- package/dist/server/app-rsc-handler.js.map +1 -1
- package/dist/server/app-rsc-route-matching.d.ts +23 -0
- package/dist/server/app-rsc-route-matching.js +45 -23
- package/dist/server/app-rsc-route-matching.js.map +1 -1
- package/dist/server/app-server-action-execution.d.ts +35 -3
- package/dist/server/app-server-action-execution.js +87 -33
- package/dist/server/app-server-action-execution.js.map +1 -1
- package/dist/server/app-ssr-entry.d.ts +1 -0
- package/dist/server/app-ssr-entry.js +37 -13
- package/dist/server/app-ssr-entry.js.map +1 -1
- package/dist/server/app-ssr-error-meta.d.ts +14 -0
- package/dist/server/app-ssr-error-meta.js +50 -0
- package/dist/server/app-ssr-error-meta.js.map +1 -0
- package/dist/server/app-ssr-stream.d.ts +1 -1
- package/dist/server/app-ssr-stream.js +9 -12
- package/dist/server/app-ssr-stream.js.map +1 -1
- package/dist/server/artifact-compatibility.d.ts +12 -2
- package/dist/server/artifact-compatibility.js +12 -8
- package/dist/server/artifact-compatibility.js.map +1 -1
- package/dist/server/cache-proof.d.ts +124 -5
- package/dist/server/cache-proof.js +416 -18
- package/dist/server/cache-proof.js.map +1 -1
- package/dist/server/dev-lockfile.d.ts +110 -0
- package/dist/server/dev-lockfile.js +180 -0
- package/dist/server/dev-lockfile.js.map +1 -0
- package/dist/server/dev-server.js +15 -5
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/file-based-metadata.d.ts +13 -0
- package/dist/server/file-based-metadata.js +49 -2
- package/dist/server/file-based-metadata.js.map +1 -1
- package/dist/server/headers.d.ts +3 -1
- package/dist/server/headers.js +5 -2
- package/dist/server/headers.js.map +1 -1
- package/dist/server/html.js +1 -1
- package/dist/server/html.js.map +1 -1
- package/dist/server/http-error-responses.d.ts +10 -0
- package/dist/server/http-error-responses.js +11 -1
- package/dist/server/http-error-responses.js.map +1 -1
- package/dist/server/isr-cache.d.ts +2 -1
- package/dist/server/isr-cache.js +4 -2
- package/dist/server/isr-cache.js.map +1 -1
- package/dist/server/metadata-route-response.js +22 -5
- package/dist/server/metadata-route-response.js.map +1 -1
- package/dist/server/metadata-routes.js +27 -8
- package/dist/server/metadata-routes.js.map +1 -1
- package/dist/server/middleware-runtime.js +1 -0
- package/dist/server/middleware-runtime.js.map +1 -1
- package/dist/server/middleware.d.ts +12 -0
- package/dist/server/middleware.js +12 -0
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/navigation-planner.d.ts +19 -5
- package/dist/server/navigation-planner.js +278 -17
- package/dist/server/navigation-planner.js.map +1 -1
- package/dist/server/navigation-trace.d.ts +8 -1
- package/dist/server/navigation-trace.js +7 -0
- package/dist/server/navigation-trace.js.map +1 -1
- package/dist/server/normalize-path.d.ts +2 -1
- package/dist/server/normalize-path.js +4 -1
- package/dist/server/normalize-path.js.map +1 -1
- package/dist/server/pages-api-route.js +1 -0
- package/dist/server/pages-api-route.js.map +1 -1
- package/dist/server/pages-page-data.d.ts +3 -2
- package/dist/server/pages-page-data.js +22 -3
- package/dist/server/pages-page-data.js.map +1 -1
- package/dist/server/pages-page-response.js +1 -1
- package/dist/server/prod-server.d.ts +28 -1
- package/dist/server/prod-server.js +62 -9
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/server-action-not-found.d.ts +16 -3
- package/dist/server/server-action-not-found.js +19 -1
- package/dist/server/server-action-not-found.js.map +1 -1
- package/dist/server/server-globals.d.ts +5 -0
- package/dist/server/server-globals.js +37 -0
- package/dist/server/server-globals.js.map +1 -0
- package/dist/server/static-file-cache.js +1 -1
- package/dist/server/static-file-cache.js.map +1 -1
- package/dist/shims/cache-runtime.d.ts +19 -2
- package/dist/shims/cache-runtime.js +67 -11
- package/dist/shims/cache-runtime.js.map +1 -1
- package/dist/shims/cache.d.ts +5 -18
- package/dist/shims/cache.js +2 -0
- package/dist/shims/cache.js.map +1 -1
- package/dist/shims/error-boundary.js +6 -8
- package/dist/shims/error-boundary.js.map +1 -1
- package/dist/shims/error.d.ts +18 -1
- package/dist/shims/error.js +56 -1
- package/dist/shims/error.js.map +1 -1
- package/dist/shims/fetch-cache.d.ts +4 -1
- package/dist/shims/fetch-cache.js +40 -5
- package/dist/shims/fetch-cache.js.map +1 -1
- package/dist/shims/font-google-base.d.ts +22 -8
- package/dist/shims/font-google-base.js +41 -71
- package/dist/shims/font-google-base.js.map +1 -1
- package/dist/shims/font-local.d.ts +3 -20
- package/dist/shims/font-local.js +23 -75
- package/dist/shims/font-local.js.map +1 -1
- package/dist/shims/font-utils.d.ts +51 -0
- package/dist/shims/font-utils.js +97 -0
- package/dist/shims/font-utils.js.map +1 -0
- package/dist/shims/hash-scroll.d.ts +7 -0
- package/dist/shims/hash-scroll.js +30 -0
- package/dist/shims/hash-scroll.js.map +1 -0
- package/dist/shims/headers.d.ts +8 -11
- package/dist/shims/headers.js +22 -2
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/image.d.ts +1 -0
- package/dist/shims/image.js +144 -78
- package/dist/shims/image.js.map +1 -1
- package/dist/shims/internal/app-router-context.d.ts +6 -6
- package/dist/shims/internal/app-router-context.js +17 -6
- package/dist/shims/internal/app-router-context.js.map +1 -1
- package/dist/shims/link-prefetch.d.ts +9 -1
- package/dist/shims/link-prefetch.js +11 -6
- package/dist/shims/link-prefetch.js.map +1 -1
- package/dist/shims/link.d.ts +12 -2
- package/dist/shims/link.js +78 -32
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/metadata.d.ts +16 -30
- package/dist/shims/metadata.js +87 -28
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation.d.ts +158 -17
- package/dist/shims/navigation.js +324 -74
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/navigation.react-server.d.ts +3 -2
- package/dist/shims/navigation.react-server.js +5 -2
- package/dist/shims/navigation.react-server.js.map +1 -1
- package/dist/shims/pages-router-runtime.d.ts +7 -0
- package/dist/shims/pages-router-runtime.js +16 -0
- package/dist/shims/pages-router-runtime.js.map +1 -0
- package/dist/shims/router.d.ts +32 -6
- package/dist/shims/router.js +197 -242
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/script.js +110 -32
- package/dist/shims/script.js.map +1 -1
- package/dist/shims/server.js +2 -1
- package/dist/shims/server.js.map +1 -1
- package/dist/shims/slot.d.ts +1 -0
- package/dist/shims/slot.js +41 -1
- package/dist/shims/slot.js.map +1 -1
- package/dist/shims/unified-request-context.js +2 -0
- package/dist/shims/unified-request-context.js.map +1 -1
- package/dist/shims/unrecognized-action-error.d.ts +35 -0
- package/dist/shims/unrecognized-action-error.js +41 -0
- package/dist/shims/unrecognized-action-error.js.map +1 -0
- package/dist/shims/url-utils.d.ts +21 -1
- package/dist/shims/url-utils.js +67 -3
- package/dist/shims/url-utils.js.map +1 -1
- package/dist/utils/asset-prefix.d.ts +69 -0
- package/dist/utils/asset-prefix.js +91 -0
- package/dist/utils/asset-prefix.js.map +1 -0
- package/dist/utils/base-path.d.ts +7 -1
- package/dist/utils/base-path.js +10 -1
- package/dist/utils/base-path.js.map +1 -1
- package/dist/utils/navigation-signal.d.ts +1 -2
- package/dist/utils/navigation-signal.js +1 -1
- package/dist/utils/navigation-signal.js.map +1 -1
- package/dist/utils/sorted-array.d.ts +9 -0
- package/dist/utils/sorted-array.js +22 -0
- package/dist/utils/sorted-array.js.map +1 -0
- package/package.json +3 -3
package/dist/shims/router.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { stripBasePath } from "../utils/base-path.js";
|
|
2
|
+
import { matchRoutePattern, routePatternParts } from "../routing/route-pattern.js";
|
|
2
3
|
import { RouterContext } from "./internal/router-context.js";
|
|
3
4
|
import { isValidModulePath } from "../client/validate-module-path.js";
|
|
4
5
|
import { installWindowNext } from "../client/window-next.js";
|
|
5
|
-
import { isHashOnlyBrowserUrlChange, toBrowserNavigationHref, toSameOriginAppPath } from "./url-utils.js";
|
|
6
|
+
import { isAbsoluteOrProtocolRelativeUrl, isHashOnlyBrowserUrlChange, toBrowserNavigationHref, toSameOriginAppPath } from "./url-utils.js";
|
|
6
7
|
import { addLocalePrefix, getDomainLocaleUrl } from "../utils/domain-locale.js";
|
|
7
8
|
import { addQueryParam, appendSearchParamsToUrl, urlQueryToSearchParams } from "../utils/query.js";
|
|
8
|
-
import {
|
|
9
|
+
import { scrollToHashTarget } from "./hash-scroll.js";
|
|
10
|
+
import { setPagesRouterPopStateHandler } from "./pages-router-runtime.js";
|
|
11
|
+
import { createElement, useContext, useEffect, useMemo, useState } from "react";
|
|
9
12
|
//#region src/shims/router.ts
|
|
10
13
|
/**
|
|
11
14
|
* next/router shim
|
|
@@ -70,14 +73,14 @@ function getDomainLocalePath(url, locale) {
|
|
|
70
73
|
*/
|
|
71
74
|
function applyNavigationLocale(url, locale) {
|
|
72
75
|
if (!locale || typeof window === "undefined") return url;
|
|
73
|
-
if (
|
|
76
|
+
if (isAbsoluteOrProtocolRelativeUrl(url)) return url;
|
|
74
77
|
const domainLocalePath = getDomainLocalePath(url, locale);
|
|
75
78
|
if (domainLocalePath) return domainLocalePath;
|
|
76
79
|
return addLocalePrefix(url, locale, window.__VINEXT_DEFAULT_LOCALE__ ?? "");
|
|
77
80
|
}
|
|
78
81
|
/** Check if a URL is external (any URL scheme per RFC 3986, or protocol-relative) */
|
|
79
82
|
function isExternalUrl(url) {
|
|
80
|
-
return
|
|
83
|
+
return isAbsoluteOrProtocolRelativeUrl(url);
|
|
81
84
|
}
|
|
82
85
|
/** Resolve a hash URL to a basePath-stripped app URL for event payloads */
|
|
83
86
|
function resolveHashUrl(url) {
|
|
@@ -96,15 +99,6 @@ function isHashOnlyChange(href) {
|
|
|
96
99
|
if (typeof window === "undefined") return false;
|
|
97
100
|
return isHashOnlyBrowserUrlChange(href, window.location.href, __basePath);
|
|
98
101
|
}
|
|
99
|
-
/** Scroll to hash target element, or top if no hash */
|
|
100
|
-
function scrollToHash(hash) {
|
|
101
|
-
if (!hash || hash === "#") {
|
|
102
|
-
window.scrollTo(0, 0);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
const el = document.getElementById(hash.slice(1));
|
|
106
|
-
if (el) el.scrollIntoView({ behavior: "auto" });
|
|
107
|
-
}
|
|
108
102
|
/** Save current scroll position into history state for back/forward restoration */
|
|
109
103
|
function saveScrollPosition() {
|
|
110
104
|
const state = window.history.state ?? {};
|
|
@@ -137,6 +131,60 @@ function _registerRouterStateAccessors(accessors) {
|
|
|
137
131
|
function setSSRContext(ctx) {
|
|
138
132
|
_setSSRContextImpl(ctx);
|
|
139
133
|
}
|
|
134
|
+
let _cachedClientPagesNavCtx = null;
|
|
135
|
+
let _cachedClientPagesNavCtxKey = null;
|
|
136
|
+
function _buildClientPagesNavigationContext(routePattern, resolvedPath, searchString) {
|
|
137
|
+
const cacheKey = `${routePattern}|${resolvedPath}|${searchString}`;
|
|
138
|
+
if (_cachedClientPagesNavCtxKey === cacheKey && _cachedClientPagesNavCtx) return _cachedClientPagesNavCtx;
|
|
139
|
+
const ctx = {
|
|
140
|
+
pathname: resolvedPath,
|
|
141
|
+
searchParams: new URLSearchParams(searchString),
|
|
142
|
+
params: routePattern ? extractRouteParamsFromPath(routePattern, resolvedPath) ?? {} : {}
|
|
143
|
+
};
|
|
144
|
+
_cachedClientPagesNavCtx = ctx;
|
|
145
|
+
_cachedClientPagesNavCtxKey = cacheKey;
|
|
146
|
+
return ctx;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Cross-router compat shim source for `next/navigation` hooks.
|
|
150
|
+
*
|
|
151
|
+
* Returns the current Pages Router state shaped as a navigation context so
|
|
152
|
+
* the App Router hooks (useParams/useSearchParams/usePathname) can act as
|
|
153
|
+
* compat shims when invoked inside a Pages Router render. Mirrors Next.js's
|
|
154
|
+
* `adaptForPathParams` and `adaptForSearchParams` in
|
|
155
|
+
* .nextjs-ref/packages/next/src/shared/lib/router/adapters.tsx, which Next.js
|
|
156
|
+
* uses to populate SearchParamsContext / PathParamsContext for the Pages
|
|
157
|
+
* Router (see packages/next/src/server/render.tsx and
|
|
158
|
+
* packages/next/src/client/index.tsx).
|
|
159
|
+
*
|
|
160
|
+
* Returns `null` when there is no Pages Router state available — e.g. App
|
|
161
|
+
* Router pages, RSC-only renders, or pre-router renders. Callers should
|
|
162
|
+
* treat null as "App Router context, use normal app-router state".
|
|
163
|
+
*/
|
|
164
|
+
function getPagesNavigationContext() {
|
|
165
|
+
if (typeof window === "undefined") {
|
|
166
|
+
const ssrCtx = _getSSRContext();
|
|
167
|
+
if (!ssrCtx) return null;
|
|
168
|
+
let searchParams;
|
|
169
|
+
let resolvedPath;
|
|
170
|
+
try {
|
|
171
|
+
const url = new URL(ssrCtx.asPath, "http://_");
|
|
172
|
+
searchParams = url.searchParams;
|
|
173
|
+
resolvedPath = url.pathname;
|
|
174
|
+
} catch {
|
|
175
|
+
searchParams = new URLSearchParams();
|
|
176
|
+
resolvedPath = ssrCtx.pathname;
|
|
177
|
+
}
|
|
178
|
+
const params = extractRouteParamsFromPath(ssrCtx.pathname, resolvedPath) ?? {};
|
|
179
|
+
return {
|
|
180
|
+
pathname: resolvedPath,
|
|
181
|
+
searchParams,
|
|
182
|
+
params
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
const resolvedPath = stripBasePath(window.location.pathname, __basePath);
|
|
186
|
+
return _buildClientPagesNavigationContext(window.__NEXT_DATA__?.page ?? "", resolvedPath, window.location.search);
|
|
187
|
+
}
|
|
140
188
|
/**
|
|
141
189
|
* Extract param names from a Next.js route pattern.
|
|
142
190
|
* E.g., "/posts/[id]" → ["id"], "/docs/[...slug]" → ["slug"],
|
|
@@ -152,6 +200,26 @@ function extractRouteParamNames(pattern) {
|
|
|
152
200
|
for (const m of colonMatches) names.push(m[1]);
|
|
153
201
|
return names;
|
|
154
202
|
}
|
|
203
|
+
function splitPathSegments(pathname) {
|
|
204
|
+
return pathname.split("/").filter(Boolean);
|
|
205
|
+
}
|
|
206
|
+
function extractRouteParamsFromPath(pattern, pathname) {
|
|
207
|
+
return matchRoutePattern(splitPathSegments(pathname), routePatternParts(pattern));
|
|
208
|
+
}
|
|
209
|
+
function getRouteQueryFromNextData(nextData, resolvedPath) {
|
|
210
|
+
const routeQuery = {};
|
|
211
|
+
if (!nextData?.query || !nextData.page) return routeQuery;
|
|
212
|
+
const routeParamNames = extractRouteParamNames(nextData.page);
|
|
213
|
+
if (routeParamNames.length === 0) return routeQuery;
|
|
214
|
+
const currentRouteParams = extractRouteParamsFromPath(nextData.page, resolvedPath);
|
|
215
|
+
if (currentRouteParams) return currentRouteParams;
|
|
216
|
+
for (const key of routeParamNames) {
|
|
217
|
+
const value = nextData.query[key];
|
|
218
|
+
if (typeof value === "string") routeQuery[key] = value;
|
|
219
|
+
else if (Array.isArray(value)) routeQuery[key] = [...value];
|
|
220
|
+
}
|
|
221
|
+
return routeQuery;
|
|
222
|
+
}
|
|
155
223
|
function getPathnameAndQuery() {
|
|
156
224
|
if (typeof window === "undefined") {
|
|
157
225
|
const _ssrCtx = _getSSRContext();
|
|
@@ -172,16 +240,8 @@ function getPathnameAndQuery() {
|
|
|
172
240
|
}
|
|
173
241
|
const resolvedPath = stripBasePath(window.location.pathname, __basePath);
|
|
174
242
|
const pathname = window.__NEXT_DATA__?.page ?? resolvedPath;
|
|
175
|
-
const routeQuery = {};
|
|
176
243
|
const nextData = window.__NEXT_DATA__;
|
|
177
|
-
|
|
178
|
-
const routeParamNames = extractRouteParamNames(nextData.page);
|
|
179
|
-
for (const key of routeParamNames) {
|
|
180
|
-
const value = nextData.query[key];
|
|
181
|
-
if (typeof value === "string") routeQuery[key] = value;
|
|
182
|
-
else if (Array.isArray(value)) routeQuery[key] = [...value];
|
|
183
|
-
}
|
|
184
|
-
}
|
|
244
|
+
const routeQuery = getRouteQueryFromNextData(nextData, resolvedPath);
|
|
185
245
|
const searchQuery = {};
|
|
186
246
|
const params = new URLSearchParams(window.location.search);
|
|
187
247
|
for (const [key, value] of params) addQueryParam(searchQuery, key, value);
|
|
@@ -346,9 +406,8 @@ async function runNavigateClient(fullUrl, resolvedUrl) {
|
|
|
346
406
|
}
|
|
347
407
|
/**
|
|
348
408
|
* Build the full router value object from the current pathname, query, asPath,
|
|
349
|
-
* and a set of navigation methods.
|
|
350
|
-
*
|
|
351
|
-
* singleton methods) so the shape stays in sync.
|
|
409
|
+
* and a set of navigation methods. Shared by the Pages Router context provider
|
|
410
|
+
* and tests so the public router shape stays in sync.
|
|
352
411
|
*/
|
|
353
412
|
function buildRouterValue(pathname, query, asPath, methods) {
|
|
354
413
|
const _ssrState = _getSSRContext();
|
|
@@ -374,10 +433,98 @@ function buildRouterValue(pathname, query, asPath, methods) {
|
|
|
374
433
|
events: routerEvents
|
|
375
434
|
};
|
|
376
435
|
}
|
|
436
|
+
/** Extract the hash fragment from a URL, including the leading `#`. */
|
|
437
|
+
function extractHash(url) {
|
|
438
|
+
const i = url.indexOf("#");
|
|
439
|
+
return i === -1 ? "" : url.slice(i);
|
|
440
|
+
}
|
|
441
|
+
/** Notify in-page listeners (e.g. useRouter hooks) that navigation occurred. */
|
|
442
|
+
function dispatchNavigateEvent() {
|
|
443
|
+
window.dispatchEvent(new CustomEvent("vinext:navigate"));
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Update history with the new URL and refresh the hash-only-detection tracker.
|
|
447
|
+
* Centralises the `pushState`/`replaceState` branch so callers don't repeat it.
|
|
448
|
+
*/
|
|
449
|
+
function updateHistory(mode, url) {
|
|
450
|
+
if (mode === "push") window.history.pushState({}, "", url);
|
|
451
|
+
else window.history.replaceState({}, "", url);
|
|
452
|
+
_lastPathnameAndSearch = window.location.pathname + window.location.search;
|
|
453
|
+
}
|
|
454
|
+
/**
|
|
455
|
+
* Shared client-side navigation flow used by both `useRouter()` and the
|
|
456
|
+
* `Router` singleton. The only differences between push/replace are the
|
|
457
|
+
* history method (`pushState` vs `replaceState`), the external-URL fallback
|
|
458
|
+
* (`assign` vs `replace`), and the fact that push saves scroll position for
|
|
459
|
+
* back/forward restoration while replace does not.
|
|
460
|
+
*
|
|
461
|
+
* `onStateUpdate` lets the hook trigger a `setState` re-render at the same
|
|
462
|
+
* point that hashChangeComplete/routeChangeComplete fires; the singleton
|
|
463
|
+
* passes no callback.
|
|
464
|
+
*/
|
|
465
|
+
async function performNavigation(url, as, options, mode, onStateUpdate) {
|
|
466
|
+
let resolved = resolveNavigationTarget(url, as, options?.locale);
|
|
467
|
+
if (isExternalUrl(resolved)) {
|
|
468
|
+
const localPath = toSameOriginAppPath(resolved, __basePath);
|
|
469
|
+
if (localPath == null) {
|
|
470
|
+
if (mode === "push") window.location.assign(resolved);
|
|
471
|
+
else window.location.replace(resolved);
|
|
472
|
+
return true;
|
|
473
|
+
}
|
|
474
|
+
resolved = localPath;
|
|
475
|
+
}
|
|
476
|
+
const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
|
|
477
|
+
const shallow = options?.shallow ?? false;
|
|
478
|
+
const doScroll = options?.scroll !== false;
|
|
479
|
+
if (isHashOnlyChange(full)) {
|
|
480
|
+
const eventUrl = resolveHashUrl(full);
|
|
481
|
+
routerEvents.emit("hashChangeStart", eventUrl, { shallow });
|
|
482
|
+
updateHistory(mode, resolved.startsWith("#") ? resolved : full);
|
|
483
|
+
if (doScroll) scrollToHashTarget(extractHash(resolved));
|
|
484
|
+
onStateUpdate?.();
|
|
485
|
+
routerEvents.emit("hashChangeComplete", eventUrl, { shallow });
|
|
486
|
+
dispatchNavigateEvent();
|
|
487
|
+
return true;
|
|
488
|
+
}
|
|
489
|
+
if (mode === "push") saveScrollPosition();
|
|
490
|
+
routerEvents.emit("routeChangeStart", resolved, { shallow });
|
|
491
|
+
routerEvents.emit("beforeHistoryChange", resolved, { shallow });
|
|
492
|
+
updateHistory(mode, full);
|
|
493
|
+
if (!shallow) {
|
|
494
|
+
const result = await runNavigateClient(full, resolved);
|
|
495
|
+
if (result === "cancelled") return true;
|
|
496
|
+
if (result === "failed") return false;
|
|
497
|
+
}
|
|
498
|
+
onStateUpdate?.();
|
|
499
|
+
routerEvents.emit("routeChangeComplete", resolved, { shallow });
|
|
500
|
+
const hash = extractHash(resolved);
|
|
501
|
+
if (doScroll) if (hash) scrollToHashTarget(hash);
|
|
502
|
+
else window.scrollTo(0, 0);
|
|
503
|
+
dispatchNavigateEvent();
|
|
504
|
+
return true;
|
|
505
|
+
}
|
|
506
|
+
/** Inject a `<link rel="prefetch">` for the target page. */
|
|
507
|
+
async function prefetchUrl(url) {
|
|
508
|
+
if (typeof document !== "undefined") {
|
|
509
|
+
const link = document.createElement("link");
|
|
510
|
+
link.rel = "prefetch";
|
|
511
|
+
link.href = url;
|
|
512
|
+
link.as = "document";
|
|
513
|
+
document.head.appendChild(link);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
377
516
|
/**
|
|
378
517
|
* useRouter hook - Pages Router compatible.
|
|
518
|
+
*
|
|
519
|
+
* Ported from Next.js: packages/next/src/client/router.ts
|
|
520
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/client/router.ts
|
|
379
521
|
*/
|
|
380
522
|
function useRouter() {
|
|
523
|
+
const router = useContext(RouterContext);
|
|
524
|
+
if (!router) throw new Error("NextRouter was not mounted. https://nextjs.org/docs/messages/next-router-not-mounted");
|
|
525
|
+
return router;
|
|
526
|
+
}
|
|
527
|
+
function PagesRouterProvider({ children }) {
|
|
381
528
|
const [{ pathname, query, asPath }, setState] = useState(getPathnameAndQuery);
|
|
382
529
|
useEffect(() => {
|
|
383
530
|
const onNavigate = ((_e) => {
|
|
@@ -386,125 +533,23 @@ function useRouter() {
|
|
|
386
533
|
window.addEventListener("vinext:navigate", onNavigate);
|
|
387
534
|
return () => window.removeEventListener("vinext:navigate", onNavigate);
|
|
388
535
|
}, []);
|
|
389
|
-
const
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
}
|
|
397
|
-
resolved = localPath;
|
|
398
|
-
}
|
|
399
|
-
const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
|
|
400
|
-
if (isHashOnlyChange(full)) {
|
|
401
|
-
const eventUrl = resolveHashUrl(full);
|
|
402
|
-
routerEvents.emit("hashChangeStart", eventUrl, { shallow: options?.shallow ?? false });
|
|
403
|
-
const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
|
|
404
|
-
window.history.pushState({}, "", resolved.startsWith("#") ? resolved : full);
|
|
405
|
-
_lastPathnameAndSearch = window.location.pathname + window.location.search;
|
|
406
|
-
scrollToHash(hash);
|
|
407
|
-
setState(getPathnameAndQuery());
|
|
408
|
-
routerEvents.emit("hashChangeComplete", eventUrl, { shallow: options?.shallow ?? false });
|
|
409
|
-
window.dispatchEvent(new CustomEvent("vinext:navigate"));
|
|
410
|
-
return true;
|
|
411
|
-
}
|
|
412
|
-
saveScrollPosition();
|
|
413
|
-
routerEvents.emit("routeChangeStart", resolved, { shallow: options?.shallow ?? false });
|
|
414
|
-
routerEvents.emit("beforeHistoryChange", resolved, { shallow: options?.shallow ?? false });
|
|
415
|
-
window.history.pushState({}, "", full);
|
|
416
|
-
_lastPathnameAndSearch = window.location.pathname + window.location.search;
|
|
417
|
-
if (!options?.shallow) {
|
|
418
|
-
const result = await runNavigateClient(full, resolved);
|
|
419
|
-
if (result === "cancelled") return true;
|
|
420
|
-
if (result === "failed") return false;
|
|
421
|
-
}
|
|
422
|
-
setState(getPathnameAndQuery());
|
|
423
|
-
routerEvents.emit("routeChangeComplete", resolved, { shallow: options?.shallow ?? false });
|
|
424
|
-
const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
|
|
425
|
-
if (hash) scrollToHash(hash);
|
|
426
|
-
else if (options?.scroll !== false) window.scrollTo(0, 0);
|
|
427
|
-
window.dispatchEvent(new CustomEvent("vinext:navigate"));
|
|
428
|
-
return true;
|
|
429
|
-
}, []);
|
|
430
|
-
const replace = useCallback(async (url, as, options) => {
|
|
431
|
-
let resolved = resolveNavigationTarget(url, as, options?.locale);
|
|
432
|
-
if (isExternalUrl(resolved)) {
|
|
433
|
-
const localPath = toSameOriginAppPath(resolved, __basePath);
|
|
434
|
-
if (localPath == null) {
|
|
435
|
-
window.location.replace(resolved);
|
|
436
|
-
return true;
|
|
437
|
-
}
|
|
438
|
-
resolved = localPath;
|
|
439
|
-
}
|
|
440
|
-
const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
|
|
441
|
-
if (isHashOnlyChange(full)) {
|
|
442
|
-
const eventUrl = resolveHashUrl(full);
|
|
443
|
-
routerEvents.emit("hashChangeStart", eventUrl, { shallow: options?.shallow ?? false });
|
|
444
|
-
const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
|
|
445
|
-
window.history.replaceState({}, "", resolved.startsWith("#") ? resolved : full);
|
|
446
|
-
_lastPathnameAndSearch = window.location.pathname + window.location.search;
|
|
447
|
-
scrollToHash(hash);
|
|
448
|
-
setState(getPathnameAndQuery());
|
|
449
|
-
routerEvents.emit("hashChangeComplete", eventUrl, { shallow: options?.shallow ?? false });
|
|
450
|
-
window.dispatchEvent(new CustomEvent("vinext:navigate"));
|
|
451
|
-
return true;
|
|
452
|
-
}
|
|
453
|
-
routerEvents.emit("routeChangeStart", resolved, { shallow: options?.shallow ?? false });
|
|
454
|
-
routerEvents.emit("beforeHistoryChange", resolved, { shallow: options?.shallow ?? false });
|
|
455
|
-
window.history.replaceState({}, "", full);
|
|
456
|
-
_lastPathnameAndSearch = window.location.pathname + window.location.search;
|
|
457
|
-
if (!options?.shallow) {
|
|
458
|
-
const result = await runNavigateClient(full, resolved);
|
|
459
|
-
if (result === "cancelled") return true;
|
|
460
|
-
if (result === "failed") return false;
|
|
461
|
-
}
|
|
462
|
-
setState(getPathnameAndQuery());
|
|
463
|
-
routerEvents.emit("routeChangeComplete", resolved, { shallow: options?.shallow ?? false });
|
|
464
|
-
const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
|
|
465
|
-
if (hash) scrollToHash(hash);
|
|
466
|
-
else if (options?.scroll !== false) window.scrollTo(0, 0);
|
|
467
|
-
window.dispatchEvent(new CustomEvent("vinext:navigate"));
|
|
468
|
-
return true;
|
|
469
|
-
}, []);
|
|
470
|
-
const back = useCallback(() => {
|
|
471
|
-
window.history.back();
|
|
472
|
-
}, []);
|
|
473
|
-
const reload = useCallback(() => {
|
|
474
|
-
window.location.reload();
|
|
475
|
-
}, []);
|
|
476
|
-
const prefetch = useCallback(async (url) => {
|
|
477
|
-
if (typeof document !== "undefined") {
|
|
478
|
-
const link = document.createElement("link");
|
|
479
|
-
link.rel = "prefetch";
|
|
480
|
-
link.href = url;
|
|
481
|
-
link.as = "document";
|
|
482
|
-
document.head.appendChild(link);
|
|
483
|
-
}
|
|
484
|
-
}, []);
|
|
485
|
-
return useMemo(() => buildRouterValue(pathname, query, asPath, {
|
|
486
|
-
push,
|
|
487
|
-
replace,
|
|
488
|
-
back,
|
|
489
|
-
reload,
|
|
490
|
-
prefetch,
|
|
491
|
-
beforePopState: (cb) => {
|
|
492
|
-
_beforePopStateCb = cb;
|
|
493
|
-
}
|
|
536
|
+
const router = useMemo(() => buildRouterValue(pathname, query, asPath, {
|
|
537
|
+
push: Router.push,
|
|
538
|
+
replace: Router.replace,
|
|
539
|
+
back: Router.back,
|
|
540
|
+
reload: Router.reload,
|
|
541
|
+
prefetch: Router.prefetch,
|
|
542
|
+
beforePopState: Router.beforePopState
|
|
494
543
|
}), [
|
|
495
544
|
pathname,
|
|
496
545
|
query,
|
|
497
|
-
asPath
|
|
498
|
-
push,
|
|
499
|
-
replace,
|
|
500
|
-
back,
|
|
501
|
-
reload,
|
|
502
|
-
prefetch
|
|
546
|
+
asPath
|
|
503
547
|
]);
|
|
548
|
+
return createElement(RouterContext.Provider, { value: router }, children);
|
|
504
549
|
}
|
|
505
550
|
let _beforePopStateCb;
|
|
506
551
|
let _lastPathnameAndSearch = typeof window !== "undefined" ? window.location.pathname + window.location.search : "";
|
|
507
|
-
|
|
552
|
+
function handlePagesRouterPopState(e) {
|
|
508
553
|
const browserUrl = window.location.pathname + window.location.search;
|
|
509
554
|
const appUrl = stripBasePath(window.location.pathname, __basePath) + window.location.search;
|
|
510
555
|
const isHashOnly = browserUrl === _lastPathnameAndSearch;
|
|
@@ -519,9 +564,9 @@ if (typeof window !== "undefined") window.addEventListener("popstate", (e) => {
|
|
|
519
564
|
if (isHashOnly) {
|
|
520
565
|
const hashUrl = appUrl + window.location.hash;
|
|
521
566
|
routerEvents.emit("hashChangeStart", hashUrl, { shallow: false });
|
|
522
|
-
|
|
567
|
+
scrollToHashTarget(window.location.hash);
|
|
523
568
|
routerEvents.emit("hashChangeComplete", hashUrl, { shallow: false });
|
|
524
|
-
|
|
569
|
+
dispatchNavigateEvent();
|
|
525
570
|
return;
|
|
526
571
|
}
|
|
527
572
|
const fullAppUrl = appUrl + window.location.hash;
|
|
@@ -531,30 +576,21 @@ if (typeof window !== "undefined") window.addEventListener("popstate", (e) => {
|
|
|
531
576
|
if (await runNavigateClient(browserUrl, fullAppUrl) === "completed") {
|
|
532
577
|
routerEvents.emit("routeChangeComplete", fullAppUrl, { shallow: false });
|
|
533
578
|
restoreScrollPosition(e.state);
|
|
534
|
-
|
|
579
|
+
dispatchNavigateEvent();
|
|
535
580
|
}
|
|
536
581
|
})();
|
|
537
|
-
}
|
|
582
|
+
}
|
|
583
|
+
setPagesRouterPopStateHandler(handlePagesRouterPopState);
|
|
538
584
|
/**
|
|
539
585
|
* Wrap a React element in a RouterContext.Provider so that
|
|
540
586
|
* next/compat/router's useRouter() returns the real Pages Router value.
|
|
541
587
|
*
|
|
542
|
-
*
|
|
543
|
-
*
|
|
544
|
-
*
|
|
545
|
-
* that a hook-based component would create.
|
|
588
|
+
* The provider owns the reactive Pages Router snapshot so next/router and
|
|
589
|
+
* next/compat/router consumers share one context value instead of each hook
|
|
590
|
+
* installing its own global URL-change listener.
|
|
546
591
|
*/
|
|
547
592
|
function wrapWithRouterContext(element) {
|
|
548
|
-
|
|
549
|
-
const routerValue = buildRouterValue(pathname, query, asPath, {
|
|
550
|
-
push: Router.push,
|
|
551
|
-
replace: Router.replace,
|
|
552
|
-
back: Router.back,
|
|
553
|
-
reload: Router.reload,
|
|
554
|
-
prefetch: Router.prefetch,
|
|
555
|
-
beforePopState: Router.beforePopState
|
|
556
|
-
});
|
|
557
|
-
return createElement(RouterContext.Provider, { value: routerValue }, element);
|
|
593
|
+
return createElement(PagesRouterProvider, null, element);
|
|
558
594
|
}
|
|
559
595
|
/**
|
|
560
596
|
* Higher-order component that injects the Pages Router `router` instance as
|
|
@@ -589,101 +625,20 @@ function withRouter(ComposedComponent) {
|
|
|
589
625
|
return WithRouterWrapper;
|
|
590
626
|
}
|
|
591
627
|
const Router = {
|
|
592
|
-
push:
|
|
593
|
-
|
|
594
|
-
if (isExternalUrl(resolved)) {
|
|
595
|
-
const localPath = toSameOriginAppPath(resolved, __basePath);
|
|
596
|
-
if (localPath == null) {
|
|
597
|
-
window.location.assign(resolved);
|
|
598
|
-
return true;
|
|
599
|
-
}
|
|
600
|
-
resolved = localPath;
|
|
601
|
-
}
|
|
602
|
-
const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
|
|
603
|
-
if (isHashOnlyChange(full)) {
|
|
604
|
-
const eventUrl = resolveHashUrl(full);
|
|
605
|
-
routerEvents.emit("hashChangeStart", eventUrl, { shallow: options?.shallow ?? false });
|
|
606
|
-
const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
|
|
607
|
-
window.history.pushState({}, "", resolved.startsWith("#") ? resolved : full);
|
|
608
|
-
_lastPathnameAndSearch = window.location.pathname + window.location.search;
|
|
609
|
-
scrollToHash(hash);
|
|
610
|
-
routerEvents.emit("hashChangeComplete", eventUrl, { shallow: options?.shallow ?? false });
|
|
611
|
-
window.dispatchEvent(new CustomEvent("vinext:navigate"));
|
|
612
|
-
return true;
|
|
613
|
-
}
|
|
614
|
-
saveScrollPosition();
|
|
615
|
-
routerEvents.emit("routeChangeStart", resolved, { shallow: options?.shallow ?? false });
|
|
616
|
-
routerEvents.emit("beforeHistoryChange", resolved, { shallow: options?.shallow ?? false });
|
|
617
|
-
window.history.pushState({}, "", full);
|
|
618
|
-
_lastPathnameAndSearch = window.location.pathname + window.location.search;
|
|
619
|
-
if (!options?.shallow) {
|
|
620
|
-
const result = await runNavigateClient(full, resolved);
|
|
621
|
-
if (result === "cancelled") return true;
|
|
622
|
-
if (result === "failed") return false;
|
|
623
|
-
}
|
|
624
|
-
routerEvents.emit("routeChangeComplete", resolved, { shallow: options?.shallow ?? false });
|
|
625
|
-
const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
|
|
626
|
-
if (hash) scrollToHash(hash);
|
|
627
|
-
else if (options?.scroll !== false) window.scrollTo(0, 0);
|
|
628
|
-
window.dispatchEvent(new CustomEvent("vinext:navigate"));
|
|
629
|
-
return true;
|
|
630
|
-
},
|
|
631
|
-
replace: async (url, as, options) => {
|
|
632
|
-
let resolved = resolveNavigationTarget(url, as, options?.locale);
|
|
633
|
-
if (isExternalUrl(resolved)) {
|
|
634
|
-
const localPath = toSameOriginAppPath(resolved, __basePath);
|
|
635
|
-
if (localPath == null) {
|
|
636
|
-
window.location.replace(resolved);
|
|
637
|
-
return true;
|
|
638
|
-
}
|
|
639
|
-
resolved = localPath;
|
|
640
|
-
}
|
|
641
|
-
const full = toBrowserNavigationHref(resolved, window.location.href, __basePath);
|
|
642
|
-
if (isHashOnlyChange(full)) {
|
|
643
|
-
const eventUrl = resolveHashUrl(full);
|
|
644
|
-
routerEvents.emit("hashChangeStart", eventUrl, { shallow: options?.shallow ?? false });
|
|
645
|
-
const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
|
|
646
|
-
window.history.replaceState({}, "", resolved.startsWith("#") ? resolved : full);
|
|
647
|
-
_lastPathnameAndSearch = window.location.pathname + window.location.search;
|
|
648
|
-
scrollToHash(hash);
|
|
649
|
-
routerEvents.emit("hashChangeComplete", eventUrl, { shallow: options?.shallow ?? false });
|
|
650
|
-
window.dispatchEvent(new CustomEvent("vinext:navigate"));
|
|
651
|
-
return true;
|
|
652
|
-
}
|
|
653
|
-
routerEvents.emit("routeChangeStart", resolved, { shallow: options?.shallow ?? false });
|
|
654
|
-
routerEvents.emit("beforeHistoryChange", resolved, { shallow: options?.shallow ?? false });
|
|
655
|
-
window.history.replaceState({}, "", full);
|
|
656
|
-
_lastPathnameAndSearch = window.location.pathname + window.location.search;
|
|
657
|
-
if (!options?.shallow) {
|
|
658
|
-
const result = await runNavigateClient(full, resolved);
|
|
659
|
-
if (result === "cancelled") return true;
|
|
660
|
-
if (result === "failed") return false;
|
|
661
|
-
}
|
|
662
|
-
routerEvents.emit("routeChangeComplete", resolved, { shallow: options?.shallow ?? false });
|
|
663
|
-
const hash = resolved.includes("#") ? resolved.slice(resolved.indexOf("#")) : "";
|
|
664
|
-
if (hash) scrollToHash(hash);
|
|
665
|
-
else if (options?.scroll !== false) window.scrollTo(0, 0);
|
|
666
|
-
window.dispatchEvent(new CustomEvent("vinext:navigate"));
|
|
667
|
-
return true;
|
|
668
|
-
},
|
|
628
|
+
push: (url, as, options) => performNavigation(url, as, options, "push"),
|
|
629
|
+
replace: (url, as, options) => performNavigation(url, as, options, "replace"),
|
|
669
630
|
back: () => window.history.back(),
|
|
670
631
|
reload: () => window.location.reload(),
|
|
671
|
-
prefetch:
|
|
672
|
-
if (typeof document !== "undefined") {
|
|
673
|
-
const link = document.createElement("link");
|
|
674
|
-
link.rel = "prefetch";
|
|
675
|
-
link.href = url;
|
|
676
|
-
link.as = "document";
|
|
677
|
-
document.head.appendChild(link);
|
|
678
|
-
}
|
|
679
|
-
},
|
|
632
|
+
prefetch: prefetchUrl,
|
|
680
633
|
beforePopState: (cb) => {
|
|
681
634
|
_beforePopStateCb = cb;
|
|
682
635
|
},
|
|
683
636
|
events: routerEvents
|
|
684
637
|
};
|
|
685
638
|
if (typeof window !== "undefined") installWindowNext({ router: Router });
|
|
639
|
+
const _PAGES_NAVIGATION_ACCESSOR_KEY = Symbol.for("vinext.navigation.pagesNavigationContextAccessor");
|
|
640
|
+
globalThis[_PAGES_NAVIGATION_ACCESSOR_KEY] = getPagesNavigationContext;
|
|
686
641
|
//#endregion
|
|
687
|
-
export { _registerRouterStateAccessors, applyNavigationLocale, Router as default, isExternalUrl, isHashOnlyChange, setSSRContext, useRouter, withRouter, wrapWithRouterContext };
|
|
642
|
+
export { _registerRouterStateAccessors, applyNavigationLocale, Router as default, getPagesNavigationContext, isExternalUrl, isHashOnlyChange, setSSRContext, useRouter, withRouter, wrapWithRouterContext };
|
|
688
643
|
|
|
689
644
|
//# sourceMappingURL=router.js.map
|