vinext 0.0.49 → 0.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build/client-build-config.js.map +1 -1
- package/dist/build/google-fonts/build-url.js.map +1 -1
- package/dist/build/google-fonts/fallback-metrics-data.js +14031 -0
- package/dist/build/google-fonts/fallback-metrics-data.js.map +1 -0
- package/dist/build/google-fonts/fallback-metrics.d.ts +13 -0
- package/dist/build/google-fonts/fallback-metrics.js +46 -0
- package/dist/build/google-fonts/fallback-metrics.js.map +1 -0
- package/dist/build/google-fonts/get-axes.js.map +1 -1
- package/dist/build/google-fonts/sort-variants.js.map +1 -1
- package/dist/build/google-fonts/validate.js.map +1 -1
- package/dist/build/layout-classification.js.map +1 -1
- package/dist/build/nitro-route-rules.js.map +1 -1
- package/dist/build/precompress.d.ts +13 -2
- package/dist/build/precompress.js +12 -3
- package/dist/build/precompress.js.map +1 -1
- package/dist/build/prerender.d.ts +17 -1
- package/dist/build/prerender.js +114 -23
- package/dist/build/prerender.js.map +1 -1
- package/dist/build/report.d.ts +5 -4
- package/dist/build/report.js +196 -348
- package/dist/build/report.js.map +1 -1
- package/dist/build/route-classification-injector.js.map +1 -1
- package/dist/build/route-classification-manifest.js.map +1 -1
- package/dist/build/run-prerender.js.map +1 -1
- package/dist/build/server-manifest.js.map +1 -1
- package/dist/build/ssr-manifest.js.map +1 -1
- package/dist/build/standalone.js.map +1 -1
- package/dist/build/static-export.js.map +1 -1
- package/dist/check.js +2 -1
- package/dist/check.js.map +1 -1
- package/dist/cli-args.js.map +1 -1
- package/dist/cli.js +68 -7
- package/dist/cli.js.map +1 -1
- package/dist/client/instrumentation-client-state.js.map +1 -1
- package/dist/client/validate-module-path.js.map +1 -1
- package/dist/client/vinext-next-data.d.ts +5 -1
- package/dist/client/window-next.d.ts +151 -0
- package/dist/client/window-next.js +48 -0
- package/dist/client/window-next.js.map +1 -0
- package/dist/cloudflare/kv-cache-handler.js.map +1 -1
- package/dist/cloudflare/tpr.js +2 -1
- package/dist/cloudflare/tpr.js.map +1 -1
- package/dist/config/config-matchers.d.ts +3 -1
- package/dist/config/config-matchers.js +5 -4
- package/dist/config/config-matchers.js.map +1 -1
- package/dist/config/dotenv.d.ts +11 -1
- package/dist/config/dotenv.js.map +1 -1
- package/dist/config/next-config.d.ts +93 -6
- package/dist/config/next-config.js +233 -6
- package/dist/config/next-config.js.map +1 -1
- package/dist/config/tsconfig-paths.d.ts +13 -0
- package/dist/config/tsconfig-paths.js +117 -0
- package/dist/config/tsconfig-paths.js.map +1 -0
- package/dist/deploy.js +16 -7
- package/dist/deploy.js.map +1 -1
- package/dist/entries/app-browser-entry.d.ts +3 -1
- package/dist/entries/app-browser-entry.js +36 -2
- package/dist/entries/app-browser-entry.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts +19 -1
- package/dist/entries/app-rsc-entry.js +49 -12
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/app-rsc-manifest.d.ts +9 -0
- package/dist/entries/app-rsc-manifest.js +8 -1
- package/dist/entries/app-rsc-manifest.js.map +1 -1
- package/dist/entries/app-ssr-entry.js.map +1 -1
- package/dist/entries/pages-client-entry.js +3 -5
- package/dist/entries/pages-client-entry.js.map +1 -1
- package/dist/entries/pages-entry-helpers.js.map +1 -1
- package/dist/entries/pages-server-entry.js +34 -1
- package/dist/entries/pages-server-entry.js.map +1 -1
- package/dist/entries/runtime-entry-module.js.map +1 -1
- package/dist/index.js +204 -53
- package/dist/index.js.map +1 -1
- package/dist/init.js.map +1 -1
- package/dist/plugins/async-hooks-stub.js.map +1 -1
- package/dist/plugins/client-reference-dedup.d.ts +15 -2
- package/dist/plugins/client-reference-dedup.js +138 -16
- package/dist/plugins/client-reference-dedup.js.map +1 -1
- package/dist/plugins/fonts.d.ts +2 -2
- package/dist/plugins/fonts.js +15 -6
- package/dist/plugins/fonts.js.map +1 -1
- package/dist/plugins/instrumentation-client.js.map +1 -1
- package/dist/plugins/og-assets.js.map +1 -1
- package/dist/plugins/optimize-imports.js.map +1 -1
- package/dist/plugins/postcss.js.map +1 -1
- package/dist/plugins/rsc-client-reference-loaders.d.ts +7 -0
- package/dist/plugins/rsc-client-reference-loaders.js +48 -0
- package/dist/plugins/rsc-client-reference-loaders.js.map +1 -0
- package/dist/plugins/rsc-client-shim-excludes.js.map +1 -1
- package/dist/plugins/sass.d.ts +34 -0
- package/dist/plugins/sass.js +22 -0
- package/dist/plugins/sass.js.map +1 -0
- package/dist/plugins/server-externals-manifest.js.map +1 -1
- package/dist/plugins/strip-server-exports.js.map +1 -1
- package/dist/routing/app-route-graph.d.ts +78 -6
- package/dist/routing/app-route-graph.js +241 -25
- package/dist/routing/app-route-graph.js.map +1 -1
- package/dist/routing/app-router.js.map +1 -1
- package/dist/routing/file-matcher.js.map +1 -1
- package/dist/routing/pages-router.js.map +1 -1
- package/dist/routing/route-matching.js.map +1 -1
- package/dist/routing/route-pattern.d.ts +56 -1
- package/dist/routing/route-pattern.js +60 -1
- package/dist/routing/route-pattern.js.map +1 -1
- package/dist/routing/route-trie.js.map +1 -1
- package/dist/routing/route-validation.js.map +1 -1
- package/dist/routing/utils.js.map +1 -1
- package/dist/server/api-handler.js.map +1 -1
- package/dist/server/app-browser-action-result.d.ts +44 -0
- package/dist/server/app-browser-action-result.js +79 -0
- package/dist/server/app-browser-action-result.js.map +1 -0
- package/dist/server/app-browser-entry.js +330 -133
- package/dist/server/app-browser-entry.js.map +1 -1
- package/dist/server/app-browser-error.js.map +1 -1
- package/dist/server/app-browser-hydration.d.ts +31 -0
- package/dist/server/app-browser-hydration.js +30 -0
- package/dist/server/app-browser-hydration.js.map +1 -0
- package/dist/server/app-browser-navigation-controller.d.ts +20 -4
- package/dist/server/app-browser-navigation-controller.js +90 -23
- package/dist/server/app-browser-navigation-controller.js.map +1 -1
- package/dist/server/app-browser-popstate.d.ts +16 -0
- package/dist/server/app-browser-popstate.js +17 -0
- package/dist/server/app-browser-popstate.js.map +1 -0
- package/dist/server/app-browser-rsc-redirect.d.ts +28 -0
- package/dist/server/app-browser-rsc-redirect.js +37 -0
- package/dist/server/app-browser-rsc-redirect.js.map +1 -0
- package/dist/server/app-browser-state.d.ts +27 -23
- package/dist/server/app-browser-state.js +158 -54
- package/dist/server/app-browser-state.js.map +1 -1
- package/dist/server/app-browser-stream.d.ts +9 -4
- package/dist/server/app-browser-stream.js +29 -8
- package/dist/server/app-browser-stream.js.map +1 -1
- package/dist/server/app-browser-visible-commit.d.ts +11 -1
- package/dist/server/app-browser-visible-commit.js +69 -21
- package/dist/server/app-browser-visible-commit.js.map +1 -1
- package/dist/server/app-client-reference-preloader.js.map +1 -1
- package/dist/server/app-elements-wire.d.ts +43 -6
- package/dist/server/app-elements-wire.js +121 -5
- package/dist/server/app-elements-wire.js.map +1 -1
- package/dist/server/app-elements.d.ts +2 -2
- package/dist/server/app-elements.js +2 -2
- package/dist/server/app-elements.js.map +1 -1
- package/dist/server/app-fallback-renderer.d.ts +10 -1
- package/dist/server/app-fallback-renderer.js +37 -1
- package/dist/server/app-fallback-renderer.js.map +1 -1
- package/dist/server/app-history-state.d.ts +26 -0
- package/dist/server/app-history-state.js +53 -0
- package/dist/server/app-history-state.js.map +1 -0
- package/dist/server/app-hook-warning-suppression.js.map +1 -1
- package/dist/server/app-middleware.d.ts +1 -1
- package/dist/server/app-middleware.js +4 -9
- package/dist/server/app-middleware.js.map +1 -1
- package/dist/server/app-mounted-slots-header.js.map +1 -1
- package/dist/server/app-page-boundary-render.d.ts +11 -1
- package/dist/server/app-page-boundary-render.js +27 -19
- package/dist/server/app-page-boundary-render.js.map +1 -1
- package/dist/server/app-page-boundary.d.ts +1 -0
- package/dist/server/app-page-boundary.js +10 -7
- package/dist/server/app-page-boundary.js.map +1 -1
- package/dist/server/app-page-cache.d.ts +23 -3
- package/dist/server/app-page-cache.js +63 -27
- package/dist/server/app-page-cache.js.map +1 -1
- package/dist/server/app-page-dispatch.d.ts +11 -1
- package/dist/server/app-page-dispatch.js +85 -14
- package/dist/server/app-page-dispatch.js.map +1 -1
- package/dist/server/app-page-element-builder.d.ts +10 -1
- package/dist/server/app-page-element-builder.js +38 -6
- package/dist/server/app-page-element-builder.js.map +1 -1
- package/dist/server/app-page-execution.js +2 -3
- package/dist/server/app-page-execution.js.map +1 -1
- package/dist/server/app-page-head.d.ts +7 -0
- package/dist/server/app-page-head.js +6 -1
- package/dist/server/app-page-head.js.map +1 -1
- package/dist/server/app-page-method.js.map +1 -1
- package/dist/server/app-page-params.js.map +1 -1
- package/dist/server/app-page-probe.d.ts +23 -1
- package/dist/server/app-page-probe.js +29 -1
- package/dist/server/app-page-probe.js.map +1 -1
- package/dist/server/app-page-render-observation.d.ts +35 -0
- package/dist/server/app-page-render-observation.js +68 -0
- package/dist/server/app-page-render-observation.js.map +1 -0
- package/dist/server/app-page-render.d.ts +12 -2
- package/dist/server/app-page-render.js +90 -7
- package/dist/server/app-page-render.js.map +1 -1
- package/dist/server/app-page-request.d.ts +1 -0
- package/dist/server/app-page-request.js +2 -1
- package/dist/server/app-page-request.js.map +1 -1
- package/dist/server/app-page-response.d.ts +2 -0
- package/dist/server/app-page-response.js +18 -7
- package/dist/server/app-page-response.js.map +1 -1
- package/dist/server/app-page-route-wiring.d.ts +9 -3
- package/dist/server/app-page-route-wiring.js +91 -62
- package/dist/server/app-page-route-wiring.js.map +1 -1
- package/dist/server/app-page-segment-state.d.ts +10 -0
- package/dist/server/app-page-segment-state.js +87 -0
- package/dist/server/app-page-segment-state.js.map +1 -0
- package/dist/server/app-page-stream.d.ts +9 -2
- package/dist/server/app-page-stream.js +4 -1
- package/dist/server/app-page-stream.js.map +1 -1
- package/dist/server/app-post-middleware-context.js.map +1 -1
- package/dist/server/app-prerender-endpoints.js.map +1 -1
- package/dist/server/app-prerender-static-params.js.map +1 -1
- package/dist/server/app-render-dependency.js.map +1 -1
- package/dist/server/app-request-context.js.map +1 -1
- package/dist/server/app-route-handler-cache.js.map +1 -1
- package/dist/server/app-route-handler-dispatch.js +3 -1
- package/dist/server/app-route-handler-dispatch.js.map +1 -1
- package/dist/server/app-route-handler-execution.js.map +1 -1
- package/dist/server/app-route-handler-policy.js +1 -0
- package/dist/server/app-route-handler-policy.js.map +1 -1
- package/dist/server/app-route-handler-response.js +4 -3
- package/dist/server/app-route-handler-response.js.map +1 -1
- package/dist/server/app-route-handler-runtime.js.map +1 -1
- package/dist/server/app-router-entry.js +7 -15
- package/dist/server/app-router-entry.js.map +1 -1
- package/dist/server/app-rsc-cache-busting.d.ts +23 -2
- package/dist/server/app-rsc-cache-busting.js +75 -19
- package/dist/server/app-rsc-cache-busting.js.map +1 -1
- package/dist/server/app-rsc-embedded-chunks.d.ts +9 -0
- package/dist/server/app-rsc-embedded-chunks.js +34 -0
- package/dist/server/app-rsc-embedded-chunks.js.map +1 -0
- package/dist/server/app-rsc-error-handler.js.map +1 -1
- package/dist/server/app-rsc-errors.d.ts +4 -1
- package/dist/server/app-rsc-errors.js +1 -1
- package/dist/server/app-rsc-errors.js.map +1 -1
- package/dist/server/app-rsc-handler.d.ts +18 -1
- package/dist/server/app-rsc-handler.js +55 -16
- package/dist/server/app-rsc-handler.js.map +1 -1
- package/dist/server/app-rsc-render-mode.d.ts +11 -0
- package/dist/server/app-rsc-render-mode.js +21 -0
- package/dist/server/app-rsc-render-mode.js.map +1 -0
- package/dist/server/app-rsc-request-normalization.d.ts +4 -1
- package/dist/server/app-rsc-request-normalization.js +7 -2
- package/dist/server/app-rsc-request-normalization.js.map +1 -1
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
- package/dist/server/app-rsc-response-finalizer.js +6 -1
- package/dist/server/app-rsc-response-finalizer.js.map +1 -1
- package/dist/server/app-rsc-route-matching.d.ts +23 -0
- package/dist/server/app-rsc-route-matching.js +45 -23
- package/dist/server/app-rsc-route-matching.js.map +1 -1
- package/dist/server/app-segment-config.js.map +1 -1
- package/dist/server/app-server-action-execution.d.ts +51 -5
- package/dist/server/app-server-action-execution.js +161 -51
- package/dist/server/app-server-action-execution.js.map +1 -1
- package/dist/server/app-ssr-entry.d.ts +7 -0
- package/dist/server/app-ssr-entry.js +44 -14
- package/dist/server/app-ssr-entry.js.map +1 -1
- package/dist/server/app-ssr-error-meta.d.ts +14 -0
- package/dist/server/app-ssr-error-meta.js +50 -0
- package/dist/server/app-ssr-error-meta.js.map +1 -0
- package/dist/server/app-ssr-stream.d.ts +1 -1
- package/dist/server/app-ssr-stream.js +9 -12
- package/dist/server/app-ssr-stream.js.map +1 -1
- package/dist/server/app-static-generation.js.map +1 -1
- package/dist/server/artifact-compatibility.d.ts +12 -2
- package/dist/server/artifact-compatibility.js +12 -8
- package/dist/server/artifact-compatibility.js.map +1 -1
- package/dist/server/cache-control.js +1 -0
- package/dist/server/cache-control.js.map +1 -1
- package/dist/server/cache-proof.d.ts +124 -5
- package/dist/server/cache-proof.js +416 -18
- package/dist/server/cache-proof.js.map +1 -1
- package/dist/server/csp.js.map +1 -1
- package/dist/server/dev-error-overlay-store.js.map +1 -1
- package/dist/server/dev-error-overlay.js +5 -0
- package/dist/server/dev-error-overlay.js.map +1 -1
- package/dist/server/dev-lockfile.d.ts +110 -0
- package/dist/server/dev-lockfile.js +180 -0
- package/dist/server/dev-lockfile.js.map +1 -0
- package/dist/server/dev-module-runner.js.map +1 -1
- package/dist/server/dev-origin-check.js.map +1 -1
- package/dist/server/dev-route-files.js.map +1 -1
- package/dist/server/dev-server.js +23 -10
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/file-based-metadata.d.ts +13 -0
- package/dist/server/file-based-metadata.js +49 -2
- package/dist/server/file-based-metadata.js.map +1 -1
- package/dist/server/headers.d.ts +81 -0
- package/dist/server/headers.js +104 -0
- package/dist/server/headers.js.map +1 -0
- package/dist/server/html.js +1 -1
- package/dist/server/html.js.map +1 -1
- package/dist/server/http-error-responses.d.ts +10 -0
- package/dist/server/http-error-responses.js +11 -1
- package/dist/server/http-error-responses.js.map +1 -1
- package/dist/server/image-optimization.d.ts +11 -1
- package/dist/server/image-optimization.js.map +1 -1
- package/dist/server/implicit-tags.js +2 -1
- package/dist/server/implicit-tags.js.map +1 -1
- package/dist/server/instrumentation-runtime.js.map +1 -1
- package/dist/server/instrumentation.js.map +1 -1
- package/dist/server/isr-cache.d.ts +12 -2
- package/dist/server/isr-cache.js +16 -5
- package/dist/server/isr-cache.js.map +1 -1
- package/dist/server/metadata-route-build-data.js.map +1 -1
- package/dist/server/metadata-route-response.js +22 -5
- package/dist/server/metadata-route-response.js.map +1 -1
- package/dist/server/metadata-routes.js +27 -8
- package/dist/server/metadata-routes.js.map +1 -1
- package/dist/server/middleware-matcher.js.map +1 -1
- package/dist/server/middleware-request-headers.d.ts +4 -1
- package/dist/server/middleware-request-headers.js +15 -8
- package/dist/server/middleware-request-headers.js.map +1 -1
- package/dist/server/middleware-response-headers.d.ts +2 -1
- package/dist/server/middleware-response-headers.js +1 -1
- package/dist/server/middleware-response-headers.js.map +1 -1
- package/dist/server/middleware-runtime.d.ts +1 -0
- package/dist/server/middleware-runtime.js +7 -3
- package/dist/server/middleware-runtime.js.map +1 -1
- package/dist/server/middleware.d.ts +12 -0
- package/dist/server/middleware.js +12 -0
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/navigation-planner.d.ts +133 -0
- package/dist/server/navigation-planner.js +432 -0
- package/dist/server/navigation-planner.js.map +1 -0
- package/dist/server/navigation-trace.d.ts +19 -2
- package/dist/server/navigation-trace.js +20 -1
- package/dist/server/navigation-trace.js.map +1 -1
- package/dist/server/next-error-digest.d.ts +3 -2
- package/dist/server/next-error-digest.js +4 -2
- package/dist/server/next-error-digest.js.map +1 -1
- package/dist/server/normalize-path.d.ts +2 -1
- package/dist/server/normalize-path.js +4 -1
- package/dist/server/normalize-path.js.map +1 -1
- package/dist/server/pages-api-route.js +1 -0
- package/dist/server/pages-api-route.js.map +1 -1
- package/dist/server/pages-i18n.js.map +1 -1
- package/dist/server/pages-media-type.js.map +1 -1
- package/dist/server/pages-node-compat.js.map +1 -1
- package/dist/server/pages-page-data.d.ts +3 -2
- package/dist/server/pages-page-data.js +27 -5
- package/dist/server/pages-page-data.js.map +1 -1
- package/dist/server/pages-page-response.js +2 -1
- package/dist/server/pages-page-response.js.map +1 -1
- package/dist/server/prerender-work-unit-setup.js +1 -1
- package/dist/server/prerender-work-unit-setup.js.map +1 -1
- package/dist/server/prod-server.d.ts +28 -1
- package/dist/server/prod-server.js +97 -22
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/request-log.js.map +1 -1
- package/dist/server/request-pipeline.d.ts +1 -13
- package/dist/server/request-pipeline.js +3 -25
- package/dist/server/request-pipeline.js.map +1 -1
- package/dist/server/rsc-stream-hints.js.map +1 -1
- package/dist/server/seed-cache.js.map +1 -1
- package/dist/server/server-action-not-found.d.ts +16 -3
- package/dist/server/server-action-not-found.js +22 -4
- package/dist/server/server-action-not-found.js.map +1 -1
- package/dist/server/server-globals.d.ts +5 -0
- package/dist/server/server-globals.js +37 -0
- package/dist/server/server-globals.js.map +1 -0
- package/dist/server/socket-error-backstop.js.map +1 -1
- package/dist/server/static-file-cache.js +1 -1
- package/dist/server/static-file-cache.js.map +1 -1
- package/dist/server/worker-utils.d.ts +0 -7
- package/dist/server/worker-utils.js +3 -2
- package/dist/server/worker-utils.js.map +1 -1
- package/dist/shims/amp.js.map +1 -1
- package/dist/shims/app.d.ts +37 -4
- package/dist/shims/app.js +50 -1
- package/dist/shims/app.js.map +1 -0
- package/dist/shims/cache-for-request.js.map +1 -1
- package/dist/shims/cache-runtime.d.ts +19 -2
- package/dist/shims/cache-runtime.js +87 -19
- package/dist/shims/cache-runtime.js.map +1 -1
- package/dist/shims/cache.d.ts +20 -21
- package/dist/shims/cache.js +101 -15
- package/dist/shims/cache.js.map +1 -1
- package/dist/shims/client-hook-error.js.map +1 -1
- package/dist/shims/compat-router.js.map +1 -1
- package/dist/shims/config.js.map +1 -1
- package/dist/shims/constants.js.map +1 -1
- package/dist/shims/document.js.map +1 -1
- package/dist/shims/dynamic.d.ts +18 -10
- package/dist/shims/dynamic.js +107 -51
- package/dist/shims/dynamic.js.map +1 -1
- package/dist/shims/error-boundary.d.ts +35 -6
- package/dist/shims/error-boundary.js +116 -33
- package/dist/shims/error-boundary.js.map +1 -1
- package/dist/shims/error.d.ts +18 -1
- package/dist/shims/error.js +56 -1
- package/dist/shims/error.js.map +1 -1
- package/dist/shims/fetch-cache.d.ts +25 -1
- package/dist/shims/fetch-cache.js +159 -13
- package/dist/shims/fetch-cache.js.map +1 -1
- package/dist/shims/font-google-base.d.ts +22 -8
- package/dist/shims/font-google-base.js +41 -71
- package/dist/shims/font-google-base.js.map +1 -1
- package/dist/shims/font-local.d.ts +3 -20
- package/dist/shims/font-local.js +23 -75
- package/dist/shims/font-local.js.map +1 -1
- package/dist/shims/font-utils.d.ts +51 -0
- package/dist/shims/font-utils.js +97 -0
- package/dist/shims/font-utils.js.map +1 -0
- package/dist/shims/form.js +3 -1
- package/dist/shims/form.js.map +1 -1
- package/dist/shims/hash-scroll.d.ts +7 -0
- package/dist/shims/hash-scroll.js +30 -0
- package/dist/shims/hash-scroll.js.map +1 -0
- package/dist/shims/head-state.js.map +1 -1
- package/dist/shims/head.d.ts +3 -1
- package/dist/shims/head.js +28 -16
- package/dist/shims/head.js.map +1 -1
- package/dist/shims/headers.d.ts +11 -12
- package/dist/shims/headers.js +45 -8
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/i18n-context.js.map +1 -1
- package/dist/shims/i18n-state.js.map +1 -1
- package/dist/shims/image-config.d.ts +14 -1
- package/dist/shims/image-config.js +24 -1
- package/dist/shims/image-config.js.map +1 -1
- package/dist/shims/image.d.ts +1 -0
- package/dist/shims/image.js +159 -80
- package/dist/shims/image.js.map +1 -1
- package/dist/shims/internal/als-registry.js.map +1 -1
- package/dist/shims/internal/app-router-context.d.ts +7 -6
- package/dist/shims/internal/app-router-context.js +17 -6
- package/dist/shims/internal/app-router-context.js.map +1 -1
- package/dist/shims/internal/cookie-serialize.js.map +1 -1
- package/dist/shims/internal/make-hanging-promise.d.ts +1 -1
- package/dist/shims/internal/make-hanging-promise.js +1 -1
- package/dist/shims/internal/make-hanging-promise.js.map +1 -1
- package/dist/shims/internal/parse-cookie-header.js.map +1 -1
- package/dist/shims/internal/utils.js.map +1 -1
- package/dist/shims/internal/work-unit-async-storage.js +2 -2
- package/dist/shims/internal/work-unit-async-storage.js.map +1 -1
- package/dist/shims/layout-segment-context.js.map +1 -1
- package/dist/shims/legacy-image.js.map +1 -1
- package/dist/shims/link-prefetch.d.ts +42 -0
- package/dist/shims/link-prefetch.js +45 -0
- package/dist/shims/link-prefetch.js.map +1 -0
- package/dist/shims/link.d.ts +37 -4
- package/dist/shims/link.js +156 -46
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/metadata.d.ts +16 -30
- package/dist/shims/metadata.js +87 -28
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation-state.js.map +1 -1
- package/dist/shims/navigation.d.ts +172 -10
- package/dist/shims/navigation.js +335 -70
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/navigation.react-server.d.ts +3 -2
- package/dist/shims/navigation.react-server.js +5 -2
- package/dist/shims/navigation.react-server.js.map +1 -1
- package/dist/shims/offline.js.map +1 -1
- package/dist/shims/pages-router-runtime.d.ts +7 -0
- package/dist/shims/pages-router-runtime.js +16 -0
- package/dist/shims/pages-router-runtime.js.map +1 -0
- package/dist/shims/readonly-url-search-params.js.map +1 -1
- package/dist/shims/request-context.js.map +1 -1
- package/dist/shims/root-params.js.map +1 -1
- package/dist/shims/router-state.js.map +1 -1
- package/dist/shims/router.d.ts +69 -7
- package/dist/shims/router.js +232 -249
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/script-nonce-context.js.map +1 -1
- package/dist/shims/script.js +110 -32
- package/dist/shims/script.js.map +1 -1
- package/dist/shims/server.js +12 -15
- package/dist/shims/server.js.map +1 -1
- package/dist/shims/slot.d.ts +7 -1
- package/dist/shims/slot.js +60 -7
- package/dist/shims/slot.js.map +1 -1
- package/dist/shims/thenable-params.js.map +1 -1
- package/dist/shims/unified-request-context.js +5 -0
- package/dist/shims/unified-request-context.js.map +1 -1
- package/dist/shims/unrecognized-action-error.d.ts +35 -0
- package/dist/shims/unrecognized-action-error.js +41 -0
- package/dist/shims/unrecognized-action-error.js.map +1 -0
- package/dist/shims/url-safety.js.map +1 -1
- package/dist/shims/url-utils.d.ts +22 -1
- package/dist/shims/url-utils.js +76 -3
- package/dist/shims/url-utils.js.map +1 -1
- package/dist/shims/use-merged-ref.js.map +1 -1
- package/dist/shims/web-vitals.d.ts +4 -21
- package/dist/shims/web-vitals.js +19 -6
- package/dist/shims/web-vitals.js.map +1 -1
- package/dist/utils/asset-prefix.d.ts +69 -0
- package/dist/utils/asset-prefix.js +91 -0
- package/dist/utils/asset-prefix.js.map +1 -0
- package/dist/utils/base-path.d.ts +7 -1
- package/dist/utils/base-path.js +10 -1
- package/dist/utils/base-path.js.map +1 -1
- package/dist/utils/cache-control-metadata.js.map +1 -1
- package/dist/utils/domain-locale.js.map +1 -1
- package/dist/utils/encode-cache-tag.d.ts +31 -0
- package/dist/utils/encode-cache-tag.js +38 -0
- package/dist/utils/encode-cache-tag.js.map +1 -0
- package/dist/utils/error-cause.js.map +1 -1
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/lazy-chunks.js.map +1 -1
- package/dist/utils/manifest-paths.js.map +1 -1
- package/dist/utils/mdx-scan.js.map +1 -1
- package/dist/utils/navigation-signal.d.ts +5 -0
- package/dist/utils/navigation-signal.js +14 -0
- package/dist/utils/navigation-signal.js.map +1 -0
- package/dist/utils/project.js.map +1 -1
- package/dist/utils/public-routes.js.map +1 -1
- package/dist/utils/query.js.map +1 -1
- package/dist/utils/safe-json-file.js.map +1 -1
- package/dist/utils/sorted-array.d.ts +9 -0
- package/dist/utils/sorted-array.js +22 -0
- package/dist/utils/sorted-array.js.map +1 -0
- package/dist/utils/text-stream.js.map +1 -1
- package/dist/utils/vinext-root.js.map +1 -1
- package/package.json +8 -6
|
@@ -1,21 +1,31 @@
|
|
|
1
1
|
import { stripBasePath } from "../utils/base-path.js";
|
|
2
|
+
import { ACTION_REDIRECT_HEADER, VINEXT_MOUNTED_SLOTS_HEADER, VINEXT_PARAMS_HEADER } from "./headers.js";
|
|
2
3
|
import { DANGEROUS_URL_BLOCK_MESSAGE, isDangerousScheme } from "../shims/url-safety.js";
|
|
4
|
+
import { APP_RSC_RENDER_MODE_REFRESH_PRESERVE_UI } from "./app-rsc-render-mode.js";
|
|
5
|
+
import { installWindowNext } from "../client/window-next.js";
|
|
6
|
+
import { scrollToHashTargetOnNextFrame } from "../shims/hash-scroll.js";
|
|
3
7
|
import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
|
|
4
8
|
import { AppElementsWire } from "./app-elements-wire.js";
|
|
5
9
|
import { getMountedSlotIdsHeader, resolveVisitedResponseInterceptionContext } from "./app-elements.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
10
|
+
import { createHistoryStateWithNavigationMetadata, createHistoryStateWithPreviousNextUrl, readHistoryStatePreviousNextUrl, readHistoryStateTraversalIndex, resolveHistoryTraversalIntent } from "./app-history-state.js";
|
|
11
|
+
import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, createRscRequestHeaders, createRscRequestUrl, getVinextRscCompatibilityId, resolveHardNavigationTargetFromRscResponse, resolveRscCompatibilityNavigationDecision } from "./app-rsc-cache-busting.js";
|
|
12
|
+
import { AppRouterContext } from "../shims/internal/app-router-context.js";
|
|
13
|
+
import { __basePath, appRouterInstance, commitClientNavigationState, consumePrefetchResponse, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, getClientNavigationRenderContext, getCurrentInterceptionContext, getCurrentNextUrl, invalidatePrefetchCache, pushHistoryStateWithoutNotify, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, restoreRscResponse, setClientParams, setMountedSlotsHeader, setNavigationContext, setPendingPathname } from "../shims/navigation.js";
|
|
14
|
+
import { DevRecoveryBoundary, RedirectBoundary } from "../shims/error-boundary.js";
|
|
9
15
|
import { ElementsContext, Slot } from "../shims/slot.js";
|
|
10
16
|
import "../client/instrumentation-client.js";
|
|
17
|
+
import { createDiscardedServerActionRefreshScheduler, createServerActionInitiationSnapshot, isServerActionResult, parseServerActionRevalidationHeader, shouldClearClientNavigationCachesForServerActionResult } from "./app-browser-action-result.js";
|
|
11
18
|
import { chunksToReadableStream, createProgressiveRscStream, getVinextBrowserGlobal } from "./app-browser-stream.js";
|
|
12
|
-
import {
|
|
13
|
-
import { createAppBrowserNavigationController } from "./app-browser-navigation-controller.js";
|
|
19
|
+
import { resolveInterceptionContextFromPreviousNextUrl, resolveServerActionRequestState } from "./app-browser-state.js";
|
|
20
|
+
import { clearHardNavigationLoopGuard, createAppBrowserNavigationController } from "./app-browser-navigation-controller.js";
|
|
21
|
+
import { consumeInitialFormState, createVinextHydrateRootOptions, hydrateRootInTransition } from "./app-browser-hydration.js";
|
|
22
|
+
import { createPopstateRestoreHandler } from "./app-browser-popstate.js";
|
|
14
23
|
import { createOnUncaughtError } from "./app-browser-error.js";
|
|
15
24
|
import { dismissOverlay } from "./dev-error-overlay-store.js";
|
|
16
25
|
import { devOnCaughtError, devOnUncaughtError, installDevErrorOverlay } from "./dev-error-overlay.js";
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
26
|
+
import { throwOnServerActionNotFound } from "./server-action-not-found.js";
|
|
27
|
+
import { resolveRscRedirectLifecycleHop } from "./app-browser-rsc-redirect.js";
|
|
28
|
+
import { createElement, startTransition, use, useLayoutEffect, useRef, useState } from "react";
|
|
19
29
|
import { createFromFetch, createFromReadableStream, createTemporaryReferenceSet, encodeReply, setServerCallback } from "@vitejs/plugin-rsc/browser";
|
|
20
30
|
import { hydrateRoot } from "react-dom/client";
|
|
21
31
|
//#region src/server/app-browser-entry.ts
|
|
@@ -33,7 +43,20 @@ function toOperationLane(kind) {
|
|
|
33
43
|
const MAX_VISITED_RESPONSE_CACHE_SIZE = 50;
|
|
34
44
|
const VISITED_RESPONSE_CACHE_TTL = 5 * 6e4;
|
|
35
45
|
const MAX_TRAVERSAL_CACHE_TTL = 30 * 6e4;
|
|
36
|
-
const
|
|
46
|
+
const CLIENT_RSC_COMPATIBILITY_ID = getVinextRscCompatibilityId();
|
|
47
|
+
function getBrowserRouteManifest() {
|
|
48
|
+
return window.__VINEXT_ROUTE_MANIFEST__ ?? null;
|
|
49
|
+
}
|
|
50
|
+
const browserNavigationController = createAppBrowserNavigationController({
|
|
51
|
+
getRouteManifest: getBrowserRouteManifest,
|
|
52
|
+
syncHistoryStatePreviousNextUrl: syncCurrentHistoryStatePreviousNextUrl
|
|
53
|
+
});
|
|
54
|
+
const discardedServerActionRefreshScheduler = createDiscardedServerActionRefreshScheduler({ runRefresh() {
|
|
55
|
+
clearClientNavigationCaches();
|
|
56
|
+
const rscNavigate = window.__VINEXT_RSC_NAVIGATE__;
|
|
57
|
+
if (typeof rscNavigate !== "function") return;
|
|
58
|
+
rscNavigate(window.location.href, 0, "refresh", void 0, void 0, true);
|
|
59
|
+
} });
|
|
37
60
|
const NavigationCommitSignal = browserNavigationController.NavigationCommitSignal;
|
|
38
61
|
function parseEncodedJsonHeader(value) {
|
|
39
62
|
if (!value) return null;
|
|
@@ -50,8 +73,46 @@ let latestClientParams = {};
|
|
|
50
73
|
const visitedResponseCache = /* @__PURE__ */ new Map();
|
|
51
74
|
let browserRouterStateHasEverCommitted = false;
|
|
52
75
|
let pendingNavigationRecoveryHref = null;
|
|
53
|
-
|
|
54
|
-
|
|
76
|
+
let currentHistoryTraversalIndex = readHistoryStateTraversalIndex(window.history.state) ?? 0;
|
|
77
|
+
let nextHistoryTraversalIndex = currentHistoryTraversalIndex;
|
|
78
|
+
function allocateNavigationHistoryTraversalIndex(historyUpdateMode) {
|
|
79
|
+
switch (historyUpdateMode) {
|
|
80
|
+
case "push": return nextHistoryTraversalIndex + 1;
|
|
81
|
+
case "replace": return currentHistoryTraversalIndex;
|
|
82
|
+
case void 0: return null;
|
|
83
|
+
default: throw new Error("[vinext] Unknown history update mode: " + String(historyUpdateMode));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function commitHistoryTraversalIndex(index) {
|
|
87
|
+
currentHistoryTraversalIndex = index;
|
|
88
|
+
if (index !== null) nextHistoryTraversalIndex = Math.max(nextHistoryTraversalIndex, index);
|
|
89
|
+
}
|
|
90
|
+
function commitHashOnlyNavigation(href, historyUpdateMode, scroll) {
|
|
91
|
+
const navigationHistoryIndex = allocateNavigationHistoryTraversalIndex(historyUpdateMode);
|
|
92
|
+
const previousNextUrl = hasBrowserRouterState() ? getBrowserRouterState().previousNextUrl : readHistoryStatePreviousNextUrl(window.history.state);
|
|
93
|
+
const historyState = createHistoryStateWithNavigationMetadata(createHashOnlyNavigationBaseHistoryState(historyUpdateMode, scroll), {
|
|
94
|
+
previousNextUrl,
|
|
95
|
+
traversalIndex: navigationHistoryIndex
|
|
96
|
+
});
|
|
97
|
+
if (historyUpdateMode === "replace") replaceHistoryStateWithoutNotify(historyState, "", href);
|
|
98
|
+
else pushHistoryStateWithoutNotify(historyState, "", href);
|
|
99
|
+
commitHistoryTraversalIndex(navigationHistoryIndex);
|
|
100
|
+
}
|
|
101
|
+
function createHashOnlyNavigationBaseHistoryState(historyUpdateMode, scroll) {
|
|
102
|
+
if (historyUpdateMode !== "replace") return null;
|
|
103
|
+
return scroll ? stripVinextScrollState(window.history.state) : window.history.state;
|
|
104
|
+
}
|
|
105
|
+
function stripVinextScrollState(state) {
|
|
106
|
+
if (!state || typeof state !== "object") return state;
|
|
107
|
+
const nextState = {};
|
|
108
|
+
for (const [key, value] of Object.entries(state)) {
|
|
109
|
+
if (key === "__vinext_scrollX" || key === "__vinext_scrollY") continue;
|
|
110
|
+
nextState[key] = value;
|
|
111
|
+
}
|
|
112
|
+
return Object.keys(nextState).length > 0 ? nextState : null;
|
|
113
|
+
}
|
|
114
|
+
function commitTraversalIndexFromHistoryState(historyState) {
|
|
115
|
+
commitHistoryTraversalIndex(readHistoryStateTraversalIndex(historyState));
|
|
55
116
|
}
|
|
56
117
|
function getBrowserRouterState() {
|
|
57
118
|
return browserNavigationController.getBrowserRouterState();
|
|
@@ -77,30 +138,63 @@ function clearVisitedResponseCache() {
|
|
|
77
138
|
visitedResponseCache.clear();
|
|
78
139
|
}
|
|
79
140
|
function clearPrefetchState() {
|
|
80
|
-
|
|
81
|
-
getPrefetchedUrls().clear();
|
|
141
|
+
invalidatePrefetchCache();
|
|
82
142
|
}
|
|
83
143
|
function clearClientNavigationCaches() {
|
|
84
144
|
clearVisitedResponseCache();
|
|
85
145
|
clearPrefetchState();
|
|
86
146
|
}
|
|
147
|
+
function syncCurrentHistoryStatePreviousNextUrl(previousNextUrl) {
|
|
148
|
+
if (readHistoryStatePreviousNextUrl(window.history.state) === previousNextUrl) return;
|
|
149
|
+
const nextHistoryState = createHistoryStateWithPreviousNextUrl(window.history.state, previousNextUrl);
|
|
150
|
+
replaceHistoryStateWithoutNotify(nextHistoryState, "", window.location.href);
|
|
151
|
+
if (readHistoryStatePreviousNextUrl(window.history.state) === previousNextUrl) return;
|
|
152
|
+
window.history.replaceState(nextHistoryState, "", window.location.href);
|
|
153
|
+
}
|
|
154
|
+
function createActionInitiationSnapshot() {
|
|
155
|
+
const routerState = getBrowserRouterState();
|
|
156
|
+
return createServerActionInitiationSnapshot({
|
|
157
|
+
href: window.location.href,
|
|
158
|
+
navigationId: browserNavigationController.getActiveNavigationId(),
|
|
159
|
+
routerState
|
|
160
|
+
});
|
|
161
|
+
}
|
|
87
162
|
function createNavigationCommitEffect(options) {
|
|
88
|
-
const { href, historyUpdateMode, navId, params, previousNextUrl } = options;
|
|
163
|
+
const { href, historyUpdateMode, navId, params, previousNextUrl, targetHistoryIndex } = options;
|
|
89
164
|
return () => {
|
|
90
165
|
if (!browserNavigationController.isCurrentNavigation(navId)) {
|
|
91
166
|
commitClientNavigationState(void 0, { releaseSnapshot: true });
|
|
92
167
|
return;
|
|
93
168
|
}
|
|
94
169
|
const targetHref = new URL(href, window.location.origin).href;
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
170
|
+
const preserveExistingState = historyUpdateMode === "replace";
|
|
171
|
+
const navigationHistoryIndex = targetHistoryIndex !== void 0 ? targetHistoryIndex : allocateNavigationHistoryTraversalIndex(historyUpdateMode);
|
|
172
|
+
const historyState = createHistoryStateWithNavigationMetadata(preserveExistingState ? window.history.state : null, {
|
|
173
|
+
previousNextUrl,
|
|
174
|
+
traversalIndex: navigationHistoryIndex
|
|
175
|
+
});
|
|
176
|
+
let wroteHistoryState = false;
|
|
177
|
+
if (historyUpdateMode === "replace" && window.location.href !== targetHref) {
|
|
178
|
+
stageClientParams(params);
|
|
179
|
+
replaceHistoryStateWithoutNotify(historyState, "", href);
|
|
180
|
+
wroteHistoryState = true;
|
|
181
|
+
commitHistoryTraversalIndex(navigationHistoryIndex);
|
|
182
|
+
} else if (historyUpdateMode === "push" && window.location.href !== targetHref) {
|
|
183
|
+
stageClientParams(params);
|
|
184
|
+
pushHistoryStateWithoutNotify(historyState, "", href);
|
|
185
|
+
wroteHistoryState = true;
|
|
186
|
+
commitHistoryTraversalIndex(navigationHistoryIndex);
|
|
187
|
+
}
|
|
188
|
+
if (!wroteHistoryState) {
|
|
189
|
+
syncCurrentHistoryStatePreviousNextUrl(previousNextUrl);
|
|
190
|
+
stageClientParams(params);
|
|
191
|
+
if (targetHistoryIndex !== void 0) commitHistoryTraversalIndex(targetHistoryIndex);
|
|
192
|
+
}
|
|
99
193
|
pendingNavigationRecoveryHref = null;
|
|
100
194
|
commitClientNavigationState(navId);
|
|
101
195
|
};
|
|
102
196
|
}
|
|
103
|
-
async function renderNavigationPayload(payload, navigationSnapshot, targetHref, navId, historyUpdateMode, params, previousNextUrl, pendingRouterState,
|
|
197
|
+
async function renderNavigationPayload(payload, navigationSnapshot, targetHref, navId, historyUpdateMode, params, previousNextUrl, pendingRouterState, actionType = "navigate", operationLane = "navigation", traversalIntent = null) {
|
|
104
198
|
try {
|
|
105
199
|
return await browserNavigationController.renderNavigationPayload({
|
|
106
200
|
actionType,
|
|
@@ -115,18 +209,25 @@ async function renderNavigationPayload(payload, navigationSnapshot, targetHref,
|
|
|
115
209
|
params,
|
|
116
210
|
pendingRouterState,
|
|
117
211
|
previousNextUrl,
|
|
212
|
+
targetHistoryIndex: traversalIntent === null ? void 0 : traversalIntent.targetHistoryIndex,
|
|
118
213
|
targetHref,
|
|
119
|
-
navId
|
|
120
|
-
useTransition
|
|
214
|
+
navId
|
|
121
215
|
});
|
|
122
216
|
} catch (error) {
|
|
123
217
|
pendingNavigationRecoveryHref = null;
|
|
124
218
|
throw error;
|
|
125
219
|
}
|
|
126
220
|
}
|
|
127
|
-
async function commitSameUrlNavigatePayload(nextElements, returnValue,
|
|
128
|
-
const navigationSnapshot = createClientNavigationRenderSnapshot(
|
|
129
|
-
return browserNavigationController.commitSameUrlNavigatePayload(nextElements, navigationSnapshot, returnValue,
|
|
221
|
+
async function commitSameUrlNavigatePayload(nextElements, actionInitiation, returnValue, revalidation = "none") {
|
|
222
|
+
const navigationSnapshot = createClientNavigationRenderSnapshot(actionInitiation.href, actionInitiation.routerState.navigationSnapshot.params);
|
|
223
|
+
return browserNavigationController.commitSameUrlNavigatePayload(nextElements, navigationSnapshot, returnValue, actionInitiation.routerState, {
|
|
224
|
+
onDiscardedRevalidation() {
|
|
225
|
+
discardedServerActionRefreshScheduler.schedule();
|
|
226
|
+
},
|
|
227
|
+
revalidation,
|
|
228
|
+
startedNavigationId: actionInitiation.navigationId,
|
|
229
|
+
targetHref: actionInitiation.href
|
|
230
|
+
});
|
|
130
231
|
}
|
|
131
232
|
function evictVisitedResponseCacheIfNeeded() {
|
|
132
233
|
while (visitedResponseCache.size >= MAX_VISITED_RESPONSE_CACHE_SIZE) {
|
|
@@ -173,18 +274,25 @@ function storeVisitedResponseSnapshot(rscUrl, interceptionContext, snapshot, par
|
|
|
173
274
|
response: snapshot
|
|
174
275
|
});
|
|
175
276
|
}
|
|
176
|
-
function getRequestState(navigationKind, previousNextUrlOverride) {
|
|
277
|
+
function getRequestState(navigationKind, previousNextUrlOverride, traverseHistoryState) {
|
|
177
278
|
if (previousNextUrlOverride !== void 0) return {
|
|
178
279
|
interceptionContext: resolveInterceptionContextFromPreviousNextUrl(previousNextUrlOverride, __basePath),
|
|
179
280
|
previousNextUrl: previousNextUrlOverride
|
|
180
281
|
};
|
|
181
282
|
switch (navigationKind) {
|
|
182
|
-
case "navigate":
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
283
|
+
case "navigate": {
|
|
284
|
+
const currentPreviousNextUrl = getBrowserRouterState().previousNextUrl;
|
|
285
|
+
if (currentPreviousNextUrl !== null) return {
|
|
286
|
+
interceptionContext: resolveInterceptionContextFromPreviousNextUrl(currentPreviousNextUrl, __basePath),
|
|
287
|
+
previousNextUrl: currentPreviousNextUrl
|
|
288
|
+
};
|
|
289
|
+
return {
|
|
290
|
+
interceptionContext: getCurrentInterceptionContext(),
|
|
291
|
+
previousNextUrl: getCurrentNextUrl()
|
|
292
|
+
};
|
|
293
|
+
}
|
|
186
294
|
case "traverse": {
|
|
187
|
-
const previousNextUrl = readHistoryStatePreviousNextUrl(window.history.state);
|
|
295
|
+
const previousNextUrl = readHistoryStatePreviousNextUrl(traverseHistoryState ?? window.history.state);
|
|
188
296
|
return {
|
|
189
297
|
interceptionContext: resolveInterceptionContextFromPreviousNextUrl(previousNextUrl, __basePath),
|
|
190
298
|
previousNextUrl
|
|
@@ -212,13 +320,16 @@ function BrowserRoot({ initialElements, initialNavigationSnapshot }) {
|
|
|
212
320
|
const [treeStateValue, setTreeStateValue] = useState({
|
|
213
321
|
activeOperation: null,
|
|
214
322
|
elements: resolvedElements,
|
|
323
|
+
interception: initialMetadata.interception,
|
|
215
324
|
interceptionContext: initialMetadata.interceptionContext,
|
|
325
|
+
layoutIds: initialMetadata.layoutIds,
|
|
216
326
|
layoutFlags: initialMetadata.layoutFlags,
|
|
217
327
|
navigationSnapshot: initialNavigationSnapshot,
|
|
218
328
|
previousNextUrl: null,
|
|
219
329
|
renderId: 0,
|
|
220
330
|
rootLayoutTreePath: initialMetadata.rootLayoutTreePath,
|
|
221
331
|
routeId: initialMetadata.routeId,
|
|
332
|
+
slotBindings: initialMetadata.slotBindings,
|
|
222
333
|
visibleCommitVersion: 0
|
|
223
334
|
});
|
|
224
335
|
const treeState = isRouterStatePromise(treeStateValue) ? use(treeStateValue) : treeStateValue;
|
|
@@ -227,6 +338,7 @@ function BrowserRoot({ initialElements, initialNavigationSnapshot }) {
|
|
|
227
338
|
useLayoutEffect(() => {
|
|
228
339
|
const detach = browserNavigationController.attachBrowserRouterState(setTreeStateValue, stateRef);
|
|
229
340
|
browserRouterStateHasEverCommitted = true;
|
|
341
|
+
window.__VINEXT_HYDRATED_AT = performance.now();
|
|
230
342
|
return () => {
|
|
231
343
|
detach();
|
|
232
344
|
setMountedSlotsHeader(null);
|
|
@@ -234,12 +346,17 @@ function BrowserRoot({ initialElements, initialNavigationSnapshot }) {
|
|
|
234
346
|
}, [setTreeStateValue]);
|
|
235
347
|
useLayoutEffect(() => {
|
|
236
348
|
setMountedSlotsHeader(getMountedSlotIdsHeader(stateRef.current.elements));
|
|
349
|
+
window.__VINEXT_PING_VISIBLE_LINKS__?.();
|
|
237
350
|
}, [treeState.elements]);
|
|
238
351
|
useLayoutEffect(() => {
|
|
239
352
|
if (treeState.renderId !== 0) return;
|
|
240
|
-
replaceHistoryStateWithoutNotify(
|
|
353
|
+
replaceHistoryStateWithoutNotify(createHistoryStateWithNavigationMetadata(window.history.state, {
|
|
354
|
+
previousNextUrl: treeState.previousNextUrl,
|
|
355
|
+
traversalIndex: currentHistoryTraversalIndex
|
|
356
|
+
}), "", window.location.href);
|
|
241
357
|
}, [treeState.previousNextUrl, treeState.renderId]);
|
|
242
|
-
const
|
|
358
|
+
const routeTree = createElement(RedirectBoundary, null, createElement(NavigationCommitSignal, { renderId: treeState.renderId }, createElement(ElementsContext.Provider, { value: treeState.elements }, createElement(Slot, { id: treeState.routeId }))));
|
|
359
|
+
const innerTree = AppRouterContext ? createElement(AppRouterContext.Provider, { value: appRouterInstance }, routeTree) : routeTree;
|
|
243
360
|
const committedTree = import.meta.env.DEV ? createElement(DevRecoveryBoundary, {
|
|
244
361
|
resetKey: treeState.renderId,
|
|
245
362
|
onCatch: handleDevRecoveryBoundaryCatch
|
|
@@ -255,31 +372,9 @@ function restoreHydrationNavigationContext(pathname, searchParams, params) {
|
|
|
255
372
|
params
|
|
256
373
|
});
|
|
257
374
|
}
|
|
258
|
-
function decodeHashFragment(fragment) {
|
|
259
|
-
try {
|
|
260
|
-
return decodeURIComponent(fragment);
|
|
261
|
-
} catch {
|
|
262
|
-
return fragment;
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
function scrollToHashTarget(hash) {
|
|
266
|
-
const fragment = decodeHashFragment(hash.startsWith("#") ? hash.slice(1) : hash);
|
|
267
|
-
requestAnimationFrame(() => {
|
|
268
|
-
if (fragment === "" || fragment === "top") {
|
|
269
|
-
window.scrollTo(0, 0);
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
const idElement = document.getElementById(fragment);
|
|
273
|
-
if (idElement) {
|
|
274
|
-
idElement.scrollIntoView({ behavior: "auto" });
|
|
275
|
-
return;
|
|
276
|
-
}
|
|
277
|
-
document.getElementsByName(fragment)[0]?.scrollIntoView({ behavior: "auto" });
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
375
|
function restorePopstateScrollPosition(state) {
|
|
281
376
|
if (!(state && typeof state === "object" && "__vinext_scrollY" in state)) {
|
|
282
|
-
if (window.location.hash)
|
|
377
|
+
if (window.location.hash) scrollToHashTargetOnNextFrame(window.location.hash);
|
|
283
378
|
return;
|
|
284
379
|
}
|
|
285
380
|
const y = Number(state.__vinext_scrollY);
|
|
@@ -288,6 +383,15 @@ function restorePopstateScrollPosition(state) {
|
|
|
288
383
|
window.scrollTo(x, y);
|
|
289
384
|
});
|
|
290
385
|
}
|
|
386
|
+
function isSameAppRoutePopstateTarget(href) {
|
|
387
|
+
if (!hasBrowserRouterState()) return false;
|
|
388
|
+
const target = new URL(href, window.location.origin);
|
|
389
|
+
const routerState = getBrowserRouterState();
|
|
390
|
+
const targetPathname = stripBasePath(target.pathname, __basePath);
|
|
391
|
+
const targetSearch = new URLSearchParams(target.search).toString();
|
|
392
|
+
const currentSearch = routerState.navigationSnapshot.searchParams.toString();
|
|
393
|
+
return targetPathname === routerState.navigationSnapshot.pathname && targetSearch === currentSearch;
|
|
394
|
+
}
|
|
291
395
|
let isPageUnloading = false;
|
|
292
396
|
const RSC_RELOAD_KEY = "__vinext_rsc_initial_reload__";
|
|
293
397
|
function readReloadFlag() {
|
|
@@ -327,6 +431,7 @@ async function readInitialRscStream() {
|
|
|
327
431
|
const vinext = getVinextBrowserGlobal();
|
|
328
432
|
if (vinext.__VINEXT_RSC__ || vinext.__VINEXT_RSC_CHUNKS__ || vinext.__VINEXT_RSC_DONE__) {
|
|
329
433
|
clearReloadFlag();
|
|
434
|
+
clearHardNavigationLoopGuard();
|
|
330
435
|
if (vinext.__VINEXT_RSC__) {
|
|
331
436
|
const embedData = vinext.__VINEXT_RSC__;
|
|
332
437
|
delete vinext.__VINEXT_RSC__;
|
|
@@ -350,7 +455,8 @@ async function readInitialRscStream() {
|
|
|
350
455
|
if (!contentType.startsWith("text/x-component")) return recoverFromBadInitialRscResponse(`returned non-RSC content-type "${contentType || "(missing)"}"`);
|
|
351
456
|
if (!rscResponse.body) return recoverFromBadInitialRscResponse("returned empty body");
|
|
352
457
|
clearReloadFlag();
|
|
353
|
-
|
|
458
|
+
clearHardNavigationLoopGuard();
|
|
459
|
+
const parsedParams = parseEncodedJsonHeader(rscResponse.headers.get(VINEXT_PARAMS_HEADER));
|
|
354
460
|
const params = parsedParams ?? {};
|
|
355
461
|
if (parsedParams) try {
|
|
356
462
|
applyClientParams(parsedParams);
|
|
@@ -361,21 +467,22 @@ async function readInitialRscStream() {
|
|
|
361
467
|
function registerServerActionCallback() {
|
|
362
468
|
setServerCallback(async (id, args) => {
|
|
363
469
|
const temporaryReferences = createTemporaryReferenceSet();
|
|
470
|
+
const actionInitiation = createActionInitiationSnapshot();
|
|
471
|
+
syncCurrentHistoryStatePreviousNextUrl(actionInitiation.routerState.previousNextUrl);
|
|
364
472
|
const body = await encodeReply(args, { temporaryReferences });
|
|
365
|
-
const currentState = getBrowserRouterState();
|
|
366
473
|
const { headers } = resolveServerActionRequestState({
|
|
367
474
|
actionId: id,
|
|
368
475
|
basePath: __basePath,
|
|
369
|
-
elements:
|
|
370
|
-
previousNextUrl:
|
|
476
|
+
elements: actionInitiation.routerState.elements,
|
|
477
|
+
previousNextUrl: actionInitiation.routerState.previousNextUrl
|
|
371
478
|
});
|
|
372
|
-
const fetchResponse = await fetch(await createRscRequestUrl(
|
|
479
|
+
const fetchResponse = await fetch(await createRscRequestUrl(actionInitiation.path, headers), {
|
|
373
480
|
method: "POST",
|
|
374
481
|
headers,
|
|
375
482
|
body
|
|
376
483
|
});
|
|
377
|
-
|
|
378
|
-
const actionRedirect = fetchResponse.headers.get(
|
|
484
|
+
throwOnServerActionNotFound(fetchResponse, id);
|
|
485
|
+
const actionRedirect = fetchResponse.headers.get(ACTION_REDIRECT_HEADER);
|
|
379
486
|
if (actionRedirect) {
|
|
380
487
|
if (isDangerousScheme(actionRedirect)) {
|
|
381
488
|
console.error(DANGEROUS_URL_BLOCK_MESSAGE);
|
|
@@ -387,14 +494,33 @@ function registerServerActionCallback() {
|
|
|
387
494
|
return;
|
|
388
495
|
}
|
|
389
496
|
} catch {}
|
|
497
|
+
clearClientNavigationCaches();
|
|
390
498
|
if ((fetchResponse.headers.get("x-action-redirect-type") ?? "replace") === "push") window.location.assign(actionRedirect);
|
|
391
499
|
else window.location.replace(actionRedirect);
|
|
392
500
|
return;
|
|
393
501
|
}
|
|
394
|
-
|
|
502
|
+
if (resolveRscCompatibilityNavigationDecision({
|
|
503
|
+
clientCompatibilityId: CLIENT_RSC_COMPATIBILITY_ID,
|
|
504
|
+
currentHref: actionInitiation.href,
|
|
505
|
+
origin: window.location.origin,
|
|
506
|
+
responseCompatibilityId: fetchResponse.headers.get("X-Vinext-RSC-Compatibility-Id"),
|
|
507
|
+
responseUrl: fetchResponse.url
|
|
508
|
+
}).kind === "hard-navigate") {
|
|
509
|
+
window.location.reload();
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
const revalidation = parseServerActionRevalidationHeader(fetchResponse.headers);
|
|
395
513
|
const result = await createFromFetch(Promise.resolve(fetchResponse), { temporaryReferences });
|
|
396
|
-
if (
|
|
397
|
-
|
|
514
|
+
if (shouldClearClientNavigationCachesForServerActionResult(result, revalidation)) clearClientNavigationCaches();
|
|
515
|
+
if (isServerActionResult(result)) {
|
|
516
|
+
if (result.root !== void 0) return commitSameUrlNavigatePayload(Promise.resolve(AppElementsWire.decode(result.root)), actionInitiation, result.returnValue, revalidation);
|
|
517
|
+
if (result.returnValue) {
|
|
518
|
+
if (!result.returnValue.ok) throw result.returnValue.data;
|
|
519
|
+
return result.returnValue.data;
|
|
520
|
+
}
|
|
521
|
+
return;
|
|
522
|
+
}
|
|
523
|
+
return commitSameUrlNavigatePayload(Promise.resolve(AppElementsWire.decode(result)), actionInitiation, void 0, revalidation);
|
|
398
524
|
});
|
|
399
525
|
}
|
|
400
526
|
async function main() {
|
|
@@ -407,57 +533,86 @@ function bootstrapHydration(rscStream) {
|
|
|
407
533
|
if (import.meta.env.DEV) installDevErrorOverlay();
|
|
408
534
|
const root = decodeAppElementsPromise(createFromReadableStream(rscStream));
|
|
409
535
|
const initialNavigationSnapshot = createClientNavigationRenderSnapshot(window.location.href, latestClientParams);
|
|
410
|
-
replaceHistoryStateWithoutNotify(
|
|
536
|
+
replaceHistoryStateWithoutNotify(createHistoryStateWithNavigationMetadata(window.history.state, {
|
|
537
|
+
previousNextUrl: null,
|
|
538
|
+
traversalIndex: currentHistoryTraversalIndex
|
|
539
|
+
}), "", window.location.href);
|
|
411
540
|
const onUncaughtError = import.meta.env.DEV ? devOnUncaughtError : createOnUncaughtError(() => pendingNavigationRecoveryHref);
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
}), import.meta.env.DEV ? {
|
|
541
|
+
const formState = consumeInitialFormState(getVinextBrowserGlobal());
|
|
542
|
+
const hydrateRootOptions = import.meta.env.DEV ? createVinextHydrateRootOptions({
|
|
543
|
+
formState,
|
|
416
544
|
onCaughtError: devOnCaughtError,
|
|
417
545
|
onUncaughtError
|
|
418
|
-
} : {
|
|
419
|
-
|
|
420
|
-
|
|
546
|
+
}) : createVinextHydrateRootOptions({
|
|
547
|
+
formState,
|
|
548
|
+
onUncaughtError
|
|
549
|
+
});
|
|
550
|
+
window.__VINEXT_RSC_ROOT__ = hydrateRootInTransition({
|
|
551
|
+
children: createElement(BrowserRoot, {
|
|
552
|
+
initialElements: root,
|
|
553
|
+
initialNavigationSnapshot
|
|
554
|
+
}),
|
|
555
|
+
container: document,
|
|
556
|
+
hydrateRoot,
|
|
557
|
+
options: hydrateRootOptions,
|
|
558
|
+
startTransition
|
|
559
|
+
});
|
|
560
|
+
window.__VINEXT_CLEAR_NAV_CACHES__ = clearClientNavigationCaches;
|
|
561
|
+
window.__VINEXT_RSC_COMMIT_HASH_NAVIGATION__ = commitHashOnlyNavigation;
|
|
562
|
+
window.__VINEXT_RSC_NAVIGATE__ = async function navigateRsc(href, redirectDepth = 0, navigationKind = "navigate", historyUpdateMode, previousNextUrlOverride, programmaticTransition = false, traversalIntent) {
|
|
421
563
|
let pendingRouterState = null;
|
|
422
564
|
const navId = browserNavigationController.beginNavigation();
|
|
565
|
+
discardedServerActionRefreshScheduler.markNavigationStart();
|
|
423
566
|
let currentHref = href;
|
|
424
567
|
let currentHistoryMode = historyUpdateMode;
|
|
425
568
|
let currentPrevNextUrl = previousNextUrlOverride;
|
|
426
569
|
let redirectCount = redirectDepth;
|
|
570
|
+
const activeTraversalIntent = navigationKind === "traverse" ? traversalIntent ?? resolveHistoryTraversalIntent({
|
|
571
|
+
currentHistoryIndex: currentHistoryTraversalIndex,
|
|
572
|
+
historyState: window.history.state
|
|
573
|
+
}) : null;
|
|
427
574
|
try {
|
|
428
|
-
|
|
575
|
+
const shouldUsePendingRouterState = programmaticTransition;
|
|
576
|
+
if (shouldUsePendingRouterState && hasBrowserRouterState()) pendingRouterState = beginPendingBrowserRouterState();
|
|
429
577
|
else {
|
|
430
578
|
await waitForBrowserRouterStateReady();
|
|
431
579
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
432
|
-
if (
|
|
580
|
+
if (shouldUsePendingRouterState) pendingRouterState = beginPendingBrowserRouterState();
|
|
433
581
|
}
|
|
434
582
|
while (true) {
|
|
435
|
-
if (redirectCount > 10) {
|
|
436
|
-
console.error("[vinext] Too many RSC redirects — aborting navigation to prevent infinite loop.");
|
|
437
|
-
window.location.href = currentHref;
|
|
438
|
-
return;
|
|
439
|
-
}
|
|
440
583
|
const url = new URL(currentHref, window.location.origin);
|
|
441
|
-
const requestState = getRequestState(navigationKind, currentPrevNextUrl);
|
|
584
|
+
const requestState = getRequestState(navigationKind, currentPrevNextUrl, activeTraversalIntent?.historyState);
|
|
442
585
|
const requestInterceptionContext = requestState.interceptionContext;
|
|
443
586
|
const requestPreviousNextUrl = requestState.previousNextUrl;
|
|
444
|
-
|
|
445
|
-
const currentPath = navState?.pendingPathname ?? navState?.cachedPathname ?? stripBasePath(window.location.pathname, __basePath);
|
|
446
|
-
const isSameRoute = stripBasePath(url.pathname, __basePath) === currentPath;
|
|
587
|
+
if (navigationKind === "refresh") syncCurrentHistoryStatePreviousNextUrl(requestPreviousNextUrl);
|
|
447
588
|
setPendingPathname(url.pathname, navId);
|
|
448
589
|
const elementsAtNavStart = getBrowserRouterState().elements;
|
|
449
590
|
const mountedSlotsHeader = getMountedSlotIdsHeader(elementsAtNavStart);
|
|
450
|
-
const requestHeaders = createRscRequestHeaders({
|
|
451
|
-
|
|
591
|
+
const requestHeaders = createRscRequestHeaders({
|
|
592
|
+
interceptionContext: requestInterceptionContext,
|
|
593
|
+
renderMode: navigationKind === "refresh" ? APP_RSC_RENDER_MODE_REFRESH_PRESERVE_UI : void 0
|
|
594
|
+
});
|
|
595
|
+
if (mountedSlotsHeader) requestHeaders.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
|
|
452
596
|
const rscUrl = await createRscRequestUrl(url.pathname + url.search, requestHeaders);
|
|
453
597
|
const cachedRoute = getVisitedResponse(rscUrl, requestInterceptionContext, mountedSlotsHeader, navigationKind);
|
|
454
598
|
if (cachedRoute) {
|
|
599
|
+
const compatibilityDecision = resolveRscCompatibilityNavigationDecision({
|
|
600
|
+
clientCompatibilityId: CLIENT_RSC_COMPATIBILITY_ID,
|
|
601
|
+
currentHref,
|
|
602
|
+
origin: window.location.origin,
|
|
603
|
+
responseCompatibilityId: cachedRoute.response.compatibilityIdHeader,
|
|
604
|
+
responseUrl: cachedRoute.response.url
|
|
605
|
+
});
|
|
606
|
+
if (compatibilityDecision.kind === "hard-navigate") {
|
|
607
|
+
window.location.href = compatibilityDecision.hardNavigationTarget;
|
|
608
|
+
return;
|
|
609
|
+
}
|
|
455
610
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
456
611
|
const cachedParams = cachedRoute.params;
|
|
457
612
|
const cachedNavigationSnapshot = createClientNavigationRenderSnapshot(currentHref, cachedParams);
|
|
458
613
|
const cachedPayload = decodeAppElementsPromise(createFromFetch(Promise.resolve(restoreRscResponse(cachedRoute.response))));
|
|
459
614
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
460
|
-
await renderNavigationPayload(cachedPayload, cachedNavigationSnapshot, currentHref, navId, currentHistoryMode, cachedParams, requestPreviousNextUrl, pendingRouterState,
|
|
615
|
+
await renderNavigationPayload(cachedPayload, cachedNavigationSnapshot, currentHref, navId, currentHistoryMode, cachedParams, requestPreviousNextUrl, pendingRouterState, toActionType(navigationKind), toOperationLane(navigationKind), activeTraversalIntent);
|
|
461
616
|
return;
|
|
462
617
|
}
|
|
463
618
|
let navResponse;
|
|
@@ -477,41 +632,59 @@ function bootstrapHydration(rscStream) {
|
|
|
477
632
|
const isRscResponse = (navResponse.headers.get("content-type") ?? "").startsWith("text/x-component");
|
|
478
633
|
if (!navResponse.ok || !isRscResponse || !navResponse.body) {
|
|
479
634
|
const responseUrl = navResponseUrl ?? navResponse.url;
|
|
480
|
-
|
|
481
|
-
if (responseUrl) {
|
|
482
|
-
const parsed = new URL(responseUrl, window.location.origin);
|
|
483
|
-
stripRscCacheBustingSearchParam(parsed);
|
|
484
|
-
const origUrl = new URL(currentHref, window.location.origin);
|
|
485
|
-
let pathname = stripRscSuffix(parsed.pathname);
|
|
486
|
-
if (origUrl.pathname.length > 1 && origUrl.pathname.endsWith("/") && !pathname.endsWith("/")) pathname += "/";
|
|
487
|
-
hardNavTarget = pathname + parsed.search;
|
|
488
|
-
if (origUrl.hash) hardNavTarget += origUrl.hash;
|
|
489
|
-
}
|
|
490
|
-
window.location.href = hardNavTarget;
|
|
635
|
+
window.location.href = resolveHardNavigationTargetFromRscResponse(responseUrl, currentHref, window.location.origin);
|
|
491
636
|
return;
|
|
492
637
|
}
|
|
493
|
-
const
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
638
|
+
const compatibilityDecision = resolveRscCompatibilityNavigationDecision({
|
|
639
|
+
clientCompatibilityId: CLIENT_RSC_COMPATIBILITY_ID,
|
|
640
|
+
currentHref,
|
|
641
|
+
origin: window.location.origin,
|
|
642
|
+
responseCompatibilityId: navResponse.headers.get(VINEXT_RSC_COMPATIBILITY_ID_HEADER),
|
|
643
|
+
responseUrl: navResponseUrl ?? navResponse.url
|
|
644
|
+
});
|
|
645
|
+
if (compatibilityDecision.kind === "hard-navigate") {
|
|
646
|
+
window.location.href = compatibilityDecision.hardNavigationTarget;
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
const redirectDecision = resolveRscRedirectLifecycleHop({
|
|
650
|
+
currentHref,
|
|
651
|
+
historyUpdateMode: currentHistoryMode ?? "replace",
|
|
652
|
+
origin: window.location.origin,
|
|
653
|
+
redirectDepth: redirectCount,
|
|
654
|
+
requestPreviousNextUrl,
|
|
655
|
+
responseUrl: navResponseUrl ?? navResponse.url
|
|
656
|
+
});
|
|
657
|
+
if (redirectDecision.kind === "terminal-hard-navigation") {
|
|
658
|
+
if (redirectDecision.reason === "maxRedirectsExceeded") console.error("[vinext] Too many RSC redirects — aborting navigation to prevent infinite loop.");
|
|
659
|
+
window.location.href = redirectDecision.href;
|
|
660
|
+
return;
|
|
661
|
+
}
|
|
662
|
+
if (redirectDecision.kind === "follow") {
|
|
663
|
+
currentHref = redirectDecision.href;
|
|
664
|
+
currentHistoryMode = redirectDecision.historyUpdateMode;
|
|
665
|
+
currentPrevNextUrl = redirectDecision.previousNextUrl;
|
|
666
|
+
redirectCount = redirectDecision.redirectDepth;
|
|
503
667
|
continue;
|
|
504
668
|
}
|
|
505
669
|
const navParams = parseEncodedJsonHeader(navResponse.headers.get("X-Vinext-Params")) ?? {};
|
|
506
670
|
const navigationSnapshot = createClientNavigationRenderSnapshot(currentHref, navParams);
|
|
507
|
-
const
|
|
671
|
+
const navBody = navResponse.body;
|
|
672
|
+
if (!navBody) return;
|
|
673
|
+
const [reactBranch, cacheBranch] = navBody.tee();
|
|
674
|
+
const reactResponse = new Response(reactBranch, {
|
|
675
|
+
status: navResponse.status,
|
|
676
|
+
headers: navResponse.headers
|
|
677
|
+
});
|
|
678
|
+
const cacheBufferPromise = new Response(cacheBranch).arrayBuffer();
|
|
508
679
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
509
|
-
const rscPayload = decodeAppElementsPromise(createFromFetch(Promise.resolve(
|
|
680
|
+
const rscPayload = decodeAppElementsPromise(createFromFetch(Promise.resolve(reactResponse)));
|
|
510
681
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
511
|
-
if (await renderNavigationPayload(rscPayload, navigationSnapshot, currentHref, navId, currentHistoryMode, navParams, requestPreviousNextUrl, pendingRouterState,
|
|
682
|
+
if (await renderNavigationPayload(rscPayload, navigationSnapshot, currentHref, navId, currentHistoryMode, navParams, requestPreviousNextUrl, pendingRouterState, toActionType(navigationKind), toOperationLane(navigationKind), activeTraversalIntent) !== "committed") return;
|
|
512
683
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
513
684
|
const resolvedElements = await rscPayload;
|
|
514
|
-
|
|
685
|
+
const metadata = AppElementsWire.readMetadata(resolvedElements);
|
|
686
|
+
const cacheBuffer = await cacheBufferPromise;
|
|
687
|
+
storeVisitedResponseSnapshot(rscUrl, resolveVisitedResponseInterceptionContext(requestInterceptionContext, metadata.interceptionContext), createCachedRscResponseSnapshot(navResponse, cacheBuffer, navResponseUrl), navParams);
|
|
515
688
|
return;
|
|
516
689
|
}
|
|
517
690
|
} catch (error) {
|
|
@@ -520,37 +693,61 @@ function bootstrapHydration(rscStream) {
|
|
|
520
693
|
window.location.href = currentHref;
|
|
521
694
|
} finally {
|
|
522
695
|
browserNavigationController.finalizeNavigation(navId, pendingRouterState);
|
|
696
|
+
discardedServerActionRefreshScheduler.markNavigationSettled();
|
|
523
697
|
}
|
|
524
698
|
};
|
|
525
699
|
if ("scrollRestoration" in history) history.scrollRestoration = "manual";
|
|
700
|
+
const handlePopstate = createPopstateRestoreHandler({
|
|
701
|
+
getActiveNavigationId: browserNavigationController.getActiveNavigationId.bind(browserNavigationController),
|
|
702
|
+
getPendingNavigation: () => window.__VINEXT_RSC_PENDING__,
|
|
703
|
+
getNavigate: () => window.__VINEXT_RSC_NAVIGATE__,
|
|
704
|
+
isCurrentNavigation: browserNavigationController.isCurrentNavigation.bind(browserNavigationController),
|
|
705
|
+
notifyAppRouterTransitionStart: (href) => {
|
|
706
|
+
notifyAppRouterTransitionStart(href, "traverse");
|
|
707
|
+
},
|
|
708
|
+
restorePopstateScrollPosition,
|
|
709
|
+
setPendingNavigation: (pendingNavigation) => {
|
|
710
|
+
window.__VINEXT_RSC_PENDING__ = pendingNavigation;
|
|
711
|
+
}
|
|
712
|
+
});
|
|
526
713
|
window.addEventListener("popstate", (event) => {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
714
|
+
const href = window.location.href;
|
|
715
|
+
if (isSameAppRoutePopstateTarget(href)) {
|
|
716
|
+
notifyAppRouterTransitionStart(href, "traverse");
|
|
717
|
+
commitTraversalIndexFromHistoryState(event.state);
|
|
531
718
|
restorePopstateScrollPosition(event.state);
|
|
532
|
-
|
|
533
|
-
});
|
|
534
|
-
});
|
|
535
|
-
if (import.meta.hot) import.meta.hot.on("rsc:update", async () => {
|
|
536
|
-
try {
|
|
537
|
-
if (browserRouterStateHasEverCommitted && !browserNavigationController.hasBrowserRouterState()) {
|
|
538
|
-
window.location.reload();
|
|
539
|
-
return;
|
|
540
|
-
}
|
|
541
|
-
await waitForBrowserRouterStateReady();
|
|
542
|
-
if (!browserNavigationController.hasBrowserRouterState()) return;
|
|
543
|
-
clearClientNavigationCaches();
|
|
544
|
-
const navigationSnapshot = createClientNavigationRenderSnapshot(window.location.href, latestClientParams);
|
|
545
|
-
dismissOverlay();
|
|
546
|
-
const hmrHeaders = createRscRequestHeaders();
|
|
547
|
-
await browserNavigationController.hmrReplaceTree(decodeAppElementsPromise(createFromFetch(fetch(await createRscRequestUrl(window.location.pathname + window.location.search, hmrHeaders), { headers: hmrHeaders }))), navigationSnapshot);
|
|
548
|
-
} catch (error) {
|
|
549
|
-
console.error("[vinext] RSC HMR error:", error);
|
|
719
|
+
return;
|
|
550
720
|
}
|
|
721
|
+
handlePopstate(event);
|
|
551
722
|
});
|
|
723
|
+
if (import.meta.hot) {
|
|
724
|
+
const handleRscUpdate = async () => {
|
|
725
|
+
try {
|
|
726
|
+
if (browserRouterStateHasEverCommitted && !browserNavigationController.hasBrowserRouterState()) {
|
|
727
|
+
window.location.reload();
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
await waitForBrowserRouterStateReady();
|
|
731
|
+
if (!browserNavigationController.hasBrowserRouterState()) return;
|
|
732
|
+
clearClientNavigationCaches();
|
|
733
|
+
const navigationSnapshot = createClientNavigationRenderSnapshot(window.location.href, latestClientParams);
|
|
734
|
+
dismissOverlay();
|
|
735
|
+
const hmrHeaders = createRscRequestHeaders();
|
|
736
|
+
await browserNavigationController.hmrReplaceTree(decodeAppElementsPromise(createFromFetch(fetch(await createRscRequestUrl(window.location.pathname + window.location.search, hmrHeaders), { headers: hmrHeaders }))), navigationSnapshot);
|
|
737
|
+
} catch (error) {
|
|
738
|
+
console.error("[vinext] RSC HMR error:", error);
|
|
739
|
+
}
|
|
740
|
+
};
|
|
741
|
+
import.meta.hot.on("rsc:update", () => {
|
|
742
|
+
handleRscUpdate();
|
|
743
|
+
});
|
|
744
|
+
}
|
|
552
745
|
}
|
|
553
746
|
if (typeof document !== "undefined") {
|
|
747
|
+
installWindowNext({
|
|
748
|
+
appDir: true,
|
|
749
|
+
router: appRouterInstance
|
|
750
|
+
});
|
|
554
751
|
window.addEventListener("pagehide", () => {
|
|
555
752
|
isPageUnloading = true;
|
|
556
753
|
});
|