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
|
@@ -1,35 +1,33 @@
|
|
|
1
1
|
import { addBasePathToPathname, stripBasePath } from "../utils/base-path.js";
|
|
2
|
-
import {
|
|
2
|
+
import { VINEXT_MOUNTED_LAYOUTS_HEADER, VINEXT_PARAMS_HEADER, VINEXT_RENDERED_PATH_AND_SEARCH_HEADER, VINEXT_RSC_REDIRECT_HEADER, VINEXT_RSC_REDIRECT_TYPE_HEADER } from "./headers.js";
|
|
3
3
|
import { splitPathnameForRouteMatch } from "../routing/utils.js";
|
|
4
4
|
import { AppRouterContext } from "../shims/internal/app-router-context.js";
|
|
5
5
|
import { matchRoutePattern } from "../routing/route-pattern.js";
|
|
6
6
|
import { installWindowNext, setWindowNextInternalSourcePage } from "../client/window-next.js";
|
|
7
7
|
import { retryScrollTo, scrollToHashTargetOnNextFrame } from "../shims/hash-scroll.js";
|
|
8
|
-
import {
|
|
9
|
-
import { getMountedSlotIdsHeader, resolveVisitedResponseInterceptionContext } from "./app-elements.js";
|
|
10
|
-
import { getBfcacheIdMapContext, getNavigationContext, setNavigationContext } from "../shims/navigation-context-state.js";
|
|
11
|
-
import { decodeRedirectError, isRedirectError } from "../shims/navigation-errors.js";
|
|
12
|
-
import DefaultGlobalError from "../shims/default-global-error.js";
|
|
8
|
+
import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath, isRscCompatibilityIdCompatible } from "./app-rsc-cache-busting.js";
|
|
13
9
|
import { clearAppNavigationFailureTarget, installAppNavigationFailureListeners } from "../client/app-nav-failure-handler.js";
|
|
14
|
-
import { DevRecoveryBoundary, GlobalErrorBoundary, RedirectBoundary } from "../shims/error-boundary.js";
|
|
15
|
-
import { beginAppRouterScrollIntent, consumeAppRouterScrollIntent } from "../shims/app-router-scroll-state.js";
|
|
16
|
-
import { AppRouterScrollCommitProvider } from "../shims/app-router-scroll.js";
|
|
17
|
-
import { BfcacheIdentityMapContext, bindAppElementsRenderedSearch, setAppElementsRenderedSearch } from "../shims/slot.js";
|
|
18
|
-
import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath } from "./app-rsc-cache-busting.js";
|
|
19
10
|
import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
|
|
20
11
|
import "../client/instrumentation-client.js";
|
|
21
12
|
import { createNavigationRuntimeRouteManifestLoader, getNavigationRuntime, loadNavigationRuntimeRouteManifest, registerNavigationRuntimeBootstrap, registerNavigationRuntimeFunctions } from "../client/navigation-runtime.js";
|
|
13
|
+
import { AppElementsWire } from "./app-elements-wire.js";
|
|
14
|
+
import { getMountedSlotIdsHeader, resolveVisitedResponseInterceptionContext } from "./app-elements.js";
|
|
22
15
|
import { createBfcacheSegmentIdentityMap, createInitialBfcacheIdMap } from "./app-bfcache-identity.js";
|
|
23
16
|
import { createDiscardedServerActionRefreshScheduler, createServerActionInitiationSnapshot, resolveServerActionOperationLane } from "./app-browser-action-result.js";
|
|
24
|
-
import { createClientReuseManifestHeaderFromVisibleAppState } from "./app-browser-client-reuse-manifest.js";
|
|
25
17
|
import { resolveManifestNavigationInterceptionContext, resolveMiddlewareRewriteNavigationInterceptionContext } from "./app-browser-interception-context.js";
|
|
26
18
|
import { isExternalHistoryState, readHistoryStateActiveRoutePaths, readHistoryStatePreviousNextUrl, resolveActiveRoutePaths } from "./app-history-state.js";
|
|
27
19
|
import { AppBrowserMpaNavigationScheduler } from "./app-browser-mpa-navigation.js";
|
|
28
20
|
import { stripRscCompletionMetadataResponse } from "./rsc-completion-metadata.js";
|
|
29
21
|
import { blockDangerousStreamedRscRedirect } from "./app-browser-rsc-redirect.js";
|
|
30
22
|
import { navigationPlanner } from "./navigation-planner.js";
|
|
31
|
-
import {
|
|
23
|
+
import { decodeRedirectError, isRedirectError } from "../shims/navigation-errors.js";
|
|
24
|
+
import { beginAppRouterScrollIntent, consumeAppRouterScrollIntent } from "../shims/app-router-scroll-state.js";
|
|
25
|
+
import { getBfcacheIdMapContext, getNavigationContext, setNavigationContext } from "../shims/navigation-context-state.js";
|
|
26
|
+
import { DYNAMIC_NAVIGATION_CACHE_TTL, PREFETCH_CACHE_TTL, __basePath, appRouterInstance, commitClientNavigationState, consumePrefetchResponse, consumePrefetchResponseForNavigation, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, createSnapshotPathAndSearch, deletePrefetchResponseSnapshot, disableNavigationResponsePrefetchCacheReuse, getClientNavigationRenderContext, getMountedSlotsHeader, getPrefetchCache, hasPrefetchCacheEntryForNavigation, invalidateDynamicPrefetchCache, invalidatePrefetchCache, invalidateVisitedResponsePrefetches, parseRenderedPathAndSearchHeader, preloadHybridClientRouteOwner, pushHistoryStateWithoutNotify, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, resolveLoadedHybridClientRewriteHref, resolvePrefetchCacheEntryMountedSlotsHeader, restoreRscResponse, saveScrollPosition, seedPrefetchResponseSnapshot, setClientParams, setMountedSlotsHeader, setPendingPathname, trackAppRouterNavigationInFlight, useRouter } from "../shims/navigation.js";
|
|
27
|
+
import { AppRouterScrollCommitProvider } from "../shims/app-router-scroll.js";
|
|
32
28
|
import { chunksToReadableStream, createProgressiveRscStream, getVinextBrowserGlobal } from "./app-browser-stream.js";
|
|
29
|
+
import { createMountedLayoutsHeader, holdsSkippedLayouts } from "./app-mounted-layouts.js";
|
|
30
|
+
import { BfcacheIdentityMapContext, bindAppElementsRenderedSearch, setAppElementsRenderedSearch } from "../shims/slot.js";
|
|
33
31
|
import { COMMITTED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN, FRESH_APP_NAVIGATION_PAYLOAD_ORIGIN, VISITED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN, isCacheRestorableAppPayloadMetadata, isCompleteAppPayloadMetadata, resolveInterceptionContextFromPreviousNextUrl } from "./app-browser-state.js";
|
|
34
32
|
import { clearHardNavigationLoopGuard, createAppBrowserNavigationController, createBasePathStrippedPathAndSearch, navigateDocumentDirectly } from "./app-browser-navigation-controller.js";
|
|
35
33
|
import { createAppRouteTree } from "./app-route-tree.js";
|
|
@@ -38,17 +36,19 @@ import { createSupplementalRefreshCoordinator, mergeRefreshedParallelSlot, requi
|
|
|
38
36
|
import { createAppBrowserNavigationAbortCoordinator } from "./app-browser-navigation-abort.js";
|
|
39
37
|
import { consumeInitialFormState, createVinextHydrateRootOptions, hydrateRootInTransition, resolveFetchedHydrationLocation } from "./app-browser-hydration.js";
|
|
40
38
|
import { AppBrowserHistoryController } from "./app-browser-history-controller.js";
|
|
41
|
-
import { createVisitedResponseCacheEntry, deleteAllVisitedResponseCacheEntries,
|
|
39
|
+
import { createVisitedResponseCacheEntry, deleteAllVisitedResponseCacheEntries, deleteVisitedResponseCacheEntry, findVisitedResponseCacheEntry, findVisitedResponseForFullPrefetch, hasNavigationResponseHistoryLifetime, isVisitedResponseCacheEntryFresh, revokeHistoryRestoreNavigationReuse } from "./app-visited-response-cache.js";
|
|
42
40
|
import { createPopstateRestoreHandler, restoreSynchronousPopstateScrollPosition, shouldCommitPopstateUrlWithoutNavigation } from "./app-browser-popstate.js";
|
|
41
|
+
import DefaultGlobalError from "../shims/default-global-error.js";
|
|
42
|
+
import { DevRecoveryBoundary, GlobalErrorBoundary, RedirectBoundary } from "../shims/error-boundary.js";
|
|
43
43
|
import { createDevOnCaughtError, createOnUncaughtError, createProdOnCaughtError, createProdOnRecoverableError } from "./app-browser-error.js";
|
|
44
44
|
import { createHydrationCachePublication } from "./app-hydration-cache-publication.js";
|
|
45
45
|
import { peekSettledPrefetchResponseForNavigation, prepareConsumedPrefetchResponseForPublication, preserveCommittedPrefetchExpiry, resolvePrefetchNavigationResponseUrl } from "./app-browser-prefetch-response.js";
|
|
46
|
-
import { canCommitOptimisticRouteTemplate, createOptimisticRouteTemplate, getOptimisticPrefetchSourceKey, getOptimisticRouteTemplateKey, resolveOptimisticNavigationParamsForHref, resolveOptimisticNavigationPayload } from "./app-optimistic-routing.js";
|
|
46
|
+
import { canCommitOptimisticRouteTemplate, createOptimisticRouteTemplate, createOptimisticRouteTemplateStore, getOptimisticPrefetchSourceKey, getOptimisticRouteTemplateKey, keepOptimisticStreamingMetadata, resolveOptimisticNavigationParamsForHref, resolveOptimisticNavigationPayload } from "./app-optimistic-routing.js";
|
|
47
47
|
import { removeStylesheetLinksCoveredByInlineCss } from "./app-inline-css-client.js";
|
|
48
48
|
import { createElement, startTransition, use, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
49
|
-
import { flushSync } from "react-dom";
|
|
50
49
|
import { createRoot, hydrateRoot } from "react-dom/client";
|
|
51
50
|
import { createFromFetch, createFromReadableStream, setServerCallback } from "@vitejs/plugin-rsc/browser";
|
|
51
|
+
import { flushSync } from "react-dom";
|
|
52
52
|
import { hasServerActions, loadServerActionClient } from "virtual:vinext-app-capabilities";
|
|
53
53
|
//#region src/server/app-browser-entry.ts
|
|
54
54
|
const HAS_CLIENT_REWRITES = process.env.__VINEXT_HAS_CLIENT_REWRITES !== "false";
|
|
@@ -67,13 +67,20 @@ const MAX_VISITED_RESPONSE_CACHE_SIZE = 50;
|
|
|
67
67
|
const IS_STATIC_EXPORT = process.env.NODE_ENV === "production" && process.env.__NEXT_CONFIG_OUTPUT === "export";
|
|
68
68
|
let clientDeploymentVersion = null;
|
|
69
69
|
let clientRscCompatibilityId = IS_STATIC_EXPORT ? null : "vinext:missing";
|
|
70
|
+
/**
|
|
71
|
+
* Decoding a payload loads the chunks its client references name, so a
|
|
72
|
+
* payload this page can't navigate to is only decoded by the navigation that
|
|
73
|
+
* hard-navigates. Otherwise a prefetch after a deploy would load the new
|
|
74
|
+
* deployment's code and stylesheets into this page.
|
|
75
|
+
*/
|
|
76
|
+
function isRscResponseCompatible(compatibilityIdHeader) {
|
|
77
|
+
return isRscCompatibilityIdCompatible(compatibilityIdHeader, clientRscCompatibilityId);
|
|
78
|
+
}
|
|
70
79
|
function setClientRscCompatibilityId(compatibilityId) {
|
|
71
80
|
if (IS_STATIC_EXPORT || !compatibilityId) return;
|
|
72
81
|
clientRscCompatibilityId = compatibilityId;
|
|
73
82
|
}
|
|
74
|
-
const optimisticRouteTemplates =
|
|
75
|
-
const optimisticRouteTemplateSources = /* @__PURE__ */ new Set();
|
|
76
|
-
const optimisticRouteTemplateLearning = /* @__PURE__ */ new Map();
|
|
83
|
+
const optimisticRouteTemplates = createOptimisticRouteTemplateStore();
|
|
77
84
|
function claimInitialAppRouterBootstrap() {
|
|
78
85
|
if (window.__VINEXT_RSC_ROOT__ || window.__VINEXT_RSC_BOOTSTRAP_STATE__) return false;
|
|
79
86
|
window.__VINEXT_RSC_BOOTSTRAP_STATE__ = "starting";
|
|
@@ -105,8 +112,8 @@ const historyController = new AppBrowserHistoryController({
|
|
|
105
112
|
maxHistoryStateSnapshots: 50,
|
|
106
113
|
readHistoryState: () => window.history.state,
|
|
107
114
|
readCurrentHref: () => window.location.href,
|
|
108
|
-
pushHistoryState: (state, href) => pushHistoryStateWithoutNotify(state, "", href),
|
|
109
|
-
replaceHistoryState: (state, href) => replaceHistoryStateWithoutNotify(state, "", href),
|
|
115
|
+
pushHistoryState: (state, href, land) => pushHistoryStateWithoutNotify(state, "", href, land),
|
|
116
|
+
replaceHistoryState: (state, href, land) => replaceHistoryStateWithoutNotify(state, "", href, land),
|
|
110
117
|
readVisibleNavigationMetadata: () => {
|
|
111
118
|
if (!hasBrowserRouterState()) return null;
|
|
112
119
|
const routerState = getBrowserRouterState();
|
|
@@ -214,7 +221,7 @@ function restoreHistoryStateSnapshot(historyState, navId, onApprovedBeforeCommit
|
|
|
214
221
|
});
|
|
215
222
|
if (!restored) return false;
|
|
216
223
|
clientNavigationCacheGeneration += 1;
|
|
217
|
-
|
|
224
|
+
revokeHistoryRestoreNavigationReuse(visitedResponseCache);
|
|
218
225
|
disableNavigationResponsePrefetchCacheReuse();
|
|
219
226
|
commitClientNavigationState(navId, { releaseSnapshot: false });
|
|
220
227
|
return true;
|
|
@@ -241,17 +248,23 @@ function stageClientParams(params) {
|
|
|
241
248
|
}
|
|
242
249
|
function clearVisitedResponseCache() {
|
|
243
250
|
visitedResponseCache.clear();
|
|
251
|
+
invalidateVisitedResponsePrefetches();
|
|
244
252
|
}
|
|
245
|
-
function clearPrefetchState() {
|
|
246
|
-
invalidatePrefetchCache();
|
|
253
|
+
function clearPrefetchState(options) {
|
|
254
|
+
invalidatePrefetchCache(options);
|
|
247
255
|
optimisticRouteTemplates.clear();
|
|
248
|
-
optimisticRouteTemplateSources.clear();
|
|
249
|
-
optimisticRouteTemplateLearning.clear();
|
|
250
256
|
}
|
|
251
|
-
function clearClientNavigationCaches() {
|
|
257
|
+
function clearClientNavigationCaches(options) {
|
|
258
|
+
clientNavigationCacheGeneration += 1;
|
|
259
|
+
clearVisitedResponseCache();
|
|
260
|
+
clearPrefetchState(options);
|
|
261
|
+
historyController.invalidateRestorableClientState();
|
|
262
|
+
}
|
|
263
|
+
function clearDynamicClientNavigationCaches() {
|
|
252
264
|
clientNavigationCacheGeneration += 1;
|
|
253
265
|
clearVisitedResponseCache();
|
|
254
|
-
|
|
266
|
+
invalidateDynamicPrefetchCache();
|
|
267
|
+
optimisticRouteTemplates.clear();
|
|
255
268
|
historyController.invalidateRestorableClientState();
|
|
256
269
|
}
|
|
257
270
|
function getMatchedUrlPathname(matchedUrl) {
|
|
@@ -309,6 +322,10 @@ async function fetchPersistedSourcePageRefresh(options) {
|
|
|
309
322
|
* read the query the server rendered it with, not the navigation's.
|
|
310
323
|
*/
|
|
311
324
|
async function decodeSupplementalRefresh(response, targetPathname) {
|
|
325
|
+
if (!isRscResponseCompatible(response.headers.get("X-Vinext-RSC-Compatibility-Id"))) {
|
|
326
|
+
response.body?.cancel().catch(() => {});
|
|
327
|
+
throw new Error("[vinext] Refreshed another deployment's payload");
|
|
328
|
+
}
|
|
312
329
|
const elements = await decodeAppElementsPromise(createFromFetch(Promise.resolve(response)));
|
|
313
330
|
const renderedPathAndSearch = parseRenderedPathAndSearchHeader(response.headers.get(VINEXT_RENDERED_PATH_AND_SEARCH_HEADER));
|
|
314
331
|
setAppElementsRenderedSearch(elements, new URL(renderedPathAndSearch ?? targetPathname, window.location.origin).search);
|
|
@@ -330,9 +347,10 @@ function parsePrefetchCacheKey(cacheKey) {
|
|
|
330
347
|
}
|
|
331
348
|
async function learnOptimisticRouteTemplateFromPrefetch(options) {
|
|
332
349
|
const source = parsePrefetchCacheKey(options.cacheKey);
|
|
333
|
-
if (source.interceptionContext !== options.interceptionContext) return
|
|
334
|
-
if (resolvePrefetchCacheEntryMountedSlotsHeader(options.entry) !== options.mountedSlotsHeader) return
|
|
335
|
-
if (options.interceptionContext !== null) return
|
|
350
|
+
if (source.interceptionContext !== options.interceptionContext) return null;
|
|
351
|
+
if (resolvePrefetchCacheEntryMountedSlotsHeader(options.entry) !== options.mountedSlotsHeader) return null;
|
|
352
|
+
if (options.interceptionContext !== null) return null;
|
|
353
|
+
if (!isRscResponseCompatible(options.entry.snapshot.compatibilityIdHeader)) return null;
|
|
336
354
|
const elements = await decodeAppElementsPromise(createFromFetch(Promise.resolve(restoreRscResponse(options.entry.snapshot))));
|
|
337
355
|
const template = createOptimisticRouteTemplate({
|
|
338
356
|
allowLoadingShell: options.entry.optimisticRouteShell === true,
|
|
@@ -343,40 +361,36 @@ async function learnOptimisticRouteTemplateFromPrefetch(options) {
|
|
|
343
361
|
mountedSlotsHeader: options.mountedSlotsHeader,
|
|
344
362
|
routeManifest: options.routeManifest
|
|
345
363
|
});
|
|
346
|
-
if (template === null) return
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
364
|
+
if (template === null) return null;
|
|
365
|
+
return {
|
|
366
|
+
key: getOptimisticRouteTemplateKey({
|
|
367
|
+
interceptionContext: options.interceptionContext,
|
|
368
|
+
mountedSlotsHeader: options.mountedSlotsHeader,
|
|
369
|
+
routeId: template.routeId
|
|
370
|
+
}),
|
|
371
|
+
template
|
|
372
|
+
};
|
|
353
373
|
}
|
|
354
374
|
async function learnOptimisticRouteTemplatesFromPrefetchCache(options) {
|
|
355
|
-
|
|
356
|
-
|
|
375
|
+
const { routeManifest } = options;
|
|
376
|
+
if (routeManifest === null) return;
|
|
377
|
+
const learning = optimisticRouteTemplates.pendingLearning();
|
|
357
378
|
for (const [cacheKey, entry] of getPrefetchCache()) {
|
|
358
379
|
const sourceKey = getOptimisticPrefetchSourceKey({
|
|
359
380
|
cacheKey,
|
|
360
381
|
interceptionContext: options.interceptionContext,
|
|
361
382
|
mountedSlotsHeader: options.mountedSlotsHeader
|
|
362
383
|
});
|
|
363
|
-
if (
|
|
364
|
-
if (optimisticRouteTemplateLearning.has(sourceKey)) continue;
|
|
384
|
+
if (optimisticRouteTemplates.hasSource(sourceKey)) continue;
|
|
365
385
|
if (!isSettledPrefetchCacheEntry(entry)) continue;
|
|
366
386
|
if (entry.prefetchKind === "route-tree") continue;
|
|
367
|
-
|
|
387
|
+
learning.push(optimisticRouteTemplates.learn(sourceKey, () => learnOptimisticRouteTemplateFromPrefetch({
|
|
368
388
|
cacheKey,
|
|
369
389
|
entry,
|
|
370
390
|
interceptionContext: options.interceptionContext,
|
|
371
391
|
mountedSlotsHeader: options.mountedSlotsHeader,
|
|
372
|
-
routeManifest
|
|
373
|
-
})
|
|
374
|
-
if (learned) optimisticRouteTemplateSources.add(sourceKey);
|
|
375
|
-
}).finally(() => {
|
|
376
|
-
optimisticRouteTemplateLearning.delete(sourceKey);
|
|
377
|
-
});
|
|
378
|
-
optimisticRouteTemplateLearning.set(sourceKey, promise);
|
|
379
|
-
learning.push(promise);
|
|
392
|
+
routeManifest
|
|
393
|
+
})));
|
|
380
394
|
}
|
|
381
395
|
if (learning.length === 0) return;
|
|
382
396
|
await Promise.allSettled(learning);
|
|
@@ -519,7 +533,7 @@ function evictVisitedResponseCacheIfNeeded() {
|
|
|
519
533
|
function readVisitedResponseCacheCandidate(rscUrl, interceptionContext, mountedSlotsHeader, navigationKind) {
|
|
520
534
|
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
521
535
|
const match = findVisitedResponseCacheEntry(visitedResponseCache, rscUrl, interceptionContext);
|
|
522
|
-
if (!match) return {
|
|
536
|
+
if (!match || match.entry.navigationReuseRevoked) return {
|
|
523
537
|
cacheKey,
|
|
524
538
|
entry: null,
|
|
525
539
|
facts: {
|
|
@@ -554,13 +568,14 @@ function applyVisitedResponseCacheCandidateDecision(candidate, decision) {
|
|
|
554
568
|
function deleteVisitedResponse(rscUrl, interceptionContext) {
|
|
555
569
|
deleteVisitedResponseCacheEntry(visitedResponseCache, rscUrl, interceptionContext);
|
|
556
570
|
}
|
|
557
|
-
function storeVisitedResponseSnapshot(rscUrl, interceptionContext, snapshot, params, prefetchFallbackTtlMs = DYNAMIC_NAVIGATION_CACHE_TTL, requestMountedSlotsHeader = snapshot.mountedSlotsHeader ?? null, elements, seedPrefetchCache = true, prefetchSnapshot = snapshot, reuseAfterHistoryRestore = false) {
|
|
571
|
+
function storeVisitedResponseSnapshot(rscUrl, interceptionContext, snapshot, params, prefetchFallbackTtlMs = DYNAMIC_NAVIGATION_CACHE_TTL, requestMountedSlotsHeader = snapshot.mountedSlotsHeader ?? null, elements, seedPrefetchCache = true, prefetchSnapshot = snapshot, reuseAfterHistoryRestore = false, fromHydration = false) {
|
|
558
572
|
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
559
573
|
deleteAllVisitedResponseCacheEntries(visitedResponseCache, rscUrl, interceptionContext);
|
|
560
574
|
evictVisitedResponseCacheIfNeeded();
|
|
561
575
|
const entry = createVisitedResponseCacheEntry({
|
|
562
576
|
fallbackTtlMs: prefetchFallbackTtlMs,
|
|
563
577
|
elements,
|
|
578
|
+
fromHydration,
|
|
564
579
|
now: Date.now(),
|
|
565
580
|
mountedSlotsHeader: requestMountedSlotsHeader,
|
|
566
581
|
params,
|
|
@@ -685,7 +700,6 @@ function BrowserRoot({ hydrationCachePublication, initialElements, initialNaviga
|
|
|
685
700
|
interception: initialMetadata.interception,
|
|
686
701
|
interceptionContext: initialMetadata.interceptionContext,
|
|
687
702
|
layoutIds: initialMetadata.layoutIds,
|
|
688
|
-
layoutFlags: initialMetadata.layoutFlags,
|
|
689
703
|
navigationSnapshot: initialNavigationSnapshot,
|
|
690
704
|
previousNextUrl: null,
|
|
691
705
|
renderId: 0,
|
|
@@ -952,6 +966,7 @@ function registerServerActionCallback() {
|
|
|
952
966
|
return loadServerActionClient().then(({ invokeClientServerAction }) => invokeClientServerAction(id, args, actionInitiation, {
|
|
953
967
|
basePath: __basePath,
|
|
954
968
|
clearClientNavigationCaches,
|
|
969
|
+
clearDynamicClientNavigationCaches,
|
|
955
970
|
clientRscCompatibilityId,
|
|
956
971
|
commitSameUrlNavigatePayload,
|
|
957
972
|
navigationPlanner,
|
|
@@ -1045,7 +1060,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1045
1060
|
const fallbackTtlMs = initialRscBootstrap?.initialCacheKind === "static" ? PREFETCH_CACHE_TTL : DYNAMIC_NAVIGATION_CACHE_TTL;
|
|
1046
1061
|
hydrationCachePublication.publish(() => {
|
|
1047
1062
|
if (cacheGeneration !== clientNavigationCacheGeneration) return () => {};
|
|
1048
|
-
return storeVisitedResponseSnapshot(rscUrl, metadata.interceptionContext, snapshot, initialParams, fallbackTtlMs, mountedSlotsHeader, elements, false, snapshot, initialRscBootstrap?.initialCacheKind === "static" || metadata.interceptionContext !== null);
|
|
1063
|
+
return storeVisitedResponseSnapshot(rscUrl, metadata.interceptionContext, snapshot, initialParams, fallbackTtlMs, mountedSlotsHeader, elements, false, snapshot, initialRscBootstrap?.initialCacheKind === "static" || metadata.interceptionContext !== null, true);
|
|
1049
1064
|
});
|
|
1050
1065
|
}).catch(() => {});
|
|
1051
1066
|
historyController.writeBootstrapHistoryMetadata();
|
|
@@ -1118,6 +1133,12 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1118
1133
|
let currentPrevNextUrl = previousNextUrlOverride;
|
|
1119
1134
|
let redirectCount = redirectDepth;
|
|
1120
1135
|
let detachedNavigationCommits = false;
|
|
1136
|
+
let optimisticShellElements = null;
|
|
1137
|
+
const keepOptimisticShellMetadata = (payload) => {
|
|
1138
|
+
const shellElements = optimisticShellElements;
|
|
1139
|
+
if (shellElements === null) return payload;
|
|
1140
|
+
return payload instanceof Promise ? payload.then((elements) => keepOptimisticStreamingMetadata(elements, shellElements, String(navId))) : keepOptimisticStreamingMetadata(payload, shellElements, String(navId));
|
|
1141
|
+
};
|
|
1121
1142
|
const activeTraversalIntent = navigationKind === "traverse" ? traversalIntent ?? historyController.resolveTraversalIntent(window.history.state) : null;
|
|
1122
1143
|
let startedHardNavigation = false;
|
|
1123
1144
|
const performHardNavigationForScrollIntent = (targetHref, mode) => {
|
|
@@ -1131,6 +1152,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1131
1152
|
};
|
|
1132
1153
|
let restoredBfcacheIds = navigationKind === "traverse" ? historyController.readCurrentBfcacheVersionHistoryIds(activeTraversalIntent?.historyState ?? window.history.state) : null;
|
|
1133
1154
|
const reuseCurrentBfcacheIds = navigationKind !== "traverse" || !historyController.isCacheInvalidationGuarded() && historyController.isCurrentBfcacheVersion(activeTraversalIntent?.historyState ?? window.history.state);
|
|
1155
|
+
const releaseNavigationInFlight = trackAppRouterNavigationInFlight();
|
|
1134
1156
|
try {
|
|
1135
1157
|
const shouldUsePendingRouterState = programmaticTransition;
|
|
1136
1158
|
if (hasBrowserRouterState()) {
|
|
@@ -1151,6 +1173,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1151
1173
|
}
|
|
1152
1174
|
const navigationInitiationState = getBrowserRouterState();
|
|
1153
1175
|
const mountedSlotsHeader = getMountedSlotIdsHeader(navigationInitiationState.elements);
|
|
1176
|
+
let mountedLayoutsHeader = navigationKind === "navigate" ? createMountedLayoutsHeader(navigationInitiationState.elements, navigationInitiationState.layoutIds) : null;
|
|
1154
1177
|
while (true) {
|
|
1155
1178
|
const url = new URL(currentHref, window.location.origin);
|
|
1156
1179
|
const requestState = getRequestState(navigationKind, url.pathname, currentPrevNextUrl, activeTraversalIntent?.historyState);
|
|
@@ -1284,7 +1307,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1284
1307
|
navId,
|
|
1285
1308
|
operationLane: toOperationLane(navigationKind),
|
|
1286
1309
|
params: cachedParams,
|
|
1287
|
-
payload: cachedPayload,
|
|
1310
|
+
payload: keepOptimisticShellMetadata(cachedPayload),
|
|
1288
1311
|
payloadOrigin: cachedRoute.elements ? COMMITTED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN : VISITED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN,
|
|
1289
1312
|
pendingRouterState: detachedNavigationCommits ? null : pendingRouterState,
|
|
1290
1313
|
previousNextUrl: requestPreviousNextUrl,
|
|
@@ -1360,7 +1383,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1360
1383
|
interceptionContext: requestInterceptionContext,
|
|
1361
1384
|
mountedSlotsHeader,
|
|
1362
1385
|
routeManifest,
|
|
1363
|
-
templates: optimisticRouteTemplates
|
|
1386
|
+
templates: optimisticRouteTemplates.templates
|
|
1364
1387
|
});
|
|
1365
1388
|
if (optimisticPayload !== null && canCommitOptimisticRouteTemplate({
|
|
1366
1389
|
currentElements: navigationInitiationState.elements,
|
|
@@ -1372,6 +1395,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1372
1395
|
template: optimisticPayload.template
|
|
1373
1396
|
})) {
|
|
1374
1397
|
detachedNavigationCommits = true;
|
|
1398
|
+
optimisticShellElements = optimisticPayload.elements;
|
|
1375
1399
|
const optimisticNavigationSnapshot = createClientNavigationRenderSnapshot(currentHref, optimisticPayload.params);
|
|
1376
1400
|
renderNavigationPayload({
|
|
1377
1401
|
actionType: toActionType(navigationKind),
|
|
@@ -1398,13 +1422,16 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1398
1422
|
}
|
|
1399
1423
|
}
|
|
1400
1424
|
}
|
|
1425
|
+
let sentMountedLayouts = false;
|
|
1401
1426
|
if (!navResponse) {
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1427
|
+
let liveRequestHeaders = requestHeaders;
|
|
1428
|
+
if (mountedLayoutsHeader !== null && requestInterceptionContext === null) {
|
|
1429
|
+
liveRequestHeaders = new Headers(requestHeaders);
|
|
1430
|
+
liveRequestHeaders.set(VINEXT_MOUNTED_LAYOUTS_HEADER, mountedLayoutsHeader);
|
|
1431
|
+
sentMountedLayouts = true;
|
|
1405
1432
|
}
|
|
1406
1433
|
navResponse = await fetch(rscUrl, {
|
|
1407
|
-
headers:
|
|
1434
|
+
headers: liveRequestHeaders,
|
|
1408
1435
|
credentials: "include",
|
|
1409
1436
|
priority: "auto",
|
|
1410
1437
|
signal: navigationAbortHandle.signal
|
|
@@ -1487,6 +1514,15 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1487
1514
|
navigationAbortHandle.release();
|
|
1488
1515
|
}).then(requireCompleteSupplementalRefresh);
|
|
1489
1516
|
}
|
|
1517
|
+
if (sentMountedLayouts) {
|
|
1518
|
+
const elements = await rscPayload;
|
|
1519
|
+
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
1520
|
+
if (!holdsSkippedLayouts(navigationInitiationState, elements) || !holdsSkippedLayouts(getBrowserRouterState(), elements)) {
|
|
1521
|
+
mountedLayoutsHeader = null;
|
|
1522
|
+
continue;
|
|
1523
|
+
}
|
|
1524
|
+
rscPayload = Promise.resolve(elements);
|
|
1525
|
+
}
|
|
1490
1526
|
if (IS_STATIC_EXPORT) {
|
|
1491
1527
|
const staticExportElements = await rscPayload;
|
|
1492
1528
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
@@ -1518,7 +1554,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1518
1554
|
},
|
|
1519
1555
|
operationLane: toOperationLane(navigationKind),
|
|
1520
1556
|
params: navParams,
|
|
1521
|
-
payload: rscPayload,
|
|
1557
|
+
payload: keepOptimisticShellMetadata(rscPayload),
|
|
1522
1558
|
payloadOrigin: FRESH_APP_NAVIGATION_PAYLOAD_ORIGIN,
|
|
1523
1559
|
pendingRouterState: detachedNavigationCommits ? null : pendingRouterState,
|
|
1524
1560
|
previousNextUrl: requestPreviousNextUrl,
|
|
@@ -1527,7 +1563,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1527
1563
|
scrollIntent,
|
|
1528
1564
|
targetHref: currentHref,
|
|
1529
1565
|
traversalIntent: activeTraversalIntent,
|
|
1530
|
-
visibleCommitMode
|
|
1566
|
+
visibleCommitMode
|
|
1531
1567
|
});
|
|
1532
1568
|
if (renderOutcome === "hard-navigate") {
|
|
1533
1569
|
startedHardNavigation = true;
|
|
@@ -1563,13 +1599,12 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1563
1599
|
const state = committedState;
|
|
1564
1600
|
const committedElements = {
|
|
1565
1601
|
...state.elements,
|
|
1566
|
-
[AppElementsWire.keys.layoutFlags]: state.layoutFlags,
|
|
1567
1602
|
[AppElementsWire.keys.layoutIds]: state.layoutIds,
|
|
1568
1603
|
[AppElementsWire.keys.skippedLayoutIds]: [],
|
|
1569
1604
|
[AppElementsWire.keys.slotBindings]: state.slotBindings
|
|
1570
1605
|
};
|
|
1571
1606
|
if (navigationCacheGeneration !== clientNavigationCacheGeneration) return;
|
|
1572
|
-
storeVisitedResponseSnapshot(rscUrl, interceptionContext, snapshot, navParams, DYNAMIC_NAVIGATION_CACHE_TTL, mountedSlotsHeader, committedElements,
|
|
1607
|
+
storeVisitedResponseSnapshot(rscUrl, interceptionContext, snapshot, navParams, DYNAMIC_NAVIGATION_CACHE_TTL, mountedSlotsHeader, committedElements, isCompleteAppPayloadMetadata(metadata), prefetchSnapshot, interceptionContext !== null || hasNavigationResponseHistoryLifetime(snapshot));
|
|
1573
1608
|
}
|
|
1574
1609
|
} catch {}
|
|
1575
1610
|
return;
|
|
@@ -1582,10 +1617,15 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1582
1617
|
navigationAbortHandle.release();
|
|
1583
1618
|
browserNavigationController.finalizeNavigation(navId, pendingRouterState);
|
|
1584
1619
|
discardedServerActionRefreshScheduler.markNavigationSettled();
|
|
1620
|
+
releaseNavigationInFlight();
|
|
1585
1621
|
if (startedHardNavigation) await waitForMpaNavigationRestore();
|
|
1586
1622
|
}
|
|
1587
1623
|
},
|
|
1588
|
-
|
|
1624
|
+
readVisitedResponseForFullPrefetch: (rscUrls, interceptionContext, mountedSlotsHeader) => findVisitedResponseForFullPrefetch(visitedResponseCache, rscUrls, interceptionContext, mountedSlotsHeader),
|
|
1625
|
+
preparePrefetchResponse: (response) => {
|
|
1626
|
+
if (!isRscResponseCompatible(response.headers.get("X-Vinext-RSC-Compatibility-Id"))) return Promise.reject(/* @__PURE__ */ new Error("[vinext] Prefetched another deployment's payload"));
|
|
1627
|
+
return decodeAppElementsPromise(createFromFetch(Promise.resolve(response)));
|
|
1628
|
+
},
|
|
1589
1629
|
claimCurrentHistoryTreeSnapshot: (historyUpdateMode, previousHistoryState) => historyController.claimCurrentHistoryTreeSnapshot(historyUpdateMode, previousHistoryState),
|
|
1590
1630
|
commitAppOwnedHistoryStateWrite: (historyUpdateMode, previousHistoryState) => historyController.commitAppOwnedHistoryStateWrite(historyUpdateMode, previousHistoryState),
|
|
1591
1631
|
discardPendingNavigation: () => {
|
|
@@ -10,4 +10,5 @@ export declare function createOnUncaughtError(options?: {
|
|
|
10
10
|
export declare function createProdOnCaughtError(onImplicitRootError: HydrateRootErrorHandler): HydrateRootErrorHandler;
|
|
11
11
|
export declare function createDevOnCaughtError(onCaughtError: HydrateRootErrorHandler, onImplicitRootError: HydrateRootErrorHandler): HydrateRootErrorHandler;
|
|
12
12
|
export declare function createProdOnRecoverableError(onReportedError: () => void): (error: unknown) => void;
|
|
13
|
-
//#endregion
|
|
13
|
+
//#endregion
|
|
14
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RouterHistoryWriteLanding } from "../shims/navigation.js";
|
|
1
2
|
import { BfcacheIdMap, HistoryTraversalIntent } from "./app-history-state.js";
|
|
2
3
|
import { AppRouterState } from "./app-browser-state.js";
|
|
3
4
|
import { HistoryUpdateMode } from "./app-browser-navigation-controller.js";
|
|
@@ -19,10 +20,10 @@ type AppBrowserHistoryControllerDeps = {
|
|
|
19
20
|
readHistoryState: () => unknown;
|
|
20
21
|
/** Reads `window.location.href`. Injected so the controller stays unit-testable. */
|
|
21
22
|
readCurrentHref: () => string;
|
|
22
|
-
/** Wraps `pushHistoryStateWithoutNotify(state, "", href)`. */
|
|
23
|
-
pushHistoryState: (state: unknown, href: string) => void;
|
|
24
|
-
/** Wraps `replaceHistoryStateWithoutNotify(state, "", href)`. */
|
|
25
|
-
replaceHistoryState: (state: unknown, href?: string) => void;
|
|
23
|
+
/** Wraps `pushHistoryStateWithoutNotify(state, "", href, land)`. */
|
|
24
|
+
pushHistoryState: (state: unknown, href: string, land?: RouterHistoryWriteLanding) => void;
|
|
25
|
+
/** Wraps `replaceHistoryStateWithoutNotify(state, "", href, land)`. */
|
|
26
|
+
replaceHistoryState: (state: unknown, href?: string, land?: RouterHistoryWriteLanding) => void;
|
|
26
27
|
readVisibleNavigationMetadata: () => VisibleNavigationMetadata | null;
|
|
27
28
|
};
|
|
28
29
|
/**
|
|
@@ -121,4 +122,5 @@ export declare class AppBrowserHistoryController {
|
|
|
121
122
|
*/
|
|
122
123
|
restoreHistorySnapshot(options: RestoreHistorySnapshotOptions): boolean;
|
|
123
124
|
}
|
|
124
|
-
//#endregion
|
|
125
|
+
//#endregion
|
|
126
|
+
export {};
|
|
@@ -31,6 +31,7 @@ var AppBrowserHistoryController = class {
|
|
|
31
31
|
#treeSnapshots = /* @__PURE__ */ new Map();
|
|
32
32
|
#treeSnapshotClaimCounts = /* @__PURE__ */ new Map();
|
|
33
33
|
#treeSnapshotClaimByHistoryIndex = /* @__PURE__ */ new Map();
|
|
34
|
+
#treeSnapshotIdPrefix = createDocumentTreeSnapshotIdPrefix();
|
|
34
35
|
#readHistoryState;
|
|
35
36
|
#readCurrentHref;
|
|
36
37
|
#pushHistoryState;
|
|
@@ -41,6 +42,9 @@ var AppBrowserHistoryController = class {
|
|
|
41
42
|
#currentTreeSnapshotId = null;
|
|
42
43
|
#nextTreeSnapshotId = 0;
|
|
43
44
|
#treeSnapshotIdPendingFreshState = null;
|
|
45
|
+
#historyIndicesAwaitingTreeSnapshot = /* @__PURE__ */ new Set();
|
|
46
|
+
#treeSnapshotPending = true;
|
|
47
|
+
#historyIndexAwaitingTreeClaim = null;
|
|
44
48
|
constructor(deps) {
|
|
45
49
|
this.#readHistoryState = deps.readHistoryState;
|
|
46
50
|
this.#readCurrentHref = deps.readCurrentHref;
|
|
@@ -99,18 +103,29 @@ var AppBrowserHistoryController = class {
|
|
|
99
103
|
const previousState = this.readCurrentTreeSnapshot();
|
|
100
104
|
const previousOperation = previousState?.activeOperation;
|
|
101
105
|
if (previousState && previousOperation?.navigationCommitKind === "detached" && state.activeOperation?.navigationCommitKind === "authoritative" && state.activeOperation.navigationId === previousOperation.navigationId) this.#restorableClientState.replaceHistoryStateSnapshots(previousState, state);
|
|
106
|
+
for (const historyIndex of this.#historyIndicesAwaitingTreeSnapshot) this.#restorableClientState.rememberHistoryStateSnapshot({
|
|
107
|
+
historyIndex,
|
|
108
|
+
state
|
|
109
|
+
});
|
|
110
|
+
this.#historyIndicesAwaitingTreeSnapshot.clear();
|
|
102
111
|
this.#restorableClientState.rememberHistoryStateSnapshot({
|
|
103
112
|
historyIndex: this.#currentHistoryTraversalIndex,
|
|
104
113
|
state
|
|
105
114
|
});
|
|
115
|
+
this.#treeSnapshotPending = false;
|
|
106
116
|
const historyTreeSnapshotId = readHistoryStateTreeSnapshotId(this.#readHistoryState());
|
|
107
|
-
const treeSnapshotId = historyTreeSnapshotId !== null && this.#treeSnapshots.has(historyTreeSnapshotId) && (historyTreeSnapshotId === this.#treeSnapshotIdPendingFreshState || this.#treeSnapshotClaimCounts.has(historyTreeSnapshotId)) ? historyTreeSnapshotId : this.#nextTreeSnapshotId
|
|
117
|
+
const treeSnapshotId = historyTreeSnapshotId !== null && this.#treeSnapshots.has(historyTreeSnapshotId) && (historyTreeSnapshotId === this.#treeSnapshotIdPendingFreshState || this.#treeSnapshotClaimCounts.has(historyTreeSnapshotId)) ? historyTreeSnapshotId : `${this.#treeSnapshotIdPrefix}:${this.#nextTreeSnapshotId++}`;
|
|
108
118
|
this.#treeSnapshotIdPendingFreshState = null;
|
|
109
119
|
const previousTreeSnapshotId = this.#currentTreeSnapshotId;
|
|
110
120
|
this.#currentTreeSnapshotId = treeSnapshotId;
|
|
111
121
|
this.#treeSnapshots.set(treeSnapshotId, state);
|
|
122
|
+
const claimingHistoryIndex = this.#historyIndexAwaitingTreeClaim;
|
|
123
|
+
this.#historyIndexAwaitingTreeClaim = null;
|
|
124
|
+
const claimsTree = claimingHistoryIndex !== null && claimingHistoryIndex === this.#currentHistoryTraversalIndex && claimingHistoryIndex === readHistoryStateTraversalIndex(this.#readHistoryState());
|
|
125
|
+
if (claimsTree) this.#claimTreeSnapshotAtHistoryIndex(claimingHistoryIndex, treeSnapshotId);
|
|
112
126
|
if (previousTreeSnapshotId !== null && previousTreeSnapshotId !== treeSnapshotId && !this.#treeSnapshotClaimCounts.has(previousTreeSnapshotId)) this.#treeSnapshots.delete(previousTreeSnapshotId);
|
|
113
|
-
if (
|
|
127
|
+
if (claimsTree) this.#replaceHistoryState(createHistoryStateWithTreeSnapshotClaim(createHistoryStateWithTreeSnapshotId(this.#readHistoryState(), treeSnapshotId), true));
|
|
128
|
+
else if (historyTreeSnapshotId !== treeSnapshotId) this.#replaceHistoryState(createHistoryStateWithTreeSnapshotId(this.#readHistoryState(), treeSnapshotId));
|
|
114
129
|
}
|
|
115
130
|
/** The router state of the most recently committed render, if any. */
|
|
116
131
|
readCurrentTreeSnapshot() {
|
|
@@ -125,7 +140,21 @@ var AppBrowserHistoryController = class {
|
|
|
125
140
|
claimCurrentHistoryTreeSnapshot(historyUpdateMode, previousHistoryState) {
|
|
126
141
|
let historyState = this.#readHistoryState();
|
|
127
142
|
const treeSnapshotId = readHistoryStateTreeSnapshotId(historyState);
|
|
128
|
-
if (treeSnapshotId === null || !this.#treeSnapshots.has(treeSnapshotId))
|
|
143
|
+
if (treeSnapshotId === null || !this.#treeSnapshots.has(treeSnapshotId)) {
|
|
144
|
+
if (historyUpdateMode === "push") {
|
|
145
|
+
const previousHistoryIndex = readHistoryStateTraversalIndex(previousHistoryState);
|
|
146
|
+
if (previousHistoryIndex !== null && this.#treeSnapshotPending) this.#historyIndicesAwaitingTreeSnapshot.add(previousHistoryIndex);
|
|
147
|
+
this.#releaseForwardTreeSnapshotClaims();
|
|
148
|
+
const historyIndex = this.#nextHistoryTraversalIndex + 1;
|
|
149
|
+
this.#replaceHistoryState(createHistoryStateWithNavigationMetadata(historyState, {
|
|
150
|
+
previousNextUrl: readHistoryStatePreviousNextUrl(historyState),
|
|
151
|
+
traversalIndex: historyIndex
|
|
152
|
+
}));
|
|
153
|
+
this.commitHistoryTraversalIndex(historyIndex);
|
|
154
|
+
this.#historyIndexAwaitingTreeClaim = this.#treeSnapshotPending ? historyIndex : null;
|
|
155
|
+
}
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
129
158
|
let historyIndex;
|
|
130
159
|
if (historyUpdateMode === "push") {
|
|
131
160
|
this.#releaseForwardTreeSnapshotClaims();
|
|
@@ -185,7 +214,6 @@ var AppBrowserHistoryController = class {
|
|
|
185
214
|
if (treeSnapshotId !== this.#currentTreeSnapshotId) this.#treeSnapshots.delete(treeSnapshotId);
|
|
186
215
|
}
|
|
187
216
|
commitHashOnlyNavigation(href, historyUpdateMode, scroll) {
|
|
188
|
-
if (historyUpdateMode === "push") this.#releaseForwardTreeSnapshotClaims();
|
|
189
217
|
const navigationHistoryIndex = this.allocateNavigationHistoryTraversalIndex(historyUpdateMode);
|
|
190
218
|
const historyState = this.#readHistoryState();
|
|
191
219
|
const visible = this.#readVisibleNavigationMetadata();
|
|
@@ -199,11 +227,59 @@ var AppBrowserHistoryController = class {
|
|
|
199
227
|
previousNextUrl,
|
|
200
228
|
traversalIndex: navigationHistoryIndex
|
|
201
229
|
}), true);
|
|
202
|
-
|
|
203
|
-
else this.#pushHistoryState(nextHistoryState, href);
|
|
230
|
+
const historyIndex = this.#writeNavigationHistoryState(historyUpdateMode, nextHistoryState, href, navigationHistoryIndex, false);
|
|
204
231
|
const treeSnapshotId = readHistoryStateTreeSnapshotId(nextHistoryState);
|
|
205
|
-
if (
|
|
206
|
-
|
|
232
|
+
if (historyIndex !== null && treeSnapshotId !== null) this.#claimTreeSnapshotAtHistoryIndex(historyIndex, treeSnapshotId);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Writes an app-owned push or replace entry and returns the traversal index
|
|
236
|
+
* it landed at. A history wrapper installed after boot can make its own
|
|
237
|
+
* writes before forwarding this one. When those moved the indices, the index
|
|
238
|
+
* is assigned as the write lands: a push goes after them, and a replace takes
|
|
239
|
+
* the index of the entry it actually overwrites. The index is committed as
|
|
240
|
+
* soon as the write succeeds, so a push the wrapper makes after forwarding
|
|
241
|
+
* goes after it.
|
|
242
|
+
*/
|
|
243
|
+
#writeNavigationHistoryState(historyUpdateMode, state, href, allocatedIndex, rendersTree) {
|
|
244
|
+
const allocatedCurrentIndex = this.#currentHistoryTraversalIndex;
|
|
245
|
+
const allocatedNextIndex = this.#nextHistoryTraversalIndex;
|
|
246
|
+
const releaseClaims = (overwrittenHistoryState) => {
|
|
247
|
+
if (historyUpdateMode === "push") {
|
|
248
|
+
this.#releaseForwardTreeSnapshotClaims();
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (!rendersTree) return;
|
|
252
|
+
const overwrittenIndex = readHistoryStateTraversalIndex(overwrittenHistoryState) ?? this.#currentHistoryTraversalIndex;
|
|
253
|
+
if (overwrittenIndex !== null) this.#releaseTreeSnapshotClaimAtHistoryIndex(overwrittenIndex);
|
|
254
|
+
};
|
|
255
|
+
let landedIndex;
|
|
256
|
+
let landingStarted = false;
|
|
257
|
+
const land = (data) => {
|
|
258
|
+
landingStarted = true;
|
|
259
|
+
const index = this.#currentHistoryTraversalIndex !== allocatedCurrentIndex || this.#nextHistoryTraversalIndex !== allocatedNextIndex ? this.allocateNavigationHistoryTraversalIndex(historyUpdateMode) : allocatedIndex;
|
|
260
|
+
const overwrittenHistoryState = this.#readHistoryState();
|
|
261
|
+
return {
|
|
262
|
+
data: index === allocatedIndex ? data : createHistoryStateWithNavigationMetadata(data, {
|
|
263
|
+
previousNextUrl: readHistoryStatePreviousNextUrl(data),
|
|
264
|
+
traversalIndex: index
|
|
265
|
+
}),
|
|
266
|
+
commit: () => {
|
|
267
|
+
releaseClaims(overwrittenHistoryState);
|
|
268
|
+
if (rendersTree) this.#treeSnapshotPending = true;
|
|
269
|
+
landedIndex = index;
|
|
270
|
+
this.commitHistoryTraversalIndex(index);
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
};
|
|
274
|
+
const historyStateBeforeWrite = this.#readHistoryState();
|
|
275
|
+
if (historyUpdateMode === "push") this.#pushHistoryState(state, href, land);
|
|
276
|
+
else this.#replaceHistoryState(state, href, land);
|
|
277
|
+
if (landedIndex !== void 0) return landedIndex;
|
|
278
|
+
if (landingStarted) return null;
|
|
279
|
+
releaseClaims(historyStateBeforeWrite);
|
|
280
|
+
if (rendersTree) this.#treeSnapshotPending = true;
|
|
281
|
+
this.commitHistoryTraversalIndex(allocatedIndex);
|
|
282
|
+
return allocatedIndex;
|
|
207
283
|
}
|
|
208
284
|
#createHashOnlyNavigationBaseHistoryState(historyUpdateMode, scroll) {
|
|
209
285
|
const historyState = this.#readHistoryState();
|
|
@@ -238,19 +314,15 @@ var AppBrowserHistoryController = class {
|
|
|
238
314
|
let wroteHistoryState = false;
|
|
239
315
|
if (options.historyUpdateMode === "replace" && (currentHref !== targetHref || replacesClaimedOrExternalTree)) {
|
|
240
316
|
options.stageClientParams();
|
|
241
|
-
|
|
242
|
-
if (currentHistoryIndex !== null) this.#releaseTreeSnapshotClaimAtHistoryIndex(currentHistoryIndex);
|
|
243
|
-
this.#replaceHistoryState(historyState, options.href);
|
|
317
|
+
this.#writeNavigationHistoryState("replace", historyState, options.href, navigationHistoryIndex, true);
|
|
244
318
|
wroteHistoryState = true;
|
|
245
|
-
this.commitHistoryTraversalIndex(navigationHistoryIndex);
|
|
246
319
|
} else if (options.historyUpdateMode === "push" && currentHref !== targetHref) {
|
|
247
320
|
options.stageClientParams();
|
|
248
|
-
this.#
|
|
249
|
-
this.#pushHistoryState(historyState, options.href);
|
|
321
|
+
this.#writeNavigationHistoryState("push", historyState, options.href, navigationHistoryIndex, true);
|
|
250
322
|
wroteHistoryState = true;
|
|
251
|
-
this.commitHistoryTraversalIndex(navigationHistoryIndex);
|
|
252
323
|
}
|
|
253
324
|
if (!wroteHistoryState) {
|
|
325
|
+
this.#treeSnapshotPending = true;
|
|
254
326
|
this.syncCurrentHistoryStatePreviousNextUrl(options.previousNextUrl, options.bfcacheIds, options.activeRoutePaths);
|
|
255
327
|
options.stageClientParams();
|
|
256
328
|
if (options.targetHistoryIndex !== void 0) this.commitHistoryTraversalIndex(options.targetHistoryIndex);
|
|
@@ -306,6 +378,7 @@ var AppBrowserHistoryController = class {
|
|
|
306
378
|
state,
|
|
307
379
|
beforeCommit: () => {
|
|
308
380
|
this.commitTraversalIndexFromHistoryState(options.historyState);
|
|
381
|
+
this.#treeSnapshotPending = true;
|
|
309
382
|
options.stageClientParams(state.navigationSnapshot.params);
|
|
310
383
|
}
|
|
311
384
|
});
|
|
@@ -317,11 +390,16 @@ var AppBrowserHistoryController = class {
|
|
|
317
390
|
state: decision.state,
|
|
318
391
|
beforeCommit: () => {
|
|
319
392
|
this.commitHistoryTraversalIndex(decision.targetHistoryIndex);
|
|
393
|
+
this.#treeSnapshotPending = true;
|
|
320
394
|
options.stageClientParams(decision.state.navigationSnapshot.params);
|
|
321
395
|
}
|
|
322
396
|
});
|
|
323
397
|
}
|
|
324
398
|
};
|
|
399
|
+
function createDocumentTreeSnapshotIdPrefix() {
|
|
400
|
+
const bytes = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(8));
|
|
401
|
+
return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
402
|
+
}
|
|
325
403
|
function areStringArraysEqual(a, b) {
|
|
326
404
|
if (a === b) return true;
|
|
327
405
|
if (a === null || b === null || a.length !== b.length) return false;
|