vinext 1.2.1 → 1.3.1
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 +12 -9
- package/dist/_virtual/_rolldown/runtime.js +1 -1
- 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 +77 -6
- package/dist/build/client-build-config.js +176 -12
- 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 +171 -0
- package/dist/build/client-reference-groups.js +572 -0
- 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/layout-classification.d.ts +2 -1
- package/dist/build/module-dependency-cache.d.ts +33 -1
- package/dist/build/module-dependency-cache.js +51 -1
- package/dist/build/next-client-runtime-manifests.d.ts +12 -2
- package/dist/build/next-client-runtime-manifests.js +19 -4
- package/dist/build/nitro-public-files.d.ts +24 -0
- package/dist/build/nitro-public-files.js +60 -0
- package/dist/build/pages-client-assets-module.js +1 -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-paths.js +5 -2
- 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 +5 -4
- package/dist/build/report.d.ts +2 -1
- package/dist/build/route-classification-injector.d.ts +2 -1
- package/dist/build/route-classification-manifest.d.ts +2 -1
- package/dist/build/run-prerender.d.ts +2 -1
- package/dist/build/server-actions-encryption-key.d.ts +24 -0
- package/dist/build/server-actions-encryption-key.js +101 -0
- package/dist/build/ssr-manifest.d.ts +3 -0
- package/dist/build/ssr-manifest.js +34 -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 +4 -0
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +2 -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-rewrite-params.d.ts +9 -0
- package/dist/client/client-rewrite-params.js +20 -0
- 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 +2 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +28 -3
- package/dist/client/navigation-runtime.js +42 -11
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -2
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +27 -41
- package/dist/config/config-matchers.js +293 -270
- package/dist/config/config-source.d.ts +34 -0
- package/dist/config/config-source.js +141 -0
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/header-params.d.ts +29 -0
- package/dist/config/header-params.js +106 -0
- package/dist/config/next-config.d.ts +20 -6
- package/dist/config/next-config.js +149 -11
- package/dist/config/tsconfig-paths.d.ts +2 -1
- 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/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
- package/dist/entries/app-browser-entry.d.ts +34 -6
- package/dist/entries/app-browser-entry.js +103 -40
- package/dist/entries/app-rsc-entry.d.ts +4 -1
- package/dist/entries/app-rsc-entry.js +131 -66
- package/dist/entries/app-rsc-manifest.d.ts +12 -1
- package/dist/entries/app-rsc-manifest.js +73 -1
- package/dist/entries/app-ssr-entry.d.ts +4 -1
- package/dist/entries/app-ssr-entry.js +9 -2
- package/dist/entries/pages-client-entry.d.ts +1 -0
- package/dist/entries/pages-client-entry.js +6 -6
- 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 +18 -15
- 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.d.ts +11 -0
- package/dist/index.js +340 -116
- package/dist/init.js +17 -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/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/og-assets.d.ts +2 -1
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +27 -3
- package/dist/plugins/optimize-imports.js +106 -20
- package/dist/plugins/pages-node-externals.d.ts +2 -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 +53 -1
- package/dist/plugins/rsc-client-reference-loaders.js +447 -27
- 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 +5 -0
- package/dist/plugins/use-cache-callable.js +30 -8
- package/dist/plugins/worker-image-imports.d.ts +1 -0
- package/dist/plugins/worker-image-imports.js +2 -2
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +41 -1
- package/dist/routing/app-route-graph.js +122 -50
- package/dist/routing/browser-route-manifest.d.ts +44 -0
- package/dist/routing/browser-route-manifest.js +195 -0
- package/dist/routing/hashed-route-patterns.d.ts +4 -0
- package/dist/routing/hashed-route-patterns.js +22 -0
- package/dist/routing/optimistic-route-trie.d.ts +28 -0
- package/dist/routing/optimistic-route-trie.js +102 -0
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/routing/route-validation.d.ts +6 -1
- package/dist/routing/route-validation.js +26 -10
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/app-action-forwarding.d.ts +10 -1
- package/dist/server/app-action-forwarding.js +15 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
- package/dist/server/app-browser-entry.js +175 -64
- package/dist/server/app-browser-error.d.ts +5 -2
- package/dist/server/app-browser-error.js +7 -2
- package/dist/server/app-browser-history-controller.d.ts +2 -1
- package/dist/server/app-browser-hydration.d.ts +2 -1
- package/dist/server/app-browser-interception-context.d.ts +4 -3
- package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
- package/dist/server/app-browser-mpa-navigation.js +6 -5
- package/dist/server/app-browser-navigation-controller.d.ts +17 -6
- package/dist/server/app-browser-navigation-controller.js +103 -36
- 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-server-action-client.d.ts +2 -1
- package/dist/server/app-browser-state.d.ts +2 -2
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-visible-commit.d.ts +6 -5
- 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 +45 -2
- package/dist/server/app-client-reference-preloader.js +48 -10
- package/dist/server/app-elements-wire.d.ts +2 -1
- package/dist/server/app-elements.d.ts +2 -0
- package/dist/server/app-elements.js +3 -1
- package/dist/server/app-fallback-renderer.d.ts +9 -2
- package/dist/server/app-fallback-renderer.js +6 -2
- package/dist/server/app-history-state.d.ts +2 -1
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-layout-param-observation.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-middleware.d.ts +6 -0
- package/dist/server/app-middleware.js +8 -10
- package/dist/server/app-optimistic-routing.d.ts +26 -11
- package/dist/server/app-optimistic-routing.js +38 -96
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +229 -39
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +40 -7
- package/dist/server/app-page-cache-finalizer.d.ts +2 -1
- package/dist/server/app-page-cache-finalizer.js +1 -1
- package/dist/server/app-page-cache-render.d.ts +10 -2
- package/dist/server/app-page-cache-render.js +15 -2
- package/dist/server/app-page-cache.js +2 -2
- package/dist/server/app-page-dispatch.d.ts +34 -1
- package/dist/server/app-page-dispatch.js +165 -34
- package/dist/server/app-page-element-builder.d.ts +17 -1
- package/dist/server/app-page-element-builder.js +187 -66
- package/dist/server/app-page-execution.d.ts +28 -1
- package/dist/server/app-page-execution.js +114 -5
- package/dist/server/app-page-head.d.ts +95 -3
- package/dist/server/app-page-head.js +307 -152
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-probe.d.ts +2 -1
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +7 -1
- package/dist/server/app-page-render.js +38 -11
- package/dist/server/app-page-request.d.ts +14 -1
- package/dist/server/app-page-request.js +1 -1
- package/dist/server/app-page-route-wiring.d.ts +52 -2
- package/dist/server/app-page-route-wiring.js +197 -47
- package/dist/server/app-page-rsc-render-status.d.ts +3 -1
- package/dist/server/app-page-rsc-render-status.js +1 -0
- package/dist/server/app-page-search-params-observation.d.ts +8 -6
- package/dist/server/app-page-search-params-observation.js +16 -11
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +38 -1
- package/dist/server/app-page-stream.js +24 -4
- package/dist/server/app-pages-bridge.d.ts +4 -2
- package/dist/server/app-pages-bridge.js +11 -7
- 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-prerender-static-params.js +3 -2
- package/dist/server/app-render-dependency.d.ts +11 -1
- package/dist/server/app-render-dependency.js +65 -6
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-request-stage-independent-entry.js +2 -2
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.js +3 -3
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +4 -2
- package/dist/server/app-route-handler-execution.d.ts +4 -1
- package/dist/server/app-route-handler-execution.js +9 -2
- package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
- package/dist/server/app-route-handler-middleware-context.js +3 -3
- package/dist/server/app-route-handler-response.d.ts +4 -2
- package/dist/server/app-route-handler-response.js +2 -2
- package/dist/server/app-route-handler-runtime.d.ts +4 -1
- package/dist/server/app-route-handler-runtime.js +20 -3
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +15 -6
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-route-tree.d.ts +20 -0
- package/dist/server/app-route-tree.js +18 -0
- package/dist/server/app-router-entry.js +2 -2
- package/dist/server/app-rsc-combined-handler.js +8 -1
- package/dist/server/app-rsc-error-handler.d.ts +2 -1
- package/dist/server/app-rsc-errors.d.ts +9 -1
- package/dist/server/app-rsc-errors.js +9 -2
- package/dist/server/app-rsc-handler.d.ts +6 -2
- package/dist/server/app-rsc-handler.js +152 -140
- package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
- package/dist/server/app-rsc-response-finalizer.js +4 -1
- package/dist/server/app-rsc-response-stage.js +3 -1
- package/dist/server/app-rsc-route-matching.d.ts +39 -1
- package/dist/server/app-rsc-route-matching.js +25 -1
- 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 +25 -7
- package/dist/server/app-server-action-execution.js +53 -59
- package/dist/server/app-ssr-entry.d.ts +12 -0
- package/dist/server/app-ssr-entry.js +104 -48
- 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 +29 -10
- package/dist/server/app-ssr-stream.js +311 -67
- 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 +2 -1
- package/dist/server/app-worker-stages.d.ts +2 -1
- package/dist/server/artifact-compatibility.d.ts +2 -1
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/client-reuse-manifest.d.ts +2 -1
- package/dist/server/config-headers.d.ts +2 -1
- package/dist/server/config-headers.js +12 -3
- 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 +10 -3
- 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/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/isolate-shared-promise.d.ts +10 -0
- package/dist/server/isolate-shared-promise.js +33 -0
- package/dist/server/isr-cache.js +3 -2
- 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 +1 -1
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-matcher-pattern.d.ts +0 -1
- package/dist/server/middleware-matcher-pattern.js +11 -140
- package/dist/server/middleware-matcher.js +5 -6
- package/dist/server/middleware-response-headers.d.ts +31 -0
- package/dist/server/middleware-response-headers.js +57 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/middleware-runtime.js +26 -13
- package/dist/server/navigation-planner.d.ts +2 -2
- 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 +39 -0
- package/dist/server/nitro-public-files-plugin.js +106 -0
- package/dist/server/nitro-public-files.d.ts +22 -0
- package/dist/server/nitro-public-files.js +39 -0
- 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-asset-tags.d.ts +7 -1
- package/dist/server/pages-asset-tags.js +9 -2
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +8 -1
- 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-i18n.d.ts +18 -0
- package/dist/server/pages-i18n.js +18 -2
- package/dist/server/pages-node-compat.d.ts +5 -3
- package/dist/server/pages-node-compat.js +35 -16
- 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 +16 -7
- 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 +8 -2
- package/dist/server/pages-request-pipeline.js +35 -40
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-request-stage-entry.js +16 -6
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.js +1 -1
- package/dist/server/pages-revalidate.js +1 -0
- package/dist/server/pages-route-data-kind.d.ts +2 -1
- package/dist/server/pages-router-entry.js +1 -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.d.ts +2 -2
- package/dist/server/prod-server.js +80 -36
- package/dist/server/proxy-trust.d.ts +6 -0
- package/dist/server/proxy-trust.js +12 -6
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-pipeline.d.ts +5 -0
- package/dist/server/request-pipeline.js +12 -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/server-reference-loader.js +10 -1
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +16 -3
- package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +2 -1
- package/dist/server/worker-utils.js +1 -1
- 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 +32 -11
- package/dist/shims/cache-request-state.d.ts +40 -3
- package/dist/shims/cache-request-state.js +70 -5
- package/dist/shims/cache-runtime.js +47 -19
- package/dist/shims/cache.d.ts +2 -2
- package/dist/shims/cache.js +17 -8
- 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-purge-routes.d.ts +25 -0
- package/dist/shims/cdn-purge-routes.js +77 -0
- package/dist/shims/client-locale.js +2 -1
- package/dist/shims/client-page-root.d.ts +2 -1
- 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 +17 -4
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +31 -16
- 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 +9 -4
- 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-props.d.ts +93 -0
- package/dist/shims/image-props.js +323 -0
- package/dist/shims/image.d.ts +4 -39
- package/dist/shims/image.js +4 -319
- 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 +9 -0
- package/dist/shims/internal/headers-state.js +19 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
- package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
- package/dist/shims/internal/interpolate-as.d.ts +2 -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 +198 -53
- package/dist/shims/metadata.d.ts +32 -11
- package/dist/shims/metadata.js +88 -26
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation.d.ts +23 -3
- package/dist/shims/navigation.js +91 -25
- package/dist/shims/og.js +35 -10
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/request-context.d.ts +13 -0
- package/dist/shims/router.js +33 -43
- package/dist/shims/server.d.ts +31 -4
- package/dist/shims/server.js +58 -10
- package/dist/shims/thenable-params.d.ts +6 -1
- package/dist/shims/thenable-params.js +11 -2
- package/dist/shims/unified-request-context.d.ts +5 -0
- package/dist/shims/unified-request-context.js +5 -3
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/asset-prefix.d.ts +7 -0
- package/dist/utils/asset-prefix.js +10 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +20 -6
- 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 +10 -1
- package/dist/utils/client-runtime-metadata.js +53 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +18 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/manifest-paths.d.ts +14 -0
- package/dist/utils/manifest-paths.js +22 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/path-to-regexp.d.ts +21 -0
- package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
- package/dist/utils/plugin-react-version.d.ts +15 -0
- package/dist/utils/plugin-react-version.js +64 -0
- package/dist/utils/project.d.ts +2 -1
- package/dist/utils/project.js +9 -1
- package/dist/utils/public-routes.d.ts +2 -0
- package/dist/utils/public-routes.js +18 -7
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/sorted-array.d.ts +2 -1
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +5 -5
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/default-not-found-module.d.ts +0 -19
- package/dist/server/default-not-found-module.js +0 -18
- package/dist/server/middleware-path-to-regexp.d.ts +0 -13
- package/dist/server/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
- package/dist/utils/regex-safety.d.ts +0 -17
- package/dist/utils/regex-safety.js +0 -789
|
@@ -14,11 +14,11 @@ import { clearAppNavigationFailureTarget, installAppNavigationFailureListeners }
|
|
|
14
14
|
import { DevRecoveryBoundary, GlobalErrorBoundary, RedirectBoundary } from "../shims/error-boundary.js";
|
|
15
15
|
import { beginAppRouterScrollIntent, consumeAppRouterScrollIntent } from "../shims/app-router-scroll-state.js";
|
|
16
16
|
import { AppRouterScrollCommitProvider } from "../shims/app-router-scroll.js";
|
|
17
|
-
import { BfcacheIdentityMapContext,
|
|
18
|
-
import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath,
|
|
17
|
+
import { BfcacheIdentityMapContext, bindAppElementsRenderedSearch, setAppElementsRenderedSearch } from "../shims/slot.js";
|
|
18
|
+
import { VINEXT_RSC_COMPATIBILITY_ID_HEADER, VINEXT_RSC_CONTENT_TYPE, createRscRequestHeaders, createRscRequestUrl, formatRscRequestPath, isRscCompatibilityIdCompatible } from "./app-rsc-cache-busting.js";
|
|
19
19
|
import { notifyAppRouterTransitionStart } from "../client/instrumentation-client-state.js";
|
|
20
20
|
import "../client/instrumentation-client.js";
|
|
21
|
-
import { getNavigationRuntime, registerNavigationRuntimeBootstrap, registerNavigationRuntimeFunctions } from "../client/navigation-runtime.js";
|
|
21
|
+
import { createNavigationRuntimeRouteManifestLoader, getNavigationRuntime, loadNavigationRuntimeRouteManifest, registerNavigationRuntimeBootstrap, registerNavigationRuntimeFunctions } from "../client/navigation-runtime.js";
|
|
22
22
|
import { createBfcacheSegmentIdentityMap, createInitialBfcacheIdMap } from "./app-bfcache-identity.js";
|
|
23
23
|
import { createDiscardedServerActionRefreshScheduler, createServerActionInitiationSnapshot, resolveServerActionOperationLane } from "./app-browser-action-result.js";
|
|
24
24
|
import { createClientReuseManifestHeaderFromVisibleAppState } from "./app-browser-client-reuse-manifest.js";
|
|
@@ -31,7 +31,8 @@ import { navigationPlanner } from "./navigation-planner.js";
|
|
|
31
31
|
import { DYNAMIC_NAVIGATION_CACHE_TTL, PREFETCH_CACHE_TTL, __basePath, appRouterInstance, commitClientNavigationState, consumePrefetchResponse, consumePrefetchResponseForNavigation, createCachedRscResponseSnapshot, createClientNavigationRenderSnapshot, createSnapshotPathAndSearch, deletePrefetchResponseSnapshot, disableNavigationResponsePrefetchCacheReuse, getClientNavigationRenderContext, getMountedSlotsHeader, getPrefetchCache, hasPrefetchCacheEntryForNavigation, invalidatePrefetchCache, parseRenderedPathAndSearchHeader, preloadHybridClientRouteOwner, pushHistoryStateWithoutNotify, replaceClientParamsWithoutNotify, replaceHistoryStateWithoutNotify, resolveLoadedHybridClientRewriteHref, resolvePrefetchCacheEntryMountedSlotsHeader, restoreRscResponse, saveScrollPosition, seedPrefetchResponseSnapshot, setClientParams, setMountedSlotsHeader, setPendingPathname, useRouter } from "../shims/navigation.js";
|
|
32
32
|
import { chunksToReadableStream, createProgressiveRscStream, getVinextBrowserGlobal } from "./app-browser-stream.js";
|
|
33
33
|
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
|
-
import { clearHardNavigationLoopGuard, createAppBrowserNavigationController, createBasePathStrippedPathAndSearch } from "./app-browser-navigation-controller.js";
|
|
34
|
+
import { clearHardNavigationLoopGuard, createAppBrowserNavigationController, createBasePathStrippedPathAndSearch, navigateDocumentDirectly } from "./app-browser-navigation-controller.js";
|
|
35
|
+
import { createAppRouteTree } from "./app-route-tree.js";
|
|
35
36
|
import { shouldRecoverSamePathSearchCommitOnResponseCompletion } from "./app-browser-navigation-response.js";
|
|
36
37
|
import { createSupplementalRefreshCoordinator, mergeRefreshedParallelSlot, requireCompleteSupplementalRefresh, resolvePersistedSourcePageRefreshes, resolveServerActionSupplementalRefresh, resolveSupplementalRefreshes } from "./app-browser-supplemental-refresh.js";
|
|
37
38
|
import { createAppBrowserNavigationAbortCoordinator } from "./app-browser-navigation-abort.js";
|
|
@@ -42,7 +43,7 @@ import { createPopstateRestoreHandler, restoreSynchronousPopstateScrollPosition,
|
|
|
42
43
|
import { createDevOnCaughtError, createOnUncaughtError, createProdOnCaughtError, createProdOnRecoverableError } from "./app-browser-error.js";
|
|
43
44
|
import { createHydrationCachePublication } from "./app-hydration-cache-publication.js";
|
|
44
45
|
import { peekSettledPrefetchResponseForNavigation, prepareConsumedPrefetchResponseForPublication, preserveCommittedPrefetchExpiry, resolvePrefetchNavigationResponseUrl } from "./app-browser-prefetch-response.js";
|
|
45
|
-
import { canCommitOptimisticRouteTemplate, createOptimisticRouteTemplate, getOptimisticPrefetchSourceKey, getOptimisticRouteTemplateKey,
|
|
46
|
+
import { canCommitOptimisticRouteTemplate, createOptimisticRouteTemplate, getOptimisticPrefetchSourceKey, getOptimisticRouteTemplateKey, keepOptimisticStreamingMetadata, resolveOptimisticNavigationParamsForHref, resolveOptimisticNavigationPayload } from "./app-optimistic-routing.js";
|
|
46
47
|
import { removeStylesheetLinksCoveredByInlineCss } from "./app-inline-css-client.js";
|
|
47
48
|
import { createElement, startTransition, use, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
48
49
|
import { flushSync } from "react-dom";
|
|
@@ -64,8 +65,21 @@ function toOperationLane(kind) {
|
|
|
64
65
|
}
|
|
65
66
|
const MAX_VISITED_RESPONSE_CACHE_SIZE = 50;
|
|
66
67
|
const IS_STATIC_EXPORT = process.env.NODE_ENV === "production" && process.env.__NEXT_CONFIG_OUTPUT === "export";
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
let clientDeploymentVersion = null;
|
|
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
|
+
}
|
|
79
|
+
function setClientRscCompatibilityId(compatibilityId) {
|
|
80
|
+
if (IS_STATIC_EXPORT || !compatibilityId) return;
|
|
81
|
+
clientRscCompatibilityId = compatibilityId;
|
|
82
|
+
}
|
|
69
83
|
const optimisticRouteTemplates = /* @__PURE__ */ new Map();
|
|
70
84
|
const optimisticRouteTemplateSources = /* @__PURE__ */ new Set();
|
|
71
85
|
const optimisticRouteTemplateLearning = /* @__PURE__ */ new Map();
|
|
@@ -77,6 +91,7 @@ function claimInitialAppRouterBootstrap() {
|
|
|
77
91
|
function markInitialAppRouterBootstrapHydrated() {
|
|
78
92
|
window.__VINEXT_RSC_BOOTSTRAP_STATE__ = "hydrated";
|
|
79
93
|
}
|
|
94
|
+
registerNavigationRuntimeFunctions({ loadRouteManifest: createNavigationRuntimeRouteManifestLoader(() => import("virtual:vinext-app-route-manifest")) });
|
|
80
95
|
function getBrowserRouteManifest() {
|
|
81
96
|
return getNavigationRuntime()?.bootstrap.routeManifest ?? null;
|
|
82
97
|
}
|
|
@@ -92,7 +107,7 @@ function resolveStaticExportRouteParams(href) {
|
|
|
92
107
|
function isStaticExportPayloadDeploymentCompatible(elements) {
|
|
93
108
|
if (!IS_STATIC_EXPORT) return true;
|
|
94
109
|
const deploymentVersion = AppElementsWire.readMetadata(elements).artifactCompatibility.deploymentVersion;
|
|
95
|
-
return
|
|
110
|
+
return clientDeploymentVersion !== null && deploymentVersion === clientDeploymentVersion;
|
|
96
111
|
}
|
|
97
112
|
const historyController = new AppBrowserHistoryController({
|
|
98
113
|
initialHistoryState: window.history.state,
|
|
@@ -114,6 +129,14 @@ const historyController = new AppBrowserHistoryController({
|
|
|
114
129
|
const browserNavigationController = createAppBrowserNavigationController({
|
|
115
130
|
basePath: __basePath,
|
|
116
131
|
getRouteManifest: getBrowserRouteManifest,
|
|
132
|
+
loadRouteManifest: loadNavigationRuntimeRouteManifest,
|
|
133
|
+
navigateDocument: (href, mode) => {
|
|
134
|
+
if (mpaNavigationTree) {
|
|
135
|
+
mpaNavigationTree.enter(href, mode === "replace" ? "replace" : "push");
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
navigateDocumentDirectly(href, mode);
|
|
139
|
+
},
|
|
117
140
|
syncHistoryStatePreviousNextUrl: (previousNextUrl, bfcacheIds) => historyController.syncCurrentHistoryStatePreviousNextUrl(previousNextUrl, bfcacheIds)
|
|
118
141
|
});
|
|
119
142
|
const discardedServerActionRefreshScheduler = hasServerActions ? createDiscardedServerActionRefreshScheduler({ runRefresh() {
|
|
@@ -126,6 +149,7 @@ const discardedServerActionRefreshScheduler = hasServerActions ? createDiscarded
|
|
|
126
149
|
};
|
|
127
150
|
const serverActionSupplementalRefreshCoordinator = createSupplementalRefreshCoordinator();
|
|
128
151
|
const NavigationCommitSignal = browserNavigationController.NavigationCommitSignal;
|
|
152
|
+
const NavigationHistoryCommit = browserNavigationController.NavigationHistoryCommit;
|
|
129
153
|
const ACTION_HTTP_FALLBACK_ROBOTS_META_ATTR = "data-vinext-action-http-fallback";
|
|
130
154
|
function syncServerActionHttpFallbackHead(status) {
|
|
131
155
|
document.head.querySelectorAll(`meta[${ACTION_HTTP_FALLBACK_ROBOTS_META_ATTR}="robots"]`).forEach((node) => node.remove());
|
|
@@ -155,6 +179,20 @@ let browserRouterStateHasEverCommitted = false;
|
|
|
155
179
|
let initialPrefetchRouterState = null;
|
|
156
180
|
const mpaNavigationScheduler = new AppBrowserMpaNavigationScheduler();
|
|
157
181
|
const unresolvedMpaNavigation = new Promise(() => {});
|
|
182
|
+
let mpaNavigationTree = null;
|
|
183
|
+
let mpaNavigationRestore = null;
|
|
184
|
+
function waitForMpaNavigationRestore() {
|
|
185
|
+
if (!mpaNavigationRestore) {
|
|
186
|
+
let resolve = () => {};
|
|
187
|
+
mpaNavigationRestore = {
|
|
188
|
+
promise: new Promise((resolvePromise) => {
|
|
189
|
+
resolve = resolvePromise;
|
|
190
|
+
}),
|
|
191
|
+
resolve
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return mpaNavigationRestore.promise;
|
|
195
|
+
}
|
|
158
196
|
const RSC_HMR_SETTLE_DELAY_MS = 150;
|
|
159
197
|
const DEFAULT_GLOBAL_ERROR_COMPONENT = DefaultGlobalError;
|
|
160
198
|
let latestRscHmrUpdateId = 0;
|
|
@@ -280,6 +318,10 @@ async function fetchPersistedSourcePageRefresh(options) {
|
|
|
280
318
|
* read the query the server rendered it with, not the navigation's.
|
|
281
319
|
*/
|
|
282
320
|
async function decodeSupplementalRefresh(response, targetPathname) {
|
|
321
|
+
if (!isRscResponseCompatible(response.headers.get("X-Vinext-RSC-Compatibility-Id"))) {
|
|
322
|
+
response.body?.cancel().catch(() => {});
|
|
323
|
+
throw new Error("[vinext] Refreshed another deployment's payload");
|
|
324
|
+
}
|
|
283
325
|
const elements = await decodeAppElementsPromise(createFromFetch(Promise.resolve(response)));
|
|
284
326
|
const renderedPathAndSearch = parseRenderedPathAndSearchHeader(response.headers.get(VINEXT_RENDERED_PATH_AND_SEARCH_HEADER));
|
|
285
327
|
setAppElementsRenderedSearch(elements, new URL(renderedPathAndSearch ?? targetPathname, window.location.origin).search);
|
|
@@ -304,6 +346,7 @@ async function learnOptimisticRouteTemplateFromPrefetch(options) {
|
|
|
304
346
|
if (source.interceptionContext !== options.interceptionContext) return false;
|
|
305
347
|
if (resolvePrefetchCacheEntryMountedSlotsHeader(options.entry) !== options.mountedSlotsHeader) return false;
|
|
306
348
|
if (options.interceptionContext !== null) return false;
|
|
349
|
+
if (!isRscResponseCompatible(options.entry.snapshot.compatibilityIdHeader)) return false;
|
|
307
350
|
const elements = await decodeAppElementsPromise(createFromFetch(Promise.resolve(restoreRscResponse(options.entry.snapshot))));
|
|
308
351
|
const template = createOptimisticRouteTemplate({
|
|
309
352
|
allowLoadingShell: options.entry.optimisticRouteShell === true,
|
|
@@ -362,22 +405,29 @@ function createActionInitiationSnapshot() {
|
|
|
362
405
|
}
|
|
363
406
|
function createNavigationCommitEffect(options) {
|
|
364
407
|
const { activeRoutePaths, bfcacheIds, href, historyUpdateMode, navId, params, previousNextUrl, targetHistoryIndex } = options;
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
return;
|
|
408
|
+
let wroteHistory = false;
|
|
409
|
+
return {
|
|
410
|
+
writeHistory({ keepCurrentUrl }) {
|
|
411
|
+
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
412
|
+
historyController.commitNavigationHistory({
|
|
413
|
+
activeRoutePaths,
|
|
414
|
+
bfcacheIds,
|
|
415
|
+
href,
|
|
416
|
+
historyUpdateMode: keepCurrentUrl ? void 0 : historyUpdateMode,
|
|
417
|
+
previousNextUrl,
|
|
418
|
+
stageClientParams: () => stageClientParams(params),
|
|
419
|
+
targetHistoryIndex
|
|
420
|
+
});
|
|
421
|
+
wroteHistory = true;
|
|
422
|
+
},
|
|
423
|
+
publish({ releaseSnapshot }) {
|
|
424
|
+
if (!wroteHistory) {
|
|
425
|
+
commitClientNavigationState(void 0, { releaseSnapshot });
|
|
426
|
+
return;
|
|
427
|
+
}
|
|
428
|
+
clearAppNavigationFailureTarget(href);
|
|
429
|
+
commitClientNavigationState(navId, { releaseSnapshot });
|
|
369
430
|
}
|
|
370
|
-
historyController.commitNavigationHistory({
|
|
371
|
-
activeRoutePaths,
|
|
372
|
-
bfcacheIds,
|
|
373
|
-
href,
|
|
374
|
-
historyUpdateMode: keepCurrentUrl ? void 0 : historyUpdateMode,
|
|
375
|
-
previousNextUrl,
|
|
376
|
-
stageClientParams: () => stageClientParams(params),
|
|
377
|
-
targetHistoryIndex
|
|
378
|
-
});
|
|
379
|
-
clearAppNavigationFailureTarget(href);
|
|
380
|
-
commitClientNavigationState(navId, { releaseSnapshot });
|
|
381
431
|
};
|
|
382
432
|
}
|
|
383
433
|
async function renderNavigationPayload(options) {
|
|
@@ -409,7 +459,16 @@ async function renderNavigationPayload(options) {
|
|
|
409
459
|
async function commitSameUrlNavigatePayload(nextElements, actionInitiation, returnValue, revalidation = "none", renderedPathAndSearch = null) {
|
|
410
460
|
let shouldRetrySupplementalRefresh = false;
|
|
411
461
|
let supplementalHandle = null;
|
|
462
|
+
let routeManifestLoaded = true;
|
|
412
463
|
if (revalidation !== "none") {
|
|
464
|
+
const routeManifestLoad = loadNavigationRuntimeRouteManifest();
|
|
465
|
+
if (routeManifestLoad !== null) routeManifestLoaded = await routeManifestLoad;
|
|
466
|
+
if (!routeManifestLoaded && browserNavigationController.isCurrentNavigation(actionInitiation.navigationId)) {
|
|
467
|
+
browserNavigationController.performHardNavigation(actionInitiation.href);
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
if (revalidation !== "none" && routeManifestLoaded) {
|
|
413
472
|
const refreshUrl = new URL(actionInitiation.href);
|
|
414
473
|
const requestInterceptionContext = resolveInterceptionContextFromPreviousNextUrl(actionInitiation.routerState.previousNextUrl, __basePath);
|
|
415
474
|
const persistedInterceptions = resolvePersistedRefreshInterceptions(actionInitiation.routerState, getBrowserRouteManifest(), refreshUrl, requestInterceptionContext);
|
|
@@ -656,23 +715,40 @@ function BrowserRoot({ hydrationCachePublication, initialElements, initialNaviga
|
|
|
656
715
|
const treeState = isRouterStatePromise(treeStateValue) ? use(treeStateValue) : treeStateValue;
|
|
657
716
|
const stateRef = useRef(treeState);
|
|
658
717
|
stateRef.current = treeState;
|
|
718
|
+
const committedStateRef = useRef(treeState);
|
|
719
|
+
useLayoutEffect(() => {
|
|
720
|
+
committedStateRef.current = treeState;
|
|
721
|
+
}, [treeState]);
|
|
659
722
|
useLayoutEffect(() => {
|
|
660
723
|
const setAppRouterStateValue = (value) => {
|
|
661
724
|
setTreeStateValue(value);
|
|
662
725
|
};
|
|
663
726
|
const detach = browserNavigationController.attachBrowserRouterState(setAppRouterStateValue, stateRef);
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
727
|
+
const setMpaNavigationState = (href, historyUpdateMode) => {
|
|
728
|
+
startTransition(() => {
|
|
729
|
+
setTreeStateValue({
|
|
730
|
+
href,
|
|
731
|
+
historyUpdateMode,
|
|
732
|
+
kind: "mpa-navigation"
|
|
733
|
+
});
|
|
669
734
|
});
|
|
670
|
-
|
|
735
|
+
};
|
|
736
|
+
const currentMpaNavigationTree = {
|
|
737
|
+
enter: setMpaNavigationState,
|
|
738
|
+
restore() {
|
|
739
|
+
setTreeStateValue((current) => isMpaNavigationState(current) ? committedStateRef.current : current);
|
|
740
|
+
}
|
|
741
|
+
};
|
|
742
|
+
mpaNavigationTree = currentMpaNavigationTree;
|
|
743
|
+
registerNavigationRuntimeFunctions({ navigateExternal: (href, historyUpdateMode) => {
|
|
744
|
+
setMpaNavigationState(href, historyUpdateMode);
|
|
745
|
+
return waitForMpaNavigationRestore();
|
|
671
746
|
} });
|
|
672
747
|
browserRouterStateHasEverCommitted = true;
|
|
673
748
|
hydrationCachePublication.commit();
|
|
674
749
|
return () => {
|
|
675
750
|
hydrationCachePublication.invalidate();
|
|
751
|
+
if (mpaNavigationTree === currentMpaNavigationTree) mpaNavigationTree = null;
|
|
676
752
|
registerNavigationRuntimeFunctions({ navigateExternal: void 0 });
|
|
677
753
|
detach();
|
|
678
754
|
setMountedSlotsHeader(null);
|
|
@@ -718,7 +794,11 @@ function BrowserRoot({ hydrationCachePublication, initialElements, initialNaviga
|
|
|
718
794
|
treeState.renderId,
|
|
719
795
|
treeState.slotBindings
|
|
720
796
|
]);
|
|
721
|
-
const routeTree = createElement(RedirectBoundary, null, createElement(NavigationCommitSignal, { renderId: treeState.renderId },
|
|
797
|
+
const routeTree = createElement(RedirectBoundary, null, createElement(NavigationCommitSignal, { renderId: treeState.renderId }, createAppRouteTree({
|
|
798
|
+
elements: treeState.elements,
|
|
799
|
+
historyCommit: createElement(NavigationHistoryCommit, { renderId: treeState.renderId }),
|
|
800
|
+
routeId: treeState.routeId
|
|
801
|
+
})));
|
|
722
802
|
const bfcacheSegmentIdentities = useMemo(() => createBfcacheSegmentIdentityMap({ elements: treeState.elements }), [treeState.elements]);
|
|
723
803
|
const identityMapTree = createElement(BfcacheIdentityMapContext.Provider, { value: bfcacheSegmentIdentities }, routeTree);
|
|
724
804
|
const bfcacheTree = BfcacheIdMapContext ? createElement(BfcacheIdMapContext.Provider, { value: treeState.bfcacheIds }, identityMapTree) : identityMapTree;
|
|
@@ -863,6 +943,7 @@ async function readInitialRscStream() {
|
|
|
863
943
|
if (!rscResponse.body) return recoverFromBadInitialRscResponse("returned empty body");
|
|
864
944
|
clearReloadFlag();
|
|
865
945
|
clearHardNavigationLoopGuard();
|
|
946
|
+
setClientRscCompatibilityId(rscResponse.headers.get(VINEXT_RSC_COMPATIBILITY_ID_HEADER));
|
|
866
947
|
const parsedParams = parseEncodedJsonHeader(rscResponse.headers.get(VINEXT_PARAMS_HEADER));
|
|
867
948
|
const params = parsedParams ?? {};
|
|
868
949
|
if (parsedParams) try {
|
|
@@ -873,6 +954,7 @@ async function readInitialRscStream() {
|
|
|
873
954
|
return rscResponse.body;
|
|
874
955
|
}
|
|
875
956
|
function applyRuntimeRscBootstrap(rsc) {
|
|
957
|
+
setClientRscCompatibilityId(rsc.compatibilityId);
|
|
876
958
|
const params = rsc.params ?? {};
|
|
877
959
|
if (rsc.params) applyClientParams(rsc.params);
|
|
878
960
|
if (rsc.nav) restoreEmbeddedHydrationNavigationContext(rsc.nav.pathname, rsc.nav.searchParams, params, rsc.searchParamsFromBrowser === true);
|
|
@@ -884,7 +966,7 @@ function registerServerActionCallback() {
|
|
|
884
966
|
return loadServerActionClient().then(({ invokeClientServerAction }) => invokeClientServerAction(id, args, actionInitiation, {
|
|
885
967
|
basePath: __basePath,
|
|
886
968
|
clearClientNavigationCaches,
|
|
887
|
-
clientRscCompatibilityId
|
|
969
|
+
clientRscCompatibilityId,
|
|
888
970
|
commitSameUrlNavigatePayload,
|
|
889
971
|
navigationPlanner,
|
|
890
972
|
performHardNavigation: (url, historyMode) => browserNavigationController.performHardNavigation(url, historyMode),
|
|
@@ -919,6 +1001,7 @@ function registerServerActionCallback() {
|
|
|
919
1001
|
}
|
|
920
1002
|
async function main() {
|
|
921
1003
|
if (!claimInitialAppRouterBootstrap()) return;
|
|
1004
|
+
loadNavigationRuntimeRouteManifest();
|
|
922
1005
|
if (hasServerActions) registerServerActionCallback();
|
|
923
1006
|
installAppNavigationFailureListeners();
|
|
924
1007
|
if (HAS_CLIENT_REWRITES) await preloadHybridClientRouteOwner();
|
|
@@ -939,27 +1022,28 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
939
1022
|
const cacheGeneration = clientNavigationCacheGeneration;
|
|
940
1023
|
const [reactBranch, cacheBranch] = rscStream.tee();
|
|
941
1024
|
const initialNavigationSnapshot = withLateRenderedSearch(createClientNavigationRenderSnapshot(window.location.href, latestClientParams, getHydrationRenderedPathAndSearch()), initialRscBootstrap);
|
|
1025
|
+
const initialPathAndSearch = createSnapshotPathAndSearch(initialNavigationSnapshot);
|
|
942
1026
|
const root = decodeAppElementsPromise(createFromReadableStream(reactBranch)).then((elements) => {
|
|
1027
|
+
if (IS_STATIC_EXPORT) clientDeploymentVersion = AppElementsWire.readMetadata(elements).artifactCompatibility.deploymentVersion;
|
|
943
1028
|
bindAppElementsRenderedSearch(elements, initialNavigationSnapshot);
|
|
1029
|
+
initialPrefetchRouterState = {
|
|
1030
|
+
pathAndSearch: initialPathAndSearch,
|
|
1031
|
+
routeId: AppElementsWire.readMetadata(elements).routeId
|
|
1032
|
+
};
|
|
944
1033
|
return elements;
|
|
945
1034
|
});
|
|
946
1035
|
const initialParams = initialNavigationSnapshot.params;
|
|
947
|
-
const initialPathAndSearch = createSnapshotPathAndSearch(initialNavigationSnapshot);
|
|
948
1036
|
const initialCacheBuffer = new Response(cacheBranch).arrayBuffer();
|
|
949
1037
|
Promise.all([root, initialCacheBuffer]).then(async ([elements, buffer]) => {
|
|
950
1038
|
if (cacheGeneration !== clientNavigationCacheGeneration) return;
|
|
951
1039
|
const metadata = AppElementsWire.readMetadata(elements);
|
|
952
|
-
initialPrefetchRouterState = {
|
|
953
|
-
pathAndSearch: initialPathAndSearch,
|
|
954
|
-
routeId: metadata.routeId
|
|
955
|
-
};
|
|
956
1040
|
if (!isCompleteAppPayloadMetadata(metadata)) return;
|
|
957
1041
|
const mountedSlotsHeader = getMountedSlotIdsHeader(elements);
|
|
958
1042
|
const headers = createRscRequestHeaders({ mountedSlotsHeader });
|
|
959
1043
|
const rscUrl = await createRscRequestUrl(initialPathAndSearch, headers);
|
|
960
1044
|
if (cacheGeneration !== clientNavigationCacheGeneration) return;
|
|
961
1045
|
const snapshot = {
|
|
962
|
-
compatibilityIdHeader:
|
|
1046
|
+
compatibilityIdHeader: clientRscCompatibilityId,
|
|
963
1047
|
buffer,
|
|
964
1048
|
contentType: VINEXT_RSC_CONTENT_TYPE,
|
|
965
1049
|
...initialRscBootstrap?.dynamicStaleTimeSeconds !== void 0 ? { dynamicStaleTimeSeconds: initialRscBootstrap.dynamicStaleTimeSeconds } : {},
|
|
@@ -979,7 +1063,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
979
1063
|
});
|
|
980
1064
|
}).catch(() => {});
|
|
981
1065
|
historyController.writeBootstrapHistoryMetadata();
|
|
982
|
-
const reportUncaughtError = createOnUncaughtError();
|
|
1066
|
+
const reportUncaughtError = createOnUncaughtError({ coerceToError: import.meta.env.DEV });
|
|
983
1067
|
const onUncaughtError = (...args) => {
|
|
984
1068
|
hydrationCachePublication.fail();
|
|
985
1069
|
reportUncaughtError(...args);
|
|
@@ -1029,19 +1113,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1029
1113
|
clearNavigationCaches: clearClientNavigationCaches,
|
|
1030
1114
|
commitHashNavigation: (href, historyUpdateMode, scroll) => historyController.commitHashOnlyNavigation(href, historyUpdateMode, scroll),
|
|
1031
1115
|
getPrefetchRouterState: () => {
|
|
1032
|
-
if (!browserNavigationController.hasBrowserRouterState())
|
|
1033
|
-
if (initialPrefetchRouterState) return initialPrefetchRouterState;
|
|
1034
|
-
const routeManifest = getNavigationRuntime()?.bootstrap.routeManifest ?? null;
|
|
1035
|
-
const match = routeManifest ? matchOptimisticRouteManifestRoute({
|
|
1036
|
-
basePath: __basePath,
|
|
1037
|
-
href: window.location.href,
|
|
1038
|
-
routeManifest
|
|
1039
|
-
}) : null;
|
|
1040
|
-
return match ? {
|
|
1041
|
-
pathAndSearch: createBasePathStrippedPathAndSearch(new URL(window.location.href), __basePath),
|
|
1042
|
-
routeId: match.route.id
|
|
1043
|
-
} : null;
|
|
1044
|
-
}
|
|
1116
|
+
if (!browserNavigationController.hasBrowserRouterState()) return initialPrefetchRouterState;
|
|
1045
1117
|
const state = browserNavigationController.getBrowserRouterState();
|
|
1046
1118
|
return {
|
|
1047
1119
|
pathAndSearch: createSnapshotPathAndSearch(state.navigationSnapshot),
|
|
@@ -1060,11 +1132,21 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1060
1132
|
let currentPrevNextUrl = previousNextUrlOverride;
|
|
1061
1133
|
let redirectCount = redirectDepth;
|
|
1062
1134
|
let detachedNavigationCommits = false;
|
|
1135
|
+
let optimisticShellElements = null;
|
|
1136
|
+
const keepOptimisticShellMetadata = (payload) => {
|
|
1137
|
+
const shellElements = optimisticShellElements;
|
|
1138
|
+
if (shellElements === null) return payload;
|
|
1139
|
+
return payload instanceof Promise ? payload.then((elements) => keepOptimisticStreamingMetadata(elements, shellElements, String(navId))) : keepOptimisticStreamingMetadata(payload, shellElements, String(navId));
|
|
1140
|
+
};
|
|
1063
1141
|
const activeTraversalIntent = navigationKind === "traverse" ? traversalIntent ?? historyController.resolveTraversalIntent(window.history.state) : null;
|
|
1142
|
+
let startedHardNavigation = false;
|
|
1064
1143
|
const performHardNavigationForScrollIntent = (targetHref, mode) => {
|
|
1065
1144
|
consumeAppRouterScrollIntent(scrollIntent ?? null);
|
|
1066
|
-
const didNavigate = browserNavigationController.performHardNavigation(targetHref, mode);
|
|
1067
|
-
if (
|
|
1145
|
+
const didNavigate = browserNavigationController.performHardNavigation(targetHref, mode ?? (currentHistoryMode === "push" ? "assign" : "replace"));
|
|
1146
|
+
if (didNavigate) {
|
|
1147
|
+
startedHardNavigation = true;
|
|
1148
|
+
browserNavigationController.abandonPendingBrowserRouterState(pendingRouterState);
|
|
1149
|
+
} else clearAppNavigationFailureTarget(targetHref);
|
|
1068
1150
|
return didNavigate;
|
|
1069
1151
|
};
|
|
1070
1152
|
let restoredBfcacheIds = navigationKind === "traverse" ? historyController.readCurrentBfcacheVersionHistoryIds(activeTraversalIntent?.historyState ?? window.history.state) : null;
|
|
@@ -1078,6 +1160,15 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1078
1160
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
1079
1161
|
if (shouldUsePendingRouterState) pendingRouterState = beginPendingBrowserRouterState();
|
|
1080
1162
|
}
|
|
1163
|
+
const routeManifestLoad = loadNavigationRuntimeRouteManifest();
|
|
1164
|
+
if (routeManifestLoad !== null) {
|
|
1165
|
+
const routeManifestLoaded = await routeManifestLoad;
|
|
1166
|
+
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
1167
|
+
if (!routeManifestLoaded) {
|
|
1168
|
+
performHardNavigationForScrollIntent(currentHref);
|
|
1169
|
+
return;
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1081
1172
|
const navigationInitiationState = getBrowserRouterState();
|
|
1082
1173
|
const mountedSlotsHeader = getMountedSlotIdsHeader(navigationInitiationState.elements);
|
|
1083
1174
|
while (true) {
|
|
@@ -1172,7 +1263,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1172
1263
|
});
|
|
1173
1264
|
if (reuseDecision.kind === "reuseVisitedResponse" && cachedRoute) {
|
|
1174
1265
|
const cachedFetchDecision = navigationPlanner.classifyRscFetchResult({
|
|
1175
|
-
clientCompatibilityId:
|
|
1266
|
+
clientCompatibilityId: clientRscCompatibilityId,
|
|
1176
1267
|
compatibilityIdHeader: cachedRoute.response.compatibilityIdHeader ?? null,
|
|
1177
1268
|
currentHref,
|
|
1178
1269
|
effectiveHistoryUpdateMode: currentHistoryMode ?? "replace",
|
|
@@ -1204,7 +1295,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1204
1295
|
const cachedNavigationSnapshot = createClientNavigationRenderSnapshot(currentHref, cachedParams, cachedRoute.response.renderedPathAndSearch);
|
|
1205
1296
|
const cachedPayload = cachedRoute.elements ? Promise.resolve(cachedRoute.elements) : decodeAppElementsPromise(createFromFetch(Promise.resolve(restoreRscResponse(cachedRoute.response))));
|
|
1206
1297
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
1207
|
-
|
|
1298
|
+
const cachedRenderOutcome = await renderNavigationPayload({
|
|
1208
1299
|
actionType: toActionType(navigationKind),
|
|
1209
1300
|
historyUpdateMode: currentHistoryMode,
|
|
1210
1301
|
navigationCommitKind: detachedNavigationCommits ? "authoritative" : void 0,
|
|
@@ -1213,7 +1304,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1213
1304
|
navId,
|
|
1214
1305
|
operationLane: toOperationLane(navigationKind),
|
|
1215
1306
|
params: cachedParams,
|
|
1216
|
-
payload: cachedPayload,
|
|
1307
|
+
payload: keepOptimisticShellMetadata(cachedPayload),
|
|
1217
1308
|
payloadOrigin: cachedRoute.elements ? COMMITTED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN : VISITED_CACHE_APP_NAVIGATION_PAYLOAD_ORIGIN,
|
|
1218
1309
|
pendingRouterState: detachedNavigationCommits ? null : pendingRouterState,
|
|
1219
1310
|
previousNextUrl: requestPreviousNextUrl,
|
|
@@ -1223,7 +1314,12 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1223
1314
|
targetHref: currentHref,
|
|
1224
1315
|
traversalIntent: activeTraversalIntent,
|
|
1225
1316
|
visibleCommitMode
|
|
1226
|
-
})
|
|
1317
|
+
});
|
|
1318
|
+
if (cachedRenderOutcome === "hard-navigate") {
|
|
1319
|
+
startedHardNavigation = true;
|
|
1320
|
+
browserNavigationController.abandonPendingBrowserRouterState(pendingRouterState);
|
|
1321
|
+
}
|
|
1322
|
+
if (cachedRenderOutcome === "no-commit") {
|
|
1227
1323
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
1228
1324
|
deleteVisitedResponse(rscUrl, requestInterceptionContext);
|
|
1229
1325
|
continue;
|
|
@@ -1296,6 +1392,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1296
1392
|
template: optimisticPayload.template
|
|
1297
1393
|
})) {
|
|
1298
1394
|
detachedNavigationCommits = true;
|
|
1395
|
+
optimisticShellElements = optimisticPayload.elements;
|
|
1299
1396
|
const optimisticNavigationSnapshot = createClientNavigationRenderSnapshot(currentHref, optimisticPayload.params);
|
|
1300
1397
|
renderNavigationPayload({
|
|
1301
1398
|
actionType: toActionType(navigationKind),
|
|
@@ -1343,7 +1440,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1343
1440
|
const streamedRedirectType = streamedRedirectTypeHeader === "push" || streamedRedirectTypeHeader === "replace" ? streamedRedirectTypeHeader : null;
|
|
1344
1441
|
if (blockDangerousStreamedRscRedirect(navResponse, streamedRedirectTarget)) return;
|
|
1345
1442
|
const liveFetchDecision = navigationPlanner.classifyRscFetchResult({
|
|
1346
|
-
clientCompatibilityId:
|
|
1443
|
+
clientCompatibilityId: clientRscCompatibilityId,
|
|
1347
1444
|
compatibilityIdHeader: navResponse.headers.get(VINEXT_RSC_COMPATIBILITY_ID_HEADER),
|
|
1348
1445
|
currentHref,
|
|
1349
1446
|
effectiveHistoryUpdateMode: currentHistoryMode ?? "replace",
|
|
@@ -1422,7 +1519,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1422
1519
|
}
|
|
1423
1520
|
if (!browserNavigationController.isCurrentNavigation(navId)) return;
|
|
1424
1521
|
let committedState = null;
|
|
1425
|
-
|
|
1522
|
+
const renderOutcome = await renderNavigationPayload({
|
|
1426
1523
|
actionType: toActionType(navigationKind),
|
|
1427
1524
|
historyUpdateMode: currentHistoryMode,
|
|
1428
1525
|
navigationCommitKind: detachedNavigationCommits ? "authoritative" : void 0,
|
|
@@ -1442,7 +1539,7 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1442
1539
|
},
|
|
1443
1540
|
operationLane: toOperationLane(navigationKind),
|
|
1444
1541
|
params: navParams,
|
|
1445
|
-
payload: rscPayload,
|
|
1542
|
+
payload: keepOptimisticShellMetadata(rscPayload),
|
|
1446
1543
|
payloadOrigin: FRESH_APP_NAVIGATION_PAYLOAD_ORIGIN,
|
|
1447
1544
|
pendingRouterState: detachedNavigationCommits ? null : pendingRouterState,
|
|
1448
1545
|
previousNextUrl: requestPreviousNextUrl,
|
|
@@ -1451,8 +1548,13 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1451
1548
|
scrollIntent,
|
|
1452
1549
|
targetHref: currentHref,
|
|
1453
1550
|
traversalIntent: activeTraversalIntent,
|
|
1454
|
-
visibleCommitMode
|
|
1455
|
-
})
|
|
1551
|
+
visibleCommitMode
|
|
1552
|
+
});
|
|
1553
|
+
if (renderOutcome === "hard-navigate") {
|
|
1554
|
+
startedHardNavigation = true;
|
|
1555
|
+
browserNavigationController.abandonPendingBrowserRouterState(pendingRouterState);
|
|
1556
|
+
}
|
|
1557
|
+
if (renderOutcome !== "committed") return;
|
|
1456
1558
|
if (hasSupplementalRefresh) {
|
|
1457
1559
|
clearVisitedResponseCache();
|
|
1458
1560
|
return;
|
|
@@ -1501,9 +1603,13 @@ function bootstrapHydration(rscStream, devErrorOverlay, initialRscBootstrap) {
|
|
|
1501
1603
|
navigationAbortHandle.release();
|
|
1502
1604
|
browserNavigationController.finalizeNavigation(navId, pendingRouterState);
|
|
1503
1605
|
discardedServerActionRefreshScheduler.markNavigationSettled();
|
|
1606
|
+
if (startedHardNavigation) await waitForMpaNavigationRestore();
|
|
1504
1607
|
}
|
|
1505
1608
|
},
|
|
1506
|
-
preparePrefetchResponse: (response) =>
|
|
1609
|
+
preparePrefetchResponse: (response) => {
|
|
1610
|
+
if (!isRscResponseCompatible(response.headers.get("X-Vinext-RSC-Compatibility-Id"))) return Promise.reject(/* @__PURE__ */ new Error("[vinext] Prefetched another deployment's payload"));
|
|
1611
|
+
return decodeAppElementsPromise(createFromFetch(Promise.resolve(response)));
|
|
1612
|
+
},
|
|
1507
1613
|
claimCurrentHistoryTreeSnapshot: (historyUpdateMode, previousHistoryState) => historyController.claimCurrentHistoryTreeSnapshot(historyUpdateMode, previousHistoryState),
|
|
1508
1614
|
commitAppOwnedHistoryStateWrite: (historyUpdateMode, previousHistoryState) => historyController.commitAppOwnedHistoryStateWrite(historyUpdateMode, previousHistoryState),
|
|
1509
1615
|
discardPendingNavigation: () => {
|
|
@@ -1609,7 +1715,12 @@ if (typeof document !== "undefined") {
|
|
|
1609
1715
|
});
|
|
1610
1716
|
window.addEventListener("pageshow", (event) => {
|
|
1611
1717
|
isPageUnloading = false;
|
|
1612
|
-
if (event.persisted)
|
|
1718
|
+
if (event.persisted) {
|
|
1719
|
+
mpaNavigationScheduler.reset();
|
|
1720
|
+
mpaNavigationTree?.restore();
|
|
1721
|
+
mpaNavigationRestore?.resolve();
|
|
1722
|
+
mpaNavigationRestore = null;
|
|
1723
|
+
}
|
|
1613
1724
|
});
|
|
1614
1725
|
main();
|
|
1615
1726
|
}
|
|
@@ -4,8 +4,11 @@ type VinextHydrateRootErrorInfo = {
|
|
|
4
4
|
errorBoundary?: unknown;
|
|
5
5
|
};
|
|
6
6
|
type HydrateRootErrorHandler = (error: unknown, errorInfo: VinextHydrateRootErrorInfo) => void;
|
|
7
|
-
export declare function createOnUncaughtError(
|
|
7
|
+
export declare function createOnUncaughtError(options?: {
|
|
8
|
+
coerceToError?: boolean;
|
|
9
|
+
}): HydrateRootErrorHandler;
|
|
8
10
|
export declare function createProdOnCaughtError(onImplicitRootError: HydrateRootErrorHandler): HydrateRootErrorHandler;
|
|
9
11
|
export declare function createDevOnCaughtError(onCaughtError: HydrateRootErrorHandler, onImplicitRootError: HydrateRootErrorHandler): HydrateRootErrorHandler;
|
|
10
12
|
export declare function createProdOnRecoverableError(onReportedError: () => void): (error: unknown) => void;
|
|
11
|
-
//#endregion
|
|
13
|
+
//#endregion
|
|
14
|
+
export {};
|
|
@@ -18,9 +18,14 @@ function reportGlobalError(error) {
|
|
|
18
18
|
}
|
|
19
19
|
console.error(error);
|
|
20
20
|
}
|
|
21
|
-
function
|
|
21
|
+
function coerceError(value) {
|
|
22
|
+
if (isNavigationSignalError(value)) return value;
|
|
23
|
+
if (typeof value === "object" && value !== null && "name" in value && "message" in value) return value;
|
|
24
|
+
return new Error(String(value));
|
|
25
|
+
}
|
|
26
|
+
function createOnUncaughtError(options = {}) {
|
|
22
27
|
return (error) => {
|
|
23
|
-
reportGlobalError(error);
|
|
28
|
+
reportGlobalError(options.coerceToError ? coerceError(error) : error);
|
|
24
29
|
};
|
|
25
30
|
}
|
|
26
31
|
function createProdOnCaughtError(onImplicitRootError) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BrowserRouteManifest } from "../routing/browser-route-manifest.js";
|
|
2
2
|
//#region src/server/app-browser-interception-context.d.ts
|
|
3
3
|
type ResolveManifestNavigationInterceptionContextOptions = {
|
|
4
4
|
basePath: string;
|
|
5
5
|
currentMatchedPathname?: string | null;
|
|
6
6
|
currentPathname: string;
|
|
7
|
-
routeManifest:
|
|
7
|
+
routeManifest: BrowserRouteManifest | null;
|
|
8
8
|
targetPathname: string;
|
|
9
9
|
};
|
|
10
10
|
/**
|
|
@@ -20,4 +20,5 @@ type ResolveManifestNavigationInterceptionContextOptions = {
|
|
|
20
20
|
*/
|
|
21
21
|
export declare function resolveManifestNavigationInterceptionContext(options: ResolveManifestNavigationInterceptionContextOptions): string | null;
|
|
22
22
|
export declare function resolveMiddlewareRewriteNavigationInterceptionContext(options: ResolveManifestNavigationInterceptionContextOptions): string | null;
|
|
23
|
-
//#endregion
|
|
23
|
+
//#endregion
|
|
24
|
+
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HistoryUpdateMode } from "./app-browser-navigation-controller.js";
|
|
2
2
|
//#region src/server/app-browser-mpa-navigation.d.ts
|
|
3
3
|
export type AppBrowserMpaNavigationWindow = {
|
|
4
|
+
document?: Pick<Document, "visibilityState">;
|
|
4
5
|
location: Pick<Location, "assign" | "replace">;
|
|
5
6
|
requestAnimationFrame?: (callback: FrameRequestCallback) => unknown;
|
|
6
7
|
setTimeout(callback: () => void, timeout: number): unknown;
|
|
@@ -14,21 +14,22 @@ var AppBrowserMpaNavigationScheduler = class {
|
|
|
14
14
|
this.#pendingNavigation = null;
|
|
15
15
|
}
|
|
16
16
|
navigate(targetWindow, href, historyUpdateMode) {
|
|
17
|
-
|
|
18
|
-
if (pendingNavigation?.href === href && pendingNavigation.historyUpdateMode === historyUpdateMode) return;
|
|
17
|
+
if (this.#pendingNavigation?.href === href) return;
|
|
19
18
|
const token = this.#nextToken + 1;
|
|
20
19
|
this.#nextToken = token;
|
|
21
20
|
this.#pendingNavigation = {
|
|
22
21
|
href,
|
|
23
|
-
historyUpdateMode,
|
|
24
22
|
token
|
|
25
23
|
};
|
|
26
24
|
const navigate = () => {
|
|
27
|
-
|
|
28
|
-
if (currentNavigation?.href !== href || currentNavigation.historyUpdateMode !== historyUpdateMode || currentNavigation.token !== token) return;
|
|
25
|
+
if (this.#pendingNavigation?.token !== token) return;
|
|
29
26
|
if (historyUpdateMode === "replace") targetWindow.location.replace(href);
|
|
30
27
|
else targetWindow.location.assign(href);
|
|
31
28
|
};
|
|
29
|
+
if (targetWindow.document?.visibilityState === "hidden") {
|
|
30
|
+
navigate();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
32
33
|
if (typeof targetWindow.requestAnimationFrame === "function") {
|
|
33
34
|
targetWindow.requestAnimationFrame(() => {
|
|
34
35
|
targetWindow.setTimeout(navigate, 0);
|