vinext 0.0.53 → 0.0.55
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 +1 -0
- package/dist/build/inline-css.d.ts +7 -0
- package/dist/build/inline-css.js +50 -0
- package/dist/build/inline-css.js.map +1 -0
- package/dist/build/prerender.js +2 -1
- package/dist/build/prerender.js.map +1 -1
- package/dist/check.js +19 -3
- package/dist/check.js.map +1 -1
- package/dist/client/navigation-runtime.d.ts +3 -1
- package/dist/client/navigation-runtime.js +1 -1
- package/dist/client/navigation-runtime.js.map +1 -1
- package/dist/client/window-next.d.ts +7 -0
- package/dist/client/window-next.js.map +1 -1
- package/dist/config/next-config.d.ts +97 -2
- package/dist/config/next-config.js +155 -6
- package/dist/config/next-config.js.map +1 -1
- package/dist/config/tsconfig-paths.d.ts +12 -3
- package/dist/config/tsconfig-paths.js +55 -24
- package/dist/config/tsconfig-paths.js.map +1 -1
- package/dist/deploy.js +13 -0
- package/dist/deploy.js.map +1 -1
- package/dist/entries/app-browser-entry.d.ts +11 -1
- package/dist/entries/app-browser-entry.js +16 -6
- package/dist/entries/app-browser-entry.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts +9 -1
- package/dist/entries/app-rsc-entry.js +30 -5
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/app-rsc-manifest.d.ts +21 -1
- package/dist/entries/app-rsc-manifest.js +28 -9
- package/dist/entries/app-rsc-manifest.js.map +1 -1
- package/dist/entries/pages-client-entry.d.ts +4 -1
- package/dist/entries/pages-client-entry.js +18 -2
- package/dist/entries/pages-client-entry.js.map +1 -1
- package/dist/entries/pages-server-entry.js +123 -8
- package/dist/entries/pages-server-entry.js.map +1 -1
- package/dist/entries/runtime-entry-module.d.ts +1 -10
- package/dist/entries/runtime-entry-module.js +2 -12
- package/dist/entries/runtime-entry-module.js.map +1 -1
- package/dist/index.js +144 -44
- package/dist/index.js.map +1 -1
- package/dist/plugins/import-meta-url.d.ts +16 -0
- package/dist/plugins/import-meta-url.js +193 -0
- package/dist/plugins/import-meta-url.js.map +1 -0
- package/dist/plugins/remove-console.d.ts +16 -0
- package/dist/plugins/remove-console.js +176 -0
- package/dist/plugins/remove-console.js.map +1 -0
- package/dist/routing/app-route-graph.d.ts +24 -1
- package/dist/routing/app-route-graph.js +52 -4
- package/dist/routing/app-route-graph.js.map +1 -1
- package/dist/routing/app-router.d.ts +2 -2
- package/dist/routing/app-router.js +2 -2
- package/dist/routing/app-router.js.map +1 -1
- package/dist/routing/file-matcher.d.ts +21 -1
- package/dist/routing/file-matcher.js +39 -1
- package/dist/routing/file-matcher.js.map +1 -1
- package/dist/routing/pages-router.d.ts +1 -1
- package/dist/routing/pages-router.js +10 -3
- package/dist/routing/pages-router.js.map +1 -1
- package/dist/server/api-handler.js +1 -1
- package/dist/server/app-browser-action-result.d.ts +9 -16
- package/dist/server/app-browser-action-result.js +25 -14
- package/dist/server/app-browser-action-result.js.map +1 -1
- package/dist/server/app-browser-entry.js +195 -60
- package/dist/server/app-browser-entry.js.map +1 -1
- package/dist/server/app-browser-mpa-navigation.d.ts +16 -0
- package/dist/server/app-browser-mpa-navigation.js +36 -0
- package/dist/server/app-browser-mpa-navigation.js.map +1 -0
- package/dist/server/app-browser-navigation-controller.d.ts +2 -0
- package/dist/server/app-browser-navigation-controller.js +4 -0
- package/dist/server/app-browser-navigation-controller.js.map +1 -1
- package/dist/server/app-browser-popstate.d.ts +3 -1
- package/dist/server/app-browser-popstate.js +15 -1
- package/dist/server/app-browser-popstate.js.map +1 -1
- package/dist/server/app-browser-state.js +2 -1
- package/dist/server/app-browser-state.js.map +1 -1
- package/dist/server/app-elements-wire.d.ts +13 -4
- package/dist/server/app-elements-wire.js +10 -1
- 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 +15 -5
- package/dist/server/app-fallback-renderer.js +10 -4
- package/dist/server/app-fallback-renderer.js.map +1 -1
- package/dist/server/app-inline-css-client.d.ts +7 -0
- package/dist/server/app-inline-css-client.js +37 -0
- package/dist/server/app-inline-css-client.js.map +1 -0
- package/dist/server/app-layout-param-observation.d.ts +30 -0
- package/dist/server/app-layout-param-observation.js +130 -0
- package/dist/server/app-layout-param-observation.js.map +1 -0
- package/dist/server/app-page-boundary-render.js +2 -2
- package/dist/server/app-page-boundary-render.js.map +1 -1
- package/dist/server/app-page-boundary.d.ts +21 -1
- package/dist/server/app-page-boundary.js +28 -3
- package/dist/server/app-page-boundary.js.map +1 -1
- package/dist/server/app-page-cache.d.ts +7 -3
- package/dist/server/app-page-cache.js +7 -7
- package/dist/server/app-page-cache.js.map +1 -1
- package/dist/server/app-page-dispatch.d.ts +10 -1
- package/dist/server/app-page-dispatch.js +126 -79
- package/dist/server/app-page-dispatch.js.map +1 -1
- package/dist/server/app-page-element-builder.js +12 -28
- package/dist/server/app-page-element-builder.js.map +1 -1
- package/dist/server/app-page-params.d.ts +2 -1
- package/dist/server/app-page-params.js +14 -1
- package/dist/server/app-page-params.js.map +1 -1
- package/dist/server/app-page-probe.d.ts +12 -1
- package/dist/server/app-page-probe.js +116 -1
- package/dist/server/app-page-probe.js.map +1 -1
- package/dist/server/app-page-render-identity.d.ts +22 -0
- package/dist/server/app-page-render-identity.js +42 -0
- package/dist/server/app-page-render-identity.js.map +1 -0
- package/dist/server/app-page-render.d.ts +8 -1
- package/dist/server/app-page-render.js +4 -1
- package/dist/server/app-page-render.js.map +1 -1
- package/dist/server/app-page-request.d.ts +6 -3
- package/dist/server/app-page-request.js +5 -2
- package/dist/server/app-page-request.js.map +1 -1
- package/dist/server/app-page-response.js +2 -2
- package/dist/server/app-page-response.js.map +1 -1
- package/dist/server/app-page-route-wiring.d.ts +15 -0
- package/dist/server/app-page-route-wiring.js +7 -5
- package/dist/server/app-page-route-wiring.js.map +1 -1
- package/dist/server/app-page-stream.d.ts +11 -0
- package/dist/server/app-page-stream.js +1 -0
- package/dist/server/app-page-stream.js.map +1 -1
- package/dist/server/app-route-handler-response.js +37 -5
- package/dist/server/app-route-handler-response.js.map +1 -1
- package/dist/server/app-rsc-cache-busting.d.ts +3 -2
- package/dist/server/app-rsc-cache-busting.js +9 -7
- package/dist/server/app-rsc-cache-busting.js.map +1 -1
- package/dist/server/app-rsc-handler.d.ts +14 -3
- package/dist/server/app-rsc-handler.js +56 -6
- package/dist/server/app-rsc-handler.js.map +1 -1
- package/dist/server/app-rsc-request-normalization.d.ts +2 -1
- package/dist/server/app-rsc-request-normalization.js +3 -2
- package/dist/server/app-rsc-request-normalization.js.map +1 -1
- package/dist/server/app-segment-config.d.ts +1 -1
- package/dist/server/app-segment-config.js +4 -1
- package/dist/server/app-segment-config.js.map +1 -1
- package/dist/server/app-server-action-execution.d.ts +26 -3
- package/dist/server/app-server-action-execution.js +240 -29
- package/dist/server/app-server-action-execution.js.map +1 -1
- package/dist/server/app-ssr-entry.d.ts +6 -0
- package/dist/server/app-ssr-entry.js +22 -7
- package/dist/server/app-ssr-entry.js.map +1 -1
- package/dist/server/app-ssr-error-meta.js +3 -3
- package/dist/server/app-ssr-error-meta.js.map +1 -1
- package/dist/server/app-ssr-stream.d.ts +2 -1
- package/dist/server/app-ssr-stream.js +176 -31
- package/dist/server/app-ssr-stream.js.map +1 -1
- package/dist/server/artifact-compatibility.d.ts +2 -1
- package/dist/server/artifact-compatibility.js +10 -1
- package/dist/server/artifact-compatibility.js.map +1 -1
- package/dist/server/client-reuse-manifest.d.ts +9 -4
- package/dist/server/client-reuse-manifest.js +2 -1
- package/dist/server/client-reuse-manifest.js.map +1 -1
- package/dist/server/client-trace-metadata.d.ts +31 -0
- package/dist/server/client-trace-metadata.js +83 -0
- package/dist/server/client-trace-metadata.js.map +1 -0
- package/dist/server/cookie-utils.d.ts +13 -0
- package/dist/server/cookie-utils.js +20 -0
- package/dist/server/cookie-utils.js.map +1 -0
- package/dist/server/dev-server.d.ts +8 -1
- package/dist/server/dev-server.js +83 -12
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/document-initial-head.d.ts +7 -0
- package/dist/server/document-initial-head.js +35 -0
- package/dist/server/document-initial-head.js.map +1 -0
- package/dist/server/html.d.ts +2 -1
- package/dist/server/html.js +6 -1
- package/dist/server/html.js.map +1 -1
- package/dist/server/isr-cache.d.ts +7 -5
- package/dist/server/isr-cache.js +17 -6
- package/dist/server/isr-cache.js.map +1 -1
- package/dist/server/middleware-runtime.js +1 -2
- package/dist/server/middleware-runtime.js.map +1 -1
- package/dist/server/pages-document-initial-props.d.ts +89 -0
- package/dist/server/pages-document-initial-props.js +140 -0
- package/dist/server/pages-document-initial-props.js.map +1 -0
- package/dist/server/pages-node-compat.js +1 -1
- package/dist/server/pages-page-data.js +3 -0
- package/dist/server/pages-page-data.js.map +1 -1
- package/dist/server/pages-page-method.d.ts +48 -0
- package/dist/server/pages-page-method.js +19 -0
- package/dist/server/pages-page-method.js.map +1 -0
- package/dist/server/pages-page-response.d.ts +20 -0
- package/dist/server/pages-page-response.js +37 -7
- package/dist/server/pages-page-response.js.map +1 -1
- package/dist/server/pages-serializable-props.d.ts +25 -0
- package/dist/server/pages-serializable-props.js +69 -0
- package/dist/server/pages-serializable-props.js.map +1 -0
- package/dist/server/prod-server.js +16 -6
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/server-action-not-found.js +3 -2
- package/dist/server/server-action-not-found.js.map +1 -1
- package/dist/server/skip-cache-proof.d.ts +23 -2
- package/dist/server/skip-cache-proof.js +81 -12
- package/dist/server/skip-cache-proof.js.map +1 -1
- package/dist/server/static-file-cache.js +2 -1
- package/dist/server/static-file-cache.js.map +1 -1
- package/dist/server/static-layout-client-reuse-proof.d.ts +16 -0
- package/dist/server/static-layout-client-reuse-proof.js +35 -0
- package/dist/server/static-layout-client-reuse-proof.js.map +1 -0
- package/dist/shims/app-router-scroll-state.d.ts +4 -2
- package/dist/shims/app-router-scroll-state.js +16 -3
- package/dist/shims/app-router-scroll-state.js.map +1 -1
- package/dist/shims/app-router-scroll.d.ts +16 -2
- package/dist/shims/app-router-scroll.js +18 -3
- package/dist/shims/app-router-scroll.js.map +1 -1
- package/dist/shims/cache.d.ts +27 -1
- package/dist/shims/cache.js +108 -6
- package/dist/shims/cache.js.map +1 -1
- package/dist/shims/document.d.ts +6 -0
- package/dist/shims/document.js +7 -8
- package/dist/shims/document.js.map +1 -1
- package/dist/shims/error-boundary.d.ts +4 -4
- package/dist/shims/error-boundary.js +27 -28
- package/dist/shims/error-boundary.js.map +1 -1
- package/dist/shims/error.js +3 -0
- package/dist/shims/error.js.map +1 -1
- package/dist/shims/fetch-cache.d.ts +3 -1
- package/dist/shims/fetch-cache.js +16 -5
- package/dist/shims/fetch-cache.js.map +1 -1
- package/dist/shims/hash-scroll.d.ts +4 -1
- package/dist/shims/hash-scroll.js +13 -1
- package/dist/shims/hash-scroll.js.map +1 -1
- package/dist/shims/head-state.d.ts +1 -0
- package/dist/shims/head-state.js +18 -3
- package/dist/shims/head-state.js.map +1 -1
- package/dist/shims/head.d.ts +35 -1
- package/dist/shims/head.js +113 -14
- package/dist/shims/head.js.map +1 -1
- package/dist/shims/headers.d.ts +7 -0
- package/dist/shims/headers.js +9 -1
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/internal/app-route-detection.d.ts +37 -0
- package/dist/shims/internal/app-route-detection.js +69 -0
- package/dist/shims/internal/app-route-detection.js.map +1 -0
- package/dist/shims/internal/pages-data-fetch-dedup.d.ts +56 -0
- package/dist/shims/internal/pages-data-fetch-dedup.js +70 -0
- package/dist/shims/internal/pages-data-fetch-dedup.js.map +1 -0
- package/dist/shims/link.d.ts +18 -2
- package/dist/shims/link.js +98 -8
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/metadata.d.ts +7 -6
- package/dist/shims/metadata.js +9 -5
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation.d.ts +40 -3
- package/dist/shims/navigation.js +124 -25
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/router.d.ts +5 -0
- package/dist/shims/router.js +51 -21
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/script.d.ts +11 -1
- package/dist/shims/script.js +75 -6
- package/dist/shims/script.js.map +1 -1
- package/dist/shims/thenable-params.d.ts +5 -2
- package/dist/shims/thenable-params.js +25 -1
- package/dist/shims/thenable-params.js.map +1 -1
- package/dist/shims/unified-request-context.js +3 -0
- package/dist/shims/unified-request-context.js.map +1 -1
- package/dist/utils/client-build-manifest.d.ts +15 -0
- package/dist/utils/client-build-manifest.js +54 -0
- package/dist/utils/client-build-manifest.js.map +1 -0
- package/dist/utils/hash.js +1 -1
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/lazy-chunks.d.ts +1 -1
- package/dist/utils/lazy-chunks.js.map +1 -1
- package/dist/utils/path.d.ts +13 -0
- package/dist/utils/path.js +16 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/vite-version.d.ts +11 -0
- package/dist/utils/vite-version.js +36 -0
- package/dist/utils/vite-version.js.map +1 -0
- package/package.json +2 -2
package/dist/shims/navigation.js
CHANGED
|
@@ -2,16 +2,16 @@ import { stripBasePath } from "../utils/base-path.js";
|
|
|
2
2
|
import { VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_PARAMS_HEADER } from "../server/headers.js";
|
|
3
3
|
import { assertSafeNavigationUrl } from "./url-safety.js";
|
|
4
4
|
import { AppElementsWire } from "../server/app-elements-wire.js";
|
|
5
|
+
import "../server/app-elements.js";
|
|
6
|
+
import { AppRouterContext } from "./internal/app-router-context.js";
|
|
5
7
|
import { isAbsoluteOrProtocolRelativeUrl, isHashOnlyBrowserUrlChange, toBrowserNavigationHref, toSameOriginAppPath, withBasePath } from "./url-utils.js";
|
|
6
|
-
import { scrollToHashTarget } from "./hash-scroll.js";
|
|
8
|
+
import { retryScrollTo, scrollToHashTarget } from "./hash-scroll.js";
|
|
7
9
|
import { getNavigationRuntime, hasAppNavigationRuntime } from "../client/navigation-runtime.js";
|
|
8
10
|
import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
|
|
9
|
-
import "../server/app-elements.js";
|
|
10
11
|
import { resolveManifestNavigationInterceptionContext } from "../server/app-browser-interception-context.js";
|
|
11
12
|
import { createExternalHistoryStatePreservingMetadata } from "../server/app-history-state.js";
|
|
12
13
|
import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, createRscRequestHeaders, createRscRequestUrl } from "../server/app-rsc-cache-busting.js";
|
|
13
14
|
import { ReadonlyURLSearchParams } from "./readonly-url-search-params.js";
|
|
14
|
-
import { AppRouterContext } from "./internal/app-router-context.js";
|
|
15
15
|
import { beginAppRouterScrollIntent, clearAppRouterScrollIntent, consumeAppRouterScrollIntent } from "./app-router-scroll-state.js";
|
|
16
16
|
import { UnrecognizedActionError, unstable_isUnrecognizedActionError } from "./unrecognized-action-error.js";
|
|
17
17
|
import * as React$1 from "react";
|
|
@@ -140,8 +140,28 @@ const isServer = typeof window === "undefined";
|
|
|
140
140
|
const __basePath = process.env.__NEXT_ROUTER_BASEPATH ?? "";
|
|
141
141
|
/** Maximum number of entries in the RSC prefetch cache. */
|
|
142
142
|
const MAX_PREFETCH_CACHE_SIZE = 50;
|
|
143
|
-
/**
|
|
144
|
-
|
|
143
|
+
/**
|
|
144
|
+
* TTL for prefetch cache entries in ms.
|
|
145
|
+
*
|
|
146
|
+
* Mirrors Next.js' `STATIC_STALETIME_MS` derivation. The plugin injects
|
|
147
|
+
* `process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME` from
|
|
148
|
+
* `experimental.staleTimes.static` (in seconds) at build time; we convert
|
|
149
|
+
* to ms here.
|
|
150
|
+
*
|
|
151
|
+
* Falls back to vinext's historical default of 30s when the env var is
|
|
152
|
+
* absent (e.g. unit tests that import this module without going through
|
|
153
|
+
* the plugin's `define` pipeline). When the plugin is active and the user
|
|
154
|
+
* has not set `experimental.staleTimes`, Next.js' 300s default applies
|
|
155
|
+
* (see `resolveStaleTimes` in `config/next-config.ts`).
|
|
156
|
+
*/
|
|
157
|
+
function resolvePrefetchCacheTtl() {
|
|
158
|
+
const raw = process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME;
|
|
159
|
+
if (raw === void 0 || raw === "") return 3e4;
|
|
160
|
+
const seconds = Number(raw);
|
|
161
|
+
if (!Number.isFinite(seconds) || seconds < 0) return 3e4;
|
|
162
|
+
return seconds * 1e3;
|
|
163
|
+
}
|
|
164
|
+
const PREFETCH_CACHE_TTL = resolvePrefetchCacheTtl();
|
|
145
165
|
function getCurrentInterceptionContext() {
|
|
146
166
|
if (isServer) return null;
|
|
147
167
|
return stripBasePath(window.location.pathname, __basePath);
|
|
@@ -189,7 +209,7 @@ function evictPrefetchCacheIfNeeded() {
|
|
|
189
209
|
if (cache.size < 50) return;
|
|
190
210
|
const now = Date.now();
|
|
191
211
|
const prefetched = getPrefetchedUrls();
|
|
192
|
-
for (const [key, entry] of cache) if (now - entry.timestamp >=
|
|
212
|
+
for (const [key, entry] of cache) if (now - entry.timestamp >= PREFETCH_CACHE_TTL) deletePrefetchCacheEntry(cache, prefetched, key, entry, true);
|
|
193
213
|
while (cache.size >= 50) {
|
|
194
214
|
const oldest = cache.keys().next().value;
|
|
195
215
|
if (oldest !== void 0) {
|
|
@@ -394,11 +414,24 @@ function consumePrefetchResponse(rscUrl, interceptionContext = null, mountedSlot
|
|
|
394
414
|
deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, false);
|
|
395
415
|
if (entry.snapshot) {
|
|
396
416
|
if ((entry.snapshot.mountedSlotsHeader ?? null) !== mountedSlotsHeader) return null;
|
|
397
|
-
if (Date.now() - entry.timestamp >=
|
|
417
|
+
if (Date.now() - entry.timestamp >= PREFETCH_CACHE_TTL) return null;
|
|
398
418
|
return entry.snapshot;
|
|
399
419
|
}
|
|
400
420
|
return null;
|
|
401
421
|
}
|
|
422
|
+
async function consumePrefetchResponseForNavigation(rscUrl, interceptionContext = null, mountedSlotsHeader = null, options) {
|
|
423
|
+
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
424
|
+
const cache = getPrefetchCache();
|
|
425
|
+
const entry = cache.get(cacheKey);
|
|
426
|
+
if (!entry) return null;
|
|
427
|
+
if (entry.cacheForNavigation === false) return null;
|
|
428
|
+
if (entry.pending !== void 0) {
|
|
429
|
+
await entry.pending.catch(() => {});
|
|
430
|
+
if (cache.get(cacheKey) !== entry) return null;
|
|
431
|
+
}
|
|
432
|
+
if (options?.shouldConsume?.() === false) return null;
|
|
433
|
+
return consumePrefetchResponse(rscUrl, interceptionContext, mountedSlotsHeader);
|
|
434
|
+
}
|
|
402
435
|
const _CLIENT_NAV_STATE_KEY = Symbol.for("vinext.clientNavigationState");
|
|
403
436
|
const _MOUNTED_SLOTS_HEADER_KEY = Symbol.for("vinext.mountedSlotsHeader");
|
|
404
437
|
function setMountedSlotsHeader(header) {
|
|
@@ -597,9 +630,9 @@ function clearPendingPathname(navId) {
|
|
|
597
630
|
}
|
|
598
631
|
function getClientParamsSnapshot() {
|
|
599
632
|
const state = getClientNavigationState();
|
|
600
|
-
if (state && Object.keys(state.clientParams).length > 0) return state.clientParams;
|
|
601
633
|
const pagesCtx = _getPagesNavigationContext();
|
|
602
634
|
if (pagesCtx) return pagesCtx.params;
|
|
635
|
+
if (state && Object.keys(state.clientParams).length > 0) return state.clientParams;
|
|
603
636
|
return state?.clientParams ?? _EMPTY_PARAMS;
|
|
604
637
|
}
|
|
605
638
|
function getServerParamsSnapshot() {
|
|
@@ -766,14 +799,8 @@ function restoreScrollPosition(state) {
|
|
|
766
799
|
const { __vinext_scrollX: x, __vinext_scrollY: y } = state;
|
|
767
800
|
Promise.resolve().then(() => {
|
|
768
801
|
const pending = window.__VINEXT_RSC_PENDING__ ?? null;
|
|
769
|
-
if (pending) pending.then(() =>
|
|
770
|
-
|
|
771
|
-
window.scrollTo(x, y);
|
|
772
|
-
});
|
|
773
|
-
});
|
|
774
|
-
else requestAnimationFrame(() => {
|
|
775
|
-
window.scrollTo(x, y);
|
|
776
|
-
});
|
|
802
|
+
if (pending) pending.then(() => retryScrollTo(x, y));
|
|
803
|
+
else retryScrollTo(x, y);
|
|
777
804
|
});
|
|
778
805
|
}
|
|
779
806
|
}
|
|
@@ -785,8 +812,15 @@ async function navigateClientSide(href, mode, scroll, programmaticTransition = f
|
|
|
785
812
|
if (isExternalUrl(href)) {
|
|
786
813
|
const localPath = toSameOriginAppPath(href, __basePath);
|
|
787
814
|
if (localPath == null) {
|
|
815
|
+
notifyAppRouterTransitionStart(href, mode);
|
|
816
|
+
const externalNavigate = getNavigationRuntime()?.functions.navigateExternal;
|
|
817
|
+
if (externalNavigate) {
|
|
818
|
+
await externalNavigate(href, mode);
|
|
819
|
+
return;
|
|
820
|
+
}
|
|
788
821
|
if (mode === "replace") window.location.replace(href);
|
|
789
822
|
else window.location.assign(href);
|
|
823
|
+
await new Promise(() => {});
|
|
790
824
|
return;
|
|
791
825
|
}
|
|
792
826
|
normalizedHref = localPath;
|
|
@@ -807,7 +841,7 @@ async function navigateClientSide(href, mode, scroll, programmaticTransition = f
|
|
|
807
841
|
if (!scroll) clearAppRouterScrollIntent();
|
|
808
842
|
const appNavigate = getNavigationRuntime()?.functions.navigate;
|
|
809
843
|
try {
|
|
810
|
-
if (appNavigate) await appNavigate(fullHref, 0, "navigate", mode, void 0, programmaticTransition);
|
|
844
|
+
if (appNavigate) await appNavigate(fullHref, 0, "navigate", mode, void 0, programmaticTransition, void 0, scrollIntent);
|
|
811
845
|
else {
|
|
812
846
|
if (mode === "replace") replaceHistoryStateWithoutNotify(null, "", fullHref);
|
|
813
847
|
else pushHistoryStateWithoutNotify(null, "", fullHref);
|
|
@@ -822,6 +856,22 @@ async function navigateClientSide(href, mode, scroll, programmaticTransition = f
|
|
|
822
856
|
if (fallbackIntent) applyAppRouterScrollFallback(fallbackIntent);
|
|
823
857
|
}
|
|
824
858
|
}
|
|
859
|
+
let scheduledAppRouterNavigationCount = 0;
|
|
860
|
+
function trackScheduledAppRouterNavigation() {
|
|
861
|
+
scheduledAppRouterNavigationCount += 1;
|
|
862
|
+
let released = false;
|
|
863
|
+
return () => {
|
|
864
|
+
if (released) return;
|
|
865
|
+
released = true;
|
|
866
|
+
scheduledAppRouterNavigationCount = Math.max(0, scheduledAppRouterNavigationCount - 1);
|
|
867
|
+
};
|
|
868
|
+
}
|
|
869
|
+
function hasScheduledAppRouterNavigation() {
|
|
870
|
+
return scheduledAppRouterNavigationCount > 0;
|
|
871
|
+
}
|
|
872
|
+
function releaseScheduledAppRouterNavigationAfterCurrentTask(release) {
|
|
873
|
+
queueMicrotask(release);
|
|
874
|
+
}
|
|
825
875
|
/**
|
|
826
876
|
* Public App Router instance, exposed for the browser entry so it can wire
|
|
827
877
|
* `window.next.router` to the same singleton returned from `useRouter()`.
|
|
@@ -834,16 +884,30 @@ const appRouterInstance = {
|
|
|
834
884
|
push(href, options) {
|
|
835
885
|
assertSafeNavigationUrl(href);
|
|
836
886
|
if (isServer) return;
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
887
|
+
const releaseNavigation = trackScheduledAppRouterNavigation();
|
|
888
|
+
try {
|
|
889
|
+
React$1.startTransition(() => {
|
|
890
|
+
navigateClientSide(href, "push", options?.scroll !== false, true);
|
|
891
|
+
});
|
|
892
|
+
} catch (error) {
|
|
893
|
+
releaseNavigation();
|
|
894
|
+
throw error;
|
|
895
|
+
}
|
|
896
|
+
releaseScheduledAppRouterNavigationAfterCurrentTask(releaseNavigation);
|
|
840
897
|
},
|
|
841
898
|
replace(href, options) {
|
|
842
899
|
assertSafeNavigationUrl(href);
|
|
843
900
|
if (isServer) return;
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
901
|
+
const releaseNavigation = trackScheduledAppRouterNavigation();
|
|
902
|
+
try {
|
|
903
|
+
React$1.startTransition(() => {
|
|
904
|
+
navigateClientSide(href, "replace", options?.scroll !== false, true);
|
|
905
|
+
});
|
|
906
|
+
} catch (error) {
|
|
907
|
+
releaseNavigation();
|
|
908
|
+
throw error;
|
|
909
|
+
}
|
|
910
|
+
releaseScheduledAppRouterNavigationAfterCurrentTask(releaseNavigation);
|
|
847
911
|
},
|
|
848
912
|
back() {
|
|
849
913
|
if (isServer) return;
|
|
@@ -856,6 +920,7 @@ const appRouterInstance = {
|
|
|
856
920
|
refresh() {
|
|
857
921
|
if (isServer) return;
|
|
858
922
|
getNavigationRuntime()?.functions.clearNavigationCaches?.();
|
|
923
|
+
if (hasScheduledAppRouterNavigation()) return;
|
|
859
924
|
const rscNavigate = getNavigationRuntime()?.functions.navigate;
|
|
860
925
|
if (rscNavigate) {
|
|
861
926
|
const navigate = () => {
|
|
@@ -1135,10 +1200,44 @@ function unauthorized() {
|
|
|
1135
1200
|
* `shims/error-boundary.tsx`.
|
|
1136
1201
|
*/
|
|
1137
1202
|
function isRedirectError(error) {
|
|
1138
|
-
if (!error || typeof error !== "object"
|
|
1203
|
+
if (!error || typeof error !== "object") return false;
|
|
1204
|
+
if (!("digest" in error)) return false;
|
|
1205
|
+
if (typeof error.digest !== "string") return false;
|
|
1139
1206
|
return error.digest.startsWith("NEXT_REDIRECT;");
|
|
1140
1207
|
}
|
|
1141
1208
|
/**
|
|
1209
|
+
* Parse a redirect error digest into its URL and type components.
|
|
1210
|
+
*
|
|
1211
|
+
* Supports two formats:
|
|
1212
|
+
* - vinext's 3-part: `NEXT_REDIRECT;{type};{encoded-url}`
|
|
1213
|
+
* - Next.js's 5-part: `NEXT_REDIRECT;{type};{url};{status};{isClient}`
|
|
1214
|
+
*
|
|
1215
|
+
* The URL segment is always percent-encoded on the write side
|
|
1216
|
+
* (encodeURIComponent is used), so re-joining with ";" for the 5-part
|
|
1217
|
+
* format is defensive — it correctly handles any unencoded ";" that
|
|
1218
|
+
* might appear in an externally-sourced digest.
|
|
1219
|
+
*
|
|
1220
|
+
* Returns null for malformed digests that have an empty URL segment, or
|
|
1221
|
+
* when the URL contains invalid percent-encoding.
|
|
1222
|
+
*/
|
|
1223
|
+
function decodeRedirectError(digest) {
|
|
1224
|
+
if (!digest.startsWith("NEXT_REDIRECT;")) return null;
|
|
1225
|
+
const parts = digest.split(";");
|
|
1226
|
+
const encodedTarget = parts.length >= 5 ? parts.slice(2, -2).join(";") : parts[2];
|
|
1227
|
+
if (!encodedTarget) return null;
|
|
1228
|
+
let url;
|
|
1229
|
+
try {
|
|
1230
|
+
url = decodeURIComponent(encodedTarget);
|
|
1231
|
+
} catch {
|
|
1232
|
+
return null;
|
|
1233
|
+
}
|
|
1234
|
+
const type = parts[1] === "push" ? "push" : "replace";
|
|
1235
|
+
return {
|
|
1236
|
+
url,
|
|
1237
|
+
type
|
|
1238
|
+
};
|
|
1239
|
+
}
|
|
1240
|
+
/**
|
|
1142
1241
|
* Returns true if the error is a Next.js navigation signal — either a redirect
|
|
1143
1242
|
* or an HTTP access fallback (notFound / forbidden / unauthorized).
|
|
1144
1243
|
*
|
|
@@ -1279,6 +1378,6 @@ if (!isServer) {
|
|
|
1279
1378
|
}
|
|
1280
1379
|
}
|
|
1281
1380
|
//#endregion
|
|
1282
|
-
export { BailoutToCSRError, DynamicServerError, GLOBAL_ACCESSORS_KEY, HTTP_ERROR_FALLBACK_ERROR_CODE, MAX_PREFETCH_CACHE_SIZE, PREFETCH_CACHE_TTL, ReadonlyURLSearchParams, RedirectType, ServerInsertedHTMLContext, UnrecognizedActionError, __basePath, _registerStateAccessors, activateNavigationSnapshot, appRouterInstance, clearPendingPathname, clearServerInsertedHTML, commitClientNavigationState, consumePrefetchResponse, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, flushServerInsertedHTML, forbidden, getAccessFallbackHTTPStatus, getClientNavigationRenderContext, getClientNavigationState, getClientParams, getCurrentInterceptionContext, getCurrentNextUrl, getLayoutSegmentContext, getMountedSlotsHeader, getNavigationContext, getPrefetchCache, getPrefetchInterceptionContext, getPrefetchedUrls, invalidatePrefetchCache, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, navigateClientSide, notFound, permanentRedirect, prefetchRscResponse, pushHistoryStateWithoutNotify, redirect, renderServerInsertedHTML, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, restoreRscResponse, setClientParams, setMountedSlotsHeader, setNavigationContext, setPendingPathname, snapshotRscResponse, storePrefetchResponse, unauthorized, unstable_isUnrecognizedActionError, unstable_rethrow, useParams, usePathname, useRouter, useSearchParams, useSelectedLayoutSegment, useSelectedLayoutSegments, useServerInsertedHTML };
|
|
1381
|
+
export { BailoutToCSRError, DynamicServerError, GLOBAL_ACCESSORS_KEY, HTTP_ERROR_FALLBACK_ERROR_CODE, MAX_PREFETCH_CACHE_SIZE, PREFETCH_CACHE_TTL, ReadonlyURLSearchParams, RedirectType, ServerInsertedHTMLContext, UnrecognizedActionError, __basePath, _registerStateAccessors, activateNavigationSnapshot, appRouterInstance, clearPendingPathname, clearServerInsertedHTML, commitClientNavigationState, consumePrefetchResponse, consumePrefetchResponseForNavigation, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, decodeRedirectError, flushServerInsertedHTML, forbidden, getAccessFallbackHTTPStatus, getClientNavigationRenderContext, getClientNavigationState, getClientParams, getCurrentInterceptionContext, getCurrentNextUrl, getLayoutSegmentContext, getMountedSlotsHeader, getNavigationContext, getPrefetchCache, getPrefetchInterceptionContext, getPrefetchedUrls, invalidatePrefetchCache, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, navigateClientSide, notFound, permanentRedirect, prefetchRscResponse, pushHistoryStateWithoutNotify, redirect, renderServerInsertedHTML, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, restoreRscResponse, saveScrollPosition, setClientParams, setMountedSlotsHeader, setNavigationContext, setPendingPathname, snapshotRscResponse, storePrefetchResponse, unauthorized, unstable_isUnrecognizedActionError, unstable_rethrow, useParams, usePathname, useRouter, useSearchParams, useSelectedLayoutSegment, useSelectedLayoutSegments, useServerInsertedHTML };
|
|
1283
1382
|
|
|
1284
1383
|
//# sourceMappingURL=navigation.js.map
|