vinext 1.3.0 → 1.4.0
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 +5 -2
- package/THIRD_PARTY_LICENSES.md +47 -0
- package/dist/_virtual/_rolldown/runtime.js +4 -3
- package/dist/build/action-owner-manifest.d.ts +3 -2
- package/dist/build/action-owner-manifest.js +18 -2
- package/dist/build/app-page-static-eligibility.d.ts +17 -1
- package/dist/build/app-page-static-eligibility.js +80 -13
- package/dist/build/clean-output.d.ts +2 -1
- package/dist/build/client-build-config.d.ts +13 -3
- package/dist/build/client-build-config.js +46 -9
- package/dist/build/client-reference-async.d.ts +48 -0
- package/dist/build/client-reference-async.js +123 -0
- package/dist/build/client-reference-chunks.d.ts +32 -0
- package/dist/build/client-reference-chunks.js +111 -0
- package/dist/build/client-reference-groups.d.ts +9 -1
- package/dist/build/client-reference-groups.js +40 -2
- package/dist/build/css-url-assets.d.ts +2 -1
- package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
- package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
- package/dist/build/google-fonts/font-metadata.d.ts +2 -1
- package/dist/build/google-fonts/validate.d.ts +2 -1
- package/dist/build/inline-css.d.ts +2 -1
- package/dist/build/module-dependency-cache.d.ts +2 -1
- package/dist/build/next-client-runtime-manifests.d.ts +2 -1
- package/dist/build/precompress.d.ts +2 -1
- package/dist/build/precompress.js +1 -1
- package/dist/build/prerender-paths.d.ts +2 -1
- package/dist/build/prerender-phase.d.ts +2 -1
- package/dist/build/prerender-server-pool.js +1 -1
- package/dist/build/prerender.d.ts +3 -2
- package/dist/build/prerender.js +6 -5
- package/dist/build/report.d.ts +2 -15
- package/dist/build/report.js +1 -51
- package/dist/build/run-prerender.d.ts +2 -1
- package/dist/build/server-actions-encryption-key.d.ts +2 -1
- package/dist/build/ssr-manifest.js +25 -2
- package/dist/build/standalone.d.ts +2 -1
- package/dist/cache/cache-adapters-virtual.d.ts +2 -1
- package/dist/cache.js +1 -2
- package/dist/check.d.ts +2 -1
- package/dist/check.js +5 -1
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +5 -0
- package/dist/client/client-redirect-matcher.js +2 -1
- package/dist/client/client-redirects.d.ts +4 -3
- package/dist/client/client-redirects.js +2 -1
- package/dist/client/client-rewrites.d.ts +2 -1
- package/dist/client/dev-error-overlay-store.d.ts +2 -1
- package/dist/client/dev-error-overlay.js +1 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +16 -2
- package/dist/client/navigation-runtime.js +2 -2
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -1
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +12 -1
- package/dist/config/config-matchers.js +111 -16
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/next-config.d.ts +32 -1
- package/dist/config/next-config.js +93 -5
- package/dist/config/tsconfig-paths.d.ts +2 -1
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +327 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +123 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +29 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +134 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +50 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +455 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +147 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +169 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +2584 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +2220 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +227 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +425 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +427 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +229 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +292 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +106 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +182 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +42 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +147 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +94 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +95 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
- package/dist/deps/.pnpm/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -0
- package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
- package/dist/entries/app-browser-entry.d.ts +20 -5
- package/dist/entries/app-browser-entry.js +79 -6
- package/dist/entries/app-rsc-entry.d.ts +2 -1
- package/dist/entries/app-rsc-entry.js +59 -60
- package/dist/entries/app-rsc-manifest.d.ts +2 -1
- package/dist/entries/app-rsc-manifest.js +56 -4
- package/dist/entries/app-ssr-entry.js +1 -0
- package/dist/entries/pages-entry-helpers.js +1 -2
- package/dist/entries/pages-server-entry.d.ts +2 -1
- package/dist/entries/pages-server-entry.js +34 -9
- package/dist/entries/runtime-entry-module.d.ts +1 -0
- package/dist/entries/runtime-entry-module.js +4 -1
- package/dist/image/image-adapters-virtual.d.ts +2 -1
- package/dist/index.js +184 -103
- package/dist/init-cloudflare.d.ts +1 -3
- package/dist/init-cloudflare.js +10 -48
- package/dist/init-platform.d.ts +2 -0
- package/dist/init-platform.js +4 -0
- package/dist/plugins/client-compile-hints.d.ts +30 -0
- package/dist/plugins/client-compile-hints.js +88 -0
- package/dist/plugins/client-reference-dedup.d.ts +2 -1
- package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
- package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
- package/dist/plugins/dynamic-preload-metadata.js +1 -1
- package/dist/plugins/environment.d.ts +2 -1
- package/dist/plugins/extensionless-dynamic-import.js +6 -2
- package/dist/plugins/fonts.js +9 -12
- package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
- package/dist/plugins/import-meta-url.d.ts +2 -1
- package/dist/plugins/next-intl-catalog.d.ts +12 -0
- package/dist/plugins/next-intl-catalog.js +85 -0
- package/dist/plugins/og-assets.d.ts +2 -1
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +2 -1
- package/dist/plugins/pages-node-externals.d.ts +3 -1
- package/dist/plugins/pages-node-externals.js +1 -1
- package/dist/plugins/remove-console.d.ts +2 -1
- package/dist/plugins/require-condition-resolution.d.ts +2 -1
- package/dist/plugins/rsc-client-reference-loaders.d.ts +8 -0
- package/dist/plugins/rsc-client-reference-loaders.js +170 -68
- package/dist/plugins/rsc-client-shim-excludes.js +2 -0
- package/dist/plugins/sass.d.ts +2 -1
- package/dist/plugins/strip-server-exports.d.ts +2 -1
- package/dist/plugins/styled-jsx.d.ts +2 -1
- package/dist/plugins/transform-result.d.ts +2 -1
- package/dist/plugins/typeof-window.d.ts +2 -1
- package/dist/plugins/use-cache-callable.d.ts +1 -1
- package/dist/plugins/use-cache-callable.js +136 -94
- package/dist/plugins/worker-image-imports.js +1 -1
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +46 -0
- package/dist/routing/app-route-graph.js +131 -51
- package/dist/routing/browser-route-manifest.d.ts +2 -1
- package/dist/routing/optimistic-route-trie.d.ts +2 -1
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/api-handler.js +19 -4
- package/dist/server/app-action-forwarding.d.ts +2 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-bfcache-identity.js +1 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-entry.js +106 -66
- package/dist/server/app-browser-error.d.ts +2 -1
- package/dist/server/app-browser-history-controller.d.ts +7 -5
- package/dist/server/app-browser-history-controller.js +93 -15
- package/dist/server/app-browser-hydration.d.ts +2 -1
- package/dist/server/app-browser-interception-context.d.ts +2 -1
- package/dist/server/app-browser-navigation-controller.d.ts +2 -2
- package/dist/server/app-browser-navigation-controller.js +16 -12
- package/dist/server/app-browser-popstate.d.ts +2 -1
- package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
- package/dist/server/app-browser-rsc-redirect.js +4 -4
- package/dist/server/app-browser-server-action-client.d.ts +4 -1
- package/dist/server/app-browser-server-action-client.js +4 -3
- package/dist/server/app-browser-state.d.ts +2 -4
- package/dist/server/app-browser-state.js +9 -4
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-supplemental-refresh.js +16 -1
- package/dist/server/app-browser-visible-commit.d.ts +3 -2
- package/dist/server/app-browser-visible-commit.js +2 -12
- package/dist/server/app-client-reference-manifest.d.ts +31 -0
- package/dist/server/app-client-reference-manifest.js +46 -0
- package/dist/server/app-client-reference-preloader.d.ts +25 -5
- package/dist/server/app-client-reference-preloader.js +22 -7
- package/dist/server/app-elements-wire.d.ts +8 -39
- package/dist/server/app-elements-wire.js +4 -41
- package/dist/server/app-elements.d.ts +4 -2
- package/dist/server/app-elements.js +4 -2
- package/dist/server/app-fallback-renderer.d.ts +9 -2
- package/dist/server/app-fallback-renderer.js +4 -1
- package/dist/server/app-history-state.d.ts +4 -3
- package/dist/server/app-history-state.js +5 -2
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-mounted-layouts.d.ts +21 -0
- package/dist/server/app-mounted-layouts.js +67 -0
- package/dist/server/app-optimistic-routing.d.ts +37 -2
- package/dist/server/app-optimistic-routing.js +75 -2
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +224 -40
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +41 -8
- package/dist/server/app-page-cache-finalizer.d.ts +14 -2
- package/dist/server/app-page-cache-finalizer.js +71 -30
- package/dist/server/app-page-cache-render.d.ts +10 -2
- package/dist/server/app-page-cache-render.js +14 -2
- package/dist/server/app-page-cache.d.ts +13 -1
- package/dist/server/app-page-cache.js +33 -11
- package/dist/server/app-page-dispatch.d.ts +39 -11
- package/dist/server/app-page-dispatch.js +236 -177
- package/dist/server/app-page-element-builder.d.ts +19 -3
- package/dist/server/app-page-element-builder.js +193 -71
- package/dist/server/app-page-execution.d.ts +43 -51
- package/dist/server/app-page-execution.js +205 -92
- package/dist/server/app-page-head.d.ts +108 -3
- package/dist/server/app-page-head.js +337 -154
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +49 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +77 -2
- package/dist/server/app-page-layout-gate.d.ts +35 -0
- package/dist/server/app-page-layout-gate.js +50 -0
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-params.d.ts +0 -1
- package/dist/server/app-page-params.js +1 -14
- package/dist/server/app-page-probe.d.ts +5 -22
- package/dist/server/app-page-probe.js +4 -37
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +9 -13
- package/dist/server/app-page-render.js +108 -214
- package/dist/server/app-page-request.d.ts +15 -4
- package/dist/server/app-page-request.js +2 -2
- package/dist/server/app-page-response.js +3 -3
- package/dist/server/app-page-route-wiring.d.ts +65 -8
- package/dist/server/app-page-route-wiring.js +259 -103
- package/dist/server/app-page-rsc-render-status.d.ts +29 -2
- package/dist/server/app-page-rsc-render-status.js +121 -13
- package/dist/server/app-page-search-params-observation.d.ts +7 -2
- package/dist/server/app-page-search-params-observation.js +8 -1
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +33 -1
- package/dist/server/app-page-stream.js +25 -6
- package/dist/server/app-pages-bridge.d.ts +6 -1
- package/dist/server/app-pages-bridge.js +7 -3
- package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
- package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
- package/dist/server/app-prerender-endpoints.d.ts +2 -1
- package/dist/server/app-prerender-static-params.d.ts +2 -1
- package/dist/server/app-render-dependency.d.ts +21 -4
- package/dist/server/app-render-dependency.js +100 -33
- package/dist/server/app-request-stage-dispatch.js +1 -1
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-cache.js +2 -2
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +15 -10
- package/dist/server/app-route-handler-execution.d.ts +2 -1
- package/dist/server/app-route-handler-execution.js +8 -3
- package/dist/server/app-route-handler-policy.d.ts +1 -1
- package/dist/server/app-route-handler-policy.js +3 -3
- package/dist/server/app-route-handler-response.d.ts +2 -1
- package/dist/server/app-route-handler-response.js +1 -1
- package/dist/server/app-route-handler-runtime.d.ts +2 -1
- package/dist/server/app-route-handler-runtime.js +17 -4
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +8 -0
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-rsc-cache-busting.d.ts +2 -2
- package/dist/server/app-rsc-cache-busting.js +4 -4
- package/dist/server/app-rsc-error-handler.d.ts +4 -2
- package/dist/server/app-rsc-error-handler.js +9 -1
- package/dist/server/app-rsc-errors.d.ts +10 -1
- package/dist/server/app-rsc-errors.js +8 -1
- package/dist/server/app-rsc-handler.d.ts +7 -6
- package/dist/server/app-rsc-handler.js +36 -34
- package/dist/server/app-rsc-request-normalization.d.ts +0 -4
- package/dist/server/app-rsc-request-normalization.js +1 -4
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
- package/dist/server/app-rsc-response-finalizer.js +2 -2
- package/dist/server/app-rsc-response-stage.js +5 -3
- package/dist/server/app-rsc-route-matching.d.ts +38 -1
- package/dist/server/app-rsc-route-matching.js +24 -0
- package/dist/server/app-segment-config.d.ts +2 -1
- package/dist/server/app-segment-config.js +1 -14
- package/dist/server/app-server-action-execution.d.ts +5 -2
- package/dist/server/app-server-action-execution.js +10 -7
- package/dist/server/app-ssr-entry.d.ts +8 -0
- package/dist/server/app-ssr-entry.js +98 -50
- package/dist/server/app-ssr-error-meta.d.ts +2 -1
- package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
- package/dist/server/app-ssr-stream.d.ts +22 -10
- package/dist/server/app-ssr-stream.js +300 -68
- package/dist/server/app-static-generation.d.ts +2 -1
- package/dist/server/app-streamed-client-references.d.ts +39 -0
- package/dist/server/app-streamed-client-references.js +156 -0
- package/dist/server/app-visited-response-cache.d.ts +38 -2
- package/dist/server/app-visited-response-cache.js +46 -5
- package/dist/server/app-worker-stages.d.ts +27 -4
- package/dist/server/app-worker-stages.js +45 -6
- package/dist/server/artifact-compatibility.d.ts +2 -2
- package/dist/server/artifact-compatibility.js +1 -10
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cache-proof.d.ts +1 -115
- package/dist/server/cache-proof.js +1 -544
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/cacheability-request.js +13 -8
- package/dist/server/config-headers.d.ts +2 -1
- package/dist/server/csp.d.ts +2 -1
- package/dist/server/default-global-not-found-module.d.ts +2 -1
- package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
- package/dist/server/default-http-access-fallback-modules.js +31 -0
- package/dist/server/defer-until-stream-consumed.d.ts +34 -0
- package/dist/server/defer-until-stream-consumed.js +154 -21
- package/dist/server/dev-lockfile.d.ts +32 -2
- package/dist/server/dev-lockfile.js +46 -2
- package/dist/server/dev-module-runner.d.ts +2 -1
- package/dist/server/dev-server.js +14 -6
- package/dist/server/fetch-handler.js +1 -2
- package/dist/server/file-based-metadata.d.ts +2 -1
- package/dist/server/framework-tracer.d.ts +2 -1
- package/dist/server/headers.d.ts +6 -3
- package/dist/server/headers.js +9 -5
- package/dist/server/html.d.ts +1 -0
- package/dist/server/html.js +19 -1
- package/dist/server/http-conditional.d.ts +2 -1
- package/dist/server/http-error-responses.d.ts +2 -1
- package/dist/server/implicit-tags.d.ts +2 -1
- package/dist/server/isr-cache.d.ts +8 -2
- package/dist/server/isr-cache.js +26 -1
- package/dist/server/metadata-route-build-data.d.ts +2 -1
- package/dist/server/metadata-route-build-data.js +1 -1
- package/dist/server/metadata-route-response.d.ts +2 -1
- package/dist/server/metadata-route-response.js +32 -15
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/multi-stage.d.ts +52 -11
- package/dist/server/multi-stage.js +13 -1
- package/dist/server/navigation-planner.js +1 -1
- package/dist/server/navigation-trace.d.ts +2 -1
- package/dist/server/next-error-digest.d.ts +2 -1
- package/dist/server/nitro-public-files-plugin.d.ts +2 -1
- package/dist/server/nitro-public-files.d.ts +2 -1
- package/dist/server/opentelemetry-api.d.ts +2 -1
- package/dist/server/operation-token.d.ts +2 -1
- package/dist/server/pages-api-route.d.ts +2 -1
- package/dist/server/pages-api-route.js +28 -19
- package/dist/server/pages-asset-tags.d.ts +2 -1
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +4 -0
- package/dist/server/pages-data-route.d.ts +2 -1
- package/dist/server/pages-document-asset-props.d.ts +2 -1
- package/dist/server/pages-document-initial-props.d.ts +2 -1
- package/dist/server/pages-execution-tracing.d.ts +2 -1
- package/dist/server/pages-execution-tracing.js +1 -1
- package/dist/server/pages-get-initial-props.d.ts +2 -1
- package/dist/server/pages-media-type.d.ts +21 -1
- package/dist/server/pages-media-type.js +69 -5
- package/dist/server/pages-node-compat.js +52 -27
- package/dist/server/pages-page-data.d.ts +7 -1
- package/dist/server/pages-page-data.js +35 -12
- package/dist/server/pages-page-handler.d.ts +3 -2
- package/dist/server/pages-page-handler.js +27 -27
- package/dist/server/pages-page-method.d.ts +2 -1
- package/dist/server/pages-page-response.d.ts +2 -1
- package/dist/server/pages-preview.d.ts +2 -1
- package/dist/server/pages-readiness.d.ts +2 -1
- package/dist/server/pages-request-pipeline.d.ts +10 -1
- package/dist/server/pages-request-pipeline.js +6 -7
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-request-stage-entry.js +14 -12
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.js +9 -3
- package/dist/server/pages-route-data-kind.d.ts +2 -1
- package/dist/server/prerender-cache-life-header.d.ts +2 -1
- package/dist/server/prerender-route-params.d.ts +2 -1
- package/dist/server/prod-server.js +14 -4
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-pipeline.d.ts +6 -0
- package/dist/server/request-pipeline.js +21 -1
- package/dist/server/request-tracing.d.ts +2 -1
- package/dist/server/request-tracing.js +1 -1
- package/dist/server/response-start-tracing.js +7 -29
- package/dist/server/rsc-render-stream.d.ts +4 -0
- package/dist/server/rsc-render-stream.js +25 -0
- package/dist/server/seed-cache.d.ts +2 -1
- package/dist/server/seed-cache.js +1 -1
- package/dist/server/shared-cache-identity.d.ts +23 -0
- package/dist/server/shared-cache-identity.js +36 -0
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +1 -0
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +18 -4
- package/dist/server/worker-stages.js +23 -4
- package/dist/shims/app.d.ts +2 -1
- package/dist/shims/cache-callable-runtime.d.ts +2 -1
- package/dist/shims/cache-handler.d.ts +8 -3
- package/dist/shims/cache-handler.js +31 -11
- package/dist/shims/cache-request-state.d.ts +17 -20
- package/dist/shims/cache-request-state.js +16 -21
- package/dist/shims/cache-runtime.js +27 -11
- package/dist/shims/cache.d.ts +8 -7
- package/dist/shims/cache.js +17 -19
- package/dist/shims/cacheability-classification.d.ts +2 -0
- package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
- package/dist/shims/caught-not-found-boundaries.js +48 -0
- package/dist/shims/cdn-cache.d.ts +22 -5
- package/dist/shims/cdn-purge-routes.d.ts +2 -1
- package/dist/shims/client-locale.js +2 -1
- package/dist/shims/client-page-root.d.ts +2 -1
- package/dist/shims/client-page-root.js +2 -2
- package/dist/shims/config.d.ts +2 -1
- package/dist/shims/default-forbidden.d.ts +4 -0
- package/dist/shims/default-forbidden.js +18 -0
- package/dist/shims/default-not-found.d.ts +0 -5
- package/dist/shims/default-not-found.js +5 -41
- package/dist/shims/default-unauthorized.d.ts +4 -0
- package/dist/shims/default-unauthorized.js +18 -0
- package/dist/shims/dynamic.js +9 -6
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +33 -18
- package/dist/shims/fetch-cache-state.d.ts +5 -1
- package/dist/shims/fetch-cache-state.js +1 -3
- package/dist/shims/fetch-cache.d.ts +2 -1
- package/dist/shims/fetch-cache.js +34 -24
- package/dist/shims/font-google.js +1 -2
- package/dist/shims/font-utils.d.ts +3 -2
- package/dist/shims/font-utils.js +5 -3
- package/dist/shims/form.js +3 -3
- package/dist/shims/headers.d.ts +8 -23
- package/dist/shims/headers.js +17 -67
- package/dist/shims/http-access-error-fallback.d.ts +7 -0
- package/dist/shims/http-access-error-fallback.js +47 -0
- package/dist/shims/image.d.ts +1 -22
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
- package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
- package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
- package/dist/shims/internal/client-reference-loader.d.ts +7 -0
- package/dist/shims/internal/client-reference-loader.js +91 -0
- package/dist/shims/internal/cookie-serialize.d.ts +2 -1
- package/dist/shims/internal/cookies.js +1 -2
- package/dist/shims/internal/headers-state.d.ts +2 -0
- package/dist/shims/internal/headers-state.js +6 -1
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
- package/dist/shims/internal/interpolate-as.d.ts +2 -1
- package/dist/shims/internal/navigation-untracked.js +1 -1
- package/dist/shims/internal/pages-data-target.d.ts +2 -1
- package/dist/shims/internal/pages-data-url.d.ts +2 -1
- package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
- package/dist/shims/link.js +197 -52
- package/dist/shims/metadata.d.ts +52 -29
- package/dist/shims/metadata.js +142 -42
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation-server.js +1 -1
- package/dist/shims/navigation.d.ts +95 -8
- package/dist/shims/navigation.js +255 -47
- package/dist/shims/navigation.react-server.js +2 -2
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/request-state-types.d.ts +2 -2
- package/dist/shims/router.js +14 -3
- package/dist/shims/slot.d.ts +12 -0
- package/dist/shims/slot.js +37 -9
- package/dist/shims/unified-request-context.d.ts +1 -1
- package/dist/shims/unified-request-context.js +5 -6
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/cache-control-metadata.d.ts +5 -0
- package/dist/utils/cache-control-metadata.js +9 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +9 -2
- package/dist/utils/client-entry-manifest.d.ts +13 -0
- package/dist/utils/client-entry-manifest.js +20 -1
- package/dist/utils/client-reference-chunks.d.ts +45 -0
- package/dist/utils/client-reference-chunks.js +30 -0
- package/dist/utils/client-runtime-metadata.d.ts +9 -1
- package/dist/utils/client-runtime-metadata.js +40 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +14 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/project.d.ts +4 -3
- package/dist/utils/project.js +12 -17
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/regex.d.ts +5 -0
- package/dist/utils/regex.js +11 -1
- package/dist/utils/text-stream.d.ts +10 -5
- package/dist/utils/text-stream.js +6 -6
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +6 -5
- package/dist/build/layout-classification-types.d.ts +0 -60
- package/dist/build/layout-classification-types.js +0 -1
- package/dist/build/layout-classification.d.ts +0 -61
- package/dist/build/layout-classification.js +0 -98
- package/dist/build/route-classification-injector.d.ts +0 -32
- package/dist/build/route-classification-injector.js +0 -59
- package/dist/build/route-classification-manifest.d.ts +0 -53
- package/dist/build/route-classification-manifest.js +0 -143
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -10
- package/dist/server/app-browser-client-reuse-manifest.js +0 -101
- package/dist/server/app-layout-param-observation.d.ts +0 -41
- package/dist/server/app-layout-param-observation.js +0 -168
- package/dist/server/client-reuse-manifest.d.ts +0 -102
- package/dist/server/client-reuse-manifest.js +0 -209
- package/dist/server/default-not-found-module.d.ts +0 -19
- package/dist/server/default-not-found-module.js +0 -18
- package/dist/server/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
- package/dist/server/skip-cache-proof.d.ts +0 -60
- package/dist/server/skip-cache-proof.js +0 -168
- package/dist/server/static-layout-client-reuse-proof.d.ts +0 -13
- package/dist/server/static-layout-client-reuse-proof.js +0 -33
- package/dist/utils/sorted-array.d.ts +0 -7
- package/dist/utils/sorted-array.js +0 -20
package/dist/shims/navigation.js
CHANGED
|
@@ -11,24 +11,24 @@ import { resolveDirectHybridClientRouteOwner } from "./internal/hybrid-client-ro
|
|
|
11
11
|
import { isHashOnlyBrowserUrlChange, toCanonicalBrowserNavigationHref, toSameOriginAppPath, withBasePath } from "./url-utils.js";
|
|
12
12
|
import { disableSmoothScrollDuringRouteTransition } from "./disable-smooth-scroll.js";
|
|
13
13
|
import { retryScrollTo, scrollToHashTarget } from "./hash-scroll.js";
|
|
14
|
-
import { AppElementsWire } from "../server/app-elements-wire.js";
|
|
15
|
-
import "../server/app-elements.js";
|
|
16
|
-
import { GLOBAL_ACCESSORS_KEY, ServerInsertedHTMLContext, _registerStateAccessors, clearClientHydrationContext, clearServerInsertedHTML, flushServerInsertedHTML, getBfcacheIdMapContext, getBfcacheSegmentIdContext, getLayoutSegmentContext, getNavigationContext, registerServerInsertedHTMLCallback, renderServerInsertedHTML, setNavigationContext } from "./navigation-context-state.js";
|
|
17
|
-
import { BailoutToCSRError, DynamicServerError, HTTP_ERROR_FALLBACK_ERROR_CODE, RedirectType, decodeRedirectError, forbidden, getAccessFallbackHTTPStatus, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, notFound, permanentRedirect, redirect, unauthorized, unstable_rethrow } from "./navigation-errors.js";
|
|
18
|
-
import { clearAppNavigationFailureTarget, stageAppNavigationFailureTarget } from "../client/app-nav-failure-handler.js";
|
|
19
|
-
import { beginAppRouterScrollIntent, clearAppRouterScrollIntent, consumeAppRouterScrollIntent, getPendingAppRouterScrollIntent, isLatestAppRouterScrollIntent } from "./app-router-scroll-state.js";
|
|
20
14
|
import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath, parseRscRequestPath, stripRscCacheBustingSearchParam, stripRscSuffix } from "../server/app-rsc-cache-busting.js";
|
|
15
|
+
import { clearAppNavigationFailureTarget, stageAppNavigationFailureTarget } from "../client/app-nav-failure-handler.js";
|
|
21
16
|
import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
|
|
22
17
|
import { getNavigationRuntime, hasAppNavigationRuntime, loadNavigationRuntimeRouteManifest } from "../client/navigation-runtime.js";
|
|
23
18
|
import { UnrecognizedActionError, unstable_isUnrecognizedActionError } from "./unrecognized-action-error.js";
|
|
19
|
+
import { AppElementsWire } from "../server/app-elements-wire.js";
|
|
20
|
+
import "../server/app-elements.js";
|
|
24
21
|
import { PUBLIC_INITIAL_BFCACHE_ID } from "../server/app-bfcache-id.js";
|
|
25
22
|
import { resolveManifestNavigationInterceptionContext } from "../server/app-browser-interception-context.js";
|
|
26
|
-
import { createExternalHistoryStatePreservingMetadata, createHashOnlyHistoryStatePreservingNavigationMetadata, isAppOwnedHistoryState } from "../server/app-history-state.js";
|
|
23
|
+
import { createExternalHistoryStatePreservingMetadata, createHashOnlyHistoryStatePreservingNavigationMetadata, isAppOwnedHistoryState, readHistoryStateTraversalIndex } from "../server/app-history-state.js";
|
|
27
24
|
import { hasPendingAppRouterPageRedirect } from "../server/app-browser-mpa-navigation.js";
|
|
28
25
|
import { extractRscCompletionMetadata } from "../server/rsc-completion-metadata.js";
|
|
29
26
|
import { navigationPlanner } from "../server/navigation-planner.js";
|
|
30
27
|
import { ReadonlyURLSearchParams } from "./readonly-url-search-params.js";
|
|
28
|
+
import { BailoutToCSRError, DynamicServerError, HTTP_ERROR_FALLBACK_ERROR_CODE, RedirectType, decodeRedirectError, forbidden, getAccessFallbackHTTPStatus, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, notFound, permanentRedirect, redirect, unauthorized, unstable_rethrow } from "./navigation-errors.js";
|
|
31
29
|
import { getPagesNavigationContext } from "./internal/pages-router-accessor.js";
|
|
30
|
+
import { beginAppRouterScrollIntent, clearAppRouterScrollIntent, consumeAppRouterScrollIntent, getPendingAppRouterScrollIntent, isLatestAppRouterScrollIntent } from "./app-router-scroll-state.js";
|
|
31
|
+
import { GLOBAL_ACCESSORS_KEY, ServerInsertedHTMLContext, _registerStateAccessors, clearClientHydrationContext, clearServerInsertedHTML, flushServerInsertedHTML, getBfcacheIdMapContext, getBfcacheSegmentIdContext, getLayoutSegmentContext, getNavigationContext, registerServerInsertedHTMLCallback, renderServerInsertedHTML, setNavigationContext } from "./navigation-context-state.js";
|
|
32
32
|
import { cancelAppPrefetchFetch, promoteAppPrefetchFetch, releaseAppPrefetchFetchSlot, scheduleAppPrefetchFetch } from "./internal/app-prefetch-fetch-queue.js";
|
|
33
33
|
import * as React$1 from "react";
|
|
34
34
|
//#region src/shims/navigation.ts
|
|
@@ -70,9 +70,9 @@ function useChildSegments(parallelRoutesKey = "children") {
|
|
|
70
70
|
return [];
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
-
const _READONLY_SEARCH_PARAMS = Symbol("vinext.navigation.readonlySearchParams");
|
|
74
|
-
const _READONLY_SEARCH_PARAMS_SOURCE = Symbol("vinext.navigation.readonlySearchParamsSource");
|
|
75
|
-
const _READONLY_SEARCH_PARAMS_SOURCE_KEY = Symbol("vinext.navigation.readonlySearchParamsSourceKey");
|
|
73
|
+
const _READONLY_SEARCH_PARAMS = Symbol.for("vinext.navigation.readonlySearchParams");
|
|
74
|
+
const _READONLY_SEARCH_PARAMS_SOURCE = Symbol.for("vinext.navigation.readonlySearchParamsSource");
|
|
75
|
+
const _READONLY_SEARCH_PARAMS_SOURCE_KEY = Symbol.for("vinext.navigation.readonlySearchParamsSourceKey");
|
|
76
76
|
const PAGES_NAVIGATION_NOTIFY_KEY = Symbol.for("vinext.navigation.pagesNavigationNotify");
|
|
77
77
|
const isServer = typeof window === "undefined";
|
|
78
78
|
/** basePath from next.config.js, injected by the plugin at build time */
|
|
@@ -296,9 +296,11 @@ function findPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mounte
|
|
|
296
296
|
function hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext = null, mountedSlotsHeader = null, options = {}) {
|
|
297
297
|
const match = findPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, options.additionalRscUrls);
|
|
298
298
|
if (match === null) return false;
|
|
299
|
+
if (match.entry.pending !== void 0 && options.reusePending === false) return false;
|
|
299
300
|
if (match.entry.pending !== void 0 || resolvePrefetchCacheEntryExpiresAt(match.entry) > Date.now()) {
|
|
300
301
|
touchPrefetchCacheEntry(getPrefetchCache(), match.cacheKey, match.entry);
|
|
301
302
|
attachPrefetchInvalidationToEntry(match.cacheKey, match.entry, options.onInvalidate);
|
|
303
|
+
options.onReuse?.(match.entry, match.cacheKey);
|
|
302
304
|
return true;
|
|
303
305
|
}
|
|
304
306
|
deletePrefetchCacheEntry(getPrefetchCache(), getPrefetchedUrls(), match.cacheKey, match.entry, options.notifyInvalidation ?? true);
|
|
@@ -465,9 +467,13 @@ const retainedPrefetchInvalidations = /* @__PURE__ */ new Set();
|
|
|
465
467
|
function retainPrefetchInvalidationAfterConsume(entry) {
|
|
466
468
|
const callbacks = entry.onInvalidateCallbacks;
|
|
467
469
|
if (callbacks === void 0 || callbacks.size === 0) return;
|
|
468
|
-
|
|
470
|
+
retainPrefetchInvalidation(callbacks, resolvePrefetchCacheEntryExpiresAt(entry));
|
|
471
|
+
}
|
|
472
|
+
function retainPrefetchInvalidation(callbacks, expiresAt, forVisitedResponse = false) {
|
|
473
|
+
const delay = Math.max(0, expiresAt - Date.now());
|
|
469
474
|
const retained = {
|
|
470
475
|
callbacks,
|
|
476
|
+
...forVisitedResponse ? { forVisitedResponse: true } : {},
|
|
471
477
|
timer: setTimeout(() => fireRetainedPrefetchInvalidation(retained), delay)
|
|
472
478
|
};
|
|
473
479
|
retainedPrefetchInvalidations.add(retained);
|
|
@@ -494,7 +500,7 @@ function deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, notify) {
|
|
|
494
500
|
entry.onInvalidateCallbacks = void 0;
|
|
495
501
|
}
|
|
496
502
|
}
|
|
497
|
-
function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = null) {
|
|
503
|
+
function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = null, mountedSlotsHeader = null) {
|
|
498
504
|
const cache = getPrefetchCache();
|
|
499
505
|
const prefetched = getPrefetchedUrls();
|
|
500
506
|
const normalizedTarget = normalizeRscCacheLookupUrl(rscUrl);
|
|
@@ -505,6 +511,7 @@ function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = nul
|
|
|
505
511
|
const source = parsePrefetchCacheKey(cacheKey);
|
|
506
512
|
if (source.interceptionContext !== interceptionContext) continue;
|
|
507
513
|
if (normalizeRscCacheLookupUrl(source.rscUrl) !== normalizedTarget) continue;
|
|
514
|
+
if (!isPrefetchCacheEntryCompatibleWithMountedSlots(entry, mountedSlotsHeader)) continue;
|
|
508
515
|
superseded.push([cacheKey, entry]);
|
|
509
516
|
}
|
|
510
517
|
for (const [cacheKey, entry] of superseded) {
|
|
@@ -513,6 +520,25 @@ function discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext = nul
|
|
|
513
520
|
}
|
|
514
521
|
return superseded.length > 0;
|
|
515
522
|
}
|
|
523
|
+
/**
|
|
524
|
+
* Make a prefetch reusable by a navigation, as an `unstable_dynamicOnHover`
|
|
525
|
+
* hover does. A pending one that would be kept as learning-only becomes a full
|
|
526
|
+
* prefetch and takes the full-prefetch lifetime. One already kept as
|
|
527
|
+
* learning-only because its page rendered dynamically is left for the full
|
|
528
|
+
* prefetch to replace: Next.js refetches it with `FetchStrategy.Full`, so the
|
|
529
|
+
* page reflects the cookies and headers at hover time.
|
|
530
|
+
*/
|
|
531
|
+
function promotePrefetchCacheEntryForNavigation(cacheKey, entry) {
|
|
532
|
+
if (entry.dynamicStaleTime !== "learning-only") {
|
|
533
|
+
entry.cacheForNavigation = true;
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
if (entry.cacheForNavigation === false) return;
|
|
537
|
+
entry.dynamicStaleTime = "full-prefetch";
|
|
538
|
+
if (entry.snapshot === void 0) return;
|
|
539
|
+
entry.expiresAt = resolvePrefetchedRscResponseExpiresAt(entry.timestamp, entry.snapshot, entry.fallbackTtlMs ?? PREFETCH_CACHE_TTL, "full-prefetch");
|
|
540
|
+
schedulePrefetchInvalidation(cacheKey, entry);
|
|
541
|
+
}
|
|
516
542
|
function invalidatePrefetchCacheEntry(cacheKey) {
|
|
517
543
|
const cache = getPrefetchCache();
|
|
518
544
|
const entry = cache.get(cacheKey);
|
|
@@ -548,14 +574,37 @@ function attachPrefetchInvalidationCallback(cacheKey, onInvalidate) {
|
|
|
548
574
|
if (!entry) return;
|
|
549
575
|
attachPrefetchInvalidationToEntry(cacheKey, entry, onInvalidate);
|
|
550
576
|
}
|
|
551
|
-
function invalidatePrefetchCache() {
|
|
577
|
+
function invalidatePrefetchCache(options = {}) {
|
|
552
578
|
cancelPendingPrefetchSetups(null);
|
|
553
579
|
const cache = getPrefetchCache();
|
|
554
580
|
const prefetched = getPrefetchedUrls();
|
|
555
581
|
for (const [cacheKey, entry] of cache) deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, true);
|
|
556
582
|
prefetched.clear();
|
|
557
583
|
for (const retained of retainedPrefetchInvalidations) fireRetainedPrefetchInvalidation(retained);
|
|
558
|
-
if (!isServer) getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
584
|
+
if (!isServer && options.pingVisibleLinks !== false) getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
585
|
+
}
|
|
586
|
+
/**
|
|
587
|
+
* Evict the prefetch entries that may hold dynamic data, for a Server Action
|
|
588
|
+
* that called `refresh()`. Like Next.js's dynamic-only revalidation, which
|
|
589
|
+
* evicts its BFCache but keeps its prefetch cache, this keeps route trees,
|
|
590
|
+
* static prefetches and full prefetches. It drops navigation responses, and
|
|
591
|
+
* automatic prefetches whose page rendered dynamically or hasn't finished
|
|
592
|
+
* rendering, including those only kept to learn a route: Next.js's automatic
|
|
593
|
+
* prefetches never hold dynamic data.
|
|
594
|
+
*/
|
|
595
|
+
function invalidateDynamicPrefetchCache() {
|
|
596
|
+
const cache = getPrefetchCache();
|
|
597
|
+
const prefetched = getPrefetchedUrls();
|
|
598
|
+
const evicted = [];
|
|
599
|
+
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]);
|
|
600
|
+
for (const [cacheKey, entry] of evicted) deletePrefetchCacheEntry(cache, prefetched, cacheKey, entry, true);
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* Notify the prefetches that stood in for a visited response (see
|
|
604
|
+
* `hasNavigationFreshVisitedResponse`), as the visited responses are cleared.
|
|
605
|
+
*/
|
|
606
|
+
function invalidateVisitedResponsePrefetches() {
|
|
607
|
+
for (const retained of retainedPrefetchInvalidations) if (retained.forVisitedResponse === true) fireRetainedPrefetchInvalidation(retained);
|
|
559
608
|
}
|
|
560
609
|
/**
|
|
561
610
|
* Prevent completed navigation responses from becoming authoritative again
|
|
@@ -571,7 +620,7 @@ function disableNavigationResponsePrefetchCacheReuse() {
|
|
|
571
620
|
}
|
|
572
621
|
if (didDemote && !isServer) getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
573
622
|
}
|
|
574
|
-
function seedPrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = null, mountedSlotsHeader = null, fallbackTtlMs = DYNAMIC_NAVIGATION_CACHE_TTL, reuseAfterHistoryRestore = false) {
|
|
623
|
+
function seedPrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = null, mountedSlotsHeader = null, fallbackTtlMs = DYNAMIC_NAVIGATION_CACHE_TTL, reuseAfterHistoryRestore = false, expiresAt = resolveCachedRscResponseExpiresAt(Date.now(), snapshot, fallbackTtlMs)) {
|
|
575
624
|
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
576
625
|
const cache = getPrefetchCache();
|
|
577
626
|
const existing = cache.get(cacheKey);
|
|
@@ -580,7 +629,7 @@ function seedPrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = nu
|
|
|
580
629
|
const entry = {
|
|
581
630
|
cacheForNavigation: true,
|
|
582
631
|
cacheKeys: /* @__PURE__ */ new Set([cacheKey]),
|
|
583
|
-
expiresAt
|
|
632
|
+
expiresAt,
|
|
584
633
|
mountedSlotsHeader,
|
|
585
634
|
outcome: "cache-seeded",
|
|
586
635
|
reuseAfterHistoryRestore,
|
|
@@ -594,6 +643,35 @@ function seedPrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = nu
|
|
|
594
643
|
schedulePrefetchInvalidation(cacheKey, entry);
|
|
595
644
|
evictPrefetchCacheIfNeeded();
|
|
596
645
|
}
|
|
646
|
+
/**
|
|
647
|
+
* Fulfill a full prefetch from the visited response of an earlier navigation,
|
|
648
|
+
* as Next.js does from its BFCache, instead of issuing a request. The data is
|
|
649
|
+
* fresh for the static stale time from the navigation, not the dynamic one
|
|
650
|
+
* (`attemptToFulfillDynamicSegmentFromBFCache`).
|
|
651
|
+
*/
|
|
652
|
+
function seedFullPrefetchFromVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls = [], onInvalidate) {
|
|
653
|
+
const visited = getNavigationRuntime()?.functions.readVisitedResponseForFullPrefetch?.([rscUrl, ...additionalRscUrls], interceptionContext, mountedSlotsHeader);
|
|
654
|
+
if (!visited) return false;
|
|
655
|
+
const expiresAt = visited.navigatedAt + Math.max(PREFETCH_CACHE_TTL, MIN_PREFETCH_STALE_TIME_MS);
|
|
656
|
+
if (expiresAt <= Date.now()) return false;
|
|
657
|
+
seedPrefetchResponseSnapshot(rscUrl, visited.response, interceptionContext, mountedSlotsHeader, void 0, true, expiresAt);
|
|
658
|
+
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
659
|
+
if (getPrefetchCache().get(cacheKey)?.snapshot !== visited.response) return false;
|
|
660
|
+
attachPrefetchInvalidationCallback(cacheKey, onInvalidate);
|
|
661
|
+
return true;
|
|
662
|
+
}
|
|
663
|
+
/**
|
|
664
|
+
* Whether a navigation to the URL would reuse the response of an earlier one,
|
|
665
|
+
* so a prefetch has nothing to fetch. Like Next.js, whose navigation keeps the
|
|
666
|
+
* route and its segments for `staleTimes.dynamic`. `onInvalidate` fires when
|
|
667
|
+
* that reuse ends.
|
|
668
|
+
*/
|
|
669
|
+
function hasNavigationFreshVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls = [], onInvalidate) {
|
|
670
|
+
const freshUntil = getNavigationRuntime()?.functions.readVisitedResponseForFullPrefetch?.([rscUrl, ...additionalRscUrls], interceptionContext, mountedSlotsHeader)?.navigationFreshUntil;
|
|
671
|
+
if (freshUntil === void 0 || freshUntil === null) return false;
|
|
672
|
+
if (onInvalidate !== void 0) retainPrefetchInvalidation(/* @__PURE__ */ new Set([onInvalidate]), freshUntil, true);
|
|
673
|
+
return true;
|
|
674
|
+
}
|
|
597
675
|
function deletePrefetchResponseSnapshot(rscUrl, snapshot, interceptionContext = null) {
|
|
598
676
|
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
599
677
|
const cache = getPrefetchCache();
|
|
@@ -672,6 +750,7 @@ function createCachedRscResponseSnapshot(response, buffer, responseUrl = null) {
|
|
|
672
750
|
...dynamicStaleTimeSeconds !== void 0 ? { dynamicStaleTimeSeconds } : {},
|
|
673
751
|
mountedSlotsHeader: response.headers.get(VINEXT_MOUNTED_SLOTS_HEADER),
|
|
674
752
|
paramsHeader: response.headers.get(VINEXT_PARAMS_HEADER),
|
|
753
|
+
receivedAt: Date.now(),
|
|
675
754
|
...redirectHeader === null ? {} : { redirectHeader },
|
|
676
755
|
...redirectTypeHeader === null ? {} : { redirectTypeHeader },
|
|
677
756
|
renderedPathAndSearch: parseRenderedPathAndSearchHeader(response.headers.get(VINEXT_RENDERED_PATH_AND_SEARCH_HEADER)),
|
|
@@ -837,6 +916,10 @@ function prefetchRscResponse(rscUrl, fetchPromise, interceptionContext = null, m
|
|
|
837
916
|
searchAgnosticShell: behavior.searchAgnosticShell === true,
|
|
838
917
|
timestamp: now
|
|
839
918
|
};
|
|
919
|
+
if (behavior.dynamicStaleTime === "learning-only" && behavior.searchAgnosticShell !== true) {
|
|
920
|
+
entry.dynamicStaleTime = "learning-only";
|
|
921
|
+
entry.fallbackTtlMs = behavior.fallbackTtlMs ?? PREFETCH_CACHE_TTL;
|
|
922
|
+
} else if (behavior.dynamicStaleTime === "full-prefetch") entry.dynamicStaleTime = "full-prefetch";
|
|
840
923
|
addPrefetchInvalidationCallback(entry, options?.onInvalidate);
|
|
841
924
|
entry.fetchPromise = fetchPromise;
|
|
842
925
|
entry.pending = fetchPromise.then(async (response) => {
|
|
@@ -847,8 +930,13 @@ function prefetchRscResponse(rscUrl, fetchPromise, interceptionContext = null, m
|
|
|
847
930
|
entry.snapshot = snapshot;
|
|
848
931
|
entry.size = snapshot.buffer.byteLength;
|
|
849
932
|
adjustPrefetchCacheByteSize(cache, entry.size - previousSize);
|
|
850
|
-
|
|
851
|
-
|
|
933
|
+
const fallbackTtlMs = behavior.fallbackTtlMs ?? PREFETCH_CACHE_TTL;
|
|
934
|
+
const dynamicStaleTime = behavior.searchAgnosticShell === true ? "ignore" : entry.dynamicStaleTime ?? behavior.dynamicStaleTime ?? (behavior.optimisticRouteShell === true ? "ignore" : "verbatim");
|
|
935
|
+
if (dynamicStaleTime === "learning-only" && isStaleTimeSeconds(snapshot.dynamicStaleTimeSeconds)) {
|
|
936
|
+
entry.cacheForNavigation = false;
|
|
937
|
+
entry.expiresAt = entry.timestamp + Math.max(fallbackTtlMs, MIN_PREFETCH_STALE_TIME_MS);
|
|
938
|
+
} else entry.expiresAt = resolvePrefetchedRscResponseExpiresAt(entry.timestamp, entry.snapshot, fallbackTtlMs, dynamicStaleTime === "learning-only" ? "verbatim" : dynamicStaleTime);
|
|
939
|
+
if (behavior.prepareSnapshot && entry.cacheForNavigation && snapshot.redirectHeader === void 0) try {
|
|
852
940
|
const preparedElements = await behavior.prepareSnapshot(snapshot);
|
|
853
941
|
if (cache.get(cacheKey) !== entry) return;
|
|
854
942
|
entry.preparedElements = preparedElements;
|
|
@@ -952,8 +1040,12 @@ async function consumePrefetchResponseForNavigation(rscUrl, interceptionContext
|
|
|
952
1040
|
if (options?.shouldConsume?.() === false) return null;
|
|
953
1041
|
const allowExpiredInFlightHandoff = entry.pending !== void 0;
|
|
954
1042
|
if (entry.pending !== void 0) {
|
|
955
|
-
promoteAppPrefetchFetch(entry.fetchPromise);
|
|
956
|
-
|
|
1043
|
+
const releaseClaim = promoteAppPrefetchFetch(entry.fetchPromise, options?.shouldConsume);
|
|
1044
|
+
try {
|
|
1045
|
+
await entry.pending.catch(() => {});
|
|
1046
|
+
} finally {
|
|
1047
|
+
releaseClaim();
|
|
1048
|
+
}
|
|
957
1049
|
if (cache.get(cacheKey) !== entry) return null;
|
|
958
1050
|
if (options?.shouldConsume?.() === false) return null;
|
|
959
1051
|
}
|
|
@@ -987,6 +1079,8 @@ function getClientNavigationState() {
|
|
|
987
1079
|
originalPushState: window.history.pushState.bind(window.history),
|
|
988
1080
|
originalReplaceState: window.history.replaceState.bind(window.history),
|
|
989
1081
|
patchInstalled: false,
|
|
1082
|
+
routerHistoryWriteDepth: 0,
|
|
1083
|
+
routerHistoryWrite: null,
|
|
990
1084
|
hasPendingNavigationUpdate: false,
|
|
991
1085
|
suppressUrlNotifyCount: 0,
|
|
992
1086
|
navigationSnapshotActiveCount: 0
|
|
@@ -1040,14 +1134,31 @@ let _cachedEmptyClientSearchParams = null;
|
|
|
1040
1134
|
* be visible until the next commit.
|
|
1041
1135
|
*/
|
|
1042
1136
|
function getSearchParamsSnapshot() {
|
|
1043
|
-
|
|
1137
|
+
const hasAppContext = getNavigationContext() !== null;
|
|
1044
1138
|
const pagesCtx = getPagesNavigationContext();
|
|
1045
|
-
if (pagesCtx) return getReadonlyPagesSearchParams(pagesCtx.searchParams);
|
|
1046
|
-
const
|
|
1047
|
-
if (
|
|
1139
|
+
if (!hasAppContext && pagesCtx) return getReadonlyPagesSearchParams(pagesCtx.searchParams);
|
|
1140
|
+
const state = getClientNavigationState();
|
|
1141
|
+
if (state) {
|
|
1142
|
+
if (hasAppContext) adoptHydrationSearchParams(state);
|
|
1143
|
+
return state.cachedReadonlySearchParams;
|
|
1144
|
+
}
|
|
1048
1145
|
if (_cachedEmptyClientSearchParams === null) _cachedEmptyClientSearchParams = new ReadonlyURLSearchParams();
|
|
1049
1146
|
return _cachedEmptyClientSearchParams;
|
|
1050
1147
|
}
|
|
1148
|
+
let _comparedHydrationSearchParams = null;
|
|
1149
|
+
/**
|
|
1150
|
+
* Keep the hydrated search params object when the browser URL has the same
|
|
1151
|
+
* query. React compares the two snapshots by identity once hydrated, so a new
|
|
1152
|
+
* object would re-render every useSearchParams() caller and re-run effects
|
|
1153
|
+
* keyed on it, where Next.js keeps one object from the first render.
|
|
1154
|
+
*/
|
|
1155
|
+
function adoptHydrationSearchParams(state) {
|
|
1156
|
+
const hydrated = getServerSearchParamsSnapshot();
|
|
1157
|
+
if (hydrated === state.cachedReadonlySearchParams) return;
|
|
1158
|
+
if (hydrated === _comparedHydrationSearchParams) return;
|
|
1159
|
+
_comparedHydrationSearchParams = hydrated;
|
|
1160
|
+
if (hydrated.toString() === state.cachedReadonlySearchParams.toString()) state.cachedReadonlySearchParams = hydrated;
|
|
1161
|
+
}
|
|
1051
1162
|
function syncCommittedUrlStateFromLocation() {
|
|
1052
1163
|
const state = getClientNavigationState();
|
|
1053
1164
|
if (!state) return false;
|
|
@@ -1313,16 +1424,80 @@ function commitClientNavigationState(navId, options) {
|
|
|
1313
1424
|
if (urlChanged || paramsChanged) clearClientHydrationContext();
|
|
1314
1425
|
if (shouldNotify) notifyNavigationListeners();
|
|
1315
1426
|
}
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1427
|
+
/** Whether a history entry's state is the data written to it, cloned by the browser. */
|
|
1428
|
+
function isSameHistoryStateData(historyState, data) {
|
|
1429
|
+
try {
|
|
1430
|
+
return JSON.stringify(historyState) === JSON.stringify(data);
|
|
1431
|
+
} catch {
|
|
1432
|
+
return false;
|
|
1433
|
+
}
|
|
1320
1434
|
}
|
|
1321
|
-
|
|
1435
|
+
/** Writes the in-progress router write if this call is it, consuming its marker. */
|
|
1436
|
+
function forwardRouterHistoryWrite(state, method, data, unused, url) {
|
|
1437
|
+
const write = state.routerHistoryWrite;
|
|
1438
|
+
if (write?.method !== method) return false;
|
|
1439
|
+
if (write.threw) {
|
|
1440
|
+
if (url == null || new URL(url, window.location.href).href !== write.href) return false;
|
|
1441
|
+
if (write.data !== data && !(isAppOwnedHistoryState(data) && readHistoryStateTraversalIndex(data) === readHistoryStateTraversalIndex(write.data))) return false;
|
|
1442
|
+
} else if (write.data !== data || write.url !== url) return false;
|
|
1443
|
+
if (write.landed) return true;
|
|
1444
|
+
state.routerHistoryWrite = null;
|
|
1445
|
+
const landing = write.land?.(data);
|
|
1446
|
+
const original = method === "pushState" ? state.originalPushState : state.originalReplaceState;
|
|
1447
|
+
const writtenData = landing ? landing.data : data;
|
|
1448
|
+
const historyStateBeforeWrite = window.history.state;
|
|
1449
|
+
try {
|
|
1450
|
+
original.call(window.history, writtenData, unused, url);
|
|
1451
|
+
} catch (error) {
|
|
1452
|
+
const landed = window.history.state !== historyStateBeforeWrite && window.location.href === write.href && isSameHistoryStateData(window.history.state, writtenData);
|
|
1453
|
+
if (landed) landing?.commit();
|
|
1454
|
+
state.routerHistoryWrite = {
|
|
1455
|
+
...write,
|
|
1456
|
+
threw: true,
|
|
1457
|
+
landed
|
|
1458
|
+
};
|
|
1459
|
+
throw error;
|
|
1460
|
+
}
|
|
1461
|
+
landing?.commit();
|
|
1462
|
+
if (write.threw) state.routerHistoryWrite = {
|
|
1463
|
+
...write,
|
|
1464
|
+
landed: true
|
|
1465
|
+
};
|
|
1466
|
+
return true;
|
|
1467
|
+
}
|
|
1468
|
+
function writeRouterHistoryState(method, data, unused, url, land) {
|
|
1322
1469
|
withSuppressedUrlNotifications(() => {
|
|
1323
|
-
|
|
1470
|
+
const state = getClientNavigationState();
|
|
1471
|
+
if (!state) return;
|
|
1472
|
+
if (url == null) {
|
|
1473
|
+
(method === "pushState" ? state.originalPushState : state.originalReplaceState).call(window.history, data, unused, url);
|
|
1474
|
+
return;
|
|
1475
|
+
}
|
|
1476
|
+
const previousWrite = state.routerHistoryWrite;
|
|
1477
|
+
state.routerHistoryWriteDepth += 1;
|
|
1478
|
+
state.routerHistoryWrite = {
|
|
1479
|
+
method,
|
|
1480
|
+
data,
|
|
1481
|
+
url,
|
|
1482
|
+
href: new URL(url, window.location.href).href,
|
|
1483
|
+
land,
|
|
1484
|
+
threw: false,
|
|
1485
|
+
landed: false
|
|
1486
|
+
};
|
|
1487
|
+
try {
|
|
1488
|
+
window.history[method](data, unused, url);
|
|
1489
|
+
} finally {
|
|
1490
|
+
state.routerHistoryWriteDepth -= 1;
|
|
1491
|
+
state.routerHistoryWrite = previousWrite;
|
|
1492
|
+
}
|
|
1324
1493
|
});
|
|
1325
1494
|
}
|
|
1495
|
+
function pushHistoryStateWithoutNotify(data, unused, url, land) {
|
|
1496
|
+
writeRouterHistoryState("pushState", data, unused, url, land);
|
|
1497
|
+
}
|
|
1498
|
+
function replaceHistoryStateWithoutNotify(data, unused, url, land) {
|
|
1499
|
+
writeRouterHistoryState("replaceState", data, unused, url, land);
|
|
1500
|
+
}
|
|
1326
1501
|
/**
|
|
1327
1502
|
* Save the current scroll position into the current history state.
|
|
1328
1503
|
* Called before every navigation to enable scroll restoration on back/forward.
|
|
@@ -1538,6 +1713,32 @@ function hasScheduledAppRouterNavigation() {
|
|
|
1538
1713
|
function releaseScheduledAppRouterNavigationAfterCurrentTask(release) {
|
|
1539
1714
|
queueMicrotask(release);
|
|
1540
1715
|
}
|
|
1716
|
+
let inFlightAppRouterNavigationCount = 0;
|
|
1717
|
+
let visibleLinkPingAwaitsNavigations = false;
|
|
1718
|
+
/**
|
|
1719
|
+
* Called by the App Router browser entry for each RSC navigation it runs.
|
|
1720
|
+
* Returns a release callback for the navigation's settlement.
|
|
1721
|
+
*/
|
|
1722
|
+
function trackAppRouterNavigationInFlight() {
|
|
1723
|
+
inFlightAppRouterNavigationCount += 1;
|
|
1724
|
+
let released = false;
|
|
1725
|
+
return () => {
|
|
1726
|
+
if (released) return;
|
|
1727
|
+
released = true;
|
|
1728
|
+
inFlightAppRouterNavigationCount = Math.max(0, inFlightAppRouterNavigationCount - 1);
|
|
1729
|
+
if (inFlightAppRouterNavigationCount === 0 && visibleLinkPingAwaitsNavigations) {
|
|
1730
|
+
visibleLinkPingAwaitsNavigations = false;
|
|
1731
|
+
getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
1732
|
+
}
|
|
1733
|
+
};
|
|
1734
|
+
}
|
|
1735
|
+
function pingVisibleLinksOnceNavigationsSettle() {
|
|
1736
|
+
if (inFlightAppRouterNavigationCount > 0) {
|
|
1737
|
+
visibleLinkPingAwaitsNavigations = true;
|
|
1738
|
+
return;
|
|
1739
|
+
}
|
|
1740
|
+
getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
1741
|
+
}
|
|
1541
1742
|
/**
|
|
1542
1743
|
* App Router public router instance. Mirrors Next.js's
|
|
1543
1744
|
* `publicAppRouterInstance` from
|
|
@@ -1589,15 +1790,16 @@ const _appRouter = {
|
|
|
1589
1790
|
},
|
|
1590
1791
|
refresh() {
|
|
1591
1792
|
if (isServer) return;
|
|
1592
|
-
getNavigationRuntime()?.functions.clearNavigationCaches?.();
|
|
1593
|
-
if (hasScheduledAppRouterNavigation()) return;
|
|
1793
|
+
getNavigationRuntime()?.functions.clearNavigationCaches?.({ pingVisibleLinks: false });
|
|
1594
1794
|
const rscNavigate = getNavigationRuntime()?.functions.navigate;
|
|
1595
|
-
if (rscNavigate) {
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
};
|
|
1599
|
-
React$1.startTransition(navigate);
|
|
1795
|
+
if (hasScheduledAppRouterNavigation() || !rscNavigate) {
|
|
1796
|
+
getNavigationRuntime()?.functions.pingVisibleLinks?.();
|
|
1797
|
+
return;
|
|
1600
1798
|
}
|
|
1799
|
+
const navigate = () => {
|
|
1800
|
+
rscNavigate(window.location.href, 0, "refresh", void 0, void 0, true).finally(pingVisibleLinksOnceNavigationsSettle);
|
|
1801
|
+
};
|
|
1802
|
+
React$1.startTransition(navigate);
|
|
1601
1803
|
},
|
|
1602
1804
|
prefetch(href, options) {
|
|
1603
1805
|
assertSafeNavigationUrl(href);
|
|
@@ -1635,7 +1837,7 @@ const _appRouter = {
|
|
|
1635
1837
|
const kind = options?.kind === "full" ? "full" : "auto";
|
|
1636
1838
|
const [{ resolveAutoAppRoutePrefetch, resolveFullAppRoutePrefetch }, { resolveAppPrefetchRscRequest }] = await Promise.all([import("./internal/app-route-prefetch-policy.js"), import("./internal/app-prefetch-rsc-request.js")]);
|
|
1637
1839
|
if (setup.cancelled) return;
|
|
1638
|
-
const policy = kind === "full" ? resolveFullAppRoutePrefetch() : resolveAutoAppRoutePrefetch(rewrittenPrefetchHref ?? fullHref);
|
|
1840
|
+
const policy = kind === "full" ? resolveFullAppRoutePrefetch() : resolveAutoAppRoutePrefetch(rewrittenPrefetchHref ?? fullHref, interceptionContext);
|
|
1639
1841
|
const reusable = policy.shouldPrefetch && policy.cacheForNavigation;
|
|
1640
1842
|
const requiresRouteTreePrefetch = policy.requiresRouteTreePrefetch === true;
|
|
1641
1843
|
if (reusable && kind === "full") headers.delete(NEXT_ROUTER_PREFETCH_HEADER);
|
|
@@ -1647,7 +1849,7 @@ const _appRouter = {
|
|
|
1647
1849
|
if (!reusable && kind === "auto") {
|
|
1648
1850
|
headers.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
|
|
1649
1851
|
headers.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
|
|
1650
|
-
headers.set(VINEXT_RSC_RENDER_MODE_HEADER, hasSearchParams ? APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL : APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL);
|
|
1852
|
+
headers.set(VINEXT_RSC_RENDER_MODE_HEADER, hasSearchParams && policy.rendersDynamically !== true ? APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL : APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL);
|
|
1651
1853
|
}
|
|
1652
1854
|
const { additionalRscUrls, rscUrl } = await resolveAppPrefetchRscRequest({
|
|
1653
1855
|
fullHref,
|
|
@@ -1657,16 +1859,20 @@ const _appRouter = {
|
|
|
1657
1859
|
if (setup.cancelled) return;
|
|
1658
1860
|
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
1659
1861
|
const prefetched = getPrefetchedUrls();
|
|
1862
|
+
if (policy.dynamicStaleTime !== "full-prefetch" && hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext)) {
|
|
1863
|
+
attachPrefetchInvalidationCallback(cacheKey, options?.onInvalidate);
|
|
1864
|
+
return;
|
|
1865
|
+
}
|
|
1660
1866
|
if (reusable) {
|
|
1661
|
-
discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext);
|
|
1867
|
+
discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext, mountedSlotsHeader);
|
|
1662
1868
|
if (hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, {
|
|
1663
1869
|
additionalRscUrls,
|
|
1664
|
-
onInvalidate: options?.onInvalidate
|
|
1870
|
+
onInvalidate: options?.onInvalidate,
|
|
1871
|
+
onReuse: policy.dynamicStaleTime === "full-prefetch" ? (entry, matchedCacheKey) => promotePrefetchCacheEntryForNavigation(matchedCacheKey, entry) : void 0
|
|
1665
1872
|
})) return;
|
|
1666
|
-
|
|
1667
|
-
attachPrefetchInvalidationCallback(cacheKey, options?.onInvalidate);
|
|
1668
|
-
return;
|
|
1873
|
+
if (policy.dynamicStaleTime === "full-prefetch" && seedFullPrefetchFromVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls, options?.onInvalidate)) return;
|
|
1669
1874
|
}
|
|
1875
|
+
if (policy.dynamicStaleTime !== "full-prefetch" && hasNavigationFreshVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls, options?.onInvalidate)) return;
|
|
1670
1876
|
prefetched.add(cacheKey);
|
|
1671
1877
|
const fetchFullRscPayload = () => scheduleAppPrefetchFetch((signal) => fetch(rscUrl, {
|
|
1672
1878
|
headers,
|
|
@@ -1824,7 +2030,8 @@ if (!isServer) {
|
|
|
1824
2030
|
}
|
|
1825
2031
|
});
|
|
1826
2032
|
window.history.pushState = function patchedPushState(data, unused, url) {
|
|
1827
|
-
|
|
2033
|
+
if (forwardRouterHistoryWrite(state, "pushState", data, unused, url)) return;
|
|
2034
|
+
if (state.routerHistoryWriteDepth === 0) getNavigationRuntime()?.functions.flushCommittingNavigationUrl?.();
|
|
1828
2035
|
if (isAppOwnedHistoryState(data)) {
|
|
1829
2036
|
const previousHistoryState = window.history.state;
|
|
1830
2037
|
state.originalPushState.call(window.history, data, unused, url);
|
|
@@ -1841,7 +2048,8 @@ if (!isServer) {
|
|
|
1841
2048
|
}
|
|
1842
2049
|
};
|
|
1843
2050
|
window.history.replaceState = function patchedReplaceState(data, unused, url) {
|
|
1844
|
-
|
|
2051
|
+
if (forwardRouterHistoryWrite(state, "replaceState", data, unused, url)) return;
|
|
2052
|
+
if (state.routerHistoryWriteDepth === 0) getNavigationRuntime()?.functions.flushCommittingNavigationUrl?.();
|
|
1845
2053
|
if (isAppOwnedHistoryState(data)) {
|
|
1846
2054
|
const previousHistoryState = window.history.state;
|
|
1847
2055
|
state.originalReplaceState.call(window.history, data, unused, url);
|
|
@@ -1860,4 +2068,4 @@ if (!isServer) {
|
|
|
1860
2068
|
}
|
|
1861
2069
|
}
|
|
1862
2070
|
//#endregion
|
|
1863
|
-
export { BailoutToCSRError, DYNAMIC_NAVIGATION_CACHE_TTL, DynamicServerError, GLOBAL_ACCESSORS_KEY, HTTP_ERROR_FALLBACK_ERROR_CODE, MAX_PREFETCH_CACHE_SIZE, PREFETCH_CACHE_TTL, ReadonlyURLSearchParams, RedirectType, ServerInsertedHTMLContext, UnrecognizedActionError, __basePath, _registerStateAccessors, activateNavigationSnapshot, appRouterInstance, applyAppRouterScrollFallback, clearPendingPathname, clearServerInsertedHTML, commitClientNavigationState, consumePrefetchResponse, consumePrefetchResponseForNavigation, createAppPrefetchRequestHeaders, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, createSnapshotPathAndSearch, decodeRedirectError, deletePrefetchResponseSnapshot, disableNavigationResponsePrefetchCacheReuse, discardLearningOnlyPrefetchCacheEntry, fetchRouteTreeGatedPrefetch, flushServerInsertedHTML, forbidden, getAccessFallbackHTTPStatus, getBfcacheIdMapContext, getBfcacheSegmentIdContext, getClientNavigationRenderContext, getClientNavigationState, getClientParams, getCurrentInterceptionContext, getCurrentNextUrl, getFreshPrefetchCacheEntry, getLayoutSegmentContext, getMountedSlotsHeader, getNavigationContext, getPrefetchCache, getPrefetchInterceptionContext, getPrefetchedUrls, hasFreshLearningOnlyPrefetchCacheEntry, hasPrefetchCacheEntryForNavigation, hasSearchAgnosticPrefetchShellForRoute, invalidatePrefetchCache, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, navigateClientSide, notFound, parseRenderedPathAndSearchHeader, peekPrefetchResponseForNavigation, permanentRedirect, prefetchRscResponse, preloadHybridClientRouteOwner, prepareNavigationPrefetchSnapshot, pushHistoryStateWithoutNotify, redirect, renderServerInsertedHTML, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, resolveCachedRscResponseExpiresAt, resolveCachedRscResponseTtlMs, resolveLoadedHybridClientRewriteHref, resolvePrefetchCacheEntryMountedSlotsHeader, restoreRscResponse, saveScrollPosition, seedPrefetchResponseSnapshot, setClientParams, setMountedSlotsHeader, setNavigationContext, setPendingPathname, snapshotRscResponse, storePrefetchResponse, unauthorized, unstable_isUnrecognizedActionError, unstable_rethrow, useClientNavigationRenderSnapshot, useParams, usePathname, useRouter, useSearchParams, useSelectedLayoutSegment, useSelectedLayoutSegments, useServerInsertedHTML };
|
|
2071
|
+
export { BailoutToCSRError, DYNAMIC_NAVIGATION_CACHE_TTL, DynamicServerError, GLOBAL_ACCESSORS_KEY, HTTP_ERROR_FALLBACK_ERROR_CODE, MAX_PREFETCH_CACHE_SIZE, PREFETCH_CACHE_TTL, ReadonlyURLSearchParams, RedirectType, ServerInsertedHTMLContext, UnrecognizedActionError, __basePath, _registerStateAccessors, activateNavigationSnapshot, appRouterInstance, applyAppRouterScrollFallback, clearPendingPathname, clearServerInsertedHTML, commitClientNavigationState, consumePrefetchResponse, consumePrefetchResponseForNavigation, createAppPrefetchRequestHeaders, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, createSnapshotPathAndSearch, decodeRedirectError, deletePrefetchResponseSnapshot, disableNavigationResponsePrefetchCacheReuse, discardLearningOnlyPrefetchCacheEntry, fetchRouteTreeGatedPrefetch, flushServerInsertedHTML, forbidden, getAccessFallbackHTTPStatus, getBfcacheIdMapContext, getBfcacheSegmentIdContext, getClientNavigationRenderContext, getClientNavigationState, getClientParams, getCurrentInterceptionContext, getCurrentNextUrl, getFreshPrefetchCacheEntry, getLayoutSegmentContext, getMountedSlotsHeader, getNavigationContext, getPrefetchCache, getPrefetchInterceptionContext, getPrefetchedUrls, hasFreshLearningOnlyPrefetchCacheEntry, hasNavigationFreshVisitedResponse, hasPrefetchCacheEntryForNavigation, hasSearchAgnosticPrefetchShellForRoute, invalidateDynamicPrefetchCache, invalidatePrefetchCache, invalidateVisitedResponsePrefetches, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, navigateClientSide, notFound, parseRenderedPathAndSearchHeader, peekPrefetchResponseForNavigation, permanentRedirect, prefetchRscResponse, preloadHybridClientRouteOwner, prepareNavigationPrefetchSnapshot, promotePrefetchCacheEntryForNavigation, pushHistoryStateWithoutNotify, redirect, renderServerInsertedHTML, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, resolveCachedRscResponseExpiresAt, resolveCachedRscResponseTtlMs, resolveLoadedHybridClientRewriteHref, resolvePrefetchCacheEntryMountedSlotsHeader, restoreRscResponse, saveScrollPosition, seedFullPrefetchFromVisitedResponse, seedPrefetchResponseSnapshot, setClientParams, setMountedSlotsHeader, setNavigationContext, setPendingPathname, snapshotRscResponse, storePrefetchResponse, trackAppRouterNavigationInFlight, unauthorized, unstable_isUnrecognizedActionError, unstable_rethrow, useClientNavigationRenderSnapshot, useParams, usePathname, useRouter, useSearchParams, useSelectedLayoutSegment, useSelectedLayoutSegments, useServerInsertedHTML };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ReadonlyURLSearchParams } from "./readonly-url-search-params.js";
|
|
2
2
|
import { BailoutToCSRError, DynamicServerError, HTTP_ERROR_FALLBACK_ERROR_CODE, RedirectType, forbidden, getAccessFallbackHTTPStatus, isBailoutToCSRError, isDynamicServerError, isHTTPAccessFallbackError, isNextRouterError, isRedirectError, notFound, permanentRedirect, redirect, unauthorized, unstable_rethrow } from "./navigation-errors.js";
|
|
3
|
+
import { GLOBAL_ACCESSORS_KEY, ServerInsertedHTMLContext, _registerStateAccessors, clearServerInsertedHTML, flushServerInsertedHTML, getLayoutSegmentContext, getNavigationContext, renderServerInsertedHTML, setNavigationContext } from "./navigation-context-state.js";
|
|
3
4
|
import "./navigation-server.js";
|
|
4
|
-
import { ReadonlyURLSearchParams } from "./readonly-url-search-params.js";
|
|
5
5
|
import { throwClientHookError } from "./client-hook-error.js";
|
|
6
6
|
//#region src/shims/navigation.react-server.ts
|
|
7
7
|
function usePathname() {
|
|
@@ -29,4 +29,5 @@ export declare function waitForPprFallbackShellCacheReady(state: PprFallbackShel
|
|
|
29
29
|
export declare function preparePprFallbackShellFinalRender(state: PprFallbackShellState): void;
|
|
30
30
|
export declare function beginPprFallbackShellFinalRender(state: PprFallbackShellState): void;
|
|
31
31
|
export declare function isPprFallbackShellAbortError(error: unknown): boolean;
|
|
32
|
-
//#endregion
|
|
32
|
+
//#endregion
|
|
33
|
+
export {};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { ExecutionContextLike } from "./request-context.js";
|
|
2
1
|
import { NavigationContext } from "./navigation-context-state.js";
|
|
3
2
|
import "./navigation.js";
|
|
4
|
-
import {
|
|
3
|
+
import { ExecutionContextLike } from "./request-context.js";
|
|
5
4
|
import { RootParamsState } from "./root-params.js";
|
|
6
5
|
import { FetchCacheState } from "./fetch-cache-state.js";
|
|
7
6
|
import "./fetch-cache.js";
|
|
8
7
|
import { HeadersAccessPhase, VinextHeadersShimState } from "./internal/headers-state.js";
|
|
9
8
|
import { HeadersContext } from "./headers.js";
|
|
9
|
+
import { CacheLifeConfig, CacheState } from "./cache-request-state.js";
|
|
10
10
|
import { RouterState, SSRContext } from "./router-state.js";
|
|
11
11
|
import { PrivateCacheState } from "./cache-runtime.js";
|
|
12
12
|
import { HeadState } from "./head-state.js";
|
package/dist/shims/router.js
CHANGED
|
@@ -1006,15 +1006,26 @@ function getClientConfigRouteContext(href) {
|
|
|
1006
1006
|
search: parsed.search
|
|
1007
1007
|
};
|
|
1008
1008
|
}
|
|
1009
|
+
/**
|
|
1010
|
+
* matchRedirect has already applied basePath to a config destination, so a
|
|
1011
|
+
* local one that resolves outside it (`/../outside`, or a `basePath: false`
|
|
1012
|
+
* rule) is another app's URL. resolveLocalRedirectUrl would treat it as an app
|
|
1013
|
+
* path and re-add basePath, so it is followed as a document navigation instead,
|
|
1014
|
+
* landing where the server's redirect does.
|
|
1015
|
+
*/
|
|
1016
|
+
function configRedirectLeavesBasePath(location) {
|
|
1017
|
+
if (!__basePath || !location.startsWith("/") || location.startsWith("//")) return false;
|
|
1018
|
+
return !hasBasePath(new URL(location, "http://vinext.local").pathname, __basePath);
|
|
1019
|
+
}
|
|
1009
1020
|
async function resolveClientConfigRedirect(href) {
|
|
1010
1021
|
const redirects = window.__VINEXT_CLIENT_REDIRECTS__;
|
|
1011
1022
|
if (!redirects || redirects.length === 0) return null;
|
|
1012
1023
|
const routeContext = getClientConfigRouteContext(href);
|
|
1013
1024
|
if (!routeContext) return null;
|
|
1014
|
-
const [{ matchClientRedirect }, { preserveRedirectDestinationQuery }] = await Promise.all([import("../client/client-redirect-matcher.js"), import("../config/config-matchers.js")]);
|
|
1025
|
+
const [{ matchClientRedirect }, { encodeRedirectLocation, preserveRedirectDestinationQuery }] = await Promise.all([import("../client/client-redirect-matcher.js"), import("../config/config-matchers.js")]);
|
|
1015
1026
|
const redirect = matchClientRedirect(routeContext.pathname, redirects, routeContext.context, routeContext.basePathState);
|
|
1016
1027
|
if (!redirect) return null;
|
|
1017
|
-
return preserveRedirectDestinationQuery(
|
|
1028
|
+
return encodeRedirectLocation(preserveRedirectDestinationQuery(redirect.destination, routeContext.search, redirect.destinationQuery));
|
|
1018
1029
|
}
|
|
1019
1030
|
async function applyClientConfigRewrite(href, rewrite) {
|
|
1020
1031
|
const routeContext = getClientConfigRouteContext(href);
|
|
@@ -1569,7 +1580,7 @@ async function navigateClient(url, fetchUrl = url, options = {}, routeUrl = url)
|
|
|
1569
1580
|
const routeMasked = options.routeMasked ?? routeUrl !== url;
|
|
1570
1581
|
const configRedirect = hasClientRedirectRules() && clientConfigRedirectCouldMatch(browserUrl) ? await resolveClientConfigRedirect(browserUrl) : null;
|
|
1571
1582
|
if (configRedirect) {
|
|
1572
|
-
const redirectedUrl = resolveLocalRedirectUrl(configRedirect);
|
|
1583
|
+
const redirectedUrl = configRedirectLeavesBasePath(configRedirect) ? null : resolveLocalRedirectUrl(configRedirect);
|
|
1573
1584
|
if (!redirectedUrl) scheduleHardNavigationAndThrow(configRedirect, "Navigation redirected externally");
|
|
1574
1585
|
throw new InternalNavigationRedirect(redirectedUrl);
|
|
1575
1586
|
}
|
package/dist/shims/slot.d.ts
CHANGED
|
@@ -59,6 +59,18 @@ export declare function BfcacheSegmentBoundary({ children, id, stateKey }: {
|
|
|
59
59
|
id: string;
|
|
60
60
|
stateKey: string;
|
|
61
61
|
}): React$1.JSX.Element;
|
|
62
|
+
/**
|
|
63
|
+
* Retains a layout's children across navigations that change which segment
|
|
64
|
+
* they render. Each child keeps its own wrappers, so a page and a nested layout
|
|
65
|
+
* give the layout's children different element shapes, and a retention list
|
|
66
|
+
* inside the child would remount with them. Next.js keeps this Activity list in
|
|
67
|
+
* the parent's layout router, above the child's boundaries, so a page left for a
|
|
68
|
+
* sibling with its own layout keeps its state when navigating back.
|
|
69
|
+
*/
|
|
70
|
+
export declare function BfcacheChildrenBoundary({ children, id }: {
|
|
71
|
+
children: React$1.ReactNode;
|
|
72
|
+
id: string;
|
|
73
|
+
}): React$1.JSX.Element;
|
|
62
74
|
export declare function getNonCacheComponentsSegmentKey(id: string, activeStateKey: string): string | undefined;
|
|
63
75
|
export declare function resolveBfcacheSegmentStateKey(id: string, identityMap: Readonly<Record<string, string>>, bfcacheIdMap: Readonly<Record<string, string>> | null): string | undefined;
|
|
64
76
|
export declare function mergeElements(prev: AppElements, next: AppElements, options?: MergeElementsOptions | boolean): AppElements;
|