vinext 1.4.4 → 1.4.5
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 +3 -1
- package/dist/_virtual/_rolldown/runtime.js +1 -2
- package/dist/build/action-owner-manifest.d.ts +0 -2
- package/dist/build/action-owner-manifest.js +1 -2
- package/dist/build/app-page-static-eligibility.d.ts +0 -2
- package/dist/build/app-page-static-eligibility.js +2 -3
- package/dist/build/assets-ignore.d.ts +1 -3
- package/dist/build/assets-ignore.js +1 -2
- package/dist/build/clean-output.d.ts +0 -2
- package/dist/build/clean-output.js +1 -2
- package/dist/build/client-build-config.d.ts +9 -6
- package/dist/build/client-build-config.js +40 -11
- package/dist/build/client-reference-async.d.ts +0 -2
- package/dist/build/client-reference-async.js +1 -2
- package/dist/build/client-reference-chunks.d.ts +1 -3
- package/dist/build/client-reference-chunks.js +2 -3
- package/dist/build/client-reference-groups.d.ts +0 -2
- package/dist/build/client-reference-groups.js +1 -2
- package/dist/build/css-url-assets.d.ts +0 -2
- package/dist/build/css-url-assets.js +1 -2
- package/dist/build/google-fonts/build-url.d.ts +1 -3
- package/dist/build/google-fonts/build-url.js +1 -2
- package/dist/build/google-fonts/fallback-metrics-data.json.js +1 -2
- package/dist/build/google-fonts/fallback-metrics.d.ts +0 -2
- package/dist/build/google-fonts/fallback-metrics.js +1 -2
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -3
- package/dist/build/google-fonts/find-font-files-in-css.js +1 -2
- package/dist/build/google-fonts/font-data.json.js +1 -2
- package/dist/build/google-fonts/font-metadata.d.ts +0 -2
- package/dist/build/google-fonts/font-metadata.js +1 -2
- package/dist/build/google-fonts/get-axes.d.ts +1 -3
- package/dist/build/google-fonts/get-axes.js +1 -2
- package/dist/build/google-fonts/sort-variants.d.ts +1 -3
- package/dist/build/google-fonts/sort-variants.js +1 -2
- package/dist/build/google-fonts/validate.d.ts +0 -2
- package/dist/build/google-fonts/validate.js +1 -2
- package/dist/build/inject-pregenerated-paths.d.ts +1 -3
- package/dist/build/inject-pregenerated-paths.js +2 -3
- package/dist/build/inline-css.d.ts +0 -2
- package/dist/build/inline-css.js +1 -2
- package/dist/build/lifecycle.d.ts +1 -3
- package/dist/build/lifecycle.js +2 -3
- package/dist/build/module-dependency-cache.d.ts +0 -2
- package/dist/build/module-dependency-cache.js +1 -2
- package/dist/build/next-client-runtime-manifests.d.ts +1 -3
- package/dist/build/next-client-runtime-manifests.js +2 -3
- package/dist/build/nitro-public-files.d.ts +1 -3
- package/dist/build/nitro-public-files.js +1 -2
- package/dist/build/output-root-externals.d.ts +1 -3
- package/dist/build/output-root-externals.js +1 -2
- package/dist/build/pages-client-assets-module.d.ts +1 -3
- package/dist/build/pages-client-assets-module.js +2 -3
- package/dist/build/precompress.d.ts +0 -2
- package/dist/build/precompress.js +1 -2
- package/dist/build/prerender-cloudflare-loader.d.ts +1 -3
- package/dist/build/prerender-cloudflare-loader.js +1 -2
- package/dist/build/prerender-paths.d.ts +2 -4
- package/dist/build/prerender-paths.js +18 -19
- package/dist/build/prerender-phase.d.ts +0 -2
- package/dist/build/prerender-phase.js +1 -2
- package/dist/build/prerender-server-entry.js +2 -3
- package/dist/build/prerender-server-pool.d.ts +1 -3
- package/dist/build/prerender-server-pool.js +1 -2
- package/dist/build/prerender.d.ts +1 -3
- package/dist/build/prerender.js +34 -29
- package/dist/build/preview-credentials.d.ts +1 -3
- package/dist/build/preview-credentials.js +1 -2
- package/dist/build/public-dir-conflict.d.ts +1 -3
- package/dist/build/public-dir-conflict.js +1 -2
- package/dist/build/report.d.ts +1 -3
- package/dist/build/report.js +1 -2
- package/dist/build/run-prerender.d.ts +1 -3
- package/dist/build/run-prerender.js +7 -8
- package/dist/build/server-actions-encryption-key.d.ts +0 -2
- package/dist/build/server-actions-encryption-key.js +1 -2
- package/dist/build/server-entry.d.ts +1 -3
- package/dist/build/server-entry.js +1 -2
- package/dist/build/server-manifest.d.ts +1 -3
- package/dist/build/server-manifest.js +1 -2
- package/dist/build/ssr-manifest.d.ts +1 -3
- package/dist/build/ssr-manifest.js +1 -2
- package/dist/build/standalone.d.ts +0 -2
- package/dist/build/standalone.js +2 -3
- package/dist/build/static-export.d.ts +2 -4
- package/dist/build/static-export.js +2 -3
- package/dist/cache/cache-adapters-virtual.d.ts +0 -2
- package/dist/cache/cache-adapters-virtual.js +1 -2
- package/dist/check.d.ts +0 -2
- package/dist/check.js +2 -3
- package/dist/cli-args.d.ts +0 -2
- package/dist/cli-args.js +1 -2
- package/dist/cli-dev-config.d.ts +1 -3
- package/dist/cli-dev-config.js +1 -2
- package/dist/cli.js +5 -6
- package/dist/client/app-nav-failure-handler.d.ts +1 -3
- package/dist/client/app-nav-failure-handler.js +1 -2
- package/dist/client/browser-globals.d.ts +1 -3
- package/dist/client/browser-globals.js +1 -2
- package/dist/client/client-redirect-matcher.d.ts +1 -3
- package/dist/client/client-redirect-matcher.js +1 -2
- package/dist/client/client-redirects.d.ts +0 -2
- package/dist/client/client-redirects.js +1 -2
- package/dist/client/client-rewrite-matcher.d.ts +1 -3
- package/dist/client/client-rewrite-matcher.js +2 -3
- package/dist/client/client-rewrite-params.d.ts +1 -3
- package/dist/client/client-rewrite-params.js +1 -2
- package/dist/client/client-rewrites.d.ts +0 -2
- package/dist/client/client-rewrites.js +1 -2
- package/dist/client/dev-error-overlay-store.d.ts +0 -2
- package/dist/client/dev-error-overlay-store.js +1 -2
- package/dist/client/dev-error-overlay.d.ts +1 -3
- package/dist/client/dev-error-overlay.js +3 -4
- package/dist/client/instrumentation-client-inject.d.ts +1 -3
- package/dist/client/instrumentation-client-inject.js +1 -2
- package/dist/client/instrumentation-client-state.d.ts +1 -3
- package/dist/client/instrumentation-client-state.js +1 -2
- package/dist/client/instrumentation-client.d.ts +1 -3
- package/dist/client/instrumentation-client.js +1 -2
- package/dist/client/navigation-runtime.d.ts +3 -4
- package/dist/client/navigation-runtime.js +2 -3
- package/dist/client/pages-router-link-navigation.d.ts +0 -2
- package/dist/client/pages-router-link-navigation.js +1 -2
- package/dist/client/react-instance-bootstrap.js +1 -2
- package/dist/client/react-instance.d.ts +1 -3
- package/dist/client/react-instance.js +1 -2
- package/dist/client/validate-module-path.d.ts +1 -3
- package/dist/client/validate-module-path.js +1 -2
- package/dist/client/vinext-next-data.d.ts +0 -2
- package/dist/client/vinext-next-data.js +1 -2
- package/dist/client/window-next.d.ts +0 -2
- package/dist/client/window-next.js +1 -2
- package/dist/config/config-matchers.d.ts +0 -2
- package/dist/config/config-matchers.js +1 -2
- package/dist/config/config-source.d.ts +1 -3
- package/dist/config/config-source.js +1 -2
- package/dist/config/destination-params.d.ts +1 -3
- package/dist/config/destination-params.js +1 -2
- package/dist/config/dotenv.d.ts +0 -2
- package/dist/config/dotenv.js +1 -2
- package/dist/config/header-params.d.ts +1 -3
- package/dist/config/header-params.js +1 -2
- package/dist/config/next-config.d.ts +0 -2
- package/dist/config/next-config.js +6 -7
- package/dist/config/prerender.d.ts +0 -2
- package/dist/config/prerender.js +2 -3
- package/dist/config/request-context.d.ts +1 -3
- package/dist/config/request-context.js +1 -2
- package/dist/config/server-external-packages.d.ts +1 -3
- package/dist/config/server-external-packages.js +1 -2
- package/dist/config/tsconfig-paths.d.ts +0 -2
- package/dist/config/tsconfig-paths.js +2 -3
- package/dist/deps/.pnpm/am-i-vibing@0.5.0/deps/am-i-vibing/dist/detector-1yx2Hoe0.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +1 -2
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +1 -2
- package/dist/deps/.pnpm/ignore@5.3.2/deps/ignore/index.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +2 -3
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +2 -3
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +3 -4
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +2 -3
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +2 -3
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +1 -2
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +1 -2
- package/dist/deps/.pnpm/pathslash@0.1.0/deps/pathslash/dist/index.js +1 -2
- package/dist/deps/.pnpm/process-ancestry@0.1.0/deps/process-ancestry/dist/index.js +1 -2
- package/dist/deps/.pnpm/safer-buffer@2.1.2/deps/safer-buffer/safer.js +1 -2
- package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +1 -2
- package/dist/entries/app-browser-entry.d.ts +1 -3
- package/dist/entries/app-browser-entry.js +3 -4
- package/dist/entries/app-rsc-entry.d.ts +4 -4
- package/dist/entries/app-rsc-entry.js +57 -29
- package/dist/entries/app-rsc-manifest.d.ts +17 -4
- package/dist/entries/app-rsc-manifest.js +28 -7
- package/dist/entries/app-ssr-entry.d.ts +1 -3
- package/dist/entries/app-ssr-entry.js +1 -2
- package/dist/entries/pages-client-entry.d.ts +2 -4
- package/dist/entries/pages-client-entry.js +7 -8
- package/dist/entries/pages-server-entry.d.ts +0 -2
- package/dist/entries/pages-server-entry.js +3 -4
- package/dist/entries/runtime-entry-module.d.ts +1 -3
- package/dist/entries/runtime-entry-module.js +1 -2
- package/dist/image/image-adapters-virtual.d.ts +0 -2
- package/dist/image/image-adapters-virtual.js +1 -2
- package/dist/index.d.ts +3 -5
- package/dist/index.js +81 -67
- package/dist/init-cloudflare.d.ts +1 -3
- package/dist/init-cloudflare.js +6 -8
- package/dist/init-platform.d.ts +1 -3
- package/dist/init-platform.js +1 -2
- package/dist/init.d.ts +0 -2
- package/dist/init.js +2 -3
- package/dist/plugins/action-owner-manifest.d.ts +1 -3
- package/dist/plugins/action-owner-manifest.js +1 -2
- package/dist/plugins/ast-scope.d.ts +1 -3
- package/dist/plugins/ast-scope.js +1 -2
- package/dist/plugins/ast-utils.d.ts +1 -3
- package/dist/plugins/ast-utils.js +1 -2
- package/dist/plugins/async-hooks-stub.d.ts +1 -3
- package/dist/plugins/async-hooks-stub.js +1 -2
- package/dist/plugins/client-compile-hints.d.ts +1 -3
- package/dist/plugins/client-compile-hints.js +1 -2
- package/dist/plugins/client-reference-dedup.d.ts +0 -2
- package/dist/plugins/client-reference-dedup.js +1 -2
- package/dist/plugins/cloudflare-dev-module-urls.d.ts +0 -2
- package/dist/plugins/cloudflare-dev-module-urls.js +3 -3
- package/dist/plugins/commonjs-esm-facade.d.ts +1 -3
- package/dist/plugins/commonjs-esm-facade.js +1 -2
- package/dist/plugins/commonjs-syntax.d.ts +1 -3
- package/dist/plugins/commonjs-syntax.js +0 -1
- package/dist/plugins/css-data-url.d.ts +1 -3
- package/dist/plugins/css-data-url.js +1 -2
- package/dist/plugins/css-module-imports.d.ts +1 -3
- package/dist/plugins/css-module-imports.js +1 -2
- package/dist/plugins/css-target.d.ts +1 -3
- package/dist/plugins/css-target.js +1 -2
- package/dist/plugins/dynamic-preload-metadata.d.ts +0 -2
- package/dist/plugins/dynamic-preload-metadata.js +5 -6
- package/dist/plugins/environment.d.ts +0 -2
- package/dist/plugins/environment.js +1 -2
- package/dist/plugins/extensionless-dynamic-import.d.ts +1 -3
- package/dist/plugins/extensionless-dynamic-import.js +4 -5
- package/dist/plugins/fonts.d.ts +1 -3
- package/dist/plugins/fonts.js +3 -4
- package/dist/plugins/ignore-dynamic-requests.d.ts +0 -2
- package/dist/plugins/ignore-dynamic-requests.js +4 -5
- package/dist/plugins/import-meta-url.d.ts +0 -2
- package/dist/plugins/import-meta-url.js +3 -4
- package/dist/plugins/instrumentation-client.d.ts +1 -3
- package/dist/plugins/instrumentation-client.js +2 -3
- package/dist/plugins/middleware-export-validation.d.ts +1 -3
- package/dist/plugins/middleware-export-validation.js +2 -3
- package/dist/plugins/middleware-server-only.d.ts +1 -3
- package/dist/plugins/middleware-server-only.js +1 -2
- package/dist/plugins/next-intl-catalog.d.ts +1 -3
- package/dist/plugins/next-intl-catalog.js +2 -3
- package/dist/plugins/nitro-dev-deps-optimizer-gate.d.ts +17 -0
- package/dist/plugins/nitro-dev-deps-optimizer-gate.js +41 -0
- package/dist/plugins/og-asset-ownership.d.ts +1 -3
- package/dist/plugins/og-asset-ownership.js +2 -3
- package/dist/plugins/og-assets.d.ts +0 -2
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/og-harfbuzz.d.ts +1 -3
- package/dist/plugins/og-harfbuzz.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +0 -2
- package/dist/plugins/optimize-imports.js +2 -3
- package/dist/plugins/pages-node-externals.d.ts +0 -2
- package/dist/plugins/pages-node-externals.js +2 -3
- package/dist/plugins/postcss.d.ts +1 -3
- package/dist/plugins/postcss.js +1 -2
- package/dist/plugins/remove-console.d.ts +0 -2
- package/dist/plugins/remove-console.js +1 -2
- package/dist/plugins/require-condition-resolution.d.ts +0 -2
- package/dist/plugins/require-condition-resolution.js +2 -3
- package/dist/plugins/require-context.d.ts +1 -3
- package/dist/plugins/require-context.js +2 -3
- package/dist/plugins/rsc-client-reference-loaders.d.ts +1 -3
- package/dist/plugins/rsc-client-reference-loaders.js +3 -4
- package/dist/plugins/rsc-client-shim-excludes.d.ts +1 -3
- package/dist/plugins/rsc-client-shim-excludes.js +1 -2
- package/dist/plugins/rsc-reference-validation-normalizer.d.ts +1 -3
- package/dist/plugins/rsc-reference-validation-normalizer.js +1 -2
- package/dist/plugins/rsc-scan-glob-imports.d.ts +1 -3
- package/dist/plugins/rsc-scan-glob-imports.js +1 -2
- package/dist/plugins/sass.d.ts +0 -2
- package/dist/plugins/sass.js +2 -3
- package/dist/plugins/scan-build-css.d.ts +1 -3
- package/dist/plugins/scan-build-css.js +1 -2
- package/dist/plugins/server-externals-manifest.d.ts +1 -3
- package/dist/plugins/server-externals-manifest.js +1 -2
- package/dist/plugins/strip-server-exports.d.ts +0 -2
- package/dist/plugins/strip-server-exports.js +2 -3
- package/dist/plugins/styled-jsx.d.ts +0 -2
- package/dist/plugins/styled-jsx.js +35 -9
- package/dist/plugins/transform-cache.d.ts +1 -3
- package/dist/plugins/transform-cache.js +1 -2
- package/dist/plugins/transform-result.d.ts +12 -2
- package/dist/plugins/transform-result.js +16 -3
- package/dist/plugins/transitive-externals.d.ts +1 -3
- package/dist/plugins/transitive-externals.js +2 -3
- package/dist/plugins/typeof-window.d.ts +0 -2
- package/dist/plugins/typeof-window.js +2 -3
- package/dist/plugins/use-cache-callable.d.ts +0 -2
- package/dist/plugins/use-cache-callable.js +7 -8
- package/dist/plugins/wasm-module-import.d.ts +1 -3
- package/dist/plugins/wasm-module-import.js +1 -2
- package/dist/plugins/worker-image-imports.d.ts +1 -3
- package/dist/plugins/worker-image-imports.js +3 -4
- package/dist/plugins/worker-server-only-imports.d.ts +1 -3
- package/dist/plugins/worker-server-only-imports.js +1 -2
- package/dist/plugins/worker-use-server.d.ts +0 -2
- package/dist/plugins/worker-use-server.js +5 -6
- package/dist/routing/app-route-graph.d.ts +0 -2
- package/dist/routing/app-route-graph.js +2 -3
- package/dist/routing/app-route-ids.d.ts +1 -3
- package/dist/routing/app-route-ids.js +1 -2
- package/dist/routing/app-router.d.ts +0 -2
- package/dist/routing/app-router.js +2 -3
- package/dist/routing/browser-route-manifest.d.ts +0 -2
- package/dist/routing/browser-route-manifest.js +1 -2
- package/dist/routing/file-matcher.d.ts +1 -3
- package/dist/routing/file-matcher.js +1 -2
- package/dist/routing/hashed-route-patterns.d.ts +1 -3
- package/dist/routing/hashed-route-patterns.js +2 -3
- package/dist/routing/optimistic-route-trie.d.ts +0 -2
- package/dist/routing/optimistic-route-trie.js +1 -2
- package/dist/routing/pages-router.d.ts +0 -2
- package/dist/routing/pages-router.js +2 -3
- package/dist/routing/route-matching.d.ts +0 -2
- package/dist/routing/route-matching.js +1 -2
- package/dist/routing/route-pattern.d.ts +0 -2
- package/dist/routing/route-pattern.js +1 -2
- package/dist/routing/route-trie.d.ts +1 -3
- package/dist/routing/route-trie.js +1 -2
- package/dist/routing/route-validation.d.ts +1 -3
- package/dist/routing/route-validation.js +1 -2
- package/dist/routing/utils.d.ts +1 -3
- package/dist/routing/utils.js +1 -2
- package/dist/server/accept-encoding.d.ts +0 -2
- package/dist/server/accept-encoding.js +1 -2
- package/dist/server/api-handler.d.ts +1 -3
- package/dist/server/api-handler.js +9 -10
- package/dist/server/app-action-forwarding.d.ts +0 -2
- package/dist/server/app-action-forwarding.js +10 -14
- package/dist/server/app-action-request.d.ts +1 -3
- package/dist/server/app-action-request.js +1 -2
- package/dist/server/app-bfcache-id.d.ts +1 -4
- package/dist/server/app-bfcache-id.js +2 -9
- package/dist/server/app-bfcache-identity.d.ts +3 -4
- package/dist/server/app-bfcache-identity.js +8 -5
- package/dist/server/app-browser-action-result.d.ts +1 -3
- package/dist/server/app-browser-action-result.js +1 -2
- package/dist/server/app-browser-entry.js +27 -38
- package/dist/server/app-browser-error.d.ts +0 -2
- package/dist/server/app-browser-error.js +3 -4
- package/dist/server/app-browser-history-controller.d.ts +1 -3
- package/dist/server/app-browser-history-controller.js +1 -2
- package/dist/server/app-browser-hydration.d.ts +0 -2
- package/dist/server/app-browser-hydration.js +1 -2
- package/dist/server/app-browser-interception-context.d.ts +0 -2
- package/dist/server/app-browser-interception-context.js +3 -4
- package/dist/server/app-browser-mpa-navigation.d.ts +1 -3
- package/dist/server/app-browser-mpa-navigation.js +1 -2
- package/dist/server/app-browser-navigation-abort.d.ts +1 -3
- package/dist/server/app-browser-navigation-abort.js +1 -2
- package/dist/server/app-browser-navigation-controller.d.ts +5 -7
- package/dist/server/app-browser-navigation-controller.js +6 -7
- package/dist/server/app-browser-navigation-response.d.ts +1 -3
- package/dist/server/app-browser-navigation-response.js +1 -2
- package/dist/server/app-browser-popstate.d.ts +0 -2
- package/dist/server/app-browser-popstate.js +1 -2
- package/dist/server/app-browser-prefetch-response.d.ts +2 -4
- package/dist/server/app-browser-prefetch-response.js +2 -3
- package/dist/server/app-browser-rsc-redirect.d.ts +0 -2
- package/dist/server/app-browser-rsc-redirect.js +2 -3
- package/dist/server/app-browser-server-action-client.d.ts +1 -3
- package/dist/server/app-browser-server-action-client.js +8 -9
- package/dist/server/app-browser-server-action-navigation.d.ts +1 -3
- package/dist/server/app-browser-server-action-navigation.js +1 -2
- package/dist/server/app-browser-state.d.ts +4 -6
- package/dist/server/app-browser-state.js +13 -12
- package/dist/server/app-browser-stream.d.ts +0 -2
- package/dist/server/app-browser-stream.js +2 -3
- package/dist/server/app-browser-supplemental-refresh.d.ts +3 -5
- package/dist/server/app-browser-supplemental-refresh.js +6 -7
- package/dist/server/app-browser-visible-commit.d.ts +3 -5
- package/dist/server/app-browser-visible-commit.js +4 -5
- package/dist/server/app-client-reference-manifest.d.ts +0 -2
- package/dist/server/app-client-reference-manifest.js +1 -2
- package/dist/server/app-client-reference-preloader.d.ts +0 -2
- package/dist/server/app-client-reference-preloader.js +1 -2
- package/dist/server/app-elements-wire-key.d.ts +1 -3
- package/dist/server/app-elements-wire-key.js +1 -2
- package/dist/server/app-elements-wire.d.ts +4 -2
- package/dist/server/app-elements-wire.js +16 -5
- package/dist/server/app-elements.d.ts +0 -2
- package/dist/server/app-elements.js +1 -2
- package/dist/server/app-fallback-renderer.d.ts +10 -8
- package/dist/server/app-fallback-renderer.js +13 -11
- package/dist/server/app-fetch-tracing.d.ts +1 -3
- package/dist/server/app-fetch-tracing.js +1 -2
- package/dist/server/app-history-state.d.ts +0 -2
- package/dist/server/app-history-state.js +4 -5
- package/dist/server/app-hook-warning-suppression.d.ts +1 -3
- package/dist/server/app-hook-warning-suppression.js +1 -2
- package/dist/server/app-hydration-cache-publication.d.ts +1 -3
- package/dist/server/app-hydration-cache-publication.js +1 -2
- package/dist/server/app-inline-css-client.d.ts +0 -2
- package/dist/server/app-inline-css-client.js +1 -2
- package/dist/server/app-interception-context-header.d.ts +1 -3
- package/dist/server/app-interception-context-header.js +1 -2
- package/dist/server/app-metadata-tracing.d.ts +0 -2
- package/dist/server/app-metadata-tracing.js +1 -2
- package/dist/server/app-middleware.d.ts +0 -2
- package/dist/server/app-middleware.js +7 -8
- package/dist/server/app-mounted-layouts.d.ts +1 -3
- package/dist/server/app-mounted-layouts.js +1 -2
- package/dist/server/app-mounted-slots-header.d.ts +1 -3
- package/dist/server/app-mounted-slots-header.js +1 -2
- package/dist/server/app-optimistic-routing.d.ts +2 -4
- package/dist/server/app-optimistic-routing.js +4 -5
- package/dist/server/app-page-boundary-render.d.ts +8 -8
- package/dist/server/app-page-boundary-render.js +16 -16
- package/dist/server/app-page-boundary.d.ts +0 -2
- package/dist/server/app-page-boundary.js +3 -4
- package/dist/server/app-page-cache-finalizer.d.ts +1 -3
- package/dist/server/app-page-cache-finalizer.js +8 -9
- package/dist/server/app-page-cache-render.d.ts +3 -5
- package/dist/server/app-page-cache-render.js +5 -6
- package/dist/server/app-page-cache.d.ts +2 -4
- package/dist/server/app-page-cache.js +9 -10
- package/dist/server/app-page-dispatch.d.ts +17 -12
- package/dist/server/app-page-dispatch.js +55 -38
- package/dist/server/app-page-element-builder.d.ts +5 -7
- package/dist/server/app-page-element-builder.js +13 -14
- package/dist/server/app-page-execution.d.ts +0 -2
- package/dist/server/app-page-execution.js +5 -6
- package/dist/server/app-page-head.d.ts +4 -6
- package/dist/server/app-page-head.js +4 -5
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +2 -4
- package/dist/server/app-page-http-access-fallback-metadata.js +4 -5
- package/dist/server/app-page-intercept-segment-config.d.ts +0 -2
- package/dist/server/app-page-intercept-segment-config.js +1 -2
- package/dist/server/app-page-layout-gate.d.ts +0 -2
- package/dist/server/app-page-layout-gate.js +1 -2
- package/dist/server/app-page-method.d.ts +0 -2
- package/dist/server/app-page-method.js +3 -4
- package/dist/server/app-page-navigation-params.d.ts +0 -2
- package/dist/server/app-page-navigation-params.js +1 -2
- package/dist/server/app-page-params.d.ts +1 -3
- package/dist/server/app-page-params.js +1 -2
- package/dist/server/app-page-ppr-runtime.d.ts +1 -3
- package/dist/server/app-page-ppr-runtime.js +2 -3
- package/dist/server/app-page-probe.d.ts +0 -2
- package/dist/server/app-page-probe.js +1 -2
- package/dist/server/app-page-render-identity.d.ts +0 -2
- package/dist/server/app-page-render-identity.js +3 -4
- package/dist/server/app-page-render-observation.d.ts +1 -3
- package/dist/server/app-page-render-observation.js +4 -5
- package/dist/server/app-page-render.d.ts +6 -8
- package/dist/server/app-page-render.js +23 -24
- package/dist/server/app-page-request.d.ts +20 -2
- package/dist/server/app-page-request.js +33 -6
- package/dist/server/app-page-response.d.ts +0 -2
- package/dist/server/app-page-response.js +4 -5
- package/dist/server/app-page-route-wiring.d.ts +4 -6
- package/dist/server/app-page-route-wiring.js +14 -15
- package/dist/server/app-page-rsc-render-status.d.ts +2 -4
- package/dist/server/app-page-rsc-render-status.js +2 -3
- package/dist/server/app-page-search-params-observation.d.ts +0 -2
- package/dist/server/app-page-search-params-observation.js +2 -3
- package/dist/server/app-page-segment-plan.d.ts +0 -2
- package/dist/server/app-page-segment-plan.js +2 -3
- package/dist/server/app-page-segment-state.d.ts +1 -3
- package/dist/server/app-page-segment-state.js +1 -2
- package/dist/server/app-page-stream.d.ts +1 -3
- package/dist/server/app-page-stream.js +5 -6
- package/dist/server/app-page-tracing.d.ts +1 -3
- package/dist/server/app-page-tracing.js +2 -3
- package/dist/server/app-pages-bridge.d.ts +1 -3
- package/dist/server/app-pages-bridge.js +5 -6
- package/dist/server/app-post-middleware-context.d.ts +1 -3
- package/dist/server/app-post-middleware-context.js +2 -3
- package/dist/server/app-ppr-fallback-shell-render.d.ts +0 -2
- package/dist/server/app-ppr-fallback-shell-render.js +1 -2
- package/dist/server/app-ppr-fallback-shell.d.ts +0 -2
- package/dist/server/app-ppr-fallback-shell.js +1 -2
- package/dist/server/app-prerender-endpoints.d.ts +0 -2
- package/dist/server/app-prerender-endpoints.js +2 -3
- package/dist/server/app-prerender-static-params.d.ts +0 -2
- package/dist/server/app-prerender-static-params.js +2 -3
- package/dist/server/app-render-abort-error.d.ts +1 -3
- package/dist/server/app-render-abort-error.js +1 -2
- package/dist/server/app-render-dependency.d.ts +1 -3
- package/dist/server/app-render-dependency.js +1 -2
- package/dist/server/app-request-context.d.ts +1 -3
- package/dist/server/app-request-context.js +2 -3
- package/dist/server/app-request-stage-context.d.ts +1 -3
- package/dist/server/app-request-stage-context.js +1 -2
- package/dist/server/app-request-stage-dispatch.d.ts +3 -5
- package/dist/server/app-request-stage-dispatch.js +6 -7
- package/dist/server/app-request-stage-independent-entry.d.ts +1 -3
- package/dist/server/app-request-stage-independent-entry.js +9 -10
- package/dist/server/app-response-header-provenance.d.ts +1 -3
- package/dist/server/app-response-header-provenance.js +1 -2
- package/dist/server/app-response-stage-entry.d.ts +1 -3
- package/dist/server/app-response-stage-entry.js +9 -10
- package/dist/server/app-route-handler-cache.d.ts +2 -4
- package/dist/server/app-route-handler-cache.js +4 -5
- package/dist/server/app-route-handler-dispatch.d.ts +8 -3
- package/dist/server/app-route-handler-dispatch.js +153 -26
- package/dist/server/app-route-handler-execution.d.ts +4 -6
- package/dist/server/app-route-handler-execution.js +12 -12
- package/dist/server/app-route-handler-middleware-context.d.ts +1 -3
- package/dist/server/app-route-handler-middleware-context.js +1 -2
- package/dist/server/app-route-handler-policy.d.ts +18 -3
- package/dist/server/app-route-handler-policy.js +28 -5
- package/dist/server/app-route-handler-response.d.ts +3 -3
- package/dist/server/app-route-handler-response.js +20 -8
- package/dist/server/app-route-handler-runtime.d.ts +0 -2
- package/dist/server/app-route-handler-runtime.js +4 -5
- package/dist/server/app-route-module-loader.d.ts +0 -2
- package/dist/server/app-route-module-loader.js +1 -2
- package/dist/server/app-route-request-built-ins.d.ts +1 -3
- package/dist/server/app-route-request-built-ins.js +1 -2
- package/dist/server/app-route-tree-prefetch.d.ts +0 -2
- package/dist/server/app-route-tree-prefetch.js +2 -3
- package/dist/server/app-route-tree.d.ts +1 -3
- package/dist/server/app-route-tree.js +1 -2
- package/dist/server/app-router-entry.d.ts +1 -3
- package/dist/server/app-router-entry.js +8 -9
- package/dist/server/app-rsc-cache-busting.d.ts +1 -3
- package/dist/server/app-rsc-cache-busting.js +4 -5
- package/dist/server/app-rsc-combined-handler.d.ts +3 -5
- package/dist/server/app-rsc-combined-handler.js +3 -4
- package/dist/server/app-rsc-embedded-chunks.d.ts +1 -3
- package/dist/server/app-rsc-embedded-chunks.js +1 -2
- package/dist/server/app-rsc-error-handler.d.ts +0 -2
- package/dist/server/app-rsc-error-handler.js +2 -3
- package/dist/server/app-rsc-errors.d.ts +0 -2
- package/dist/server/app-rsc-errors.js +4 -5
- package/dist/server/app-rsc-handler.d.ts +24 -8
- package/dist/server/app-rsc-handler.js +382 -296
- package/dist/server/app-rsc-redirect-flight.d.ts +1 -3
- package/dist/server/app-rsc-redirect-flight.js +1 -2
- package/dist/server/app-rsc-render-mode.d.ts +1 -3
- package/dist/server/app-rsc-render-mode.js +1 -2
- package/dist/server/app-rsc-request-normalization.d.ts +0 -2
- package/dist/server/app-rsc-request-normalization.js +8 -9
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -2
- package/dist/server/app-rsc-response-finalizer.js +15 -12
- package/dist/server/app-rsc-response-stage.d.ts +3 -5
- package/dist/server/app-rsc-response-stage.js +30 -29
- package/dist/server/app-rsc-route-matching.d.ts +0 -2
- package/dist/server/app-rsc-route-matching.js +4 -5
- package/dist/server/app-rsc-state-fingerprint.d.ts +1 -3
- package/dist/server/app-rsc-state-fingerprint.js +1 -2
- package/dist/server/app-rsc-vary.d.ts +1 -3
- package/dist/server/app-rsc-vary.js +1 -2
- package/dist/server/app-segment-config.d.ts +0 -2
- package/dist/server/app-segment-config.js +1 -2
- package/dist/server/app-server-action-execution.d.ts +4 -6
- package/dist/server/app-server-action-execution.js +27 -30
- package/dist/server/app-ssr-entry.d.ts +1 -3
- package/dist/server/app-ssr-entry.js +29 -30
- package/dist/server/app-ssr-error-meta.d.ts +0 -2
- package/dist/server/app-ssr-error-meta.js +1 -2
- package/dist/server/app-ssr-router-instance.d.ts +1 -3
- package/dist/server/app-ssr-router-instance.js +2 -3
- package/dist/server/app-ssr-search-params-gate.d.ts +0 -2
- package/dist/server/app-ssr-search-params-gate.js +1 -2
- package/dist/server/app-ssr-stream.d.ts +0 -2
- package/dist/server/app-ssr-stream.js +1 -2
- package/dist/server/app-static-generation.d.ts +0 -2
- package/dist/server/app-static-generation.js +1 -2
- package/dist/server/app-streamed-client-references.d.ts +1 -3
- package/dist/server/app-streamed-client-references.js +4 -4
- package/dist/server/app-visited-response-cache.d.ts +1 -3
- package/dist/server/app-visited-response-cache.js +4 -16
- package/dist/server/app-worker-stages.d.ts +1 -3
- package/dist/server/app-worker-stages.js +4 -5
- package/dist/server/artifact-compatibility.d.ts +0 -2
- package/dist/server/artifact-compatibility.js +2 -3
- package/dist/server/before-interactive-head.d.ts +1 -3
- package/dist/server/before-interactive-head.js +1 -2
- package/dist/server/bfcache-identity.d.ts +0 -2
- package/dist/server/bfcache-identity.js +1 -2
- package/dist/server/cache-control.d.ts +0 -2
- package/dist/server/cache-control.js +1 -2
- package/dist/server/cache-headers.d.ts +0 -2
- package/dist/server/cache-headers.js +1 -2
- package/dist/server/cache-proof.d.ts +1 -3
- package/dist/server/cache-proof.js +1 -2
- package/dist/server/cacheability-limits.d.ts +1 -3
- package/dist/server/cacheability-limits.js +1 -2
- package/dist/server/cacheability-manifest.d.ts +1 -3
- package/dist/server/cacheability-manifest.js +1 -2
- package/dist/server/cacheability-request.d.ts +1 -3
- package/dist/server/cacheability-request.js +5 -6
- package/dist/server/client-build-files.d.ts +1 -3
- package/dist/server/client-build-files.js +1 -2
- package/dist/server/client-trace-metadata.d.ts +1 -3
- package/dist/server/client-trace-metadata.js +1 -2
- package/dist/server/cloudflare-workers-tracing.js +1 -2
- package/dist/server/config-headers.d.ts +0 -2
- package/dist/server/config-headers.js +3 -4
- package/dist/server/cookie-utils.d.ts +1 -3
- package/dist/server/cookie-utils.js +1 -2
- package/dist/server/csp.d.ts +0 -2
- package/dist/server/csp.js +1 -2
- package/dist/server/default-global-error-module.d.ts +1 -3
- package/dist/server/default-global-error-module.js +1 -2
- package/dist/server/default-global-not-found-module.d.ts +7 -2
- package/dist/server/default-global-not-found-module.js +19 -3
- package/dist/server/default-http-access-fallback-modules.d.ts +1 -3
- package/dist/server/default-http-access-fallback-modules.js +1 -2
- package/dist/server/defer-until-stream-consumed.d.ts +1 -3
- package/dist/server/defer-until-stream-consumed.js +1 -2
- package/dist/server/dev-initial-server-error.d.ts +1 -3
- package/dist/server/dev-initial-server-error.js +1 -2
- package/dist/server/dev-lockfile.d.ts +0 -2
- package/dist/server/dev-lockfile.js +1 -2
- package/dist/server/dev-module-runner.d.ts +0 -2
- package/dist/server/dev-module-runner.js +1 -2
- package/dist/server/dev-origin-check.d.ts +1 -3
- package/dist/server/dev-origin-check.js +1 -2
- package/dist/server/dev-route-files.d.ts +1 -3
- package/dist/server/dev-route-files.js +1 -2
- package/dist/server/dev-server.d.ts +3 -5
- package/dist/server/dev-server.js +28 -26
- package/dist/server/dev-stack-sourcemap.d.ts +0 -2
- package/dist/server/dev-stack-sourcemap.js +1 -2
- package/dist/server/document-initial-head.d.ts +1 -3
- package/dist/server/document-initial-head.js +1 -2
- package/dist/server/edge-api-runtime.d.ts +1 -3
- package/dist/server/edge-api-runtime.js +1 -2
- package/dist/server/file-based-metadata.d.ts +1 -3
- package/dist/server/file-based-metadata.js +3 -4
- package/dist/server/forwarded-middleware-context.d.ts +1 -3
- package/dist/server/forwarded-middleware-context.js +1 -2
- package/dist/server/framework-tracer.d.ts +0 -2
- package/dist/server/framework-tracer.js +1 -2
- package/dist/server/fully-buffered-response.d.ts +1 -3
- package/dist/server/fully-buffered-response.js +1 -2
- package/dist/server/headers.d.ts +6 -2
- package/dist/server/headers.js +8 -3
- package/dist/server/html.d.ts +1 -3
- package/dist/server/html.js +1 -2
- package/dist/server/http-conditional.d.ts +0 -2
- package/dist/server/http-conditional.js +1 -2
- package/dist/server/http-date.d.ts +1 -3
- package/dist/server/http-date.js +1 -2
- package/dist/server/http-error-responses.d.ts +0 -2
- package/dist/server/http-error-responses.js +1 -2
- package/dist/server/http-range.d.ts +1 -3
- package/dist/server/http-range.js +1 -2
- package/dist/server/hybrid-route-priority.d.ts +1 -3
- package/dist/server/hybrid-route-priority.js +1 -2
- package/dist/server/image-animation.d.ts +1 -3
- package/dist/server/image-animation.js +1 -2
- package/dist/server/image-local-patterns.d.ts +1 -3
- package/dist/server/image-local-patterns.js +1 -2
- package/dist/server/image-optimization.d.ts +1 -3
- package/dist/server/image-optimization.js +3 -4
- package/dist/server/image-source-reader.d.ts +1 -3
- package/dist/server/image-source-reader.js +1 -2
- package/dist/server/implicit-tags.d.ts +6 -2
- package/dist/server/implicit-tags.js +12 -3
- package/dist/server/instrumentation-runtime.d.ts +1 -3
- package/dist/server/instrumentation-runtime.js +1 -2
- package/dist/server/instrumentation.d.ts +1 -3
- package/dist/server/instrumentation.js +2 -3
- package/dist/server/isolate-shared-promise.d.ts +9 -4
- package/dist/server/isolate-shared-promise.js +38 -17
- package/dist/server/isr-cache.d.ts +4 -6
- package/dist/server/isr-cache.js +5 -6
- package/dist/server/isr-decision.d.ts +0 -2
- package/dist/server/isr-decision.js +1 -2
- package/dist/server/metadata-route-build-data.d.ts +0 -2
- package/dist/server/metadata-route-build-data.js +2 -3
- package/dist/server/metadata-route-response.d.ts +1 -3
- package/dist/server/metadata-route-response.js +19 -29
- package/dist/server/metadata-routes.d.ts +0 -2
- package/dist/server/metadata-routes.js +1 -2
- package/dist/server/middleware-matcher-pattern.d.ts +1 -3
- package/dist/server/middleware-matcher-pattern.js +1 -2
- package/dist/server/middleware-matcher.d.ts +1 -3
- package/dist/server/middleware-matcher.js +1 -2
- package/dist/server/middleware-response-headers.d.ts +1 -3
- package/dist/server/middleware-response-headers.js +2 -3
- package/dist/server/middleware-runtime.d.ts +0 -2
- package/dist/server/middleware-runtime.js +9 -10
- package/dist/server/middleware.d.ts +2 -4
- package/dist/server/middleware.js +2 -3
- package/dist/server/multi-stage.d.ts +1 -3
- package/dist/server/multi-stage.js +1 -2
- package/dist/server/navigation-planner.d.ts +2 -4
- package/dist/server/navigation-planner.js +5 -6
- package/dist/server/navigation-trace.d.ts +0 -2
- package/dist/server/navigation-trace.js +1 -2
- package/dist/server/next-error-digest.d.ts +0 -2
- package/dist/server/next-error-digest.js +1 -2
- package/dist/server/nitro-public-files-plugin.d.ts +0 -2
- package/dist/server/nitro-public-files-plugin.js +1 -2
- package/dist/server/nitro-public-files.d.ts +0 -2
- package/dist/server/nitro-public-files.js +2 -3
- package/dist/server/nitro-request-target-plugin.d.ts +0 -2
- package/dist/server/nitro-request-target-plugin.js +1 -2
- package/dist/server/node-response-signal.d.ts +1 -3
- package/dist/server/node-response-signal.js +1 -2
- package/dist/server/normalize-path.d.ts +1 -3
- package/dist/server/normalize-path.js +1 -2
- package/dist/server/open-redirect.d.ts +1 -3
- package/dist/server/open-redirect.js +1 -2
- package/dist/server/opentelemetry-api.d.ts +0 -2
- package/dist/server/opentelemetry-api.js +1 -2
- package/dist/server/opentelemetry-tracing.d.ts +1 -3
- package/dist/server/opentelemetry-tracing.js +2 -3
- package/dist/server/operation-token.d.ts +0 -2
- package/dist/server/operation-token.js +1 -2
- package/dist/server/otel-tracer-extension.d.ts +1 -3
- package/dist/server/otel-tracer-extension.js +1 -2
- package/dist/server/pages-api-route.d.ts +3 -5
- package/dist/server/pages-api-route.js +9 -9
- package/dist/server/pages-asset-tags.d.ts +0 -2
- package/dist/server/pages-asset-tags.js +2 -3
- package/dist/server/pages-body-parser-config.d.ts +0 -2
- package/dist/server/pages-body-parser-config.js +1 -2
- package/dist/server/pages-cache-tag.d.ts +1 -3
- package/dist/server/pages-cache-tag.js +1 -2
- package/dist/server/pages-client-assets.d.ts +1 -3
- package/dist/server/pages-client-assets.js +1 -2
- package/dist/server/pages-data-route.d.ts +0 -2
- package/dist/server/pages-data-route.js +3 -4
- package/dist/server/pages-default-404.d.ts +1 -3
- package/dist/server/pages-default-404.js +1 -2
- package/dist/server/pages-dev-hydration.d.ts +1 -3
- package/dist/server/pages-dev-hydration.js +2 -3
- package/dist/server/pages-dev-module-url.d.ts +1 -3
- package/dist/server/pages-dev-module-url.js +1 -2
- package/dist/server/pages-dev-stylesheets.d.ts +1 -3
- package/dist/server/pages-dev-stylesheets.js +1 -2
- package/dist/server/pages-document-asset-props.d.ts +0 -2
- package/dist/server/pages-document-asset-props.js +2 -3
- package/dist/server/pages-document-initial-props.d.ts +0 -2
- package/dist/server/pages-document-initial-props.js +1 -2
- package/dist/server/pages-document-splice.d.ts +1 -3
- package/dist/server/pages-document-splice.js +1 -2
- package/dist/server/pages-execution-tracing.d.ts +0 -2
- package/dist/server/pages-execution-tracing.js +2 -3
- package/dist/server/pages-get-initial-props.d.ts +0 -2
- package/dist/server/pages-get-initial-props.js +1 -2
- package/dist/server/pages-i18n.d.ts +0 -2
- package/dist/server/pages-i18n.js +1 -2
- package/dist/server/pages-media-type.d.ts +1 -3
- package/dist/server/pages-media-type.js +1 -2
- package/dist/server/pages-node-compat.d.ts +0 -2
- package/dist/server/pages-node-compat.js +2 -3
- package/dist/server/pages-page-data.d.ts +6 -3
- package/dist/server/pages-page-data.js +28 -20
- package/dist/server/pages-page-handler.d.ts +2 -4
- package/dist/server/pages-page-handler.js +39 -32
- package/dist/server/pages-page-method.d.ts +0 -2
- package/dist/server/pages-page-method.js +1 -2
- package/dist/server/pages-page-response.d.ts +0 -2
- package/dist/server/pages-page-response.js +16 -17
- package/dist/server/pages-preview.d.ts +0 -2
- package/dist/server/pages-preview.js +1 -2
- package/dist/server/pages-readiness.d.ts +0 -2
- package/dist/server/pages-readiness.js +1 -2
- package/dist/server/pages-request-pipeline.d.ts +1 -3
- package/dist/server/pages-request-pipeline.js +15 -16
- package/dist/server/pages-request-stage-entry.d.ts +1 -3
- package/dist/server/pages-request-stage-entry.js +20 -21
- package/dist/server/pages-response-stage-entry.d.ts +1 -3
- package/dist/server/pages-response-stage-entry.js +6 -7
- package/dist/server/pages-response-stage.d.ts +1 -3
- package/dist/server/pages-response-stage.js +2 -3
- package/dist/server/pages-revalidate.d.ts +1 -3
- package/dist/server/pages-revalidate.js +4 -5
- package/dist/server/pages-route-data-kind.d.ts +0 -2
- package/dist/server/pages-route-data-kind.js +1 -2
- package/dist/server/pages-router-entry.d.ts +0 -2
- package/dist/server/pages-router-entry.js +8 -9
- package/dist/server/pages-serializable-props.d.ts +1 -3
- package/dist/server/pages-serializable-props.js +1 -2
- package/dist/server/pregenerated-concrete-paths.d.ts +1 -3
- package/dist/server/pregenerated-concrete-paths.js +1 -2
- package/dist/server/prerender-cache-life-header.d.ts +0 -2
- package/dist/server/prerender-cache-life-header.js +2 -3
- package/dist/server/prerender-manifest.d.ts +1 -3
- package/dist/server/prerender-manifest.js +1 -2
- package/dist/server/prerender-route-params.d.ts +0 -2
- package/dist/server/prerender-route-params.js +3 -4
- package/dist/server/prerender-work-unit-setup.d.ts +1 -3
- package/dist/server/prerender-work-unit-setup.js +2 -3
- package/dist/server/prod-server-shutdown.d.ts +5 -0
- package/dist/server/prod-server-shutdown.js +47 -0
- package/dist/server/prod-server.d.ts +2 -4
- package/dist/server/prod-server.js +40 -43
- package/dist/server/proper-error.d.ts +1 -3
- package/dist/server/proper-error.js +1 -2
- package/dist/server/proxy-trust.d.ts +1 -3
- package/dist/server/proxy-trust.js +1 -2
- package/dist/server/remove-request-headers.d.ts +1 -3
- package/dist/server/remove-request-headers.js +1 -2
- package/dist/server/request-error-log.d.ts +1 -3
- package/dist/server/request-error-log.js +1 -2
- package/dist/server/request-log.d.ts +0 -2
- package/dist/server/request-log.js +1 -2
- package/dist/server/request-pipeline.d.ts +1 -3
- package/dist/server/request-pipeline.js +3 -4
- package/dist/server/request-stage.d.ts +1 -3
- package/dist/server/request-stage.js +1 -2
- package/dist/server/request-tracing.d.ts +5 -3
- package/dist/server/request-tracing.js +15 -8
- package/dist/server/response-compression.d.ts +1 -3
- package/dist/server/response-compression.js +1 -2
- package/dist/server/response-stage-cacheability.d.ts +3 -5
- package/dist/server/response-stage-cacheability.js +3 -4
- package/dist/server/response-stage-policy.d.ts +1 -3
- package/dist/server/response-stage-policy.js +2 -3
- package/dist/server/response-stage.d.ts +1 -3
- package/dist/server/response-stage.js +1 -2
- package/dist/server/response-start-tracing.d.ts +1 -3
- package/dist/server/response-start-tracing.js +2 -3
- package/dist/server/revalidation-host.d.ts +1 -3
- package/dist/server/revalidation-host.js +2 -3
- package/dist/server/revalidation-request.d.ts +0 -2
- package/dist/server/revalidation-request.js +1 -2
- package/dist/server/route-miss-response.d.ts +8 -0
- package/dist/server/route-miss-response.js +27 -0
- package/dist/server/rsc-completion-metadata.d.ts +1 -3
- package/dist/server/rsc-completion-metadata.js +1 -2
- package/dist/server/rsc-render-stream.d.ts +1 -3
- package/dist/server/rsc-render-stream.js +2 -3
- package/dist/server/seed-cache.d.ts +0 -2
- package/dist/server/seed-cache.js +3 -4
- package/dist/server/server-action-not-found.d.ts +6 -3
- package/dist/server/server-action-not-found.js +11 -3
- package/dist/server/server-globals.d.ts +1 -3
- package/dist/server/server-globals.js +1 -2
- package/dist/server/server-reference-loader.d.ts +1 -3
- package/dist/server/server-reference-loader.js +9 -6
- package/dist/server/shared-cache-identity.d.ts +1 -3
- package/dist/server/shared-cache-identity.js +2 -3
- package/dist/server/socket-error-backstop.d.ts +1 -3
- package/dist/server/socket-error-backstop.js +1 -2
- package/dist/server/srvx-middleware-origin.d.ts +1 -3
- package/dist/server/srvx-middleware-origin.js +1 -2
- package/dist/server/srvx-request-target.d.ts +1 -3
- package/dist/server/srvx-request-target.js +1 -2
- package/dist/server/static-file-cache.d.ts +0 -2
- package/dist/server/static-file-cache.js +1 -2
- package/dist/server/static-file-signal.d.ts +1 -3
- package/dist/server/static-file-signal.js +1 -2
- package/dist/server/streaming-metadata.d.ts +1 -3
- package/dist/server/streaming-metadata.js +1 -2
- package/dist/server/tracer.d.ts +1 -3
- package/dist/server/tracer.js +1 -2
- package/dist/server/worker-image-optimization.d.ts +2 -4
- package/dist/server/worker-image-optimization.js +5 -6
- package/dist/server/worker-prerender-discovery.d.ts +1 -3
- package/dist/server/worker-prerender-discovery.js +1 -2
- package/dist/server/worker-revalidation-context.d.ts +1 -3
- package/dist/server/worker-revalidation-context.js +1 -2
- package/dist/server/worker-stages.d.ts +1 -3
- package/dist/server/worker-stages.js +1 -2
- package/dist/server/worker-utils.d.ts +1 -3
- package/dist/server/worker-utils.js +1 -2
- package/dist/server/workers-tracing.d.ts +1 -3
- package/dist/server/workers-tracing.js +1 -2
- package/dist/shims/amp.d.ts +1 -3
- package/dist/shims/amp.js +1 -2
- package/dist/shims/app-router-navigation.d.ts +303 -0
- package/dist/shims/app-router-navigation.js +1559 -0
- package/dist/shims/app-router-scroll-state.d.ts +1 -3
- package/dist/shims/app-router-scroll-state.js +1 -2
- package/dist/shims/app-router-scroll.d.ts +1 -3
- package/dist/shims/app-router-scroll.js +2 -3
- package/dist/shims/app-router-tree-context.d.ts +12 -2
- package/dist/shims/app-router-tree-context.js +21 -6
- package/dist/shims/app.d.ts +0 -2
- package/dist/shims/app.js +1 -2
- package/dist/shims/before-interactive-context.d.ts +1 -3
- package/dist/shims/before-interactive-context.js +1 -2
- package/dist/shims/cache-adapter-instantiate.d.ts +1 -3
- package/dist/shims/cache-adapter-instantiate.js +1 -2
- package/dist/shims/cache-callable-runtime.d.ts +1 -3
- package/dist/shims/cache-callable-runtime.js +2 -3
- package/dist/shims/cache-flight-arguments.d.ts +1 -3
- package/dist/shims/cache-flight-arguments.js +1 -2
- package/dist/shims/cache-for-request.d.ts +1 -3
- package/dist/shims/cache-for-request.js +1 -2
- package/dist/shims/cache-handler.d.ts +0 -2
- package/dist/shims/cache-handler.js +1 -2
- package/dist/shims/cache-request-state.d.ts +0 -2
- package/dist/shims/cache-request-state.js +4 -5
- package/dist/shims/cache-runtime.d.ts +1 -3
- package/dist/shims/cache-runtime.js +21 -15
- package/dist/shims/cache.d.ts +2 -4
- package/dist/shims/cache.js +18 -11
- package/dist/shims/cacheability-classification.d.ts +3 -3
- package/dist/shims/cacheability-classification.js +9 -3
- package/dist/shims/caught-not-found-boundaries.d.ts +1 -3
- package/dist/shims/caught-not-found-boundaries.js +1 -2
- package/dist/shims/cdn-cache-state.d.ts +1 -3
- package/dist/shims/cdn-cache-state.js +1 -2
- package/dist/shims/cdn-cache.d.ts +1 -3
- package/dist/shims/cdn-cache.js +1 -2
- package/dist/shims/cdn-purge-routes.d.ts +0 -2
- package/dist/shims/cdn-purge-routes.js +1 -2
- package/dist/shims/client-hook-error.d.ts +1 -3
- package/dist/shims/client-hook-error.js +1 -2
- package/dist/shims/client-locale.d.ts +1 -3
- package/dist/shims/client-locale.js +1 -2
- package/dist/shims/client-page-root.d.ts +0 -2
- package/dist/shims/client-page-root.js +2 -3
- package/dist/shims/compat-router.d.ts +1 -3
- package/dist/shims/compat-router.js +1 -2
- package/dist/shims/config.d.ts +0 -2
- package/dist/shims/config.js +1 -2
- package/dist/shims/constants.d.ts +1 -3
- package/dist/shims/constants.js +1 -2
- package/dist/shims/default-forbidden.d.ts +1 -3
- package/dist/shims/default-forbidden.js +1 -2
- package/dist/shims/default-global-error.d.ts +0 -2
- package/dist/shims/default-global-error.js +1 -2
- package/dist/shims/default-not-found.d.ts +1 -3
- package/dist/shims/default-not-found.js +1 -2
- package/dist/shims/default-unauthorized.d.ts +1 -3
- package/dist/shims/default-unauthorized.js +1 -2
- package/dist/shims/disable-smooth-scroll.d.ts +1 -3
- package/dist/shims/disable-smooth-scroll.js +1 -2
- package/dist/shims/document-placeholders.d.ts +1 -3
- package/dist/shims/document-placeholders.js +1 -2
- package/dist/shims/document.d.ts +0 -2
- package/dist/shims/document.js +1 -2
- package/dist/shims/dynamic-preload-chunks.d.ts +1 -3
- package/dist/shims/dynamic-preload-chunks.js +2 -3
- package/dist/shims/dynamic.d.ts +0 -2
- package/dist/shims/dynamic.js +2 -17
- package/dist/shims/error-boundary-navigation.d.ts +1 -3
- package/dist/shims/error-boundary-navigation.js +4 -5
- package/dist/shims/error-boundary.d.ts +0 -2
- package/dist/shims/error-boundary.js +6 -7
- package/dist/shims/error.d.ts +0 -2
- package/dist/shims/error.js +5 -6
- package/dist/shims/error.react-server.d.ts +0 -2
- package/dist/shims/error.react-server.js +1 -2
- package/dist/shims/fetch-cache-state.d.ts +1 -3
- package/dist/shims/fetch-cache-state.js +1 -2
- package/dist/shims/fetch-cache.d.ts +0 -2
- package/dist/shims/fetch-cache.js +4 -5
- package/dist/shims/font-google-base.d.ts +0 -2
- package/dist/shims/font-google-base.js +2 -3
- package/dist/shims/font-local.d.ts +0 -2
- package/dist/shims/font-local.js +2 -3
- package/dist/shims/font-utils.d.ts +1 -3
- package/dist/shims/font-utils.js +1 -2
- package/dist/shims/form.d.ts +0 -2
- package/dist/shims/form.js +7 -8
- package/dist/shims/hash-scroll.d.ts +1 -3
- package/dist/shims/hash-scroll.js +1 -2
- package/dist/shims/head-state.d.ts +1 -3
- package/dist/shims/head-state.js +2 -3
- package/dist/shims/head.d.ts +11 -6
- package/dist/shims/head.js +23 -13
- package/dist/shims/headers.d.ts +15 -2
- package/dist/shims/headers.js +26 -6
- package/dist/shims/http-access-error-fallback.d.ts +1 -3
- package/dist/shims/http-access-error-fallback.js +1 -2
- package/dist/shims/i18n-context.d.ts +1 -3
- package/dist/shims/i18n-context.js +1 -2
- package/dist/shims/i18n-state.d.ts +1 -3
- package/dist/shims/i18n-state.js +2 -3
- package/dist/shims/image-config.d.ts +1 -3
- package/dist/shims/image-config.js +1 -2
- package/dist/shims/image-props.d.ts +1 -3
- package/dist/shims/image-props.js +1 -2
- package/dist/shims/image.d.ts +0 -2
- package/dist/shims/image.js +2 -3
- package/dist/shims/internal/als-registry.d.ts +1 -3
- package/dist/shims/internal/als-registry.js +1 -2
- package/dist/shims/internal/api-utils.d.ts +1 -3
- package/dist/shims/internal/app-page-props-cache-key.d.ts +1 -3
- package/dist/shims/internal/app-page-props-cache-key.js +1 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +1 -3
- package/dist/shims/internal/app-prefetch-fetch-queue.js +1 -2
- package/dist/shims/internal/app-prefetch-rsc-request.d.ts +1 -3
- package/dist/shims/internal/app-prefetch-rsc-request.js +1 -2
- package/dist/shims/internal/app-route-detection.d.ts +0 -2
- package/dist/shims/internal/app-route-detection.js +1 -2
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +1 -3
- package/dist/shims/internal/app-route-prefetch-policy.js +3 -4
- package/dist/shims/internal/app-router-context.d.ts +1 -3
- package/dist/shims/internal/app-router-context.js +1 -2
- package/dist/shims/internal/cache-context-accessor.d.ts +0 -2
- package/dist/shims/internal/cache-context-accessor.js +1 -2
- package/dist/shims/internal/client-reference-loader.d.ts +0 -2
- package/dist/shims/internal/client-reference-loader.js +1 -2
- package/dist/shims/internal/cookie-serialize.d.ts +0 -2
- package/dist/shims/internal/cookie-serialize.js +1 -2
- package/dist/shims/internal/format-url-object.d.ts +1 -3
- package/dist/shims/internal/format-url-object.js +1 -2
- package/dist/shims/internal/headers-state.d.ts +1 -3
- package/dist/shims/internal/headers-state.js +1 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +0 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.js +4 -5
- package/dist/shims/internal/hybrid-client-route-owner.d.ts +0 -2
- package/dist/shims/internal/hybrid-client-route-owner.js +3 -4
- package/dist/shims/internal/interpolate-as.d.ts +0 -2
- package/dist/shims/internal/interpolate-as.js +1 -2
- package/dist/shims/internal/link-status-registry.d.ts +1 -3
- package/dist/shims/internal/link-status-registry.js +1 -2
- package/dist/shims/internal/make-hanging-promise.d.ts +1 -3
- package/dist/shims/internal/make-hanging-promise.js +1 -2
- package/dist/shims/internal/navigation-untracked.d.ts +1 -3
- package/dist/shims/internal/navigation-untracked.js +2 -3
- package/dist/shims/internal/normalize-router-href.d.ts +1 -3
- package/dist/shims/internal/normalize-router-href.js +1 -2
- package/dist/shims/internal/pages-data-fetch-dedup.d.ts +1 -3
- package/dist/shims/internal/pages-data-fetch-dedup.js +2 -3
- package/dist/shims/internal/pages-data-target.d.ts +0 -2
- package/dist/shims/internal/pages-data-target.js +3 -4
- package/dist/shims/internal/pages-data-url.d.ts +0 -2
- package/dist/shims/internal/pages-data-url.js +1 -2
- package/dist/shims/internal/pages-router-accessor.d.ts +1 -3
- package/dist/shims/internal/pages-router-accessor.js +1 -2
- package/dist/shims/internal/pages-router-components.d.ts +1 -3
- package/dist/shims/internal/pages-router-components.js +1 -2
- package/dist/shims/internal/route-pattern-for-warning.d.ts +1 -3
- package/dist/shims/internal/route-pattern-for-warning.js +1 -2
- package/dist/shims/internal/router-context.d.ts +1 -3
- package/dist/shims/internal/router-context.js +1 -2
- package/dist/shims/internal/thenable-well-known-properties.d.ts +0 -2
- package/dist/shims/internal/thenable-well-known-properties.js +1 -2
- package/dist/shims/internal/utils.d.ts +1 -3
- package/dist/shims/internal/utils.js +1 -2
- package/dist/shims/internal/work-store-scope.d.ts +1 -3
- package/dist/shims/internal/work-store-scope.js +1 -2
- package/dist/shims/internal/work-unit-async-storage.d.ts +1 -3
- package/dist/shims/internal/work-unit-async-storage.js +1 -2
- package/dist/shims/layout-segment-context.d.ts +1 -3
- package/dist/shims/layout-segment-context.js +1 -2
- package/dist/shims/legacy-image.d.ts +0 -2
- package/dist/shims/legacy-image.js +1 -2
- package/dist/shims/link-prefetch.d.ts +1 -3
- package/dist/shims/link-prefetch.js +1 -2
- package/dist/shims/link.d.ts +0 -2
- package/dist/shims/link.js +55 -56
- package/dist/shims/metadata.d.ts +0 -2
- package/dist/shims/metadata.js +2 -3
- package/dist/shims/navigation-context-accessors.d.ts +1 -3
- package/dist/shims/navigation-context-accessors.js +1 -2
- package/dist/shims/navigation-context-state.d.ts +1 -3
- package/dist/shims/navigation-context-state.js +1 -2
- package/dist/shims/navigation-errors.d.ts +0 -2
- package/dist/shims/navigation-errors.js +1 -2
- package/dist/shims/navigation-state.d.ts +1 -3
- package/dist/shims/navigation-state.js +3 -4
- package/dist/shims/navigation.d.ts +6 -323
- package/dist/shims/navigation.js +14 -1603
- package/dist/shims/navigation.react-server.d.ts +2 -4
- package/dist/shims/navigation.react-server.js +2 -3
- package/dist/shims/offline.d.ts +1 -3
- package/dist/shims/offline.js +1 -2
- package/dist/shims/og.d.ts +0 -2
- package/dist/shims/og.js +1 -2
- package/dist/shims/pages-router-runtime.d.ts +0 -2
- package/dist/shims/pages-router-runtime.js +1 -2
- package/dist/shims/ppr-fallback-shell.d.ts +0 -2
- package/dist/shims/ppr-fallback-shell.js +2 -3
- package/dist/shims/public-shim-map.json.js +1 -2
- package/dist/shims/readonly-url-search-params.d.ts +1 -3
- package/dist/shims/readonly-url-search-params.js +1 -2
- package/dist/shims/request-context.d.ts +7 -3
- package/dist/shims/request-context.js +1 -2
- package/dist/shims/request-state-types.d.ts +7 -7
- package/dist/shims/root-params.d.ts +1 -3
- package/dist/shims/root-params.js +2 -3
- package/dist/shims/router-state.d.ts +1 -3
- package/dist/shims/router-state.js +3 -4
- package/dist/shims/router.d.ts +1 -3
- package/dist/shims/router.js +32 -33
- package/dist/shims/script-nonce-context.d.ts +1 -3
- package/dist/shims/script-nonce-context.js +1 -2
- package/dist/shims/script.d.ts +0 -2
- package/dist/shims/script.js +3 -4
- package/dist/shims/search-params-gate.d.ts +1 -3
- package/dist/shims/search-params-gate.js +1 -2
- package/dist/shims/server.d.ts +0 -2
- package/dist/shims/server.js +14 -8
- package/dist/shims/slot.d.ts +1 -3
- package/dist/shims/slot.js +3 -4
- package/dist/shims/streamed-icons.d.ts +1 -3
- package/dist/shims/streamed-icons.js +1 -2
- package/dist/shims/thenable-params.d.ts +1 -3
- package/dist/shims/thenable-params.js +1 -2
- package/dist/shims/unified-request-context.d.ts +6 -2
- package/dist/shims/unified-request-context.js +3 -2
- package/dist/shims/unrecognized-action-error.d.ts +1 -3
- package/dist/shims/unrecognized-action-error.js +1 -2
- package/dist/shims/url-safety.d.ts +1 -3
- package/dist/shims/url-safety.js +1 -2
- package/dist/shims/url-utils.d.ts +1 -3
- package/dist/shims/url-utils.js +2 -3
- package/dist/shims/use-merged-ref.d.ts +1 -3
- package/dist/shims/use-merged-ref.js +1 -2
- package/dist/shims/user-agent.d.ts +1 -3
- package/dist/shims/user-agent.js +1 -2
- package/dist/shims/web-vitals.d.ts +0 -2
- package/dist/shims/web-vitals.js +1 -2
- package/dist/typegen.d.ts +0 -2
- package/dist/typegen.js +3 -4
- package/dist/utils/asset-prefix.d.ts +1 -3
- package/dist/utils/asset-prefix.js +1 -2
- package/dist/utils/base-path.d.ts +1 -3
- package/dist/utils/base-path.js +1 -2
- package/dist/utils/built-asset-url.d.ts +1 -3
- package/dist/utils/built-asset-url.js +1 -2
- package/dist/utils/cache-control-metadata.d.ts +1 -3
- package/dist/utils/cache-control-metadata.js +1 -2
- package/dist/utils/cache-life-profiles.d.ts +1 -3
- package/dist/utils/cache-life-profiles.js +1 -2
- package/dist/utils/client-build-manifest.d.ts +0 -2
- package/dist/utils/client-build-manifest.js +2 -3
- package/dist/utils/client-entry-manifest.d.ts +1 -3
- package/dist/utils/client-entry-manifest.js +2 -3
- package/dist/utils/client-reference-chunks.d.ts +1 -3
- package/dist/utils/client-reference-chunks.js +1 -2
- package/dist/utils/client-runtime-metadata.d.ts +0 -2
- package/dist/utils/client-runtime-metadata.js +4 -5
- package/dist/utils/commonjs-loader.d.ts +1 -3
- package/dist/utils/commonjs-loader.js +1 -2
- package/dist/utils/compare.d.ts +1 -3
- package/dist/utils/compare.js +1 -2
- package/dist/utils/deployment-id.d.ts +1 -3
- package/dist/utils/deployment-id.js +1 -2
- package/dist/utils/dev-error-recovery-event.d.ts +1 -3
- package/dist/utils/dev-error-recovery-event.js +1 -2
- package/dist/utils/dev-stack-sourcemap-endpoint.d.ts +1 -3
- package/dist/utils/dev-stack-sourcemap-endpoint.js +1 -2
- package/dist/utils/domain-locale.d.ts +1 -3
- package/dist/utils/domain-locale.js +1 -2
- package/dist/utils/encode-cache-tag.d.ts +1 -3
- package/dist/utils/encode-cache-tag.js +1 -2
- package/dist/utils/error-cause.d.ts +1 -3
- package/dist/utils/error-cause.js +1 -2
- package/dist/utils/external-url.d.ts +1 -3
- package/dist/utils/external-url.js +1 -2
- package/dist/utils/has-trailing-comma.d.ts +1 -3
- package/dist/utils/has-trailing-comma.js +1 -2
- package/dist/utils/hash.d.ts +1 -3
- package/dist/utils/hash.js +1 -2
- package/dist/utils/html-limited-bots.d.ts +1 -3
- package/dist/utils/html-limited-bots.js +1 -2
- package/dist/utils/lazy-chunks.d.ts +1 -3
- package/dist/utils/lazy-chunks.js +1 -2
- package/dist/utils/manifest-paths.d.ts +1 -3
- package/dist/utils/manifest-paths.js +1 -2
- package/dist/utils/mdx-scan.d.ts +1 -3
- package/dist/utils/mdx-scan.js +1 -2
- package/dist/utils/middleware-request-headers.d.ts +0 -2
- package/dist/utils/middleware-request-headers.js +1 -2
- package/dist/utils/navigation-signal.d.ts +1 -3
- package/dist/utils/navigation-signal.js +1 -2
- package/dist/utils/number.d.ts +1 -3
- package/dist/utils/number.js +1 -2
- package/dist/utils/package-name.d.ts +1 -3
- package/dist/utils/package-name.js +1 -2
- package/dist/utils/parse-cookie.d.ts +1 -3
- package/dist/utils/parse-cookie.js +1 -2
- package/dist/utils/path-to-regexp.d.ts +1 -3
- package/dist/utils/path-to-regexp.js +1 -2
- package/dist/utils/path.d.ts +1 -3
- package/dist/utils/path.js +1 -2
- package/dist/utils/plugin-options.d.ts +1 -3
- package/dist/utils/plugin-options.js +1 -2
- package/dist/utils/plugin-react-version.d.ts +1 -3
- package/dist/utils/plugin-react-version.js +1 -2
- package/dist/utils/plugin-rsc-version.d.ts +1 -3
- package/dist/utils/plugin-rsc-version.js +1 -2
- package/dist/utils/precompressed-variant.d.ts +1 -3
- package/dist/utils/precompressed-variant.js +1 -2
- package/dist/utils/prerender-output-paths.d.ts +10 -3
- package/dist/utils/prerender-output-paths.js +18 -4
- package/dist/utils/project.d.ts +0 -2
- package/dist/utils/project.js +2 -3
- package/dist/utils/promise.d.ts +1 -3
- package/dist/utils/promise.js +1 -2
- package/dist/utils/protocol-headers.d.ts +1 -3
- package/dist/utils/protocol-headers.js +1 -2
- package/dist/utils/public-file-path.d.ts +1 -3
- package/dist/utils/public-file-path.js +1 -2
- package/dist/utils/public-routes.d.ts +1 -3
- package/dist/utils/public-routes.js +1 -2
- package/dist/utils/query.d.ts +0 -2
- package/dist/utils/query.js +1 -2
- package/dist/utils/react-compiler-support.d.ts +1 -3
- package/dist/utils/react-compiler-support.js +1 -2
- package/dist/utils/react-version.d.ts +1 -3
- package/dist/utils/react-version.js +1 -2
- package/dist/utils/record.d.ts +1 -3
- package/dist/utils/record.js +1 -2
- package/dist/utils/redirect-digest.d.ts +1 -3
- package/dist/utils/redirect-digest.js +1 -2
- package/dist/utils/regex.d.ts +1 -3
- package/dist/utils/regex.js +1 -2
- package/dist/utils/safe-json-file.d.ts +1 -3
- package/dist/utils/safe-json-file.js +1 -2
- package/dist/utils/text-stream.d.ts +1 -3
- package/dist/utils/text-stream.js +1 -2
- package/dist/utils/vinext-root.d.ts +1 -3
- package/dist/utils/vinext-root.js +1 -2
- package/dist/utils/virtual-module.d.ts +1 -3
- package/dist/utils/virtual-module.js +0 -0
- package/dist/utils/vite-cli-invocation.d.ts +0 -2
- package/dist/utils/vite-cli-invocation.js +1 -2
- package/dist/utils/vite-version.d.ts +1 -3
- package/dist/utils/vite-version.js +1 -2
- package/package.json +3 -3
|
@@ -0,0 +1,1559 @@
|
|
|
1
|
+
import { __basePath, commitClientNavigationState, getClientNavigationState } from "./navigation.js";
|
|
2
|
+
import { getNavigationRuntime, hasAppNavigationRuntime, loadNavigationRuntimeRouteManifest } from "../client/navigation-runtime.js";
|
|
3
|
+
import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
|
|
4
|
+
import { NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, VINEXT_INTERCEPTION_CONTEXT_HEADER, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_RSC_RENDER_MODE_HEADER } from "../server/app-rsc-vary.js";
|
|
5
|
+
import { clearAppNavigationFailureTarget, stageAppNavigationFailureTarget } from "../client/app-nav-failure-handler.js";
|
|
6
|
+
import "../server/app-bfcache-id.js";
|
|
7
|
+
import "../server/app-elements.js";
|
|
8
|
+
import { resolveManifestNavigationInterceptionContext } from "../server/app-browser-interception-context.js";
|
|
9
|
+
import { createExternalHistoryStatePreservingMetadata, createHashOnlyHistoryStatePreservingNavigationMetadata, isAppOwnedHistoryState, readHistoryStateTraversalIndex } from "../server/app-history-state.js";
|
|
10
|
+
import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath, parseRscRequestPath, stripRscCacheBustingSearchParam } from "../server/app-rsc-cache-busting.js";
|
|
11
|
+
import { hasPendingAppRouterPageRedirect } from "../server/app-browser-mpa-navigation.js";
|
|
12
|
+
import { NEXT_ROUTER_STALE_TIME_HEADER, VINEXT_DYNAMIC_STALE_TIME_HEADER, VINEXT_PARAMS_HEADER, VINEXT_RENDERED_PATH_AND_SEARCH_HEADER, VINEXT_RSC_COMPLETION_METADATA_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_REDIRECT_TYPE_HEADER, VINEXT_STALE_TIME_PENDING_HEADER } from "../server/headers.js";
|
|
13
|
+
import { extractRscCompletionMetadata } from "../server/rsc-completion-metadata.js";
|
|
14
|
+
import { isHashOnlyBrowserUrlChange, toCanonicalBrowserNavigationHref, toSameOriginAppPath, withBasePath } from "./url-utils.js";
|
|
15
|
+
import { navigationPlanner } from "../server/navigation-planner.js";
|
|
16
|
+
import { stripBasePath } from "../utils/base-path.js";
|
|
17
|
+
import { isBotUserAgent } from "../utils/html-limited-bots.js";
|
|
18
|
+
import { AppElementsWire } from "../server/app-elements-wire.js";
|
|
19
|
+
import { isExternalUrl } from "../utils/external-url.js";
|
|
20
|
+
import { assertSafeNavigationUrl } from "./url-safety.js";
|
|
21
|
+
import { APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL, APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL } from "../server/app-rsc-render-mode.js";
|
|
22
|
+
import { resolveDirectHybridClientRouteOwner } from "./internal/hybrid-client-route-owner-direct.js";
|
|
23
|
+
import { disableSmoothScrollDuringRouteTransition } from "./disable-smooth-scroll.js";
|
|
24
|
+
import { retryScrollTo, scrollToHashTarget } from "./hash-scroll.js";
|
|
25
|
+
import { beginAppRouterScrollIntent, clearAppRouterScrollIntent, consumeAppRouterScrollIntent, getPendingAppRouterScrollIntent, isLatestAppRouterScrollIntent } from "./app-router-scroll-state.js";
|
|
26
|
+
import { cancelAppPrefetchFetch, promoteAppPrefetchFetch, releaseAppPrefetchFetchSlot, scheduleAppPrefetchFetch } from "./internal/app-prefetch-fetch-queue.js";
|
|
27
|
+
import * as React$1 from "react";
|
|
28
|
+
// src/shims/app-router-navigation.ts
|
|
29
|
+
/**
|
|
30
|
+
* App Router client navigation runtime.
|
|
31
|
+
*
|
|
32
|
+
* The prefetch cache, router history writes and `window.history` patches,
|
|
33
|
+
* scroll handling, `navigateClientSide` and the public App Router instance.
|
|
34
|
+
* Kept out of `navigation.ts` (the `next/navigation` hooks and the client
|
|
35
|
+
* navigation state they read) so Pages Router pages that use those hooks don't
|
|
36
|
+
* load it. In Next.js too, the hooks read React contexts and this machinery
|
|
37
|
+
* lives in the App Router (`app-router.tsx`, `app-router-instance.ts`).
|
|
38
|
+
*
|
|
39
|
+
* The App Router browser entry imports this module before hydration, which
|
|
40
|
+
* installs the history patches below. `next/link` and `next/form` load it for
|
|
41
|
+
* App Router navigations.
|
|
42
|
+
*/
|
|
43
|
+
const HAS_PAGES_ROUTER = process.env.__VINEXT_HAS_PAGES_ROUTER !== "false";
|
|
44
|
+
const HAS_CLIENT_REWRITES = process.env.__VINEXT_HAS_CLIENT_REWRITES !== "false";
|
|
45
|
+
let hybridClientRouteOwnerModule = null;
|
|
46
|
+
let hybridClientRouteOwnerModulePromise = null;
|
|
47
|
+
/** Load rewrite-aware hybrid route ownership before navigation becomes interactive. */
|
|
48
|
+
async function preloadHybridClientRouteOwner() {
|
|
49
|
+
if (hybridClientRouteOwnerModule) return;
|
|
50
|
+
hybridClientRouteOwnerModulePromise ??= import("./internal/hybrid-client-route-owner.js");
|
|
51
|
+
hybridClientRouteOwnerModule = await hybridClientRouteOwnerModulePromise;
|
|
52
|
+
}
|
|
53
|
+
function resolveLoadedHybridClientRewriteHref(href, basePath) {
|
|
54
|
+
return hybridClientRouteOwnerModule?.resolveHybridClientRewriteHref(href, basePath) ?? null;
|
|
55
|
+
}
|
|
56
|
+
function resolveHybridClientRouteOwner(href) {
|
|
57
|
+
if (!HAS_PAGES_ROUTER) return null;
|
|
58
|
+
return hybridClientRouteOwnerModule ? hybridClientRouteOwnerModule.resolveHybridClientRouteOwner(href, __basePath) : resolveDirectHybridClientRouteOwner(href, __basePath);
|
|
59
|
+
}
|
|
60
|
+
const isServer = typeof window === "undefined";
|
|
61
|
+
/** trailingSlash from next.config.js, injected by the plugin at build time */
|
|
62
|
+
const __trailingSlash = process.env.__VINEXT_TRAILING_SLASH === "true";
|
|
63
|
+
/** prefetch inlining (Segment Cache wire mode), injected by the plugin at build time */
|
|
64
|
+
const __prefetchInlining = process.env.__VINEXT_PREFETCH_INLINING === "true";
|
|
65
|
+
/** Maximum buffered bytes in the RSC prefetch cache. Mirrors Next.js' 50 MB LRU. */
|
|
66
|
+
const MAX_PREFETCH_CACHE_SIZE = 52428800;
|
|
67
|
+
const PREFETCH_CACHE_EVICTION_TARGET_SIZE = MAX_PREFETCH_CACHE_SIZE * .9;
|
|
68
|
+
/**
|
|
69
|
+
* TTL for prefetch cache entries in ms.
|
|
70
|
+
*
|
|
71
|
+
* Mirrors Next.js' `STATIC_STALETIME_MS` derivation. The plugin injects
|
|
72
|
+
* `process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME` from
|
|
73
|
+
* `experimental.staleTimes.static` (in seconds) at build time; we convert
|
|
74
|
+
* to ms here.
|
|
75
|
+
*
|
|
76
|
+
* Falls back to vinext's historical default of 30s when the env var is
|
|
77
|
+
* absent (e.g. unit tests that import this module without going through
|
|
78
|
+
* the plugin's `define` pipeline). When the plugin is active and the user
|
|
79
|
+
* has not set `experimental.staleTimes`, Next.js' 300s default applies
|
|
80
|
+
* (see `resolveStaleTimes` in `config/next-config.ts`).
|
|
81
|
+
*/
|
|
82
|
+
function resolveClientRouterStaleTime(raw, fallbackMs) {
|
|
83
|
+
if (raw === void 0 || raw === "") return fallbackMs;
|
|
84
|
+
const seconds = Number(raw);
|
|
85
|
+
if (!Number.isFinite(seconds) || seconds < 0) return fallbackMs;
|
|
86
|
+
return seconds * 1e3;
|
|
87
|
+
}
|
|
88
|
+
const DYNAMIC_NAVIGATION_CACHE_TTL = resolveClientRouterStaleTime(process.env.__NEXT_CLIENT_ROUTER_DYNAMIC_STALETIME, 3e4);
|
|
89
|
+
const PREFETCH_CACHE_TTL = resolveClientRouterStaleTime(process.env.__NEXT_CLIENT_ROUTER_STATIC_STALETIME, 3e4);
|
|
90
|
+
/**
|
|
91
|
+
* Floor for any server-declared `cacheLife` stale time, mirroring Next.js's
|
|
92
|
+
* `getStaleTimeMs` (`Math.max(staleTimeSeconds, 30) * 1000`). One rule for
|
|
93
|
+
* both client caches, so behavior does not depend on which cache a route hit.
|
|
94
|
+
*/
|
|
95
|
+
const MIN_SERVER_STALE_TIME_SECONDS = 30;
|
|
96
|
+
const MIN_PREFETCH_STALE_TIME_MS = MIN_SERVER_STALE_TIME_SECONDS * 1e3;
|
|
97
|
+
function getCurrentInterceptionContext() {
|
|
98
|
+
if (isServer) return null;
|
|
99
|
+
return stripBasePath(window.location.pathname, __basePath);
|
|
100
|
+
}
|
|
101
|
+
function getPrefetchInterceptionContext(targetHref, currentPathname) {
|
|
102
|
+
if (isServer) return null;
|
|
103
|
+
let targetUrl;
|
|
104
|
+
try {
|
|
105
|
+
targetUrl = new URL(targetHref, window.location.href);
|
|
106
|
+
} catch {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
return resolveManifestNavigationInterceptionContext({
|
|
110
|
+
basePath: __basePath,
|
|
111
|
+
currentPathname: currentPathname ?? window.location.pathname,
|
|
112
|
+
routeManifest: getNavigationRuntime()?.bootstrap.routeManifest ?? null,
|
|
113
|
+
targetPathname: targetUrl.pathname
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
function getCurrentNextUrl() {
|
|
117
|
+
if (isServer) return "/";
|
|
118
|
+
return window.location.pathname + window.location.search;
|
|
119
|
+
}
|
|
120
|
+
function createAppPrefetchRequestHeaders(options) {
|
|
121
|
+
const prefetchRouterState = getNavigationRuntime()?.functions.getPrefetchRouterState?.() ?? null;
|
|
122
|
+
return createRscRequestHeaders({
|
|
123
|
+
...options,
|
|
124
|
+
nextUrl: getCurrentNextUrl(),
|
|
125
|
+
includePrefetchHeader: options.prefetchKind !== "full",
|
|
126
|
+
prefetchRouterState
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/** Get or create the shared in-memory RSC prefetch cache on window. */
|
|
130
|
+
function getPrefetchCache() {
|
|
131
|
+
if (isServer) return /* @__PURE__ */ new Map();
|
|
132
|
+
if (!window.__VINEXT_RSC_PREFETCH_CACHE__) window.__VINEXT_RSC_PREFETCH_CACHE__ = /* @__PURE__ */ new Map();
|
|
133
|
+
return window.__VINEXT_RSC_PREFETCH_CACHE__;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Read an exact prefetch entry without allowing a settled stale value to
|
|
137
|
+
* steer a later request. Timers are an eviction optimization, not a freshness
|
|
138
|
+
* guarantee: background throttling can leave an expired route-tree entry in
|
|
139
|
+
* the Map until the next foreground read.
|
|
140
|
+
*/
|
|
141
|
+
function getFreshPrefetchCacheEntry(cacheKey) {
|
|
142
|
+
const cache = getPrefetchCache();
|
|
143
|
+
const entry = cache.get(cacheKey);
|
|
144
|
+
if (entry === void 0 || entry.pending) return entry;
|
|
145
|
+
if (resolvePrefetchCacheEntryExpiresAt(entry) > Date.now()) return entry;
|
|
146
|
+
deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, true);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get or create the shared set of already-prefetched RSC URLs on window.
|
|
150
|
+
* Keyed by interception-aware cache key so distinct source routes do not alias.
|
|
151
|
+
*/
|
|
152
|
+
function getPrefetchedUrls() {
|
|
153
|
+
if (isServer) return /* @__PURE__ */ new Set();
|
|
154
|
+
if (!window.__VINEXT_RSC_PREFETCHED_URLS__) window.__VINEXT_RSC_PREFETCHED_URLS__ = /* @__PURE__ */ new Set();
|
|
155
|
+
return window.__VINEXT_RSC_PREFETCHED_URLS__;
|
|
156
|
+
}
|
|
157
|
+
function isStaleTimeSeconds(value) {
|
|
158
|
+
return typeof value === "number" && Number.isFinite(value) && Number.isInteger(value) && value >= 0;
|
|
159
|
+
}
|
|
160
|
+
function isCacheExpiresAt(value) {
|
|
161
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0;
|
|
162
|
+
}
|
|
163
|
+
function parseStaleTimeSecondsHeader(value) {
|
|
164
|
+
if (value === null || value === "") return void 0;
|
|
165
|
+
const seconds = Number(value);
|
|
166
|
+
return isStaleTimeSeconds(seconds) ? seconds : void 0;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* The floor a `cacheLife` claim licenses. A pending claim contributes exactly
|
|
170
|
+
* the floor — the least any resolution of it could have granted.
|
|
171
|
+
*/
|
|
172
|
+
function serverStaleTimeSeconds(server) {
|
|
173
|
+
if (server === void 0) return void 0;
|
|
174
|
+
if (server.kind === "pending") return MIN_SERVER_STALE_TIME_SECONDS;
|
|
175
|
+
return Math.max(server.seconds, MIN_SERVER_STALE_TIME_SECONDS);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Min-combine the two independent staleness lattices a response can carry:
|
|
179
|
+
* `dynamicStaleTimeSeconds` (from `experimental.staleTimes` config) and
|
|
180
|
+
* `serverStaleTime` (from the render's `cacheLife`) — neither may override
|
|
181
|
+
* the other. The cacheLife value is floored *before* the min so the floor
|
|
182
|
+
* never raises the config bound. Undefined = no signal; the caller's
|
|
183
|
+
* fallback TTL stays in force.
|
|
184
|
+
*/
|
|
185
|
+
function resolveRscResponseStaleTimeSeconds(cached) {
|
|
186
|
+
const dynamic = cached.dynamicStaleTimeSeconds;
|
|
187
|
+
const server = serverStaleTimeSeconds(cached.serverStaleTime);
|
|
188
|
+
if (!isStaleTimeSeconds(dynamic)) return server;
|
|
189
|
+
return server === void 0 ? dynamic : Math.min(dynamic, server);
|
|
190
|
+
}
|
|
191
|
+
function resolveCachedRscResponseTtlMs(cached, fallbackTtlMs) {
|
|
192
|
+
const seconds = resolveRscResponseStaleTimeSeconds(cached);
|
|
193
|
+
if (seconds === void 0) return fallbackTtlMs;
|
|
194
|
+
return seconds * 1e3;
|
|
195
|
+
}
|
|
196
|
+
function resolveCachedRscResponseExpiresAt(timestamp, cached, fallbackTtlMs) {
|
|
197
|
+
if (isCacheExpiresAt(cached.expiresAt)) return cached.expiresAt;
|
|
198
|
+
return timestamp + resolveCachedRscResponseTtlMs(cached, fallbackTtlMs);
|
|
199
|
+
}
|
|
200
|
+
function resolvePrefetchedRscResponseExpiresAt(timestamp, cached, fallbackTtlMs, dynamicStaleTime) {
|
|
201
|
+
if (isCacheExpiresAt(cached.expiresAt)) return cached.expiresAt;
|
|
202
|
+
const serverSeconds = cached.serverStaleTime?.kind === "pending" && dynamicStaleTime !== "verbatim" ? void 0 : serverStaleTimeSeconds(cached.serverStaleTime);
|
|
203
|
+
if (serverSeconds !== void 0) return timestamp + serverSeconds * 1e3;
|
|
204
|
+
if (dynamicStaleTime === "ignore") return timestamp + Math.max(fallbackTtlMs, MIN_PREFETCH_STALE_TIME_MS);
|
|
205
|
+
const seconds = isStaleTimeSeconds(cached.dynamicStaleTimeSeconds) ? cached.dynamicStaleTimeSeconds : void 0;
|
|
206
|
+
if (seconds === void 0) return timestamp + Math.max(fallbackTtlMs, MIN_PREFETCH_STALE_TIME_MS);
|
|
207
|
+
return dynamicStaleTime === "verbatim" ? timestamp + seconds * 1e3 : timestamp + (seconds === 0 ? Math.max(fallbackTtlMs, MIN_PREFETCH_STALE_TIME_MS) : Math.max(seconds * 1e3, MIN_PREFETCH_STALE_TIME_MS));
|
|
208
|
+
}
|
|
209
|
+
function resolvePrefetchCacheEntryExpiresAt(entry) {
|
|
210
|
+
if (entry.expiresAt !== void 0) return entry.expiresAt;
|
|
211
|
+
if (entry.snapshot) return resolveCachedRscResponseExpiresAt(entry.timestamp, entry.snapshot, PREFETCH_CACHE_TTL);
|
|
212
|
+
return entry.timestamp + PREFETCH_CACHE_TTL;
|
|
213
|
+
}
|
|
214
|
+
function resolvePrefetchCacheEntryMountedSlotsHeader(entry) {
|
|
215
|
+
if (entry.mountedSlotsHeader !== void 0) return entry.mountedSlotsHeader;
|
|
216
|
+
return entry.snapshot?.mountedSlotsHeader ?? null;
|
|
217
|
+
}
|
|
218
|
+
function normalizeRscCacheLookupUrl(rscUrl) {
|
|
219
|
+
try {
|
|
220
|
+
const url = parseRscRequestPath(rscUrl);
|
|
221
|
+
stripRscCacheBustingSearchParam(url);
|
|
222
|
+
return `${url.pathname}${url.search}`;
|
|
223
|
+
} catch {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function normalizeRscCacheLookupPathname(rscUrl) {
|
|
228
|
+
try {
|
|
229
|
+
return parseRscRequestPath(rscUrl).pathname;
|
|
230
|
+
} catch {
|
|
231
|
+
return null;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function isPrefetchCacheEntryCompatibleWithMountedSlots(entry, mountedSlotsHeader) {
|
|
235
|
+
if (resolvePrefetchCacheEntryMountedSlotsHeader(entry) === mountedSlotsHeader) return true;
|
|
236
|
+
return (entry.snapshot?.mountedSlotsHeader ?? null) === mountedSlotsHeader;
|
|
237
|
+
}
|
|
238
|
+
function findPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls = []) {
|
|
239
|
+
const cache = getPrefetchCache();
|
|
240
|
+
const rscUrls = [rscUrl, ...additionalRscUrls];
|
|
241
|
+
for (const lookupRscUrl of rscUrls) {
|
|
242
|
+
const exactCacheKey = AppElementsWire.encodeCacheKey(lookupRscUrl, interceptionContext);
|
|
243
|
+
const exactEntry = cache.get(exactCacheKey);
|
|
244
|
+
if (exactEntry && exactEntry.cacheForNavigation !== false && isPrefetchCacheEntryCompatibleWithMountedSlots(exactEntry, mountedSlotsHeader)) return {
|
|
245
|
+
cacheKey: exactCacheKey,
|
|
246
|
+
entry: exactEntry
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
const normalizedTargets = new Set(rscUrls.map((lookupRscUrl) => normalizeRscCacheLookupUrl(lookupRscUrl)).filter((lookupRscUrl) => lookupRscUrl !== null));
|
|
250
|
+
if (normalizedTargets.size === 0) return null;
|
|
251
|
+
for (const [cacheKey, entry] of cache) {
|
|
252
|
+
if (entry.cacheForNavigation === false) continue;
|
|
253
|
+
const source = AppElementsWire.decodeCacheKey(cacheKey);
|
|
254
|
+
if (source.interceptionContext !== interceptionContext) continue;
|
|
255
|
+
const normalizedSource = normalizeRscCacheLookupUrl(source.rscUrl);
|
|
256
|
+
if (normalizedSource === null || !normalizedTargets.has(normalizedSource)) continue;
|
|
257
|
+
if (!isPrefetchCacheEntryCompatibleWithMountedSlots(entry, mountedSlotsHeader)) continue;
|
|
258
|
+
return {
|
|
259
|
+
cacheKey,
|
|
260
|
+
entry
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
function hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext = null, mountedSlotsHeader = null, options = {}) {
|
|
266
|
+
const match = findPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, options.additionalRscUrls);
|
|
267
|
+
if (match === null) return false;
|
|
268
|
+
if (match.entry.pending !== void 0 && options.reusePending === false) return false;
|
|
269
|
+
if (match.entry.pending !== void 0 || resolvePrefetchCacheEntryExpiresAt(match.entry) > Date.now()) {
|
|
270
|
+
touchPrefetchCacheEntry(getPrefetchCache(), match.cacheKey, match.entry);
|
|
271
|
+
attachPrefetchInvalidationToEntry(match.cacheKey, match.entry, options.onInvalidate);
|
|
272
|
+
options.onReuse?.(match.entry, match.cacheKey);
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
deletePrefetchCacheEntry(getPrefetchCache(), getPrefetchedUrls(), match.cacheKey, match.entry, options.notifyInvalidation ?? true);
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Return whether the exact learning-only Link prefetch is still usable.
|
|
280
|
+
* Pending entries dedupe concurrent Links; settled entries only suppress a
|
|
281
|
+
* remount while their response-derived freshness window remains active.
|
|
282
|
+
*/
|
|
283
|
+
function hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = null) {
|
|
284
|
+
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
285
|
+
const cache = getPrefetchCache();
|
|
286
|
+
const entry = cache.get(cacheKey);
|
|
287
|
+
if (entry?.cacheForNavigation !== false) return false;
|
|
288
|
+
if (entry.pending !== void 0 || resolvePrefetchCacheEntryExpiresAt(entry) > Date.now()) {
|
|
289
|
+
touchPrefetchCacheEntry(cache, cacheKey, entry);
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, true);
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
function hasSearchAgnosticPrefetchShellForRoute(rscUrl, interceptionContext = null, mountedSlotsHeader = null) {
|
|
296
|
+
const normalizedTargetPathname = normalizeRscCacheLookupPathname(rscUrl);
|
|
297
|
+
if (normalizedTargetPathname === null) return false;
|
|
298
|
+
const cache = getPrefetchCache();
|
|
299
|
+
for (const [cacheKey, entry] of cache) {
|
|
300
|
+
if (entry.searchAgnosticShell !== true) continue;
|
|
301
|
+
const source = AppElementsWire.decodeCacheKey(cacheKey);
|
|
302
|
+
if (source.interceptionContext !== interceptionContext) continue;
|
|
303
|
+
if (normalizeRscCacheLookupPathname(source.rscUrl) !== normalizedTargetPathname) continue;
|
|
304
|
+
if (!isPrefetchCacheEntryCompatibleWithMountedSlots(entry, mountedSlotsHeader)) continue;
|
|
305
|
+
if (entry.pending !== void 0) return true;
|
|
306
|
+
if (resolvePrefetchCacheEntryExpiresAt(entry) > Date.now()) return true;
|
|
307
|
+
deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, true);
|
|
308
|
+
}
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
function getPrefetchCacheEntrySize(entry) {
|
|
312
|
+
return entry.snapshot?.buffer.byteLength ?? entry.size ?? 0;
|
|
313
|
+
}
|
|
314
|
+
let trackedPrefetchCache = null;
|
|
315
|
+
let trackedPrefetchCacheByteSize = 0;
|
|
316
|
+
function getPrefetchCacheByteSize(cache) {
|
|
317
|
+
if (trackedPrefetchCache === cache) return trackedPrefetchCacheByteSize;
|
|
318
|
+
let total = 0;
|
|
319
|
+
const seen = /* @__PURE__ */ new Set();
|
|
320
|
+
for (const entry of cache.values()) {
|
|
321
|
+
if (seen.has(entry)) continue;
|
|
322
|
+
seen.add(entry);
|
|
323
|
+
total += getPrefetchCacheEntrySize(entry);
|
|
324
|
+
}
|
|
325
|
+
trackedPrefetchCache = cache;
|
|
326
|
+
trackedPrefetchCacheByteSize = total;
|
|
327
|
+
return total;
|
|
328
|
+
}
|
|
329
|
+
function adjustPrefetchCacheByteSize(cache, delta) {
|
|
330
|
+
if (trackedPrefetchCache !== cache) return;
|
|
331
|
+
trackedPrefetchCacheByteSize = Math.max(0, trackedPrefetchCacheByteSize + delta);
|
|
332
|
+
}
|
|
333
|
+
function touchPrefetchCacheEntry(cache, cacheKey, entry) {
|
|
334
|
+
if (cache.get(cacheKey) !== entry) return;
|
|
335
|
+
cache.delete(cacheKey);
|
|
336
|
+
cache.set(cacheKey, entry);
|
|
337
|
+
for (const key of entry.cacheKeys ?? []) {
|
|
338
|
+
if (key === cacheKey || cache.get(key) !== entry) continue;
|
|
339
|
+
cache.delete(key);
|
|
340
|
+
cache.set(key, entry);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Evict prefetch cache entries if buffered payloads exceed the byte budget.
|
|
345
|
+
* Sweeps expired entries only after the cheap byte-budget check says cleanup is
|
|
346
|
+
* needed, then evicts least-recently-used entries down to the target size.
|
|
347
|
+
*/
|
|
348
|
+
function evictPrefetchCacheIfNeeded() {
|
|
349
|
+
const cache = getPrefetchCache();
|
|
350
|
+
let totalSize = getPrefetchCacheByteSize(cache);
|
|
351
|
+
if (totalSize <= 52428800) return;
|
|
352
|
+
const now = Date.now();
|
|
353
|
+
const prefetched = getPrefetchedUrls();
|
|
354
|
+
for (const [key, entry] of cache) if (resolvePrefetchCacheEntryExpiresAt(entry) <= now) deletePrefetchCacheEntry(cache, prefetched, key, entry, true);
|
|
355
|
+
totalSize = getPrefetchCacheByteSize(cache);
|
|
356
|
+
if (totalSize <= 52428800) return;
|
|
357
|
+
let inspectedEntries = 0;
|
|
358
|
+
while (totalSize > PREFETCH_CACHE_EVICTION_TARGET_SIZE && inspectedEntries < cache.size) {
|
|
359
|
+
const oldest = cache.keys().next().value;
|
|
360
|
+
if (oldest !== void 0) {
|
|
361
|
+
const entry = cache.get(oldest);
|
|
362
|
+
if (entry) {
|
|
363
|
+
const entrySize = getPrefetchCacheEntrySize(entry);
|
|
364
|
+
if (entry.pending !== void 0 && entrySize === 0) {
|
|
365
|
+
touchPrefetchCacheEntry(cache, oldest, entry);
|
|
366
|
+
inspectedEntries += 1;
|
|
367
|
+
continue;
|
|
368
|
+
}
|
|
369
|
+
totalSize -= entrySize;
|
|
370
|
+
deletePrefetchCacheEntry(cache, prefetched, oldest, entry, true);
|
|
371
|
+
inspectedEntries = 0;
|
|
372
|
+
} else {
|
|
373
|
+
cache.delete(oldest);
|
|
374
|
+
prefetched.delete(oldest);
|
|
375
|
+
inspectedEntries += 1;
|
|
376
|
+
}
|
|
377
|
+
} else break;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
const pendingPrefetchSetups = /* @__PURE__ */ new Set();
|
|
381
|
+
function beginPrefetchSetup(destination) {
|
|
382
|
+
const setup = {
|
|
383
|
+
destination,
|
|
384
|
+
cancelled: false
|
|
385
|
+
};
|
|
386
|
+
pendingPrefetchSetups.add(setup);
|
|
387
|
+
return setup;
|
|
388
|
+
}
|
|
389
|
+
/** Passing `null` cancels every pending setup regardless of destination. */
|
|
390
|
+
function cancelPendingPrefetchSetups(destination) {
|
|
391
|
+
for (const setup of pendingPrefetchSetups) if (destination === null || setup.destination === destination) setup.cancelled = true;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Normalize a navigation or prefetch target to the browser href both sides
|
|
395
|
+
* compare on. Returns null when the target is not same-origin — no same-origin
|
|
396
|
+
* prefetch can be a duplicate of it — and on the server, where
|
|
397
|
+
* `navigateClientSide` can still be reached but there is nothing to cancel.
|
|
398
|
+
*/
|
|
399
|
+
function toAppPrefetchDestination(href) {
|
|
400
|
+
if (isServer) return null;
|
|
401
|
+
let localHref = href;
|
|
402
|
+
if (isExternalUrl(href)) {
|
|
403
|
+
const localPath = toSameOriginAppPath(href, __basePath);
|
|
404
|
+
if (localPath == null) return null;
|
|
405
|
+
localHref = localPath;
|
|
406
|
+
}
|
|
407
|
+
const browserHref = toCanonicalBrowserNavigationHref(localHref, window.location.href, __basePath, __trailingSlash);
|
|
408
|
+
try {
|
|
409
|
+
return formatRscRequestPath(new URL(browserHref, window.location.href));
|
|
410
|
+
} catch {
|
|
411
|
+
return browserHref.split("#", 1)[0];
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
function clearPrefetchInvalidation(entry) {
|
|
415
|
+
if (entry.invalidationTimer !== void 0) {
|
|
416
|
+
clearTimeout(entry.invalidationTimer);
|
|
417
|
+
entry.invalidationTimer = void 0;
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
function runInvalidationCallback(onInvalidate) {
|
|
421
|
+
try {
|
|
422
|
+
onInvalidate();
|
|
423
|
+
} catch (error) {
|
|
424
|
+
if (typeof reportError === "function") reportError(error);
|
|
425
|
+
else console.error(error);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
function notifyPrefetchInvalidated(entry) {
|
|
429
|
+
clearPrefetchInvalidation(entry);
|
|
430
|
+
const callbacks = entry.onInvalidateCallbacks;
|
|
431
|
+
entry.onInvalidateCallbacks = void 0;
|
|
432
|
+
if (callbacks === void 0) return;
|
|
433
|
+
for (const onInvalidate of callbacks) runInvalidationCallback(onInvalidate);
|
|
434
|
+
}
|
|
435
|
+
const retainedPrefetchInvalidations = /* @__PURE__ */ new Set();
|
|
436
|
+
function retainPrefetchInvalidationAfterConsume(entry) {
|
|
437
|
+
const callbacks = entry.onInvalidateCallbacks;
|
|
438
|
+
if (callbacks === void 0 || callbacks.size === 0) return;
|
|
439
|
+
retainPrefetchInvalidation(callbacks, resolvePrefetchCacheEntryExpiresAt(entry));
|
|
440
|
+
}
|
|
441
|
+
function retainPrefetchInvalidation(callbacks, expiresAt, forVisitedResponse = false) {
|
|
442
|
+
const delay = Math.max(0, expiresAt - Date.now());
|
|
443
|
+
const retained = {
|
|
444
|
+
callbacks,
|
|
445
|
+
...forVisitedResponse ? { forVisitedResponse: true } : {},
|
|
446
|
+
timer: setTimeout(() => fireRetainedPrefetchInvalidation(retained), delay)
|
|
447
|
+
};
|
|
448
|
+
retainedPrefetchInvalidations.add(retained);
|
|
449
|
+
}
|
|
450
|
+
function fireRetainedPrefetchInvalidation(retained) {
|
|
451
|
+
if (!retainedPrefetchInvalidations.delete(retained)) return;
|
|
452
|
+
clearTimeout(retained.timer);
|
|
453
|
+
for (const onInvalidate of retained.callbacks) runInvalidationCallback(onInvalidate);
|
|
454
|
+
}
|
|
455
|
+
function deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, notify) {
|
|
456
|
+
const cacheKeys = entry.cacheKeys ?? /* @__PURE__ */ new Set([cacheKey]);
|
|
457
|
+
let removedOwnedKey = false;
|
|
458
|
+
for (const key of cacheKeys) if (cache.get(key) === entry) {
|
|
459
|
+
cache.delete(key);
|
|
460
|
+
prefetched.delete(key);
|
|
461
|
+
removedOwnedKey = true;
|
|
462
|
+
}
|
|
463
|
+
if (!removedOwnedKey) return;
|
|
464
|
+
adjustPrefetchCacheByteSize(cache, -getPrefetchCacheEntrySize(entry));
|
|
465
|
+
entry.cacheKeys = void 0;
|
|
466
|
+
if (notify) notifyPrefetchInvalidated(entry);
|
|
467
|
+
else {
|
|
468
|
+
clearPrefetchInvalidation(entry);
|
|
469
|
+
entry.onInvalidateCallbacks = void 0;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = null, mountedSlotsHeader = null) {
|
|
473
|
+
const cache = getPrefetchCache();
|
|
474
|
+
const prefetched = getPrefetchedUrls();
|
|
475
|
+
const normalizedTarget = normalizeRscCacheLookupUrl(rscUrl);
|
|
476
|
+
if (normalizedTarget === null) return false;
|
|
477
|
+
const superseded = [];
|
|
478
|
+
for (const [cacheKey, entry] of cache) {
|
|
479
|
+
if (entry.cacheForNavigation !== false || entry.prefetchKind !== "navigation") continue;
|
|
480
|
+
const source = AppElementsWire.decodeCacheKey(cacheKey);
|
|
481
|
+
if (source.interceptionContext !== interceptionContext) continue;
|
|
482
|
+
if (normalizeRscCacheLookupUrl(source.rscUrl) !== normalizedTarget) continue;
|
|
483
|
+
if (!isPrefetchCacheEntryCompatibleWithMountedSlots(entry, mountedSlotsHeader)) continue;
|
|
484
|
+
superseded.push([cacheKey, entry]);
|
|
485
|
+
}
|
|
486
|
+
for (const [cacheKey, entry] of superseded) {
|
|
487
|
+
cancelAppPrefetchFetch(entry.fetchPromise);
|
|
488
|
+
deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, true);
|
|
489
|
+
}
|
|
490
|
+
return superseded.length > 0;
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Make a prefetch reusable by a navigation, as an `unstable_dynamicOnHover`
|
|
494
|
+
* hover does. A pending one that would be kept as learning-only becomes a full
|
|
495
|
+
* prefetch and takes the full-prefetch lifetime. One already kept as
|
|
496
|
+
* learning-only because its page rendered dynamically is left for the full
|
|
497
|
+
* prefetch to replace: Next.js refetches it with `FetchStrategy.Full`, so the
|
|
498
|
+
* page reflects the cookies and headers at hover time.
|
|
499
|
+
*/
|
|
500
|
+
function promotePrefetchCacheEntryForNavigation(cacheKey, entry) {
|
|
501
|
+
if (entry.dynamicStaleTime !== "learning-only") {
|
|
502
|
+
entry.cacheForNavigation = true;
|
|
503
|
+
return;
|
|
504
|
+
}
|
|
505
|
+
if (entry.cacheForNavigation === false) return;
|
|
506
|
+
entry.dynamicStaleTime = "full-prefetch";
|
|
507
|
+
if (entry.snapshot === void 0) return;
|
|
508
|
+
entry.expiresAt = resolvePrefetchedRscResponseExpiresAt(entry.timestamp, entry.snapshot, entry.fallbackTtlMs ?? PREFETCH_CACHE_TTL, "full-prefetch");
|
|
509
|
+
schedulePrefetchInvalidation(cacheKey, entry);
|
|
510
|
+
}
|
|
511
|
+
function invalidatePrefetchCacheEntry(cacheKey) {
|
|
512
|
+
const cache = getPrefetchCache();
|
|
513
|
+
const entry = cache.get(cacheKey);
|
|
514
|
+
if (!entry) return;
|
|
515
|
+
deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, true);
|
|
516
|
+
}
|
|
517
|
+
function schedulePrefetchInvalidation(cacheKey, entry) {
|
|
518
|
+
if (entry.onInvalidateCallbacks === void 0 || entry.onInvalidateCallbacks.size === 0) return;
|
|
519
|
+
clearPrefetchInvalidation(entry);
|
|
520
|
+
const delay = Math.max(0, resolvePrefetchCacheEntryExpiresAt(entry) - Date.now());
|
|
521
|
+
entry.invalidationTimer = setTimeout(() => {
|
|
522
|
+
invalidatePrefetchCacheEntry(cacheKey);
|
|
523
|
+
}, delay);
|
|
524
|
+
}
|
|
525
|
+
function addPrefetchInvalidationCallback(entry, onInvalidate) {
|
|
526
|
+
if (onInvalidate === void 0) return;
|
|
527
|
+
if (entry.onInvalidateCallbacks === void 0) entry.onInvalidateCallbacks = /* @__PURE__ */ new Set();
|
|
528
|
+
entry.onInvalidateCallbacks.add(onInvalidate);
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Attach `onInvalidate` to an entry the caller already holds. A settled entry
|
|
532
|
+
* needs its invalidation timer started here — nothing else will schedule one
|
|
533
|
+
* once `prefetchRscResponse` has finished with it.
|
|
534
|
+
*/
|
|
535
|
+
function attachPrefetchInvalidationToEntry(cacheKey, entry, onInvalidate) {
|
|
536
|
+
if (onInvalidate === void 0) return;
|
|
537
|
+
addPrefetchInvalidationCallback(entry, onInvalidate);
|
|
538
|
+
if (entry.outcome === "cache-seeded") schedulePrefetchInvalidation(cacheKey, entry);
|
|
539
|
+
}
|
|
540
|
+
function attachPrefetchInvalidationCallback(cacheKey, onInvalidate) {
|
|
541
|
+
if (onInvalidate === void 0) return;
|
|
542
|
+
const entry = getPrefetchCache().get(cacheKey);
|
|
543
|
+
if (!entry) return;
|
|
544
|
+
attachPrefetchInvalidationToEntry(cacheKey, entry, onInvalidate);
|
|
545
|
+
}
|
|
546
|
+
function invalidatePrefetchCache(options = {}) {
|
|
547
|
+
cancelPendingPrefetchSetups(null);
|
|
548
|
+
const cache = getPrefetchCache();
|
|
549
|
+
const prefetched = getPrefetchedUrls();
|
|
550
|
+
for (const [cacheKey, entry] of cache) deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, true);
|
|
551
|
+
prefetched.clear();
|
|
552
|
+
for (const retained of retainedPrefetchInvalidations) fireRetainedPrefetchInvalidation(retained);
|
|
553
|
+
if (!isServer && options.pingVisibleLinks !== false) getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Evict the prefetch entries that may hold dynamic data, for a Server Action
|
|
557
|
+
* that called `refresh()`. Like Next.js's dynamic-only revalidation, which
|
|
558
|
+
* evicts its BFCache but keeps its prefetch cache, this keeps route trees,
|
|
559
|
+
* static prefetches and full prefetches. It drops navigation responses, and
|
|
560
|
+
* automatic prefetches whose page rendered dynamically or hasn't finished
|
|
561
|
+
* rendering, including those only kept to learn a route: Next.js's automatic
|
|
562
|
+
* prefetches never hold dynamic data.
|
|
563
|
+
*/
|
|
564
|
+
function invalidateDynamicPrefetchCache() {
|
|
565
|
+
const cache = getPrefetchCache();
|
|
566
|
+
const prefetched = getPrefetchedUrls();
|
|
567
|
+
const evicted = [];
|
|
568
|
+
for (const [cacheKey, entry] of cache) if (!(entry.prefetchKind === "route-tree" || entry.prefetchKind !== void 0 && (entry.dynamicStaleTime === "full-prefetch" || entry.snapshot !== void 0 && !isStaleTimeSeconds(entry.snapshot.dynamicStaleTimeSeconds)))) evicted.push([cacheKey, entry]);
|
|
569
|
+
for (const [cacheKey, entry] of evicted) deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, true);
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
572
|
+
* Notify the prefetches that stood in for a visited response (see
|
|
573
|
+
* `hasNavigationFreshVisitedResponse`), as the visited responses are cleared.
|
|
574
|
+
*/
|
|
575
|
+
function invalidateVisitedResponsePrefetches() {
|
|
576
|
+
for (const retained of retainedPrefetchInvalidations) if (retained.forVisitedResponse === true) fireRetainedPrefetchInvalidation(retained);
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Prevent completed navigation responses from becoming authoritative again
|
|
580
|
+
* after restoring a history snapshot. Explicit Link/router prefetches remain
|
|
581
|
+
* consumable. Responses with a positive cache lifetime and interception
|
|
582
|
+
* responses retain the cache reuse licensed by Next's segment cache.
|
|
583
|
+
*/
|
|
584
|
+
function disableNavigationResponsePrefetchCacheReuse() {
|
|
585
|
+
let didDemote = false;
|
|
586
|
+
for (const entry of new Set(getPrefetchCache().values())) if (entry.prefetchKind === void 0 && entry.reuseAfterHistoryRestore !== true) {
|
|
587
|
+
didDemote ||= entry.cacheForNavigation !== false;
|
|
588
|
+
entry.cacheForNavigation = false;
|
|
589
|
+
}
|
|
590
|
+
if (didDemote && !isServer) getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
591
|
+
}
|
|
592
|
+
function seedPrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = null, mountedSlotsHeader = null, fallbackTtlMs = DYNAMIC_NAVIGATION_CACHE_TTL, reuseAfterHistoryRestore = false, expiresAt = resolveCachedRscResponseExpiresAt(Date.now(), snapshot, fallbackTtlMs)) {
|
|
593
|
+
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
594
|
+
const cache = getPrefetchCache();
|
|
595
|
+
const existing = cache.get(cacheKey);
|
|
596
|
+
if (existing) deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, existing, false);
|
|
597
|
+
const timestamp = Date.now();
|
|
598
|
+
const entry = {
|
|
599
|
+
cacheForNavigation: true,
|
|
600
|
+
cacheKeys: /* @__PURE__ */ new Set([cacheKey]),
|
|
601
|
+
expiresAt,
|
|
602
|
+
mountedSlotsHeader,
|
|
603
|
+
outcome: "cache-seeded",
|
|
604
|
+
reuseAfterHistoryRestore,
|
|
605
|
+
size: snapshot.buffer.byteLength,
|
|
606
|
+
snapshot,
|
|
607
|
+
timestamp
|
|
608
|
+
};
|
|
609
|
+
cache.set(cacheKey, entry);
|
|
610
|
+
adjustPrefetchCacheByteSize(cache, snapshot.buffer.byteLength);
|
|
611
|
+
getPrefetchedUrls().add(cacheKey);
|
|
612
|
+
schedulePrefetchInvalidation(cacheKey, entry);
|
|
613
|
+
evictPrefetchCacheIfNeeded();
|
|
614
|
+
}
|
|
615
|
+
/**
|
|
616
|
+
* Fulfill a full prefetch from the visited response of an earlier navigation,
|
|
617
|
+
* as Next.js does from its BFCache, instead of issuing a request. The data is
|
|
618
|
+
* fresh for the static stale time from the navigation, not the dynamic one
|
|
619
|
+
* (`attemptToFulfillDynamicSegmentFromBFCache`).
|
|
620
|
+
*/
|
|
621
|
+
function seedFullPrefetchFromVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls = [], onInvalidate) {
|
|
622
|
+
const visited = getNavigationRuntime()?.functions.readVisitedResponseForFullPrefetch?.([rscUrl, ...additionalRscUrls], interceptionContext, mountedSlotsHeader);
|
|
623
|
+
if (!visited) return false;
|
|
624
|
+
const expiresAt = visited.navigatedAt + Math.max(PREFETCH_CACHE_TTL, MIN_PREFETCH_STALE_TIME_MS);
|
|
625
|
+
if (expiresAt <= Date.now()) return false;
|
|
626
|
+
seedPrefetchResponseSnapshot(rscUrl, visited.response, interceptionContext, mountedSlotsHeader, void 0, true, expiresAt);
|
|
627
|
+
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
628
|
+
if (getPrefetchCache().get(cacheKey)?.snapshot !== visited.response) return false;
|
|
629
|
+
attachPrefetchInvalidationCallback(cacheKey, onInvalidate);
|
|
630
|
+
return true;
|
|
631
|
+
}
|
|
632
|
+
/**
|
|
633
|
+
* Whether a navigation to the URL would reuse the response of an earlier one,
|
|
634
|
+
* so a prefetch has nothing to fetch. Like Next.js, whose navigation keeps the
|
|
635
|
+
* route and its segments for `staleTimes.dynamic`. `onInvalidate` fires when
|
|
636
|
+
* that reuse ends.
|
|
637
|
+
*/
|
|
638
|
+
function hasNavigationFreshVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls = [], onInvalidate) {
|
|
639
|
+
const freshUntil = getNavigationRuntime()?.functions.readVisitedResponseForFullPrefetch?.([rscUrl, ...additionalRscUrls], interceptionContext, mountedSlotsHeader)?.navigationFreshUntil;
|
|
640
|
+
if (freshUntil === void 0 || freshUntil === null) return false;
|
|
641
|
+
if (onInvalidate !== void 0) retainPrefetchInvalidation(/* @__PURE__ */ new Set([onInvalidate]), freshUntil, true);
|
|
642
|
+
return true;
|
|
643
|
+
}
|
|
644
|
+
function deletePrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = null) {
|
|
645
|
+
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
646
|
+
const cache = getPrefetchCache();
|
|
647
|
+
const entry = cache.get(cacheKey);
|
|
648
|
+
if (entry?.snapshot !== snapshot) return;
|
|
649
|
+
deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, false);
|
|
650
|
+
}
|
|
651
|
+
function createCachedRscResponseSnapshot(response, buffer, responseUrl = null) {
|
|
652
|
+
const headerDynamicStaleTimeSeconds = parseStaleTimeSecondsHeader(response.headers.get(VINEXT_DYNAMIC_STALE_TIME_HEADER));
|
|
653
|
+
const completionMode = response.headers.get(VINEXT_RSC_COMPLETION_METADATA_HEADER);
|
|
654
|
+
const extracted = completionMode === "1" ? extractRscCompletionMetadata(buffer) : { buffer };
|
|
655
|
+
const completedDynamicStaleTimeSeconds = completionMode === "resolved" ? headerDynamicStaleTimeSeconds : extracted.metadata?.dynamicStaleTimeSeconds ?? headerDynamicStaleTimeSeconds;
|
|
656
|
+
const dynamicStaleTimeSeconds = completedDynamicStaleTimeSeconds ?? headerDynamicStaleTimeSeconds;
|
|
657
|
+
const parsedServerStaleTime = parseServerStaleTimeHeaders(response.headers);
|
|
658
|
+
const serverStaleTime = extracted.metadata !== void 0 && Object.hasOwn(extracted.metadata, "serverStaleTimeSeconds") ? extracted.metadata?.serverStaleTimeSeconds === null ? void 0 : {
|
|
659
|
+
kind: "resolved",
|
|
660
|
+
seconds: extracted.metadata.serverStaleTimeSeconds
|
|
661
|
+
} : parsedServerStaleTime;
|
|
662
|
+
const redirectHeader = response.headers.get(VINEXT_RSC_REDIRECT_HEADER);
|
|
663
|
+
const redirectTypeHeader = response.headers.get(VINEXT_RSC_REDIRECT_TYPE_HEADER);
|
|
664
|
+
return {
|
|
665
|
+
compatibilityIdHeader: response.headers.get(VINEXT_RSC_COMPATIBILITY_ID_HEADER),
|
|
666
|
+
buffer: extracted.buffer,
|
|
667
|
+
...completedDynamicStaleTimeSeconds !== void 0 ? { completedDynamicStaleTimeSeconds } : {},
|
|
668
|
+
contentType: response.headers.get("content-type") ?? "text/x-component",
|
|
669
|
+
...dynamicStaleTimeSeconds !== void 0 ? { dynamicStaleTimeSeconds } : {},
|
|
670
|
+
mountedSlotsHeader: response.headers.get(VINEXT_MOUNTED_SLOTS_HEADER),
|
|
671
|
+
paramsHeader: response.headers.get(VINEXT_PARAMS_HEADER),
|
|
672
|
+
receivedAt: Date.now(),
|
|
673
|
+
...redirectHeader === null ? {} : { redirectHeader },
|
|
674
|
+
...redirectTypeHeader === null ? {} : { redirectTypeHeader },
|
|
675
|
+
renderedPathAndSearch: parseRenderedPathAndSearchHeader(response.headers.get(VINEXT_RENDERED_PATH_AND_SEARCH_HEADER)),
|
|
676
|
+
...serverStaleTime === void 0 ? {} : { serverStaleTime },
|
|
677
|
+
url: responseUrl ?? response.url
|
|
678
|
+
};
|
|
679
|
+
}
|
|
680
|
+
/**
|
|
681
|
+
* Collapse the two mutually-exclusive wire headers into one state. A pending
|
|
682
|
+
* marker wins: it says the render committed headers before `cacheLife` settled,
|
|
683
|
+
* so any resolved value alongside it cannot describe the completed render.
|
|
684
|
+
*/
|
|
685
|
+
function parseServerStaleTimeHeaders(headers) {
|
|
686
|
+
if (headers.get("X-Vinext-Stale-Time-Pending") === "1") return { kind: "pending" };
|
|
687
|
+
const seconds = parseStaleTimeSecondsHeader(headers.get(NEXT_ROUTER_STALE_TIME_HEADER));
|
|
688
|
+
return seconds === void 0 ? void 0 : {
|
|
689
|
+
kind: "resolved",
|
|
690
|
+
seconds
|
|
691
|
+
};
|
|
692
|
+
}
|
|
693
|
+
/** Decode an `X-Vinext-Rendered-Path-And-Search` header value. */
|
|
694
|
+
function parseRenderedPathAndSearchHeader(value) {
|
|
695
|
+
if (value === null || value === "") return null;
|
|
696
|
+
try {
|
|
697
|
+
const decoded = decodeURIComponent(value);
|
|
698
|
+
return decoded.startsWith("/") ? decoded : null;
|
|
699
|
+
} catch {
|
|
700
|
+
return null;
|
|
701
|
+
}
|
|
702
|
+
}
|
|
703
|
+
/**
|
|
704
|
+
* Snapshot an RSC response to an ArrayBuffer for caching and replay.
|
|
705
|
+
* Consumes the response body and stores it with content-type and URL metadata.
|
|
706
|
+
*/
|
|
707
|
+
async function snapshotRscResponse(response) {
|
|
708
|
+
try {
|
|
709
|
+
const snapshot = createCachedRscResponseSnapshot(response, await response.arrayBuffer());
|
|
710
|
+
const expiresAt = restoredRscResponseExpiresAt.get(response);
|
|
711
|
+
return expiresAt === void 0 ? snapshot : {
|
|
712
|
+
...snapshot,
|
|
713
|
+
expiresAt
|
|
714
|
+
};
|
|
715
|
+
} finally {
|
|
716
|
+
releaseAppPrefetchFetchSlot(response);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
const restoredRscResponseExpiresAt = /* @__PURE__ */ new WeakMap();
|
|
720
|
+
/**
|
|
721
|
+
* Reconstruct a Response from a cached RSC snapshot.
|
|
722
|
+
* Creates a new Response with the original ArrayBuffer so createFromFetch
|
|
723
|
+
* can consume the stream from scratch.
|
|
724
|
+
*
|
|
725
|
+
* NOTE: The reconstructed Response always has `url === ""` — the Response
|
|
726
|
+
* constructor does not accept a `url` option, and `response.url` is read-only
|
|
727
|
+
* set by the fetch infrastructure. Callers that need the original URL should
|
|
728
|
+
* read it from `cached.url` directly rather than from the restored Response.
|
|
729
|
+
*
|
|
730
|
+
* @param copy - When true (default), copies the ArrayBuffer so the cached
|
|
731
|
+
* snapshot remains replayable (needed for the visited-response cache).
|
|
732
|
+
* Pass false for single-consumption paths (e.g. prefetch cache entries
|
|
733
|
+
* that are deleted after consumption) to avoid the extra allocation.
|
|
734
|
+
*/
|
|
735
|
+
function restoreRscResponse(cached, copy = true) {
|
|
736
|
+
const headers = new Headers({ "content-type": cached.contentType });
|
|
737
|
+
if (cached.mountedSlotsHeader != null) headers.set(VINEXT_MOUNTED_SLOTS_HEADER, cached.mountedSlotsHeader);
|
|
738
|
+
if (cached.compatibilityIdHeader != null) headers.set(VINEXT_RSC_COMPATIBILITY_ID_HEADER, cached.compatibilityIdHeader);
|
|
739
|
+
if (isStaleTimeSeconds(cached.dynamicStaleTimeSeconds)) headers.set(VINEXT_DYNAMIC_STALE_TIME_HEADER, String(cached.dynamicStaleTimeSeconds));
|
|
740
|
+
if (isStaleTimeSeconds(cached.completedDynamicStaleTimeSeconds)) headers.set(VINEXT_RSC_COMPLETION_METADATA_HEADER, "resolved");
|
|
741
|
+
if (cached.serverStaleTime?.kind === "pending") headers.set(VINEXT_STALE_TIME_PENDING_HEADER, "1");
|
|
742
|
+
else if (cached.serverStaleTime !== void 0) headers.set(NEXT_ROUTER_STALE_TIME_HEADER, String(cached.serverStaleTime.seconds));
|
|
743
|
+
if (cached.paramsHeader != null) headers.set(VINEXT_PARAMS_HEADER, cached.paramsHeader);
|
|
744
|
+
if (cached.redirectHeader !== void 0) headers.set(VINEXT_RSC_REDIRECT_HEADER, cached.redirectHeader);
|
|
745
|
+
if (cached.redirectTypeHeader !== void 0) headers.set(VINEXT_RSC_REDIRECT_TYPE_HEADER, cached.redirectTypeHeader);
|
|
746
|
+
if (cached.renderedPathAndSearch != null) headers.set(VINEXT_RENDERED_PATH_AND_SEARCH_HEADER, encodeURIComponent(cached.renderedPathAndSearch));
|
|
747
|
+
const response = new Response(copy ? cached.buffer.slice(0) : cached.buffer, {
|
|
748
|
+
status: 200,
|
|
749
|
+
headers
|
|
750
|
+
});
|
|
751
|
+
if (isCacheExpiresAt(cached.expiresAt)) restoredRscResponseExpiresAt.set(response, cached.expiresAt);
|
|
752
|
+
return response;
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* `prefetchRscResponse`'s `prepareSnapshot` for navigation-reusable entries:
|
|
756
|
+
* decode the cached payload through the App Router runtime so a later
|
|
757
|
+
* navigation can commit it without re-parsing. Shared by `<Link>` and
|
|
758
|
+
* `router.prefetch()`.
|
|
759
|
+
*/
|
|
760
|
+
async function prepareNavigationPrefetchSnapshot(snapshot) {
|
|
761
|
+
const preparePrefetchResponse = getNavigationRuntime()?.functions.preparePrefetchResponse;
|
|
762
|
+
if (!preparePrefetchResponse) throw new Error("App Router prefetch preparation is unavailable");
|
|
763
|
+
return await preparePrefetchResponse(restoreRscResponse(snapshot));
|
|
764
|
+
}
|
|
765
|
+
/**
|
|
766
|
+
* Gate a navigation-reusable prefetch behind the route-tree request shared by
|
|
767
|
+
* `<Link>` and `router.prefetch()`. Callers retain control of fetch scheduling
|
|
768
|
+
* and request-only options while freshness, deduplication, and alias reuse stay
|
|
769
|
+
* identical across both entry points.
|
|
770
|
+
*/
|
|
771
|
+
async function fetchRouteTreeGatedPrefetch(options) {
|
|
772
|
+
const { fetchFullRscPayload, fetchRouteTree, fullHref, headers, interceptionContext, mountedSlotsHeader } = options;
|
|
773
|
+
const routeTreeHeaders = new Headers(headers);
|
|
774
|
+
routeTreeHeaders.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
|
|
775
|
+
routeTreeHeaders.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "/_tree");
|
|
776
|
+
const routeTreeRscUrl = await createRscRequestUrl(fullHref, routeTreeHeaders);
|
|
777
|
+
const routeTreeCacheKey = AppElementsWire.encodeCacheKey(routeTreeRscUrl, interceptionContext);
|
|
778
|
+
let routeTreeEntry = getFreshPrefetchCacheEntry(routeTreeCacheKey);
|
|
779
|
+
if (routeTreeEntry === void 0) {
|
|
780
|
+
getPrefetchedUrls().add(routeTreeCacheKey);
|
|
781
|
+
prefetchRscResponse(routeTreeRscUrl, fetchRouteTree(routeTreeRscUrl, routeTreeHeaders), interceptionContext, mountedSlotsHeader, void 0, {
|
|
782
|
+
cacheForNavigation: false,
|
|
783
|
+
optimisticRouteShell: false,
|
|
784
|
+
prefetchKind: "route-tree"
|
|
785
|
+
});
|
|
786
|
+
routeTreeEntry = getFreshPrefetchCacheEntry(routeTreeCacheKey);
|
|
787
|
+
}
|
|
788
|
+
await routeTreeEntry?.pending?.catch(() => {});
|
|
789
|
+
routeTreeEntry = getFreshPrefetchCacheEntry(routeTreeCacheKey);
|
|
790
|
+
const renderedPathAndSearch = routeTreeEntry?.snapshot?.renderedPathAndSearch;
|
|
791
|
+
if (renderedPathAndSearch) {
|
|
792
|
+
const cachedRenderedResponse = peekPrefetchResponseForNavigation(await createRscRequestUrl(renderedPathAndSearch, headers), interceptionContext, mountedSlotsHeader);
|
|
793
|
+
if (cachedRenderedResponse) return restoreRscResponse(cachedRenderedResponse);
|
|
794
|
+
}
|
|
795
|
+
return fetchFullRscPayload();
|
|
796
|
+
}
|
|
797
|
+
/**
|
|
798
|
+
* Whether a prefetch response may be decoded as Flight. A successful response
|
|
799
|
+
* that is not Flight (e.g. a Route Handler's text download) is a miss: decoding
|
|
800
|
+
* its bytes would let text shaped like Flight resource hints insert scripts.
|
|
801
|
+
* Navigation then fetches it and falls back to a document navigation.
|
|
802
|
+
*
|
|
803
|
+
* Ported from Next.js: fetchPrefetchResponse in
|
|
804
|
+
* packages/next/src/client/components/segment-cache/cache.ts, which skips the
|
|
805
|
+
* check in `output: "export"` because a static host, not Next.js, chooses the
|
|
806
|
+
* MIME type of the exported `.txt` payloads.
|
|
807
|
+
*/
|
|
808
|
+
function isFlightPrefetchResponse(response) {
|
|
809
|
+
if (!response.ok) return false;
|
|
810
|
+
if (process.env.NODE_ENV === "production" && process.env.__NEXT_CONFIG_OUTPUT === "export") return true;
|
|
811
|
+
return response.headers.get("content-type")?.toLowerCase().startsWith(VINEXT_RSC_CONTENT_TYPE) === true;
|
|
812
|
+
}
|
|
813
|
+
/**
|
|
814
|
+
* Prefetch an RSC response and snapshot it for later consumption.
|
|
815
|
+
* Stores the in-flight promise so immediate clicks can await it instead
|
|
816
|
+
* of firing a duplicate fetch.
|
|
817
|
+
* Enforces a maximum cache size to prevent unbounded memory growth on
|
|
818
|
+
* link-heavy pages.
|
|
819
|
+
*/
|
|
820
|
+
function prefetchRscResponse(rscUrl, fetchPromise, interceptionContext = null, mountedSlotsHeader = null, options, behavior = {}) {
|
|
821
|
+
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
822
|
+
const cache = getPrefetchCache();
|
|
823
|
+
const prefetched = getPrefetchedUrls();
|
|
824
|
+
const now = Date.now();
|
|
825
|
+
const existing = cache.get(cacheKey);
|
|
826
|
+
const cacheForNavigation = behavior.cacheForNavigation ?? true;
|
|
827
|
+
if (existing) deletePrefetchCacheEntry(cache, prefetched, cacheKey, existing, false);
|
|
828
|
+
const entry = {
|
|
829
|
+
cacheForNavigation,
|
|
830
|
+
cacheKeys: /* @__PURE__ */ new Set([cacheKey]),
|
|
831
|
+
mountedSlotsHeader,
|
|
832
|
+
optimisticRouteShell: behavior.optimisticRouteShell === true,
|
|
833
|
+
outcome: "pending",
|
|
834
|
+
prefetchKind: behavior.prefetchKind ?? (behavior.optimisticRouteShell === true ? "loading-shell" : "navigation"),
|
|
835
|
+
searchAgnosticShell: behavior.searchAgnosticShell === true,
|
|
836
|
+
timestamp: now
|
|
837
|
+
};
|
|
838
|
+
if (behavior.dynamicStaleTime === "learning-only" && behavior.searchAgnosticShell !== true) {
|
|
839
|
+
entry.dynamicStaleTime = "learning-only";
|
|
840
|
+
entry.fallbackTtlMs = behavior.fallbackTtlMs ?? PREFETCH_CACHE_TTL;
|
|
841
|
+
} else if (behavior.dynamicStaleTime === "full-prefetch") entry.dynamicStaleTime = "full-prefetch";
|
|
842
|
+
addPrefetchInvalidationCallback(entry, options?.onInvalidate);
|
|
843
|
+
entry.fetchPromise = fetchPromise;
|
|
844
|
+
entry.pending = fetchPromise.then(async (response) => {
|
|
845
|
+
if (isFlightPrefetchResponse(response)) {
|
|
846
|
+
const snapshot = await snapshotRscResponse(response);
|
|
847
|
+
if (cache.get(cacheKey) !== entry) return;
|
|
848
|
+
const previousSize = getPrefetchCacheEntrySize(entry);
|
|
849
|
+
entry.snapshot = snapshot;
|
|
850
|
+
entry.size = snapshot.buffer.byteLength;
|
|
851
|
+
adjustPrefetchCacheByteSize(cache, entry.size - previousSize);
|
|
852
|
+
const fallbackTtlMs = behavior.fallbackTtlMs ?? PREFETCH_CACHE_TTL;
|
|
853
|
+
const dynamicStaleTime = behavior.searchAgnosticShell === true ? "ignore" : entry.dynamicStaleTime ?? behavior.dynamicStaleTime ?? (behavior.optimisticRouteShell === true ? "ignore" : "verbatim");
|
|
854
|
+
if (dynamicStaleTime === "learning-only" && isStaleTimeSeconds(snapshot.dynamicStaleTimeSeconds)) {
|
|
855
|
+
entry.cacheForNavigation = false;
|
|
856
|
+
entry.expiresAt = entry.timestamp + Math.max(fallbackTtlMs, MIN_PREFETCH_STALE_TIME_MS);
|
|
857
|
+
} else entry.expiresAt = resolvePrefetchedRscResponseExpiresAt(entry.timestamp, entry.snapshot, fallbackTtlMs, dynamicStaleTime === "learning-only" ? "verbatim" : dynamicStaleTime);
|
|
858
|
+
if (behavior.prepareSnapshot && entry.cacheForNavigation && snapshot.redirectHeader === void 0) try {
|
|
859
|
+
const preparedElements = await behavior.prepareSnapshot(snapshot);
|
|
860
|
+
if (cache.get(cacheKey) !== entry) return;
|
|
861
|
+
entry.preparedElements = preparedElements;
|
|
862
|
+
} catch {}
|
|
863
|
+
addRenderedPathAndSearchPrefetchAlias(cache, prefetched, cacheKey, entry);
|
|
864
|
+
evictPrefetchCacheIfNeeded();
|
|
865
|
+
} else {
|
|
866
|
+
releaseAppPrefetchFetchSlot(response);
|
|
867
|
+
response.body?.cancel().catch(() => {});
|
|
868
|
+
deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, false);
|
|
869
|
+
}
|
|
870
|
+
}).catch(() => {
|
|
871
|
+
deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, false);
|
|
872
|
+
}).finally(() => {
|
|
873
|
+
if (cache.get(cacheKey) !== entry) return;
|
|
874
|
+
entry.pending = void 0;
|
|
875
|
+
entry.fetchPromise = void 0;
|
|
876
|
+
if (entry.snapshot) {
|
|
877
|
+
entry.outcome = "cache-seeded";
|
|
878
|
+
schedulePrefetchInvalidation(cacheKey, entry);
|
|
879
|
+
}
|
|
880
|
+
});
|
|
881
|
+
cache.set(cacheKey, entry);
|
|
882
|
+
evictPrefetchCacheIfNeeded();
|
|
883
|
+
}
|
|
884
|
+
function addRenderedPathAndSearchPrefetchAlias(cache, prefetched, primaryCacheKey, entry) {
|
|
885
|
+
if (entry.cacheForNavigation === false) return;
|
|
886
|
+
const renderedPathAndSearch = entry.snapshot?.renderedPathAndSearch;
|
|
887
|
+
if (!renderedPathAndSearch) return;
|
|
888
|
+
const source = AppElementsWire.decodeCacheKey(primaryCacheKey);
|
|
889
|
+
const aliasCacheKey = AppElementsWire.encodeCacheKey(renderedPathAndSearch, source.interceptionContext);
|
|
890
|
+
if (aliasCacheKey === primaryCacheKey) return;
|
|
891
|
+
const existing = cache.get(aliasCacheKey);
|
|
892
|
+
if (existing && existing !== entry) deletePrefetchCacheEntry(cache, prefetched, aliasCacheKey, existing, false);
|
|
893
|
+
entry.cacheKeys ??= /* @__PURE__ */ new Set([primaryCacheKey]);
|
|
894
|
+
entry.cacheKeys.add(aliasCacheKey);
|
|
895
|
+
cache.set(aliasCacheKey, entry);
|
|
896
|
+
prefetched.add(aliasCacheKey);
|
|
897
|
+
}
|
|
898
|
+
function peekPrefetchResponseForNavigation(rscUrl, interceptionContext = null, mountedSlotsHeader = null, options) {
|
|
899
|
+
const match = findPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, options?.additionalRscUrls);
|
|
900
|
+
if (!match) return null;
|
|
901
|
+
const { cacheKey, entry } = match;
|
|
902
|
+
if (entry.pending || entry.outcome !== "cache-seeded") return null;
|
|
903
|
+
if (entry.cacheForNavigation === false || !entry.snapshot) return null;
|
|
904
|
+
if (resolvePrefetchCacheEntryExpiresAt(entry) <= Date.now()) {
|
|
905
|
+
deletePrefetchCacheEntry(getPrefetchCache(), getPrefetchedUrls(), cacheKey, entry, true);
|
|
906
|
+
return null;
|
|
907
|
+
}
|
|
908
|
+
if (entry.expiresAt !== void 0 || entry.snapshot.expiresAt !== void 0) return {
|
|
909
|
+
...entry.snapshot,
|
|
910
|
+
expiresAt: resolvePrefetchCacheEntryExpiresAt(entry)
|
|
911
|
+
};
|
|
912
|
+
return entry.snapshot;
|
|
913
|
+
}
|
|
914
|
+
/**
|
|
915
|
+
* Consume a prefetched response for a given rscUrl.
|
|
916
|
+
* Only returns settled (non-pending) snapshots synchronously.
|
|
917
|
+
* Returns null if the entry is still in flight or doesn't exist.
|
|
918
|
+
*/
|
|
919
|
+
function consumePrefetchResponse(rscUrl, interceptionContext = null, mountedSlotsHeader = null, options) {
|
|
920
|
+
const cache = getPrefetchCache();
|
|
921
|
+
const exactCacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
922
|
+
const exactEntry = cache.get(exactCacheKey);
|
|
923
|
+
if (exactEntry && exactEntry.cacheForNavigation !== false && !isPrefetchCacheEntryCompatibleWithMountedSlots(exactEntry, mountedSlotsHeader)) deletePrefetchCacheEntry(cache, getPrefetchedUrls(), exactCacheKey, exactEntry, false);
|
|
924
|
+
const match = findPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, options?.additionalRscUrls);
|
|
925
|
+
if (!match) return null;
|
|
926
|
+
const { cacheKey, entry } = match;
|
|
927
|
+
return consumeMatchedPrefetchResponse(cacheKey, entry, mountedSlotsHeader);
|
|
928
|
+
}
|
|
929
|
+
function consumeMatchedPrefetchResponse(cacheKey, entry, mountedSlotsHeader, allowExpiredInFlightHandoff = false) {
|
|
930
|
+
const cache = getPrefetchCache();
|
|
931
|
+
if (entry.pending || entry.outcome !== "cache-seeded") return null;
|
|
932
|
+
if (entry.cacheForNavigation === false) return null;
|
|
933
|
+
if (entry.snapshot) {
|
|
934
|
+
if (!isPrefetchCacheEntryCompatibleWithMountedSlots(entry, mountedSlotsHeader)) return null;
|
|
935
|
+
if (!allowExpiredInFlightHandoff && resolvePrefetchCacheEntryExpiresAt(entry) <= Date.now()) {
|
|
936
|
+
deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, true);
|
|
937
|
+
return null;
|
|
938
|
+
}
|
|
939
|
+
retainPrefetchInvalidationAfterConsume(entry);
|
|
940
|
+
deletePrefetchCacheEntry(cache, getPrefetchedUrls(), cacheKey, entry, false);
|
|
941
|
+
const snapshot = entry.snapshot;
|
|
942
|
+
if (entry.expiresAt !== void 0 || entry.snapshot.expiresAt !== void 0) return {
|
|
943
|
+
...snapshot,
|
|
944
|
+
expiresAt: resolvePrefetchCacheEntryExpiresAt(entry),
|
|
945
|
+
...entry.preparedElements ? { preparedElements: entry.preparedElements } : {}
|
|
946
|
+
};
|
|
947
|
+
return entry.preparedElements ? {
|
|
948
|
+
...snapshot,
|
|
949
|
+
preparedElements: entry.preparedElements
|
|
950
|
+
} : snapshot;
|
|
951
|
+
}
|
|
952
|
+
return null;
|
|
953
|
+
}
|
|
954
|
+
async function consumePrefetchResponseForNavigation(rscUrl, interceptionContext = null, mountedSlotsHeader = null, options) {
|
|
955
|
+
const cache = getPrefetchCache();
|
|
956
|
+
const match = findPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, options?.additionalRscUrls);
|
|
957
|
+
if (!match) return null;
|
|
958
|
+
const { cacheKey, entry } = match;
|
|
959
|
+
if (options?.shouldConsume?.() === false) return null;
|
|
960
|
+
const allowExpiredInFlightHandoff = entry.pending !== void 0;
|
|
961
|
+
if (entry.pending !== void 0) {
|
|
962
|
+
const releaseClaim = promoteAppPrefetchFetch(entry.fetchPromise, options?.shouldConsume);
|
|
963
|
+
try {
|
|
964
|
+
await entry.pending.catch(() => {});
|
|
965
|
+
} finally {
|
|
966
|
+
releaseClaim();
|
|
967
|
+
}
|
|
968
|
+
if (cache.get(cacheKey) !== entry) return null;
|
|
969
|
+
if (options?.shouldConsume?.() === false) return null;
|
|
970
|
+
}
|
|
971
|
+
return consumeMatchedPrefetchResponse(cacheKey, entry, mountedSlotsHeader, allowExpiredInFlightHandoff);
|
|
972
|
+
}
|
|
973
|
+
const _MOUNTED_SLOTS_HEADER_KEY = Symbol.for("vinext.mountedSlotsHeader");
|
|
974
|
+
function setMountedSlotsHeader(header) {
|
|
975
|
+
if (isServer) return;
|
|
976
|
+
const globalState = window;
|
|
977
|
+
globalState[_MOUNTED_SLOTS_HEADER_KEY] = header;
|
|
978
|
+
}
|
|
979
|
+
function getMountedSlotsHeader() {
|
|
980
|
+
if (isServer) return null;
|
|
981
|
+
return window[_MOUNTED_SLOTS_HEADER_KEY] ?? null;
|
|
982
|
+
}
|
|
983
|
+
function withSuppressedUrlNotifications(fn) {
|
|
984
|
+
const state = getClientNavigationState();
|
|
985
|
+
if (!state) return fn();
|
|
986
|
+
state.suppressUrlNotifyCount += 1;
|
|
987
|
+
try {
|
|
988
|
+
return fn();
|
|
989
|
+
} finally {
|
|
990
|
+
state.suppressUrlNotifyCount -= 1;
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
/** Whether a history entry's state is the data written to it, cloned by the browser. */
|
|
994
|
+
function isSameHistoryStateData(historyState, data) {
|
|
995
|
+
try {
|
|
996
|
+
return JSON.stringify(historyState) === JSON.stringify(data);
|
|
997
|
+
} catch {
|
|
998
|
+
return false;
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
/** Writes the in-progress router write if this call is it, consuming its marker. */
|
|
1002
|
+
function forwardRouterHistoryWrite(state, method, data, unused, url) {
|
|
1003
|
+
const write = state.routerHistoryWrite;
|
|
1004
|
+
if (write?.method !== method) return false;
|
|
1005
|
+
if (write.threw) {
|
|
1006
|
+
if (url == null || new URL(url, window.location.href).href !== write.href) return false;
|
|
1007
|
+
if (write.data !== data && !(isAppOwnedHistoryState(data) && readHistoryStateTraversalIndex(data) === readHistoryStateTraversalIndex(write.data))) return false;
|
|
1008
|
+
} else if (write.data !== data || write.url !== url) return false;
|
|
1009
|
+
if (write.landed) return true;
|
|
1010
|
+
state.routerHistoryWrite = null;
|
|
1011
|
+
const landing = write.land?.(data);
|
|
1012
|
+
const original = method === "pushState" ? state.originalPushState : state.originalReplaceState;
|
|
1013
|
+
const writtenData = landing ? landing.data : data;
|
|
1014
|
+
const historyStateBeforeWrite = window.history.state;
|
|
1015
|
+
try {
|
|
1016
|
+
original.call(window.history, writtenData, unused, url);
|
|
1017
|
+
} catch (error) {
|
|
1018
|
+
const landed = window.history.state !== historyStateBeforeWrite && window.location.href === write.href && isSameHistoryStateData(window.history.state, writtenData);
|
|
1019
|
+
if (landed) landing?.commit();
|
|
1020
|
+
state.routerHistoryWrite = {
|
|
1021
|
+
...write,
|
|
1022
|
+
threw: true,
|
|
1023
|
+
landed
|
|
1024
|
+
};
|
|
1025
|
+
throw error;
|
|
1026
|
+
}
|
|
1027
|
+
landing?.commit();
|
|
1028
|
+
if (write.threw) state.routerHistoryWrite = {
|
|
1029
|
+
...write,
|
|
1030
|
+
landed: true
|
|
1031
|
+
};
|
|
1032
|
+
return true;
|
|
1033
|
+
}
|
|
1034
|
+
function writeRouterHistoryState(method, data, unused, url, land) {
|
|
1035
|
+
withSuppressedUrlNotifications(() => {
|
|
1036
|
+
const state = getClientNavigationState();
|
|
1037
|
+
if (!state) return;
|
|
1038
|
+
if (url == null) {
|
|
1039
|
+
(method === "pushState" ? state.originalPushState : state.originalReplaceState).call(window.history, data, unused, url);
|
|
1040
|
+
return;
|
|
1041
|
+
}
|
|
1042
|
+
const previousWrite = state.routerHistoryWrite;
|
|
1043
|
+
state.routerHistoryWriteDepth += 1;
|
|
1044
|
+
state.routerHistoryWrite = {
|
|
1045
|
+
method,
|
|
1046
|
+
data,
|
|
1047
|
+
url,
|
|
1048
|
+
href: new URL(url, window.location.href).href,
|
|
1049
|
+
land,
|
|
1050
|
+
threw: false,
|
|
1051
|
+
landed: false
|
|
1052
|
+
};
|
|
1053
|
+
try {
|
|
1054
|
+
window.history[method](data, unused, url);
|
|
1055
|
+
} finally {
|
|
1056
|
+
state.routerHistoryWriteDepth -= 1;
|
|
1057
|
+
state.routerHistoryWrite = previousWrite;
|
|
1058
|
+
}
|
|
1059
|
+
});
|
|
1060
|
+
}
|
|
1061
|
+
function pushHistoryStateWithoutNotify(data, unused, url, land) {
|
|
1062
|
+
writeRouterHistoryState("pushState", data, unused, url, land);
|
|
1063
|
+
}
|
|
1064
|
+
function replaceHistoryStateWithoutNotify(data, unused, url, land) {
|
|
1065
|
+
writeRouterHistoryState("replaceState", data, unused, url, land);
|
|
1066
|
+
}
|
|
1067
|
+
/**
|
|
1068
|
+
* Save the current scroll position into the current history state.
|
|
1069
|
+
* Called before every navigation to enable scroll restoration on back/forward.
|
|
1070
|
+
*
|
|
1071
|
+
* Uses replaceHistoryStateWithoutNotify to avoid triggering the patched
|
|
1072
|
+
* history.replaceState interception (which would cause spurious re-renders).
|
|
1073
|
+
*/
|
|
1074
|
+
function saveScrollPosition() {
|
|
1075
|
+
replaceHistoryStateWithoutNotify({
|
|
1076
|
+
...window.history.state ?? {},
|
|
1077
|
+
__vinext_scrollX: window.scrollX,
|
|
1078
|
+
__vinext_scrollY: window.scrollY
|
|
1079
|
+
}, "");
|
|
1080
|
+
}
|
|
1081
|
+
function commitHashOnlyHistoryState(href, mode, scroll) {
|
|
1082
|
+
const commitAppRouterHashNavigation = getNavigationRuntime()?.functions.commitHashNavigation;
|
|
1083
|
+
if (commitAppRouterHashNavigation) {
|
|
1084
|
+
commitAppRouterHashNavigation(href, mode, scroll);
|
|
1085
|
+
return;
|
|
1086
|
+
}
|
|
1087
|
+
const historyState = createHashOnlyHistoryStatePreservingNavigationMetadata(window.history.state);
|
|
1088
|
+
if (mode === "replace") replaceHistoryStateWithoutNotify(historyState, "", href);
|
|
1089
|
+
else pushHistoryStateWithoutNotify(historyState, "", href);
|
|
1090
|
+
}
|
|
1091
|
+
function applyAppRouterScrollFallback(intent) {
|
|
1092
|
+
if (typeof document === "undefined" || typeof window === "undefined") return;
|
|
1093
|
+
if (intent.hash !== null) {
|
|
1094
|
+
const hash = intent.hash;
|
|
1095
|
+
requestAnimationFrame(() => {
|
|
1096
|
+
if (!isLatestAppRouterScrollIntent(intent)) return;
|
|
1097
|
+
disableSmoothScrollDuringRouteTransition(() => {
|
|
1098
|
+
scrollToHashTarget(hash);
|
|
1099
|
+
});
|
|
1100
|
+
});
|
|
1101
|
+
return;
|
|
1102
|
+
}
|
|
1103
|
+
if (intent.targetHoistedInHead) return;
|
|
1104
|
+
disableSmoothScrollDuringRouteTransition(() => {
|
|
1105
|
+
document.documentElement.scrollTop = 0;
|
|
1106
|
+
});
|
|
1107
|
+
}
|
|
1108
|
+
function scheduleAppRouterScrollFallback(intent) {
|
|
1109
|
+
queueMicrotask(() => {
|
|
1110
|
+
const pendingIntent = getPendingAppRouterScrollIntent();
|
|
1111
|
+
if (pendingIntent === null || pendingIntent.id !== intent.id) return;
|
|
1112
|
+
const fallbackIntent = consumeAppRouterScrollIntent(intent);
|
|
1113
|
+
if (fallbackIntent) applyAppRouterScrollFallback(fallbackIntent);
|
|
1114
|
+
});
|
|
1115
|
+
}
|
|
1116
|
+
/**
|
|
1117
|
+
* Restore scroll position from a history state object (used on popstate).
|
|
1118
|
+
*
|
|
1119
|
+
* When an RSC navigation is in flight (back/forward triggers both this
|
|
1120
|
+
* handler and the browser entry's popstate handler which calls the registered
|
|
1121
|
+
* navigation runtime), we must wait for the new content to render
|
|
1122
|
+
* before scrolling. Otherwise the user sees old content flash at the
|
|
1123
|
+
* restored scroll position.
|
|
1124
|
+
*
|
|
1125
|
+
* This handler fires before the browser entry's popstate handler (because
|
|
1126
|
+
* navigation.ts is loaded before hydration completes), so we defer via a
|
|
1127
|
+
* microtask to give the browser entry handler a chance to set
|
|
1128
|
+
* __VINEXT_RSC_PENDING__. Promise.resolve() schedules a microtask
|
|
1129
|
+
* that runs after all synchronous event listeners have completed.
|
|
1130
|
+
*/
|
|
1131
|
+
function restoreScrollPosition(state) {
|
|
1132
|
+
if (state && typeof state === "object" && "__vinext_scrollY" in state) {
|
|
1133
|
+
const { __vinext_scrollX: x, __vinext_scrollY: y } = state;
|
|
1134
|
+
Promise.resolve().then(() => {
|
|
1135
|
+
const pending = window.__VINEXT_RSC_PENDING__ ?? null;
|
|
1136
|
+
if (pending) pending.then(() => retryScrollTo(x, y));
|
|
1137
|
+
else retryScrollTo(x, y);
|
|
1138
|
+
});
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
/**
|
|
1142
|
+
* Hard-navigate to a URL via `window.location`, preserving push/replace
|
|
1143
|
+
* semantics. Used for URLs the App Router cannot serve (Pages-owned
|
|
1144
|
+
* targets in a hybrid build) and for catch-all RSC failures.
|
|
1145
|
+
*/
|
|
1146
|
+
function hardNavigateTo(fullHref, mode) {
|
|
1147
|
+
if (mode === "replace") window.location.replace(fullHref);
|
|
1148
|
+
else window.location.assign(fullHref);
|
|
1149
|
+
}
|
|
1150
|
+
/**
|
|
1151
|
+
* Reset any link still showing a `useLinkStatus()` pending state that did not
|
|
1152
|
+
* initiate the navigation now starting (e.g. a programmatic router.push, a form
|
|
1153
|
+
* submit, or a raw history update). A <Link> click registers itself first, so
|
|
1154
|
+
* the hook keeps that link pending.
|
|
1155
|
+
*/
|
|
1156
|
+
function resetStaleLinkStatus() {
|
|
1157
|
+
getNavigationRuntime()?.functions.notifyLinkNavigationStart?.();
|
|
1158
|
+
}
|
|
1159
|
+
/**
|
|
1160
|
+
* Signal that a navigation to `href` is starting, for the callers that will
|
|
1161
|
+
* fetch the destination. Separate from `resetStaleLinkStatus()` because a raw
|
|
1162
|
+
* `history.pushState` also supersedes a pending link but issues no request —
|
|
1163
|
+
* cancelling a prefetch there would drop it with nothing to take its place.
|
|
1164
|
+
*/
|
|
1165
|
+
function notifyAppNavigationStart(href) {
|
|
1166
|
+
const destination = toAppPrefetchDestination(href);
|
|
1167
|
+
if (destination !== null && !isHashOnlyBrowserUrlChange(href, window.location.href, __basePath)) cancelPendingPrefetchSetups(destination);
|
|
1168
|
+
resetStaleLinkStatus();
|
|
1169
|
+
}
|
|
1170
|
+
/**
|
|
1171
|
+
* popstate variant. The browser has already applied the history entry by the
|
|
1172
|
+
* time this runs, so the pre-navigation URL that `isHashOnlyBrowserUrlChange`
|
|
1173
|
+
* needs is gone. Back/forward across a route boundary does drive an RSC fetch
|
|
1174
|
+
* (`app-browser-entry.ts`'s popstate handler), so cancelling by destination is
|
|
1175
|
+
* right; a hash-only entry over-cancels, which costs one re-prefetch and can
|
|
1176
|
+
* never cause a duplicate request.
|
|
1177
|
+
*/
|
|
1178
|
+
function notifyAppPopstateNavigationStart() {
|
|
1179
|
+
const destination = toAppPrefetchDestination(window.location.href);
|
|
1180
|
+
if (destination !== null) cancelPendingPrefetchSetups(destination);
|
|
1181
|
+
resetStaleLinkStatus();
|
|
1182
|
+
}
|
|
1183
|
+
/**
|
|
1184
|
+
* Navigate to a URL, handling external URLs, hash-only changes, and RSC navigation.
|
|
1185
|
+
*/
|
|
1186
|
+
async function navigateClientSide(href, mode, scroll, programmaticTransition = false, visibleCommitMode = "transition") {
|
|
1187
|
+
notifyAppNavigationStart(href);
|
|
1188
|
+
let normalizedHref = href;
|
|
1189
|
+
if (isExternalUrl(href)) {
|
|
1190
|
+
const localPath = toSameOriginAppPath(href, __basePath);
|
|
1191
|
+
if (localPath == null) {
|
|
1192
|
+
notifyAppRouterTransitionStart(href, mode);
|
|
1193
|
+
const externalNavigate = getNavigationRuntime()?.functions.navigateExternal;
|
|
1194
|
+
if (externalNavigate) {
|
|
1195
|
+
await externalNavigate(href, mode);
|
|
1196
|
+
return;
|
|
1197
|
+
}
|
|
1198
|
+
hardNavigateTo(href, mode);
|
|
1199
|
+
await new Promise(() => {});
|
|
1200
|
+
return;
|
|
1201
|
+
}
|
|
1202
|
+
normalizedHref = localPath;
|
|
1203
|
+
}
|
|
1204
|
+
const hybridOwner = resolveHybridClientRouteOwner(normalizedHref);
|
|
1205
|
+
if (hybridOwner === "pages" || hybridOwner === "document") {
|
|
1206
|
+
const fullHref = toCanonicalBrowserNavigationHref(normalizedHref, window.location.href, __basePath, __trailingSlash);
|
|
1207
|
+
notifyAppRouterTransitionStart(fullHref, mode);
|
|
1208
|
+
if (mode === "push") saveScrollPosition();
|
|
1209
|
+
const mpaNavigate = getNavigationRuntime()?.functions.navigateExternal;
|
|
1210
|
+
if (mpaNavigate) {
|
|
1211
|
+
await mpaNavigate(fullHref, mode);
|
|
1212
|
+
return;
|
|
1213
|
+
}
|
|
1214
|
+
hardNavigateTo(fullHref, mode);
|
|
1215
|
+
await new Promise(() => {});
|
|
1216
|
+
return;
|
|
1217
|
+
}
|
|
1218
|
+
const fullHref = toCanonicalBrowserNavigationHref(normalizedHref, window.location.href, __basePath, __trailingSlash);
|
|
1219
|
+
stageAppNavigationFailureTarget(fullHref);
|
|
1220
|
+
notifyAppRouterTransitionStart(fullHref, mode);
|
|
1221
|
+
if (mode === "push") saveScrollPosition();
|
|
1222
|
+
const earlyIntent = navigationPlanner.classifyEarlyNavigationIntent({
|
|
1223
|
+
basePath: __basePath,
|
|
1224
|
+
currentUrlSpace: "browser",
|
|
1225
|
+
currentHref: window.location.href,
|
|
1226
|
+
mode,
|
|
1227
|
+
scroll,
|
|
1228
|
+
targetHref: fullHref
|
|
1229
|
+
});
|
|
1230
|
+
if (earlyIntent.kind === "sameDocumentScroll") {
|
|
1231
|
+
clearAppRouterScrollIntent();
|
|
1232
|
+
commitHashOnlyHistoryState(fullHref, earlyIntent.mode, earlyIntent.scroll);
|
|
1233
|
+
clearAppNavigationFailureTarget(fullHref);
|
|
1234
|
+
commitClientNavigationState();
|
|
1235
|
+
if (earlyIntent.scroll) scrollToHashTarget(earlyIntent.hash);
|
|
1236
|
+
return;
|
|
1237
|
+
}
|
|
1238
|
+
if (hasPendingAppRouterPageRedirect(typeof document === "undefined" ? void 0 : document)) {
|
|
1239
|
+
const mpaNavigate = getNavigationRuntime()?.functions.navigateExternal;
|
|
1240
|
+
if (mpaNavigate) {
|
|
1241
|
+
await mpaNavigate(fullHref, mode);
|
|
1242
|
+
return;
|
|
1243
|
+
}
|
|
1244
|
+
hardNavigateTo(fullHref, mode);
|
|
1245
|
+
await new Promise(() => {});
|
|
1246
|
+
return;
|
|
1247
|
+
}
|
|
1248
|
+
const hashIdx = fullHref.indexOf("#");
|
|
1249
|
+
const hash = hashIdx !== -1 ? fullHref.slice(hashIdx) : "";
|
|
1250
|
+
const scrollIntent = scroll ? beginAppRouterScrollIntent(hash || null) : null;
|
|
1251
|
+
if (!scroll) clearAppRouterScrollIntent();
|
|
1252
|
+
const appNavigate = getNavigationRuntime()?.functions.navigate;
|
|
1253
|
+
try {
|
|
1254
|
+
if (appNavigate) await appNavigate(fullHref, 0, "navigate", mode, void 0, programmaticTransition, void 0, scrollIntent, visibleCommitMode, earlyIntent.bypassNavigationCache);
|
|
1255
|
+
else {
|
|
1256
|
+
if (mode === "replace") replaceHistoryStateWithoutNotify(null, "", fullHref);
|
|
1257
|
+
else pushHistoryStateWithoutNotify(null, "", fullHref);
|
|
1258
|
+
commitClientNavigationState();
|
|
1259
|
+
}
|
|
1260
|
+
} catch (error) {
|
|
1261
|
+
if (scrollIntent) consumeAppRouterScrollIntent(scrollIntent);
|
|
1262
|
+
throw error;
|
|
1263
|
+
}
|
|
1264
|
+
if (scrollIntent) scheduleAppRouterScrollFallback(scrollIntent);
|
|
1265
|
+
}
|
|
1266
|
+
let scheduledAppRouterNavigationCount = 0;
|
|
1267
|
+
function trackScheduledAppRouterNavigation() {
|
|
1268
|
+
scheduledAppRouterNavigationCount += 1;
|
|
1269
|
+
let released = false;
|
|
1270
|
+
return () => {
|
|
1271
|
+
if (released) return;
|
|
1272
|
+
released = true;
|
|
1273
|
+
scheduledAppRouterNavigationCount = Math.max(0, scheduledAppRouterNavigationCount - 1);
|
|
1274
|
+
};
|
|
1275
|
+
}
|
|
1276
|
+
function hasScheduledAppRouterNavigation() {
|
|
1277
|
+
return scheduledAppRouterNavigationCount > 0;
|
|
1278
|
+
}
|
|
1279
|
+
function releaseScheduledAppRouterNavigationAfterCurrentTask(release) {
|
|
1280
|
+
queueMicrotask(release);
|
|
1281
|
+
}
|
|
1282
|
+
let inFlightAppRouterNavigationCount = 0;
|
|
1283
|
+
let visibleLinkPingAwaitsNavigations = false;
|
|
1284
|
+
/**
|
|
1285
|
+
* Called by the App Router browser entry for each RSC navigation it runs.
|
|
1286
|
+
* Returns a release callback for the navigation's settlement.
|
|
1287
|
+
*/
|
|
1288
|
+
function trackAppRouterNavigationInFlight() {
|
|
1289
|
+
inFlightAppRouterNavigationCount += 1;
|
|
1290
|
+
let released = false;
|
|
1291
|
+
return () => {
|
|
1292
|
+
if (released) return;
|
|
1293
|
+
released = true;
|
|
1294
|
+
inFlightAppRouterNavigationCount = Math.max(0, inFlightAppRouterNavigationCount - 1);
|
|
1295
|
+
if (inFlightAppRouterNavigationCount === 0 && visibleLinkPingAwaitsNavigations) {
|
|
1296
|
+
visibleLinkPingAwaitsNavigations = false;
|
|
1297
|
+
getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
1298
|
+
}
|
|
1299
|
+
};
|
|
1300
|
+
}
|
|
1301
|
+
function pingVisibleLinksOnceNavigationsSettle() {
|
|
1302
|
+
if (inFlightAppRouterNavigationCount > 0) {
|
|
1303
|
+
visibleLinkPingAwaitsNavigations = true;
|
|
1304
|
+
return;
|
|
1305
|
+
}
|
|
1306
|
+
getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
1307
|
+
}
|
|
1308
|
+
/**
|
|
1309
|
+
* App Router public router instance. Mirrors Next.js's
|
|
1310
|
+
* `publicAppRouterInstance` from
|
|
1311
|
+
* `packages/next/src/client/components/app-router-instance.ts`.
|
|
1312
|
+
*
|
|
1313
|
+
* Exported so the App Router browser entry can install it on
|
|
1314
|
+
* `window.next.router` for Next.js parity (see `client/window-next.ts`).
|
|
1315
|
+
* Internal callers in this file continue to use `_appRouter` for brevity.
|
|
1316
|
+
*/
|
|
1317
|
+
const _appRouter = {
|
|
1318
|
+
bfcacheId: "0",
|
|
1319
|
+
push(href, options) {
|
|
1320
|
+
assertSafeNavigationUrl(href);
|
|
1321
|
+
if (isServer) return;
|
|
1322
|
+
notifyAppNavigationStart(href);
|
|
1323
|
+
const releaseNavigation = trackScheduledAppRouterNavigation();
|
|
1324
|
+
try {
|
|
1325
|
+
React$1.startTransition(() => {
|
|
1326
|
+
navigateClientSide(href, "push", options?.scroll !== false, true);
|
|
1327
|
+
});
|
|
1328
|
+
} catch (error) {
|
|
1329
|
+
releaseNavigation();
|
|
1330
|
+
throw error;
|
|
1331
|
+
}
|
|
1332
|
+
releaseScheduledAppRouterNavigationAfterCurrentTask(releaseNavigation);
|
|
1333
|
+
},
|
|
1334
|
+
replace(href, options) {
|
|
1335
|
+
assertSafeNavigationUrl(href);
|
|
1336
|
+
if (isServer) return;
|
|
1337
|
+
notifyAppNavigationStart(href);
|
|
1338
|
+
const releaseNavigation = trackScheduledAppRouterNavigation();
|
|
1339
|
+
try {
|
|
1340
|
+
React$1.startTransition(() => {
|
|
1341
|
+
navigateClientSide(href, "replace", options?.scroll !== false, true);
|
|
1342
|
+
});
|
|
1343
|
+
} catch (error) {
|
|
1344
|
+
releaseNavigation();
|
|
1345
|
+
throw error;
|
|
1346
|
+
}
|
|
1347
|
+
releaseScheduledAppRouterNavigationAfterCurrentTask(releaseNavigation);
|
|
1348
|
+
},
|
|
1349
|
+
back() {
|
|
1350
|
+
if (isServer) return;
|
|
1351
|
+
window.history.back();
|
|
1352
|
+
},
|
|
1353
|
+
forward() {
|
|
1354
|
+
if (isServer) return;
|
|
1355
|
+
window.history.forward();
|
|
1356
|
+
},
|
|
1357
|
+
refresh() {
|
|
1358
|
+
if (isServer) return;
|
|
1359
|
+
getNavigationRuntime()?.functions.clearNavigationCaches?.({ pingVisibleLinks: false });
|
|
1360
|
+
const rscNavigate = getNavigationRuntime()?.functions.navigate;
|
|
1361
|
+
if (hasScheduledAppRouterNavigation() || !rscNavigate) {
|
|
1362
|
+
getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
1363
|
+
return;
|
|
1364
|
+
}
|
|
1365
|
+
const navigate = () => {
|
|
1366
|
+
rscNavigate(window.location.href, 0, "refresh", void 0, void 0, true).finally(pingVisibleLinksOnceNavigationsSettle);
|
|
1367
|
+
};
|
|
1368
|
+
React$1.startTransition(navigate);
|
|
1369
|
+
},
|
|
1370
|
+
prefetch(href, options) {
|
|
1371
|
+
assertSafeNavigationUrl(href);
|
|
1372
|
+
if (isServer) return;
|
|
1373
|
+
if (isBotUserAgent(window.navigator?.userAgent ?? "")) return;
|
|
1374
|
+
try {
|
|
1375
|
+
new URL(withBasePath(href, __basePath), window.location.href);
|
|
1376
|
+
} catch {
|
|
1377
|
+
throw new Error(`Cannot prefetch '${href}' because it cannot be converted to a URL.`);
|
|
1378
|
+
}
|
|
1379
|
+
const prefetchHref = isExternalUrl(href) ? toSameOriginAppPath(href, __basePath) : href;
|
|
1380
|
+
if (prefetchHref == null) return;
|
|
1381
|
+
const fullHref = toAppPrefetchDestination(prefetchHref);
|
|
1382
|
+
if (fullHref === null) return;
|
|
1383
|
+
const currentPathname = window.location.pathname;
|
|
1384
|
+
let interceptionContext = getPrefetchInterceptionContext(fullHref, currentPathname);
|
|
1385
|
+
const mountedSlotsHeader = getMountedSlotsHeader();
|
|
1386
|
+
const headers = createAppPrefetchRequestHeaders({
|
|
1387
|
+
fetchPriority: "low",
|
|
1388
|
+
interceptionContext,
|
|
1389
|
+
mountedSlotsHeader: mountedSlotsHeader || null
|
|
1390
|
+
});
|
|
1391
|
+
const setup = beginPrefetchSetup(fullHref);
|
|
1392
|
+
(async () => {
|
|
1393
|
+
const routeManifestLoad = loadNavigationRuntimeRouteManifest();
|
|
1394
|
+
if (routeManifestLoad !== null) {
|
|
1395
|
+
if (!await routeManifestLoad || setup.cancelled) return;
|
|
1396
|
+
interceptionContext = getPrefetchInterceptionContext(fullHref, currentPathname);
|
|
1397
|
+
if (interceptionContext !== null) headers.set(VINEXT_INTERCEPTION_CONTEXT_HEADER, interceptionContext);
|
|
1398
|
+
}
|
|
1399
|
+
if (HAS_CLIENT_REWRITES) await preloadHybridClientRouteOwner();
|
|
1400
|
+
const hybridOwner = resolveHybridClientRouteOwner(fullHref);
|
|
1401
|
+
if (hybridOwner === "pages" || hybridOwner === "document") return;
|
|
1402
|
+
const rewrittenPrefetchHref = HAS_CLIENT_REWRITES ? resolveLoadedHybridClientRewriteHref(fullHref, __basePath) : null;
|
|
1403
|
+
const kind = options?.kind === "full" ? "full" : "auto";
|
|
1404
|
+
const [{ resolveAutoAppRoutePrefetch, resolveFullAppRoutePrefetch }, { resolveAppPrefetchRscRequest }] = await Promise.all([import("./internal/app-route-prefetch-policy.js"), import("./internal/app-prefetch-rsc-request.js")]);
|
|
1405
|
+
if (setup.cancelled) return;
|
|
1406
|
+
const policy = kind === "full" ? resolveFullAppRoutePrefetch() : resolveAutoAppRoutePrefetch(rewrittenPrefetchHref ?? fullHref, interceptionContext);
|
|
1407
|
+
const reusable = policy.shouldPrefetch && policy.cacheForNavigation;
|
|
1408
|
+
const requiresRouteTreePrefetch = policy.requiresRouteTreePrefetch === true;
|
|
1409
|
+
if (reusable && kind === "full") headers.delete(NEXT_ROUTER_PREFETCH_HEADER);
|
|
1410
|
+
if (reusable && kind === "auto") {
|
|
1411
|
+
headers.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
|
|
1412
|
+
headers.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, __prefetchInlining || requiresRouteTreePrefetch ? "/__PAGE__" : "1");
|
|
1413
|
+
}
|
|
1414
|
+
const hasSearchParams = new URL(fullHref, window.location.href).search !== "";
|
|
1415
|
+
if (!reusable && kind === "auto") {
|
|
1416
|
+
headers.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
|
|
1417
|
+
headers.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
|
|
1418
|
+
headers.set(VINEXT_RSC_RENDER_MODE_HEADER, hasSearchParams && String(process.env.__NEXT_CACHE_COMPONENTS) === "true" && policy.rendersDynamically !== true ? APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL : APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL);
|
|
1419
|
+
}
|
|
1420
|
+
const { additionalRscUrls, rscUrl } = await resolveAppPrefetchRscRequest({
|
|
1421
|
+
fullHref,
|
|
1422
|
+
headers,
|
|
1423
|
+
rewrittenPrefetchHref
|
|
1424
|
+
});
|
|
1425
|
+
if (setup.cancelled) return;
|
|
1426
|
+
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
1427
|
+
const prefetched = getPrefetchedUrls();
|
|
1428
|
+
if (policy.dynamicStaleTime !== "full-prefetch" && hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext)) {
|
|
1429
|
+
attachPrefetchInvalidationCallback(cacheKey, options?.onInvalidate);
|
|
1430
|
+
return;
|
|
1431
|
+
}
|
|
1432
|
+
if (reusable) {
|
|
1433
|
+
discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext, mountedSlotsHeader);
|
|
1434
|
+
if (hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, {
|
|
1435
|
+
additionalRscUrls,
|
|
1436
|
+
onInvalidate: options?.onInvalidate,
|
|
1437
|
+
onReuse: policy.dynamicStaleTime === "full-prefetch" ? (entry, matchedCacheKey) => promotePrefetchCacheEntryForNavigation(matchedCacheKey, entry) : void 0
|
|
1438
|
+
})) return;
|
|
1439
|
+
if (policy.dynamicStaleTime === "full-prefetch" && seedFullPrefetchFromVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls, options?.onInvalidate)) return;
|
|
1440
|
+
}
|
|
1441
|
+
if (policy.dynamicStaleTime !== "full-prefetch" && hasNavigationFreshVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls, options?.onInvalidate)) return;
|
|
1442
|
+
prefetched.add(cacheKey);
|
|
1443
|
+
const fetchFullRscPayload = () => scheduleAppPrefetchFetch((signal) => fetch(rscUrl, {
|
|
1444
|
+
headers,
|
|
1445
|
+
credentials: "include",
|
|
1446
|
+
priority: "low",
|
|
1447
|
+
signal
|
|
1448
|
+
}), "low");
|
|
1449
|
+
const fetchPromise = reusable && kind === "auto" && requiresRouteTreePrefetch ? fetchRouteTreeGatedPrefetch({
|
|
1450
|
+
fetchFullRscPayload,
|
|
1451
|
+
fetchRouteTree: (routeTreeRscUrl, routeTreeHeaders) => scheduleAppPrefetchFetch((signal) => fetch(routeTreeRscUrl, {
|
|
1452
|
+
headers: routeTreeHeaders,
|
|
1453
|
+
credentials: "include",
|
|
1454
|
+
priority: "low",
|
|
1455
|
+
signal
|
|
1456
|
+
}), "low"),
|
|
1457
|
+
fullHref,
|
|
1458
|
+
headers,
|
|
1459
|
+
interceptionContext,
|
|
1460
|
+
mountedSlotsHeader
|
|
1461
|
+
}) : fetchFullRscPayload();
|
|
1462
|
+
const sharedBehavior = {
|
|
1463
|
+
fallbackTtlMs: policy.fallbackTtl === "dynamic" ? DYNAMIC_NAVIGATION_CACHE_TTL : PREFETCH_CACHE_TTL,
|
|
1464
|
+
dynamicStaleTime: policy.dynamicStaleTime,
|
|
1465
|
+
prefetchKind: "navigation"
|
|
1466
|
+
};
|
|
1467
|
+
prefetchRscResponse(rscUrl, fetchPromise, interceptionContext, mountedSlotsHeader, options, reusable ? {
|
|
1468
|
+
...sharedBehavior,
|
|
1469
|
+
cacheForNavigation: true,
|
|
1470
|
+
optimisticRouteShell: false,
|
|
1471
|
+
prepareSnapshot: prepareNavigationPrefetchSnapshot
|
|
1472
|
+
} : {
|
|
1473
|
+
...sharedBehavior,
|
|
1474
|
+
cacheForNavigation: false,
|
|
1475
|
+
optimisticRouteShell: true
|
|
1476
|
+
});
|
|
1477
|
+
})().catch((error) => {
|
|
1478
|
+
console.error("[vinext] RSC prefetch setup error:", error);
|
|
1479
|
+
}).finally(() => {
|
|
1480
|
+
pendingPrefetchSetups.delete(setup);
|
|
1481
|
+
});
|
|
1482
|
+
}
|
|
1483
|
+
};
|
|
1484
|
+
if (process.env.__NEXT_GESTURE_TRANSITION) _appRouter.experimental_gesturePush = (href, options) => {
|
|
1485
|
+
assertSafeNavigationUrl(href);
|
|
1486
|
+
if (isServer) return;
|
|
1487
|
+
if (!getNavigationRuntime()?.functions.navigate) return;
|
|
1488
|
+
let appHref = href;
|
|
1489
|
+
if (isExternalUrl(href)) {
|
|
1490
|
+
const localPath = toSameOriginAppPath(href, __basePath);
|
|
1491
|
+
if (localPath === null) return;
|
|
1492
|
+
appHref = localPath;
|
|
1493
|
+
}
|
|
1494
|
+
const releaseNavigation = trackScheduledAppRouterNavigation();
|
|
1495
|
+
navigateClientSide(appHref, "push", options?.scroll !== false, false, "synchronous");
|
|
1496
|
+
releaseScheduledAppRouterNavigationAfterCurrentTask(releaseNavigation);
|
|
1497
|
+
};
|
|
1498
|
+
/**
|
|
1499
|
+
* Public App Router instance, exposed for the browser entry so it can wire
|
|
1500
|
+
* `window.next.router` to the same singleton returned from `useRouter()`.
|
|
1501
|
+
*
|
|
1502
|
+
* Mirrors `publicAppRouterInstance` from Next.js's
|
|
1503
|
+
* `packages/next/src/client/components/app-router-instance.ts` (line 392).
|
|
1504
|
+
*/
|
|
1505
|
+
const appRouterInstance = _appRouter;
|
|
1506
|
+
if (!isServer) {
|
|
1507
|
+
const state = getClientNavigationState();
|
|
1508
|
+
if (state && !state.patchInstalled) {
|
|
1509
|
+
state.patchInstalled = true;
|
|
1510
|
+
state.originalPushState = window.history.pushState.bind(window.history);
|
|
1511
|
+
state.originalReplaceState = window.history.replaceState.bind(window.history);
|
|
1512
|
+
window.addEventListener("popstate", () => {
|
|
1513
|
+
notifyAppPopstateNavigationStart();
|
|
1514
|
+
});
|
|
1515
|
+
window.addEventListener("popstate", (event) => {
|
|
1516
|
+
if (!hasAppNavigationRuntime()) {
|
|
1517
|
+
commitClientNavigationState();
|
|
1518
|
+
restoreScrollPosition(event.state);
|
|
1519
|
+
}
|
|
1520
|
+
});
|
|
1521
|
+
window.history.pushState = function patchedPushState(data, unused, url) {
|
|
1522
|
+
if (forwardRouterHistoryWrite(state, "pushState", data, unused, url)) return;
|
|
1523
|
+
if (state.routerHistoryWriteDepth === 0) getNavigationRuntime()?.functions.flushCommittingNavigationUrl?.();
|
|
1524
|
+
if (isAppOwnedHistoryState(data)) {
|
|
1525
|
+
const previousHistoryState = window.history.state;
|
|
1526
|
+
state.originalPushState.call(window.history, data, unused, url);
|
|
1527
|
+
getNavigationRuntime()?.functions.commitAppOwnedHistoryStateWrite?.("push", previousHistoryState);
|
|
1528
|
+
return;
|
|
1529
|
+
}
|
|
1530
|
+
const previousHistoryState = window.history.state;
|
|
1531
|
+
state.originalPushState.call(window.history, createExternalHistoryStatePreservingMetadata(data, window.history.state), unused, url);
|
|
1532
|
+
getNavigationRuntime()?.functions.claimCurrentHistoryTreeSnapshot?.("push", previousHistoryState);
|
|
1533
|
+
if (state.suppressUrlNotifyCount === 0) {
|
|
1534
|
+
resetStaleLinkStatus();
|
|
1535
|
+
if (url) getNavigationRuntime()?.functions.discardPendingNavigation?.();
|
|
1536
|
+
commitClientNavigationState();
|
|
1537
|
+
}
|
|
1538
|
+
};
|
|
1539
|
+
window.history.replaceState = function patchedReplaceState(data, unused, url) {
|
|
1540
|
+
if (forwardRouterHistoryWrite(state, "replaceState", data, unused, url)) return;
|
|
1541
|
+
if (state.routerHistoryWriteDepth === 0) getNavigationRuntime()?.functions.flushCommittingNavigationUrl?.();
|
|
1542
|
+
if (isAppOwnedHistoryState(data)) {
|
|
1543
|
+
const previousHistoryState = window.history.state;
|
|
1544
|
+
state.originalReplaceState.call(window.history, data, unused, url);
|
|
1545
|
+
getNavigationRuntime()?.functions.commitAppOwnedHistoryStateWrite?.("replace", previousHistoryState);
|
|
1546
|
+
return;
|
|
1547
|
+
}
|
|
1548
|
+
const previousHistoryState = window.history.state;
|
|
1549
|
+
state.originalReplaceState.call(window.history, createExternalHistoryStatePreservingMetadata(data, window.history.state), unused, url);
|
|
1550
|
+
getNavigationRuntime()?.functions.claimCurrentHistoryTreeSnapshot?.("replace", previousHistoryState);
|
|
1551
|
+
if (state.suppressUrlNotifyCount === 0) {
|
|
1552
|
+
resetStaleLinkStatus();
|
|
1553
|
+
if (url) getNavigationRuntime()?.functions.discardPendingNavigation?.();
|
|
1554
|
+
commitClientNavigationState();
|
|
1555
|
+
}
|
|
1556
|
+
};
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
export { DYNAMIC_NAVIGATION_CACHE_TTL, MAX_PREFETCH_CACHE_SIZE, PREFETCH_CACHE_TTL, appRouterInstance, applyAppRouterScrollFallback, consumePrefetchResponse, consumePrefetchResponseForNavigation, createAppPrefetchRequestHeaders, createCachedRscResponseSnapshot, deletePrefetchResponseSnapshot, disableNavigationResponsePrefetchCacheReuse, discardLearningOnlyPrefetchCacheEntry, fetchRouteTreeGatedPrefetch, getCurrentInterceptionContext, getCurrentNextUrl, getFreshPrefetchCacheEntry, getMountedSlotsHeader, getPrefetchCache, getPrefetchInterceptionContext, getPrefetchedUrls, hasFreshLearningOnlyPrefetchCacheEntry, hasNavigationFreshVisitedResponse, hasPrefetchCacheEntryForNavigation, hasSearchAgnosticPrefetchShellForRoute, invalidateDynamicPrefetchCache, invalidatePrefetchCache, invalidateVisitedResponsePrefetches, navigateClientSide, parseRenderedPathAndSearchHeader, peekPrefetchResponseForNavigation, prefetchRscResponse, preloadHybridClientRouteOwner, prepareNavigationPrefetchSnapshot, promotePrefetchCacheEntryForNavigation, pushHistoryStateWithoutNotify, replaceHistoryStateWithoutNotify, resolveCachedRscResponseExpiresAt, resolveCachedRscResponseTtlMs, resolveLoadedHybridClientRewriteHref, resolvePrefetchCacheEntryMountedSlotsHeader, restoreRscResponse, saveScrollPosition, seedFullPrefetchFromVisitedResponse, seedPrefetchResponseSnapshot, setMountedSlotsHeader, snapshotRscResponse, trackAppRouterNavigationInFlight };
|