vinext 1.3.0 → 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/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 +13 -3
- package/dist/build/client-build-config.js +46 -9
- package/dist/build/client-reference-async.d.ts +48 -0
- package/dist/build/client-reference-async.js +123 -0
- package/dist/build/client-reference-chunks.d.ts +32 -0
- package/dist/build/client-reference-chunks.js +111 -0
- package/dist/build/client-reference-groups.d.ts +9 -1
- package/dist/build/client-reference-groups.js +40 -2
- package/dist/build/css-url-assets.d.ts +2 -1
- package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
- package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
- package/dist/build/google-fonts/font-metadata.d.ts +2 -1
- package/dist/build/google-fonts/validate.d.ts +2 -1
- package/dist/build/inline-css.d.ts +2 -1
- package/dist/build/layout-classification.d.ts +2 -1
- package/dist/build/module-dependency-cache.d.ts +2 -1
- package/dist/build/next-client-runtime-manifests.d.ts +2 -1
- package/dist/build/precompress.d.ts +2 -1
- package/dist/build/precompress.js +1 -1
- package/dist/build/prerender-paths.d.ts +2 -1
- package/dist/build/prerender-phase.d.ts +2 -1
- package/dist/build/prerender-server-pool.js +1 -1
- package/dist/build/prerender.d.ts +3 -2
- package/dist/build/prerender.js +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 +2 -1
- package/dist/build/ssr-manifest.js +25 -2
- package/dist/build/standalone.d.ts +2 -1
- package/dist/cache/cache-adapters-virtual.d.ts +2 -1
- package/dist/cache.js +1 -2
- package/dist/check.d.ts +2 -1
- package/dist/check.js +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-rewrites.d.ts +2 -1
- package/dist/client/dev-error-overlay-store.d.ts +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 +3 -1
- package/dist/client/navigation-runtime.js +1 -1
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -1
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +12 -1
- package/dist/config/config-matchers.js +111 -16
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/next-config.d.ts +13 -1
- package/dist/config/next-config.js +29 -4
- 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 +20 -5
- package/dist/entries/app-browser-entry.js +79 -6
- package/dist/entries/app-rsc-entry.d.ts +2 -1
- package/dist/entries/app-rsc-entry.js +42 -12
- package/dist/entries/app-rsc-manifest.d.ts +2 -1
- package/dist/entries/app-rsc-manifest.js +53 -0
- package/dist/entries/pages-entry-helpers.js +1 -2
- package/dist/entries/pages-server-entry.d.ts +2 -1
- package/dist/entries/pages-server-entry.js +1 -1
- package/dist/entries/runtime-entry-module.d.ts +1 -0
- package/dist/entries/runtime-entry-module.js +4 -1
- package/dist/image/image-adapters-virtual.d.ts +2 -1
- package/dist/index.js +102 -34
- 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 +2 -1
- 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 +8 -0
- package/dist/plugins/rsc-client-reference-loaders.js +170 -68
- package/dist/plugins/rsc-client-shim-excludes.js +2 -0
- package/dist/plugins/sass.d.ts +2 -1
- package/dist/plugins/strip-server-exports.d.ts +2 -1
- package/dist/plugins/styled-jsx.d.ts +2 -1
- package/dist/plugins/transform-result.d.ts +2 -1
- package/dist/plugins/typeof-window.d.ts +2 -1
- package/dist/plugins/worker-image-imports.js +1 -1
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +40 -0
- package/dist/routing/app-route-graph.js +122 -50
- package/dist/routing/browser-route-manifest.d.ts +2 -1
- package/dist/routing/optimistic-route-trie.d.ts +2 -1
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/app-action-forwarding.d.ts +2 -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 +30 -6
- package/dist/server/app-browser-error.d.ts +2 -1
- 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 +2 -1
- package/dist/server/app-browser-navigation-controller.js +15 -10
- 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.js +1 -1
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-visible-commit.d.ts +2 -1
- package/dist/server/app-client-reference-manifest.d.ts +31 -0
- package/dist/server/app-client-reference-manifest.js +46 -0
- package/dist/server/app-client-reference-preloader.d.ts +25 -5
- package/dist/server/app-client-reference-preloader.js +22 -7
- package/dist/server/app-elements-wire.d.ts +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 +4 -1
- 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-optimistic-routing.d.ts +18 -1
- package/dist/server/app-optimistic-routing.js +34 -1
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +221 -38
- 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 +14 -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 +163 -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 +35 -10
- 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 +2 -1
- package/dist/server/app-page-search-params-observation.d.ts +7 -2
- package/dist/server/app-page-search-params-observation.js +8 -1
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +31 -1
- package/dist/server/app-page-stream.js +23 -4
- package/dist/server/app-pages-bridge.d.ts +2 -1
- package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
- package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
- package/dist/server/app-prerender-endpoints.d.ts +2 -1
- package/dist/server/app-prerender-static-params.d.ts +2 -1
- package/dist/server/app-render-dependency.d.ts +11 -1
- package/dist/server/app-render-dependency.js +26 -7
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +1 -1
- package/dist/server/app-route-handler-execution.d.ts +2 -1
- package/dist/server/app-route-handler-response.d.ts +2 -1
- package/dist/server/app-route-handler-runtime.d.ts +2 -1
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +8 -0
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-rsc-error-handler.d.ts +2 -1
- package/dist/server/app-rsc-errors.d.ts +2 -1
- package/dist/server/app-rsc-handler.d.ts +2 -1
- package/dist/server/app-rsc-handler.js +6 -10
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
- package/dist/server/app-rsc-route-matching.d.ts +38 -1
- package/dist/server/app-rsc-route-matching.js +24 -0
- package/dist/server/app-segment-config.d.ts +2 -1
- package/dist/server/app-segment-config.js +1 -14
- package/dist/server/app-server-action-execution.d.ts +2 -1
- package/dist/server/app-server-action-execution.js +3 -3
- package/dist/server/app-ssr-entry.d.ts +6 -0
- package/dist/server/app-ssr-entry.js +91 -44
- package/dist/server/app-ssr-error-meta.d.ts +2 -1
- package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
- package/dist/server/app-ssr-stream.d.ts +22 -10
- package/dist/server/app-ssr-stream.js +299 -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/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/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-runtime.d.ts +2 -1
- package/dist/server/navigation-trace.d.ts +2 -1
- package/dist/server/next-error-digest.d.ts +2 -1
- package/dist/server/nitro-public-files-plugin.d.ts +2 -1
- package/dist/server/nitro-public-files.d.ts +2 -1
- package/dist/server/opentelemetry-api.d.ts +2 -1
- package/dist/server/operation-token.d.ts +2 -1
- package/dist/server/pages-api-route.d.ts +2 -1
- package/dist/server/pages-asset-tags.d.ts +2 -1
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +4 -0
- package/dist/server/pages-data-route.d.ts +2 -1
- package/dist/server/pages-document-asset-props.d.ts +2 -1
- package/dist/server/pages-document-initial-props.d.ts +2 -1
- package/dist/server/pages-execution-tracing.d.ts +2 -1
- package/dist/server/pages-execution-tracing.js +1 -1
- package/dist/server/pages-get-initial-props.d.ts +2 -1
- package/dist/server/pages-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 +2 -1
- package/dist/server/pages-request-pipeline.js +4 -5
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-route-data-kind.d.ts +2 -1
- package/dist/server/prerender-cache-life-header.d.ts +2 -1
- package/dist/server/prerender-route-params.d.ts +2 -1
- package/dist/server/prod-server.js +9 -3
- package/dist/server/request-log.d.ts +2 -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/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +1 -0
- 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/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 +29 -9
- 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 +2 -1
- 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/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 +1 -1
- package/dist/shims/http-access-error-fallback.d.ts +7 -0
- package/dist/shims/http-access-error-fallback.js +47 -0
- package/dist/shims/image.d.ts +1 -22
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
- package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
- package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
- package/dist/shims/internal/client-reference-loader.d.ts +7 -0
- package/dist/shims/internal/client-reference-loader.js +91 -0
- package/dist/shims/internal/cookie-serialize.d.ts +2 -1
- package/dist/shims/internal/cookies.js +1 -2
- package/dist/shims/internal/headers-state.d.ts +2 -0
- package/dist/shims/internal/headers-state.js +6 -1
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
- package/dist/shims/internal/interpolate-as.d.ts +2 -1
- package/dist/shims/internal/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 +195 -52
- 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 +22 -2
- package/dist/shims/navigation.js +74 -20
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/router.js +14 -3
- package/dist/shims/unified-request-context.js +3 -3
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +9 -2
- package/dist/utils/client-entry-manifest.d.ts +13 -0
- package/dist/utils/client-entry-manifest.js +20 -1
- package/dist/utils/client-reference-chunks.d.ts +45 -0
- package/dist/utils/client-reference-chunks.js +30 -0
- package/dist/utils/client-runtime-metadata.d.ts +9 -1
- package/dist/utils/client-runtime-metadata.js +40 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +14 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/project.d.ts +2 -1
- package/dist/utils/project.js +9 -1
- 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/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
|
@@ -7,6 +7,7 @@ import { NavigationContext } from "../shims/navigation-context-state.js";
|
|
|
7
7
|
import "../shims/navigation.js";
|
|
8
8
|
import { AppPageFontPreload, LayoutClassificationOptions } from "./app-page-execution.js";
|
|
9
9
|
import { AppPageMiddlewareContext } from "./app-page-response.js";
|
|
10
|
+
import { AppPageFallbackRouteHead, AppPagePreparedRouteHead } from "./app-page-head.js";
|
|
10
11
|
import { AppLayoutParamAccessTracker } from "./app-layout-param-observation.js";
|
|
11
12
|
import { RootParams } from "../shims/root-params.js";
|
|
12
13
|
import { AppPageSsrHandler } from "./app-page-stream.js";
|
|
@@ -43,8 +44,16 @@ type AppPageDispatchIntercept<TPage = unknown> = {
|
|
|
43
44
|
interceptLoadings?: readonly unknown[] | null;
|
|
44
45
|
interceptLoadingTreePositions?: readonly number[] | null;
|
|
45
46
|
interceptNotFoundBranchSegments?: readonly string[] | null;
|
|
47
|
+
interceptNotFounds?: readonly unknown[] | null;
|
|
48
|
+
interceptNotFoundTreePositions?: readonly number[] | null;
|
|
46
49
|
notFound?: unknown;
|
|
47
50
|
notFoundTreePosition?: number | null;
|
|
51
|
+
interceptForbiddens?: readonly unknown[] | null;
|
|
52
|
+
interceptForbiddenTreePositions?: readonly number[] | null;
|
|
53
|
+
interceptUnauthorizeds?: readonly unknown[] | null;
|
|
54
|
+
interceptUnauthorizedTreePositions?: readonly number[] | null;
|
|
55
|
+
interceptErrors?: readonly unknown[] | null;
|
|
56
|
+
interceptErrorTreePositions?: readonly number[] | null;
|
|
48
57
|
matchedParams: AppPageParams;
|
|
49
58
|
sourceMatchedParams?: AppPageParams;
|
|
50
59
|
page: TPage;
|
|
@@ -67,6 +76,14 @@ type AppPageDispatchInterceptOptions<TPage = unknown> = {
|
|
|
67
76
|
interceptNotFoundBranchSegments?: readonly string[] | null;
|
|
68
77
|
interceptNotFound?: unknown;
|
|
69
78
|
interceptNotFoundTreePosition?: number | null;
|
|
79
|
+
interceptForbiddens?: readonly unknown[] | null;
|
|
80
|
+
interceptForbiddenTreePositions?: readonly number[] | null;
|
|
81
|
+
interceptUnauthorizeds?: readonly unknown[] | null;
|
|
82
|
+
interceptUnauthorizedTreePositions?: readonly number[] | null;
|
|
83
|
+
interceptErrors?: readonly unknown[] | null;
|
|
84
|
+
interceptErrorTreePositions?: readonly number[] | null;
|
|
85
|
+
interceptNotFounds?: readonly unknown[] | null;
|
|
86
|
+
interceptNotFoundTreePositions?: readonly number[] | null;
|
|
70
87
|
interceptPage: TPage;
|
|
71
88
|
interceptParams: AppPageParams;
|
|
72
89
|
interceptSlotId?: string | null;
|
|
@@ -108,6 +125,12 @@ export type AppPageDispatchRoute = {
|
|
|
108
125
|
params: readonly string[];
|
|
109
126
|
pattern: string;
|
|
110
127
|
routeSegments: readonly string[];
|
|
128
|
+
segmentForbiddens?: readonly (AppPageModule | null | undefined)[];
|
|
129
|
+
segmentForbiddenTreePositions?: readonly number[];
|
|
130
|
+
segmentNotFounds?: readonly (AppPageModule | null | undefined)[];
|
|
131
|
+
segmentNotFoundTreePositions?: readonly number[];
|
|
132
|
+
segmentUnauthorizeds?: readonly (AppPageModule | null | undefined)[];
|
|
133
|
+
segmentUnauthorizedTreePositions?: readonly number[];
|
|
111
134
|
slots?: Readonly<Record<string, AppPageDispatchSlot>>;
|
|
112
135
|
unauthorized?: AppPageModule | null;
|
|
113
136
|
unauthorizedTreePosition?: number | null;
|
|
@@ -140,10 +163,13 @@ export type DispatchAppPageOptions<TRoute extends AppPageDispatchRoute> = {
|
|
|
140
163
|
reactMaxHeadersLength?: number;
|
|
141
164
|
buildPageElement: (route: TRoute, params: AppPageParams, opts: AppPageDispatchInterceptOptions | undefined, searchParams: URLSearchParams, layoutParamAccess?: AppLayoutParamAccessTracker, options?: {
|
|
142
165
|
isForceStatic?: boolean;
|
|
166
|
+
isUncacheableRender?: boolean;
|
|
143
167
|
observeMetadataSearchParamsAccess?: boolean;
|
|
144
168
|
observePageSearchParamsAccess?: boolean;
|
|
145
169
|
serveStreamingMetadata?: boolean;
|
|
146
170
|
placeStreamedMetadataInHead?: boolean;
|
|
171
|
+
/** Receives the route's head once the render starts resolving it. */
|
|
172
|
+
onHeadPrepared?: (head: AppPagePreparedRouteHead) => void;
|
|
147
173
|
}) => Promise<AppPageElement>;
|
|
148
174
|
clientReuseManifest?: ClientReuseManifestParseResult;
|
|
149
175
|
cleanPathname: string;
|
|
@@ -229,11 +255,17 @@ export type DispatchAppPageOptions<TRoute extends AppPageDispatchRoute> = {
|
|
|
229
255
|
renderHttpAccessFallbackPage: (statusCode: number, opts: {
|
|
230
256
|
boundaryComponent?: unknown;
|
|
231
257
|
boundaryModule?: AppPageModule | null;
|
|
258
|
+
/** Boundary whose metadata the head uses, when not `boundaryModule`. */
|
|
259
|
+
headBoundaryModule?: AppPageModule | null;
|
|
260
|
+
/** Layouts whose metadata the head uses, when more than `layouts`. */
|
|
261
|
+
headLayouts?: readonly AppPageModule[];
|
|
232
262
|
intercept?: AppPageDispatchInterceptOptions | null;
|
|
233
263
|
/** The document may be stored, so it must not carry the request's query. */
|
|
234
264
|
isCacheCandidate?: boolean;
|
|
235
265
|
layouts?: readonly AppPageModule[];
|
|
236
266
|
matchedParams: AppPageParams;
|
|
267
|
+
/** The route's render threw the signal, so the document keeps the route's head. */
|
|
268
|
+
routeHead?: AppPageFallbackRouteHead;
|
|
237
269
|
}, middlewareContext: AppPageMiddlewareContext | null) => Promise<Response | null>;
|
|
238
270
|
renderToReadableStream: (element: AppPageRenderableElement, options: {
|
|
239
271
|
onError: AppPageBoundaryOnError;
|
|
@@ -290,4 +322,5 @@ export declare function shouldReadAppPageCache(options: {
|
|
|
290
322
|
}): boolean;
|
|
291
323
|
export declare function hasSearchParams(searchParams: URLSearchParams | null | undefined): boolean;
|
|
292
324
|
export declare function dispatchAppPage<TRoute extends AppPageDispatchRoute>(options: DispatchAppPageOptions<TRoute>): Promise<Response>;
|
|
293
|
-
//#endregion
|
|
325
|
+
//#endregion
|
|
326
|
+
export {};
|
|
@@ -11,6 +11,7 @@ import { _captureRequestScopedCacheLifeAccessors } from "../shims/cache-request-
|
|
|
11
11
|
import { ensureFetchPatch, getCollectedFetchTags, peekDynamicFetchObservations, runWithFetchDedupe, setCurrentFetchCacheMode, setCurrentFetchRevalidate, setCurrentFetchSoftTags, setCurrentForceDynamicFetchDefault, setRefreshStaleFetchesInForeground } from "../shims/fetch-cache.js";
|
|
12
12
|
import { cacheabilityManifestPageState } from "./cacheability-manifest.js";
|
|
13
13
|
import { isAppPageStaticEligible } from "./app-segment-config.js";
|
|
14
|
+
import { isAppClientReference } from "./app-render-dependency.js";
|
|
14
15
|
import { AppElementsWire } from "./app-elements-wire.js";
|
|
15
16
|
import "./app-elements.js";
|
|
16
17
|
import { VINEXT_RSC_CONTENT_TYPE, applyRscCompatibilityIdHeader, applyRscDeploymentIdHeader } from "./app-rsc-cache-busting.js";
|
|
@@ -18,17 +19,18 @@ import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js
|
|
|
18
19
|
import { getFrameworkLinkHeader } from "./app-response-header-provenance.js";
|
|
19
20
|
import { resolveUncacheableCacheControl } from "./app-page-response.js";
|
|
20
21
|
import { buildRscRedirectFlightStream } from "./app-rsc-redirect-flight.js";
|
|
21
|
-
import { buildAppPageSpecialErrorResponse, resolveAppPageShellSpecialError, resolveAppPageSpecialError, resolveAppPageSpecialErrorStoredHeaders } from "./app-page-execution.js";
|
|
22
|
+
import { buildAppPageSpecialErrorResponse, resolveAppPageCaughtNotFoundBoundaries, resolveAppPageShellSpecialError, resolveAppPageSpecialError, resolveAppPageSpecialErrorStoredHeaders } from "./app-page-execution.js";
|
|
22
23
|
import { resolveAppPageTraceOperation } from "./app-page-tracing.js";
|
|
23
24
|
import { createAppPageTreePath } from "./app-page-route-wiring.js";
|
|
24
25
|
import { traceResponseStart } from "./response-start-tracing.js";
|
|
25
|
-
import {
|
|
26
|
-
import { consumeAppPageRenderObservationState, discardAppPageRenderState } from "./app-page-render-observation.js";
|
|
27
|
-
import { createAppPageRscErrorTracker } from "./app-page-stream.js";
|
|
28
|
-
import { resolveAppPageParentHttpAccessBoundary, resolveAppPageParentHttpAccessBoundaryModule } from "./app-page-boundary.js";
|
|
26
|
+
import { resolveAppPageLayoutHttpAccessBoundary, resolveAppPageParentHttpAccessBoundary, resolveAppPageRootHttpAccessBoundaryTreePosition } from "./app-page-boundary.js";
|
|
29
27
|
import { shouldServeStreamingMetadata } from "./streaming-metadata.js";
|
|
30
28
|
import { resolveAppPageNavigationParams } from "./app-page-element-builder.js";
|
|
29
|
+
import { createAppPageRscErrorTracker } from "./app-page-stream.js";
|
|
30
|
+
import { getDefaultHttpAccessFallbackModule } from "./default-http-access-fallback-modules.js";
|
|
31
31
|
import { createAppLayoutParamAccessTracker, isAppLayoutObservationUnsafeForStaticReuse } from "./app-layout-param-observation.js";
|
|
32
|
+
import { consumeAppPageRenderObservationState, discardAppPageRenderState } from "./app-page-render-observation.js";
|
|
33
|
+
import { buildAppPageTags } from "./implicit-tags.js";
|
|
32
34
|
import { resolveAppPageMethodResponse } from "./app-page-method.js";
|
|
33
35
|
import { buildAppPageElement, resolveAppPageIntercept, resolveAppPageInterceptionRerenderTarget, validateAppPageDynamicParams } from "./app-page-request.js";
|
|
34
36
|
import { applyIneligibleRouteCachePolicy, renderAppPageLifecycle } from "./app-page-render.js";
|
|
@@ -182,6 +184,14 @@ function toInterceptOptions(interceptionContext, intercept) {
|
|
|
182
184
|
interceptNotFoundBranchSegments: intercept.interceptNotFoundBranchSegments,
|
|
183
185
|
interceptNotFound: intercept.notFound,
|
|
184
186
|
interceptNotFoundTreePosition: intercept.notFoundTreePosition,
|
|
187
|
+
interceptForbiddens: intercept.interceptForbiddens,
|
|
188
|
+
interceptForbiddenTreePositions: intercept.interceptForbiddenTreePositions,
|
|
189
|
+
interceptUnauthorizeds: intercept.interceptUnauthorizeds,
|
|
190
|
+
interceptUnauthorizedTreePositions: intercept.interceptUnauthorizedTreePositions,
|
|
191
|
+
interceptErrors: intercept.interceptErrors,
|
|
192
|
+
interceptErrorTreePositions: intercept.interceptErrorTreePositions,
|
|
193
|
+
interceptNotFounds: intercept.interceptNotFounds,
|
|
194
|
+
interceptNotFoundTreePositions: intercept.interceptNotFoundTreePositions,
|
|
185
195
|
interceptPage: intercept.page,
|
|
186
196
|
interceptParams: intercept.matchedParams,
|
|
187
197
|
interceptSlotId: intercept.slotId ?? null,
|
|
@@ -316,6 +326,7 @@ async function dispatchAppPageInner(options) {
|
|
|
316
326
|
const isNeverStoredPath = options.pprRuntime === void 0 && hasNoManifestAdmissionState(route.pattern);
|
|
317
327
|
const shouldReadCache = !isRouteCacheabilityProbe() && isCacheEligibleRender && !isNeverStoredPath;
|
|
318
328
|
const isCacheCandidate = isCacheEligibleRender && isStaticEligible && options.pprFallbackShell === void 0 && !isNeverStoredPath;
|
|
329
|
+
const isUncacheableRender = !(isCacheEligibleRender && isStaticEligible) && options.pprFallbackShell === void 0 && (options.pprRuntime === void 0 || !options.isProduction);
|
|
319
330
|
if (shouldReadCache && isStaticEligible) {
|
|
320
331
|
traceOperation = resolveAppPageTraceOperation({
|
|
321
332
|
hasRequestSearchParams,
|
|
@@ -381,6 +392,12 @@ async function dispatchAppPageInner(options) {
|
|
|
381
392
|
const revalidationDynamicConfig = options.resolveRouteDynamicConfig?.(revalidationTarget.route) ?? (revalidationTarget.route === route ? dynamicConfig : void 0);
|
|
382
393
|
const revalidationConfigRevalidateSeconds = options.resolveRouteRevalidateSeconds?.(revalidationTarget.route) ?? (revalidationTarget.route === route ? currentRevalidateSeconds : null);
|
|
383
394
|
const revalidationRouteRevalidateSeconds = revalidationTarget.route === route ? void 0 : revalidationConfigRevalidateSeconds ?? (revalidationDynamicConfig === "force-static" || revalidationDynamicConfig === "error" || options.isProduction && options.pprRuntime === void 0 && options.resolveRouteStaticEligible(revalidationTarget.route) ? Infinity : null);
|
|
395
|
+
const revalidationRouteHead = {
|
|
396
|
+
observeSearchParams: revalidationDynamicConfig !== "force-static",
|
|
397
|
+
searchParams: new URLSearchParams(),
|
|
398
|
+
streamMetadata: false,
|
|
399
|
+
value: null
|
|
400
|
+
};
|
|
384
401
|
return runAppPageRevalidationContext({
|
|
385
402
|
cleanPathname: options.cleanPathname,
|
|
386
403
|
displayPathname: options.displayPathname,
|
|
@@ -400,7 +417,10 @@ async function dispatchAppPageInner(options) {
|
|
|
400
417
|
observeMetadataSearchParamsAccess: revalidationDynamicConfig !== "force-static",
|
|
401
418
|
observePageSearchParamsAccess: revalidationDynamicConfig !== "force-static",
|
|
402
419
|
serveStreamingMetadata: placeGeneratedMetadataInBody,
|
|
403
|
-
placeStreamedMetadataInHead: true
|
|
420
|
+
placeStreamedMetadataInHead: true,
|
|
421
|
+
onHeadPrepared(head) {
|
|
422
|
+
revalidationRouteHead.value = head;
|
|
423
|
+
}
|
|
404
424
|
});
|
|
405
425
|
const baseRevalidatedOnError = options.createRscOnErrorHandler(options.cleanPathname, revalidationTarget.route.pattern, { revalidateReason: "stale" });
|
|
406
426
|
const baseRevalidatedOnSsrError = options.createRscOnErrorHandler(options.cleanPathname, revalidationTarget.route.pattern, {
|
|
@@ -430,7 +450,8 @@ async function dispatchAppPageInner(options) {
|
|
|
430
450
|
return baseRevalidatedOnSsrError(error, void 0, void 0);
|
|
431
451
|
},
|
|
432
452
|
reactMaxHeadersLength: options.reactMaxHeadersLength,
|
|
433
|
-
|
|
453
|
+
resolveCaughtNotFoundBoundaries: options.isRscRequest ? void 0 : (error) => resolveAppPageCaughtNotFoundBoundaries(error, rscErrorTracker.getCapturedSpecialErrors(error)),
|
|
454
|
+
async renderShellSpecialError(error, caughtDocument) {
|
|
434
455
|
const specialError = resolveAppPageShellSpecialError(error, rscErrorTracker.getCapturedSpecialErrors(error));
|
|
435
456
|
if (!specialError) return null;
|
|
436
457
|
if (options.isRscRequest) {
|
|
@@ -441,8 +462,14 @@ async function dispatchAppPageInner(options) {
|
|
|
441
462
|
status: specialError.statusCode
|
|
442
463
|
};
|
|
443
464
|
}
|
|
465
|
+
if (caughtDocument) return {
|
|
466
|
+
headers: resolveAppPageSpecialErrorStoredHeaders(specialError, options.basePath),
|
|
467
|
+
html: caughtDocument.html,
|
|
468
|
+
linkHeader: caughtDocument.linkHeader,
|
|
469
|
+
status: specialError.statusCode
|
|
470
|
+
};
|
|
444
471
|
if (revalidationTarget.route !== route) return null;
|
|
445
|
-
const document = await renderPageSpecialError(options, specialError, false, revalidationTarget.interceptOpts, true);
|
|
472
|
+
const document = await renderPageSpecialError(options, specialError, false, revalidationTarget.interceptOpts, true, void 0, revalidationRouteHead);
|
|
446
473
|
if (document.status !== specialError.statusCode) return null;
|
|
447
474
|
return {
|
|
448
475
|
headers: resolveAppPageSpecialErrorStoredHeaders(specialError, options.basePath),
|
|
@@ -518,6 +545,15 @@ async function dispatchAppPageInner(options) {
|
|
|
518
545
|
let interceptDynamicConfig;
|
|
519
546
|
let interceptDynamicConfigResolved = false;
|
|
520
547
|
let isInterceptSourceKnownDynamic = false;
|
|
548
|
+
const renderedRouteHead = {
|
|
549
|
+
observeSearchParams: !isForceStatic,
|
|
550
|
+
searchParams: pageSearchParams,
|
|
551
|
+
streamMetadata: placeGeneratedMetadataInBody && options.renderWholeDocument !== true,
|
|
552
|
+
value: null
|
|
553
|
+
};
|
|
554
|
+
const onHeadPrepared = (head) => {
|
|
555
|
+
renderedRouteHead.value = head;
|
|
556
|
+
};
|
|
521
557
|
const interceptResult = await resolveAppPageIntercept({
|
|
522
558
|
async buildPageElement(interceptRoute, interceptParams, interceptOpts, interceptSearchParams, interceptLayoutParamAccess) {
|
|
523
559
|
const sourceDynamicConfig = interceptDynamicConfigResolved ? interceptDynamicConfig : options.resolveRouteDynamicConfig?.(interceptRoute);
|
|
@@ -540,8 +576,10 @@ async function dispatchAppPageInner(options) {
|
|
|
540
576
|
isForceStatic: sourceDynamicConfig === "force-static",
|
|
541
577
|
observeMetadataSearchParamsAccess: sourceDynamicConfig !== "force-static",
|
|
542
578
|
observePageSearchParamsAccess: sourceDynamicConfig !== "force-static",
|
|
579
|
+
isUncacheableRender,
|
|
543
580
|
serveStreamingMetadata: placeGeneratedMetadataInBody,
|
|
544
|
-
placeStreamedMetadataInHead: options.renderWholeDocument === true
|
|
581
|
+
placeStreamedMetadataInHead: options.renderWholeDocument === true,
|
|
582
|
+
onHeadPrepared
|
|
545
583
|
});
|
|
546
584
|
},
|
|
547
585
|
cleanPathname: options.cleanPathname,
|
|
@@ -591,20 +629,23 @@ async function dispatchAppPageInner(options) {
|
|
|
591
629
|
if (interceptResult.response) return interceptResult.response;
|
|
592
630
|
const buildCurrentPageElement = () => buildAppPageElement({
|
|
593
631
|
buildPageElement() {
|
|
632
|
+
renderedRouteHead.value = null;
|
|
594
633
|
if (options.actionFailed) throw options.actionError;
|
|
595
634
|
return options.buildPageElement(route, options.params, interceptResult.interceptOpts, pageSearchParams, layoutParamAccess, {
|
|
596
635
|
isForceStatic,
|
|
597
636
|
observeMetadataSearchParamsAccess: !isForceStatic,
|
|
598
637
|
observePageSearchParamsAccess: !isForceStatic,
|
|
638
|
+
isUncacheableRender,
|
|
599
639
|
serveStreamingMetadata: placeGeneratedMetadataInBody,
|
|
600
|
-
placeStreamedMetadataInHead: options.renderWholeDocument === true
|
|
640
|
+
placeStreamedMetadataInHead: options.renderWholeDocument === true,
|
|
641
|
+
onHeadPrepared
|
|
601
642
|
});
|
|
602
643
|
},
|
|
603
644
|
renderErrorBoundaryPage(buildError) {
|
|
604
645
|
return options.renderErrorBoundaryPage(buildError);
|
|
605
646
|
},
|
|
606
647
|
renderSpecialError(specialError) {
|
|
607
|
-
return renderPageSpecialError(options, specialError, serveStreamingMetadata, interceptResult.interceptOpts);
|
|
648
|
+
return renderPageSpecialError(options, specialError, serveStreamingMetadata, interceptResult.interceptOpts, false, void 0, renderedRouteHead);
|
|
608
649
|
},
|
|
609
650
|
resolveSpecialError: resolveAppPageSpecialError
|
|
610
651
|
});
|
|
@@ -736,10 +777,10 @@ async function dispatchAppPageInner(options) {
|
|
|
736
777
|
return options.renderErrorBoundaryPage(renderError, errorOrigin);
|
|
737
778
|
},
|
|
738
779
|
renderLayoutSpecialError(specialError, layoutIndex) {
|
|
739
|
-
return renderLayoutSpecialError(options, specialError, layoutIndex, serveStreamingMetadata);
|
|
780
|
+
return renderLayoutSpecialError(options, specialError, layoutIndex, serveStreamingMetadata, renderedRouteHead);
|
|
740
781
|
},
|
|
741
782
|
renderPageSpecialError(specialError, renderOptions) {
|
|
742
|
-
return renderPageSpecialError(options, specialError, serveStreamingMetadata, interceptResult.interceptOpts, renderOptions?.isCacheCandidate === true);
|
|
783
|
+
return renderPageSpecialError(options, specialError, serveStreamingMetadata, interceptResult.interceptOpts, renderOptions?.isCacheCandidate === true, renderOptions?.caughtDocument, renderedRouteHead);
|
|
743
784
|
},
|
|
744
785
|
renderToReadableStream: options.renderToReadableStream,
|
|
745
786
|
hasCustomGlobalError: options.hasCustomGlobalError,
|
|
@@ -754,7 +795,22 @@ async function dispatchAppPageInner(options) {
|
|
|
754
795
|
}
|
|
755
796
|
});
|
|
756
797
|
}
|
|
757
|
-
|
|
798
|
+
/**
|
|
799
|
+
* A signal the route's own render threw keeps the route's head, reusing the
|
|
800
|
+
* one that render prepared. A progressive server action's signal doesn't:
|
|
801
|
+
* Next.js answers it with a not-found tree in place of the page
|
|
802
|
+
* (`createNotFoundLoaderTree`), so the page's metadata never applies.
|
|
803
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/server/app-render/app-render.tsx
|
|
804
|
+
*/
|
|
805
|
+
function resolveFallbackRouteHead(options, renderedRouteHead) {
|
|
806
|
+
if (options.actionFailed || !renderedRouteHead) return null;
|
|
807
|
+
const { value, ...render } = renderedRouteHead;
|
|
808
|
+
return {
|
|
809
|
+
...render,
|
|
810
|
+
prepared: value
|
|
811
|
+
};
|
|
812
|
+
}
|
|
813
|
+
async function renderLayoutSpecialError(options, specialError, layoutIndex, serveStreamingMetadata, renderedRouteHead) {
|
|
758
814
|
return buildAppPageSpecialErrorResponse({
|
|
759
815
|
basePath: options.basePath,
|
|
760
816
|
buildRscRedirectFlightStream: (rscOptions) => buildRscRedirectFlightStream({
|
|
@@ -768,31 +824,93 @@ async function renderLayoutSpecialError(options, specialError, layoutIndex, serv
|
|
|
768
824
|
isRscRequest: options.isRscRequest,
|
|
769
825
|
middlewareContext: options.middlewareContext,
|
|
770
826
|
renderFallbackPage(statusCode) {
|
|
771
|
-
|
|
772
|
-
layoutIndex,
|
|
773
|
-
|
|
774
|
-
rootNotFoundModule: options.rootNotFoundModule,
|
|
775
|
-
rootUnauthorizedModule: options.rootUnauthorizedModule,
|
|
776
|
-
routeForbiddenModules: options.route.forbiddens,
|
|
777
|
-
routeNotFoundModules: options.route.notFounds,
|
|
778
|
-
routeUnauthorizedModules: options.route.unauthorizeds,
|
|
779
|
-
statusCode
|
|
827
|
+
return renderLayoutBoundaryFallback(options, statusCode, layoutIndex, {
|
|
828
|
+
headLayouts: options.route.layouts.slice(0, layoutIndex),
|
|
829
|
+
routeHead: resolveFallbackRouteHead(options, renderedRouteHead)
|
|
780
830
|
});
|
|
781
|
-
const fallbackOptions = {
|
|
782
|
-
layouts: options.route.layouts.slice(0, layoutIndex),
|
|
783
|
-
matchedParams: options.params
|
|
784
|
-
};
|
|
785
|
-
if (parentBoundaryModule) {
|
|
786
|
-
fallbackOptions.boundaryComponent = parentBoundaryModule.default;
|
|
787
|
-
fallbackOptions.boundaryModule = parentBoundaryModule;
|
|
788
|
-
}
|
|
789
|
-
return options.renderHttpAccessFallbackPage(statusCode, fallbackOptions, null);
|
|
790
831
|
},
|
|
791
832
|
request: options.request,
|
|
792
833
|
specialError
|
|
793
834
|
});
|
|
794
835
|
}
|
|
795
|
-
|
|
836
|
+
/**
|
|
837
|
+
* The fallback for a special error a layout threw, or a parallel slot that
|
|
838
|
+
* layout renders: the boundary above the layout catches it. With
|
|
839
|
+
* `insideLayout`, the layout re-renders around its own segment's boundary
|
|
840
|
+
* instead. Without a segment boundary, Next.js' built-in not-found,
|
|
841
|
+
* forbidden or unauthorized page renders inside the root layout, or without
|
|
842
|
+
* it when the root layout, or a slot beside it outside `insideLayout`, threw.
|
|
843
|
+
*/
|
|
844
|
+
function renderLayoutBoundaryFallback(options, statusCode, layoutIndex, fallbackOptions) {
|
|
845
|
+
const { route } = options;
|
|
846
|
+
const layoutTreePositions = route.layoutTreePositions ?? [];
|
|
847
|
+
const boundaryModules = statusCode === 403 ? route.segmentForbiddens : statusCode === 401 ? route.segmentUnauthorizeds : route.segmentNotFounds;
|
|
848
|
+
const boundaryTreePositions = statusCode === 403 ? route.segmentForbiddenTreePositions : statusCode === 401 ? route.segmentUnauthorizedTreePositions : route.segmentNotFoundTreePositions;
|
|
849
|
+
const insideLayout = fallbackOptions.insideLayout === true;
|
|
850
|
+
const ownLayoutTreePosition = layoutTreePositions[layoutIndex];
|
|
851
|
+
const layoutTreePosition = ownLayoutTreePosition === void 0 || !insideLayout ? ownLayoutTreePosition : ownLayoutTreePosition + 1;
|
|
852
|
+
const renderedLayoutCount = insideLayout ? layoutIndex + 1 : layoutIndex;
|
|
853
|
+
const boundary = layoutTreePosition === void 0 ? null : resolveAppPageLayoutHttpAccessBoundary({
|
|
854
|
+
boundaryModules: boundaryModules ?? [],
|
|
855
|
+
boundaryTreePositions: boundaryTreePositions ?? [],
|
|
856
|
+
layoutTreePosition
|
|
857
|
+
});
|
|
858
|
+
const boundaryModule = boundary?.module ?? getDefaultHttpAccessFallbackModule(statusCode);
|
|
859
|
+
if (!boundaryModule) return Promise.resolve(null);
|
|
860
|
+
const boundaryTreePosition = Math.max(boundary?.treePosition ?? 0, resolveAppPageRootHttpAccessBoundaryTreePosition(route.routeSegments, layoutTreePositions, layoutTreePosition));
|
|
861
|
+
const headBoundary = resolveAppPageLayoutHttpAccessBoundary({
|
|
862
|
+
boundaryModules: boundaryModules ?? [],
|
|
863
|
+
boundaryTreePositions: boundaryTreePositions ?? [],
|
|
864
|
+
layoutTreePosition: Number.POSITIVE_INFINITY
|
|
865
|
+
});
|
|
866
|
+
return options.renderHttpAccessFallbackPage(statusCode, {
|
|
867
|
+
boundaryComponent: boundaryModule.default,
|
|
868
|
+
boundaryModule,
|
|
869
|
+
headBoundaryModule: headBoundary?.module ?? boundaryModule,
|
|
870
|
+
headLayouts: fallbackOptions.headLayouts,
|
|
871
|
+
...fallbackOptions.intercept ? { intercept: fallbackOptions.intercept } : {},
|
|
872
|
+
...fallbackOptions.isCacheCandidate ? { isCacheCandidate: true } : {},
|
|
873
|
+
layouts: route.layouts.filter((_, index) => index < renderedLayoutCount && (layoutTreePositions[index] ?? 0) <= boundaryTreePosition),
|
|
874
|
+
matchedParams: options.params,
|
|
875
|
+
...fallbackOptions.routeHead ? { routeHead: fallbackOptions.routeHead } : {}
|
|
876
|
+
}, null);
|
|
877
|
+
}
|
|
878
|
+
/**
|
|
879
|
+
* The fallback for a page's `notFound()` / `forbidden()` / `unauthorized()`.
|
|
880
|
+
* Next.js wraps each segment's children in its boundaries, with or without a
|
|
881
|
+
* layout, so the route's deepest boundary catches the signal and replaces
|
|
882
|
+
* every layout below its segment. Without one, the built-in not-found,
|
|
883
|
+
* forbidden or unauthorized page renders inside the root layout. Returns
|
|
884
|
+
* `null` for routes without segment data.
|
|
885
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/server/app-render/create-component-tree.tsx
|
|
886
|
+
*/
|
|
887
|
+
function renderPageSegmentBoundaryFallback(options, statusCode, intercept, isCacheCandidate, routeHead) {
|
|
888
|
+
const { route } = options;
|
|
889
|
+
const boundaryModules = statusCode === 403 ? route.segmentForbiddens : statusCode === 401 ? route.segmentUnauthorizeds : route.segmentNotFounds;
|
|
890
|
+
const boundaryTreePositions = statusCode === 403 ? route.segmentForbiddenTreePositions : statusCode === 401 ? route.segmentUnauthorizedTreePositions : route.segmentNotFoundTreePositions;
|
|
891
|
+
if (!boundaryTreePositions) return null;
|
|
892
|
+
const boundary = resolveAppPageLayoutHttpAccessBoundary({
|
|
893
|
+
boundaryModules: boundaryModules ?? [],
|
|
894
|
+
boundaryTreePositions,
|
|
895
|
+
layoutTreePosition: Number.POSITIVE_INFINITY
|
|
896
|
+
});
|
|
897
|
+
const boundaryModule = boundary?.module ?? getDefaultHttpAccessFallbackModule(statusCode);
|
|
898
|
+
if (!boundaryModule) return Promise.resolve(null);
|
|
899
|
+
const layoutTreePositions = route.layoutTreePositions ?? [];
|
|
900
|
+
const boundaryTreePosition = Math.max(boundary?.treePosition ?? 0, resolveAppPageRootHttpAccessBoundaryTreePosition(route.routeSegments, layoutTreePositions, Number.POSITIVE_INFINITY));
|
|
901
|
+
return options.renderHttpAccessFallbackPage(statusCode, {
|
|
902
|
+
boundaryComponent: boundaryModule.default,
|
|
903
|
+
boundaryModule,
|
|
904
|
+
headLayouts: route.layouts,
|
|
905
|
+
intercept,
|
|
906
|
+
...isCacheCandidate ? { isCacheCandidate } : {},
|
|
907
|
+
layouts: route.layouts.filter((_, index) => (layoutTreePositions[index] ?? 0) <= boundaryTreePosition),
|
|
908
|
+
matchedParams: options.params,
|
|
909
|
+
...routeHead ? { routeHead } : {}
|
|
910
|
+
}, null);
|
|
911
|
+
}
|
|
912
|
+
async function renderPageSpecialError(options, specialError, serveStreamingMetadata, intercept, isCacheCandidate = false, caughtDocument, renderedRouteHead = null) {
|
|
913
|
+
const routeHead = resolveFallbackRouteHead(options, renderedRouteHead);
|
|
796
914
|
return buildAppPageSpecialErrorResponse({
|
|
797
915
|
basePath: options.basePath,
|
|
798
916
|
buildRscRedirectFlightStream: (rscOptions) => buildRscRedirectFlightStream({
|
|
@@ -806,6 +924,16 @@ async function renderPageSpecialError(options, specialError, serveStreamingMetad
|
|
|
806
924
|
isRscRequest: options.isRscRequest,
|
|
807
925
|
middlewareContext: options.middlewareContext,
|
|
808
926
|
renderFallbackPage(statusCode) {
|
|
927
|
+
if (caughtDocument) return Promise.resolve(caughtDocument);
|
|
928
|
+
if (specialError.kind === "http-access-fallback" && specialError.slotLayoutIndex !== void 0) return renderLayoutBoundaryFallback(options, statusCode, specialError.slotLayoutIndex, {
|
|
929
|
+
headLayouts: options.route.layouts,
|
|
930
|
+
insideLayout: specialError.slotLayoutIndex === 0 && (statusCode === 404 || isAppClientReference(options.route.layouts[0]?.default)),
|
|
931
|
+
intercept,
|
|
932
|
+
isCacheCandidate,
|
|
933
|
+
routeHead
|
|
934
|
+
});
|
|
935
|
+
const pageBoundaryFallback = renderPageSegmentBoundaryFallback(options, statusCode, intercept, isCacheCandidate, routeHead);
|
|
936
|
+
if (pageBoundaryFallback) return pageBoundaryFallback;
|
|
809
937
|
const routeBoundaryModule = resolveAppPageRouteBoundaryModule(options.route, statusCode);
|
|
810
938
|
const layoutCount = options.route.layouts.length;
|
|
811
939
|
const { module: parentBoundaryModule, layoutIndex: boundaryLayoutIndex } = resolveAppPageParentHttpAccessBoundary({
|
|
@@ -822,7 +950,8 @@ async function renderPageSpecialError(options, specialError, serveStreamingMetad
|
|
|
822
950
|
const fallbackOptions = {
|
|
823
951
|
intercept,
|
|
824
952
|
...isCacheCandidate ? { isCacheCandidate } : {},
|
|
825
|
-
matchedParams: options.params
|
|
953
|
+
matchedParams: options.params,
|
|
954
|
+
...routeHead ? { routeHead } : {}
|
|
826
955
|
};
|
|
827
956
|
if (useLayoutAlignedBoundary && boundaryLayoutIndex !== null) {
|
|
828
957
|
fallbackOptions.layouts = options.route.layouts.slice(0, boundaryLayoutIndex + 1);
|
|
@@ -3,7 +3,7 @@ import { AppElements } from "./app-elements-wire.js";
|
|
|
3
3
|
import "./app-elements.js";
|
|
4
4
|
import { AppRscRenderMode } from "./app-rsc-render-mode.js";
|
|
5
5
|
import { AppPageParams } from "./app-page-boundary.js";
|
|
6
|
-
import { ApplyAppPageFileBasedMetadata } from "./app-page-head.js";
|
|
6
|
+
import { AppPagePreparedRouteHead, ApplyAppPageFileBasedMetadata } from "./app-page-head.js";
|
|
7
7
|
import { AppLayoutParamAccessTracker } from "./app-layout-param-observation.js";
|
|
8
8
|
import { AppPageSemanticSegment } from "./app-page-segment-state.js";
|
|
9
9
|
import { AppPageErrorModule, AppPageModule, AppPageRouteWiringRoute } from "./app-page-route-wiring.js";
|
|
@@ -31,6 +31,14 @@ export type AppPageInterceptOptions<TModule extends AppPageModule = AppPageModul
|
|
|
31
31
|
interceptNotFoundBranchSegments?: readonly string[] | null;
|
|
32
32
|
interceptNotFound?: TModule | null;
|
|
33
33
|
interceptNotFoundTreePosition?: number | null;
|
|
34
|
+
interceptForbiddens?: readonly (TModule | null | undefined)[] | null;
|
|
35
|
+
interceptForbiddenTreePositions?: readonly number[] | null;
|
|
36
|
+
interceptUnauthorizeds?: readonly (TModule | null | undefined)[] | null;
|
|
37
|
+
interceptUnauthorizedTreePositions?: readonly number[] | null;
|
|
38
|
+
interceptErrors?: readonly (AppPageErrorModule | null | undefined)[] | null;
|
|
39
|
+
interceptErrorTreePositions?: readonly number[] | null;
|
|
40
|
+
interceptNotFounds?: readonly (TModule | null | undefined)[] | null;
|
|
41
|
+
interceptNotFoundTreePositions?: readonly number[] | null;
|
|
34
42
|
interceptPage?: TModule | null;
|
|
35
43
|
interceptParams?: AppPageParams | null;
|
|
36
44
|
interceptSlotId?: string | null;
|
|
@@ -57,6 +65,8 @@ export type AppPagePageRequest<TModule extends AppPageModule = AppPageModule> =
|
|
|
57
65
|
observePageSearchParamsAccess?: boolean;
|
|
58
66
|
/** The route is `dynamic = "force-static"`, so pages read an empty query. */
|
|
59
67
|
isForceStatic?: boolean;
|
|
68
|
+
/** The render can never be stored (see buildAppPageElements). */
|
|
69
|
+
isUncacheableRender?: boolean;
|
|
60
70
|
/** Observe page metadata `searchParams` access for cache-safety classification. */
|
|
61
71
|
observeMetadataSearchParamsAccess?: boolean;
|
|
62
72
|
/** Whether generated metadata may stream into the response body. */
|
|
@@ -70,6 +80,12 @@ export type AppPagePageRequest<TModule extends AppPageModule = AppPageModule> =
|
|
|
70
80
|
placeStreamedMetadataInHead?: boolean;
|
|
71
81
|
/** Whether streamed render errors must be sanitized for client transport. */
|
|
72
82
|
isProduction?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Receives the route's head once this render starts resolving it, so a
|
|
85
|
+
* special-error fallback after the render can reuse it rather than calling
|
|
86
|
+
* generateMetadata() again.
|
|
87
|
+
*/
|
|
88
|
+
onHeadPrepared?: (head: AppPagePreparedRouteHead) => void;
|
|
73
89
|
};
|
|
74
90
|
export type BuildPageElementsOptions<TModule extends AppPageModule = AppPageModule, TErrorModule extends AppPageErrorModule = AppPageErrorModule> = {
|
|
75
91
|
applyFileBasedMetadata?: ApplyAppPageFileBasedMetadata;
|