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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { stripBasePath } from "../utils/base-path.js";
|
|
2
2
|
import { isNavigationSignalError } from "../utils/navigation-signal.js";
|
|
3
3
|
import { NEVER_CACHE_CONTROL, applyCdnResponseHeaders } from "./cache-control.js";
|
|
4
|
+
import { isRenderDynamicLatched, isStaticGenerationAccessError } from "../shims/internal/headers-state.js";
|
|
4
5
|
import { createArtifactCompatibilityEnvelope } from "./artifact-compatibility.js";
|
|
5
6
|
import { AppElementsWire } from "./app-elements-wire.js";
|
|
6
7
|
import "./app-elements.js";
|
|
@@ -9,20 +10,52 @@ import { ErrorBoundary, GlobalErrorBoundary, SerializedErrorBoundary } from "../
|
|
|
9
10
|
import { LayoutSegmentProvider } from "../shims/layout-segment-context.js";
|
|
10
11
|
import { withUseCacheLayoutMarker } from "../shims/internal/app-page-props-cache-key.js";
|
|
11
12
|
import { MetadataHead, ViewportHead } from "../shims/metadata.js";
|
|
12
|
-
import { resolveAppPageBranchParams, resolveAppPageSegmentParams } from "./app-page-params.js";
|
|
13
13
|
import { stripRscSuffix } from "./app-rsc-cache-busting.js";
|
|
14
|
+
import { copyLinkHeaderProvenance } from "./app-response-header-provenance.js";
|
|
14
15
|
import { buildRscRedirectFlightStream } from "./app-rsc-redirect-flight.js";
|
|
15
16
|
import { bufferAppPageBinaryStream, buildAppPageSpecialErrorResponse, resolveAppPageSpecialError } from "./app-page-execution.js";
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
17
|
+
import { resolveAppPageBranchParams, resolveAppPageSegmentParams } from "./app-page-params.js";
|
|
18
|
+
import { createAppPageLayoutEntries, createAppPageRouteBodyMetadata, createAppPageSourcePage } from "./app-page-route-wiring.js";
|
|
18
19
|
import { buildClientHookErrorMessage } from "../shims/client-hook-error.js";
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import "./app-rsc-route-matching.js";
|
|
20
|
+
import { createAppPageMetadataSearchParamsObserver } from "./app-page-search-params-observation.js";
|
|
21
|
+
import { hasAppPageDynamicMetadata, prepareAppPageHead, resolveActiveParallelRouteHeadInputs, resolveAppPageHead, slotInterceptKeepsSourceHead } from "./app-page-head.js";
|
|
22
22
|
import { renderAppPageBoundaryResponse, resolveAppPageErrorBoundary, resolveAppPageHttpAccessBoundaryModule, wrapAppPageBoundaryElement } from "./app-page-boundary.js";
|
|
23
|
+
import { createRouteNotFoundHeadPlanOptions, recoverAppPageRouteHead, resolveHttpAccessFallbackMetadata, resolveHttpAccessFallbackViewport } from "./app-page-http-access-fallback-metadata.js";
|
|
24
|
+
import "./app-rsc-route-matching.js";
|
|
23
25
|
import { resolveSlotParamOverrides } from "./app-page-element-builder.js";
|
|
24
|
-
import {
|
|
26
|
+
import { createAppPageFontData, createAppPageRscErrorTracker, createAppPageSsrErrorHandler, renderAppPageHtmlResponse } from "./app-page-stream.js";
|
|
27
|
+
import { Fragment, Suspense, createElement } from "react";
|
|
25
28
|
//#region src/server/app-page-boundary-render.ts
|
|
29
|
+
async function AppPageBoundaryStreamedMetadata(props) {
|
|
30
|
+
return createAppPageRouteBodyMetadata(await props.metadata, props.pathname, "body", props.trailingSlash, props.scriptNonce);
|
|
31
|
+
}
|
|
32
|
+
AppPageBoundaryStreamedMetadata.displayName = "Vinext.StreamingMetadata";
|
|
33
|
+
/** Holds the response open until a head it doesn't render settles, as Next.js streams it. */
|
|
34
|
+
async function AppPageBoundarySettledHead(props) {
|
|
35
|
+
await props.head;
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
AppPageBoundarySettledHead.displayName = "Vinext.ErrorShellMetadata";
|
|
39
|
+
/**
|
|
40
|
+
* Fail a fallback document once its body has streamed if a head it streamed
|
|
41
|
+
* behind Suspense hit a `dynamic = "error"` access error. Inside a Suspense
|
|
42
|
+
* boundary, React would only report it and finish the document, so the 404
|
|
43
|
+
* could be served, and stored, where Next.js fails the render. An errored body
|
|
44
|
+
* reaches the client truncated and is never written to the cache.
|
|
45
|
+
*/
|
|
46
|
+
function failOnLateAccessError(response, accessErrors) {
|
|
47
|
+
if (accessErrors.length === 0 || !response.body) return response;
|
|
48
|
+
const body = response.body.pipeThrough(new TransformStream({ async flush() {
|
|
49
|
+
for (const accessError of await Promise.all(accessErrors)) if (accessError) throw accessError;
|
|
50
|
+
} }));
|
|
51
|
+
const wrapped = new Response(body, {
|
|
52
|
+
headers: response.headers,
|
|
53
|
+
status: response.status,
|
|
54
|
+
statusText: response.statusText
|
|
55
|
+
});
|
|
56
|
+
copyLinkHeaderProvenance(response.headers, wrapped.headers);
|
|
57
|
+
return wrapped;
|
|
58
|
+
}
|
|
26
59
|
const DEFAULT_GLOBAL_ERROR_COMPONENT = DefaultGlobalError;
|
|
27
60
|
function getDefaultExport(module) {
|
|
28
61
|
return module?.default ?? null;
|
|
@@ -35,6 +68,8 @@ function resolveHttpAccessBoundaryTreePosition(route, boundaryModule, statusCode
|
|
|
35
68
|
if (boundaryModule === routeBoundary && statusCode === 403) return route.forbiddenTreePosition ?? null;
|
|
36
69
|
if (boundaryModule === routeBoundary && statusCode === 401) return route.unauthorizedTreePosition ?? null;
|
|
37
70
|
for (let index = (layoutBoundaries?.length ?? 0) - 1; index >= 0; index--) if (layoutBoundaries?.[index] === boundaryModule) return route.layoutTreePositions?.[index] ?? null;
|
|
71
|
+
const segmentIndex = (statusCode === 403 ? route.segmentForbiddens : statusCode === 401 ? route.segmentUnauthorizeds : route.segmentNotFounds)?.lastIndexOf(boundaryModule) ?? -1;
|
|
72
|
+
if (segmentIndex !== -1) return (statusCode === 403 ? route.segmentForbiddenTreePositions : statusCode === 401 ? route.segmentUnauthorizedTreePositions : route.segmentNotFoundTreePositions)?.[segmentIndex] ?? null;
|
|
38
73
|
return null;
|
|
39
74
|
}
|
|
40
75
|
function wrapRenderedBoundaryElement(options) {
|
|
@@ -224,17 +259,23 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
224
259
|
const layoutModules = options.layoutModules ?? options.route?.layouts ?? options.rootLayouts;
|
|
225
260
|
const pathname = new URL(options.requestUrl).pathname;
|
|
226
261
|
const routePathname = options.routePathname ?? stripRscSuffix(stripBasePath(pathname, options.basePath ?? ""));
|
|
227
|
-
const
|
|
262
|
+
const headBoundaryModule = options.headBoundaryModule ?? boundaryModule;
|
|
263
|
+
const headLayoutModules = options.headLayoutModules ?? layoutModules;
|
|
264
|
+
const routeSegments = resolveHttpAccessFallbackHeadRouteSegments(options.route, headLayoutModules);
|
|
228
265
|
const fallbackRouteSegments = routeSegments ?? [];
|
|
229
266
|
let head;
|
|
267
|
+
let streamedRouteMetadata = null;
|
|
268
|
+
let streamedConventionHead = null;
|
|
269
|
+
const lateAccessErrors = [];
|
|
230
270
|
try {
|
|
231
271
|
if ([
|
|
232
272
|
401,
|
|
233
273
|
403,
|
|
234
274
|
404
|
|
235
275
|
].includes(options.statusCode)) {
|
|
236
|
-
const boundaryTreePosition = resolveHttpAccessBoundaryTreePosition(options.route,
|
|
237
|
-
const
|
|
276
|
+
const boundaryTreePosition = resolveHttpAccessBoundaryTreePosition(options.route, headBoundaryModule, options.statusCode);
|
|
277
|
+
const boundaryRouteSegments = (options.route?.routeSegments ?? fallbackRouteSegments).slice(0, boundaryTreePosition ?? 0);
|
|
278
|
+
const boundaryParams = boundaryTreePosition == null ? {} : resolveAppPageSegmentParams(boundaryRouteSegments, boundaryTreePosition, options.matchedParams);
|
|
238
279
|
const intercept = options.intercept;
|
|
239
280
|
const isSiblingIntercept = intercept?.interceptSlotKey === "__vinext_page_intercept" && intercept.interceptPage != null;
|
|
240
281
|
const effectiveParams = isSiblingIntercept ? intercept.interceptParams ?? options.matchedParams : options.matchedParams;
|
|
@@ -256,52 +297,180 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
256
297
|
slotParams,
|
|
257
298
|
slots: options.route?.slots ?? null
|
|
258
299
|
});
|
|
259
|
-
const
|
|
300
|
+
const resolvePrimaryParallelBranch = (segments) => isSiblingIntercept ? {
|
|
260
301
|
head: {
|
|
261
302
|
layoutModules: intercept?.interceptLayouts ?? [],
|
|
262
|
-
layoutParams: (intercept?.interceptLayoutSegments ?? []).map((
|
|
303
|
+
layoutParams: (intercept?.interceptLayoutSegments ?? []).map((layoutSegments) => resolveAppPageBranchParams(intercept?.interceptBranchSegments ?? layoutSegments, layoutSegments.length, effectiveParams, layoutSegments)),
|
|
263
304
|
pageModule: intercept?.interceptPage ?? null,
|
|
264
305
|
params: effectiveParams,
|
|
265
|
-
routeSegments: intercept?.interceptSourcePageSegments ??
|
|
306
|
+
routeSegments: intercept?.interceptSourcePageSegments ?? segments
|
|
266
307
|
},
|
|
267
308
|
...intercept?.interceptNotFound ? {
|
|
268
309
|
notFoundModule: intercept.interceptNotFound,
|
|
269
|
-
notFoundModuleRouteSegments: (intercept.interceptNotFoundBranchSegments ?? intercept.interceptSourcePageSegments ??
|
|
270
|
-
notFoundParams: resolveAppPageBranchParams(intercept.interceptNotFoundBranchSegments ?? intercept.interceptBranchSegments ??
|
|
310
|
+
notFoundModuleRouteSegments: (intercept.interceptNotFoundBranchSegments ?? intercept.interceptSourcePageSegments ?? segments).slice(0, intercept.interceptNotFoundTreePosition ?? 0),
|
|
311
|
+
notFoundParams: resolveAppPageBranchParams(intercept.interceptNotFoundBranchSegments ?? intercept.interceptBranchSegments ?? segments, intercept.interceptNotFoundTreePosition ?? 0, effectiveParams)
|
|
271
312
|
} : {},
|
|
272
|
-
ownerTreePosition:
|
|
313
|
+
ownerTreePosition: segments.length
|
|
273
314
|
} : null;
|
|
315
|
+
const primaryParallelBranch = resolvePrimaryParallelBranch(fallbackRouteSegments);
|
|
274
316
|
const fallbackHeadOptions = {
|
|
275
|
-
boundaryModule,
|
|
317
|
+
boundaryModule: headBoundaryModule,
|
|
276
318
|
boundaryParams,
|
|
277
|
-
boundaryRouteSegments
|
|
319
|
+
boundaryRouteSegments,
|
|
278
320
|
branchNotFoundConventions: options.statusCode === 404,
|
|
279
321
|
errorConvention: options.statusCode === 403 ? "forbidden" : options.statusCode === 401 ? "unauthorized" : "not-found",
|
|
280
|
-
layoutModules,
|
|
281
|
-
layoutTreePositions: resolveHttpAccessFallbackHeadLayoutTreePositions(options.route,
|
|
322
|
+
layoutModules: headLayoutModules,
|
|
323
|
+
layoutTreePositions: resolveHttpAccessFallbackHeadLayoutTreePositions(options.route, headLayoutModules),
|
|
282
324
|
parallelBranches,
|
|
283
325
|
params: options.matchedParams,
|
|
284
326
|
primaryParallelBranch,
|
|
285
327
|
routeSegments
|
|
286
328
|
};
|
|
287
|
-
const
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
329
|
+
const startConventionHead = ({ errorShell = false } = {}) => {
|
|
330
|
+
const settle = (branch) => errorShell ? branch.catch((error) => {
|
|
331
|
+
if (isStaticGenerationAccessError(error)) throw error;
|
|
332
|
+
return null;
|
|
333
|
+
}) : branch;
|
|
334
|
+
const metadata = settle(resolveHttpAccessFallbackMetadata({
|
|
335
|
+
applyFileBasedMetadata: options.applyFileBasedMetadata,
|
|
336
|
+
basePath: options.basePath ?? "",
|
|
337
|
+
...fallbackHeadOptions,
|
|
338
|
+
metadataRoutes: options.metadataRoutes,
|
|
339
|
+
routePath: options.route?.pattern ?? pathname
|
|
340
|
+
}));
|
|
341
|
+
const viewport = settle(resolveHttpAccessFallbackViewport(fallbackHeadOptions));
|
|
342
|
+
metadata.catch(() => null);
|
|
343
|
+
viewport.catch(() => null);
|
|
344
|
+
return {
|
|
345
|
+
metadata,
|
|
346
|
+
viewport
|
|
347
|
+
};
|
|
348
|
+
};
|
|
349
|
+
const resolveConventionHead = async (settings) => {
|
|
350
|
+
const conventionHead = startConventionHead(settings);
|
|
351
|
+
const [metadata, viewport] = await Promise.all([conventionHead.metadata, conventionHead.viewport]);
|
|
352
|
+
return {
|
|
353
|
+
metadata,
|
|
354
|
+
viewport
|
|
355
|
+
};
|
|
297
356
|
};
|
|
357
|
+
const route = options.route;
|
|
358
|
+
const routeHead = options.routeHead;
|
|
359
|
+
if (routeHead && route) {
|
|
360
|
+
const prepareRouteHead = () => {
|
|
361
|
+
if (routeHead.prepared) return routeHead.prepared;
|
|
362
|
+
const fullRouteSegments = route.routeSegments ?? [];
|
|
363
|
+
const routePrimaryParallelBranch = resolvePrimaryParallelBranch(fullRouteSegments);
|
|
364
|
+
const sourceParallelBranches = resolveActiveParallelRouteHeadInputs({
|
|
365
|
+
layoutTreePositions: route.layoutTreePositions,
|
|
366
|
+
params: options.matchedParams,
|
|
367
|
+
routeSegments: fullRouteSegments,
|
|
368
|
+
slotParams,
|
|
369
|
+
slots: route.slots ?? null
|
|
370
|
+
});
|
|
371
|
+
const interceptSlotKey = intercept?.interceptPage != null && !isSiblingIntercept ? intercept.interceptSlotKey ?? null : null;
|
|
372
|
+
const routeParallelBranches = interceptSlotKey === null || slotInterceptKeepsSourceHead({
|
|
373
|
+
interceptSlotKey,
|
|
374
|
+
route,
|
|
375
|
+
sourceParallelRoutes: sourceParallelBranches
|
|
376
|
+
}) ? sourceParallelBranches : resolveActiveParallelRouteHeadInputs({
|
|
377
|
+
interceptBranchSegments: intercept?.interceptBranchSegments ?? null,
|
|
378
|
+
interceptLayouts: intercept?.interceptLayouts ?? null,
|
|
379
|
+
interceptLayoutSegments: intercept?.interceptLayoutSegments ?? null,
|
|
380
|
+
interceptNotFoundBranchSegments: intercept?.interceptNotFoundBranchSegments ?? null,
|
|
381
|
+
interceptNotFound: intercept?.interceptNotFound ?? null,
|
|
382
|
+
interceptNotFoundTreePosition: intercept?.interceptNotFoundTreePosition ?? null,
|
|
383
|
+
interceptPage: intercept?.interceptPage ?? null,
|
|
384
|
+
interceptParams: intercept?.interceptParams ?? null,
|
|
385
|
+
interceptSlotKey,
|
|
386
|
+
interceptSourcePageSegments: intercept?.interceptSourcePageSegments ?? null,
|
|
387
|
+
layoutTreePositions: route.layoutTreePositions,
|
|
388
|
+
params: options.matchedParams,
|
|
389
|
+
routeSegments: fullRouteSegments,
|
|
390
|
+
slotParams,
|
|
391
|
+
slots: route.slots ?? null
|
|
392
|
+
});
|
|
393
|
+
const routeLayoutModules = route.layouts ?? options.rootLayouts;
|
|
394
|
+
const headOptions = {
|
|
395
|
+
applyFileBasedMetadata: options.applyFileBasedMetadata,
|
|
396
|
+
basePath: options.basePath ?? "",
|
|
397
|
+
layoutModules: routeLayoutModules,
|
|
398
|
+
layoutTreePositions: route.layoutTreePositions,
|
|
399
|
+
metadataRoutes: options.metadataRoutes,
|
|
400
|
+
pageModule: isSiblingIntercept ? null : route.page ?? null,
|
|
401
|
+
parallelRoutes: [...routePrimaryParallelBranch ? [routePrimaryParallelBranch.head] : [], ...routeParallelBranches.map((branch) => branch.head)],
|
|
402
|
+
params: effectiveParams,
|
|
403
|
+
routePath: route.pattern ?? pathname,
|
|
404
|
+
routeSegments: route.routeSegments ?? null,
|
|
405
|
+
searchParams: routeHead.searchParams,
|
|
406
|
+
searchParamsObserver: createAppPageMetadataSearchParamsObserver(routeHead.observeSearchParams)
|
|
407
|
+
};
|
|
408
|
+
return {
|
|
409
|
+
...recoverAppPageRouteHead(prepareAppPageHead(headOptions), {
|
|
410
|
+
applyFileBasedMetadata: options.applyFileBasedMetadata,
|
|
411
|
+
basePath: options.basePath ?? "",
|
|
412
|
+
metadataRoutes: options.metadataRoutes,
|
|
413
|
+
resolvePlanOptions: () => createRouteNotFoundHeadPlanOptions({
|
|
414
|
+
parallelBranches: routeParallelBranches,
|
|
415
|
+
params: effectiveParams,
|
|
416
|
+
primaryParallelBranch: routePrimaryParallelBranch,
|
|
417
|
+
rootNotFoundModule: options.rootNotFoundModule,
|
|
418
|
+
route: {
|
|
419
|
+
...route,
|
|
420
|
+
layouts: routeLayoutModules
|
|
421
|
+
}
|
|
422
|
+
}),
|
|
423
|
+
routePath: route.pattern ?? pathname
|
|
424
|
+
}),
|
|
425
|
+
metadataPlacement: routeHead.streamMetadata && hasAppPageDynamicMetadata(headOptions) ? "body" : "head"
|
|
426
|
+
};
|
|
427
|
+
};
|
|
428
|
+
const routeHeadResult = prepareRouteHead();
|
|
429
|
+
const throwIfAccessError = async () => {
|
|
430
|
+
const accessError = await routeHeadResult.accessError;
|
|
431
|
+
if (accessError) throw accessError;
|
|
432
|
+
};
|
|
433
|
+
const conventionHeadBranches = options.isRscRequest ? null : startConventionHead({ errorShell: true });
|
|
434
|
+
const isHtmlLimitedBot = options.serveStreamingMetadata === false;
|
|
435
|
+
let conventionHead = null;
|
|
436
|
+
if (conventionHeadBranches && isHtmlLimitedBot) {
|
|
437
|
+
const [metadata, viewport] = await Promise.all([conventionHeadBranches.metadata, conventionHeadBranches.viewport]);
|
|
438
|
+
conventionHead = {
|
|
439
|
+
metadata,
|
|
440
|
+
viewport
|
|
441
|
+
};
|
|
442
|
+
} else if (conventionHeadBranches) {
|
|
443
|
+
await conventionHeadBranches.viewport;
|
|
444
|
+
streamedConventionHead = conventionHeadBranches.metadata.catch(() => null);
|
|
445
|
+
lateAccessErrors.push(conventionHeadBranches.metadata.then(() => null, (error) => isStaticGenerationAccessError(error) ? error : null));
|
|
446
|
+
}
|
|
447
|
+
if (!options.isRscRequest && routeHeadResult.metadataPlacement === "body") {
|
|
448
|
+
streamedRouteMetadata = routeHeadResult.metadata;
|
|
449
|
+
lateAccessErrors.push(routeHeadResult.accessError);
|
|
450
|
+
head = {
|
|
451
|
+
metadata: null,
|
|
452
|
+
viewport: await routeHeadResult.viewport
|
|
453
|
+
};
|
|
454
|
+
} else {
|
|
455
|
+
const [metadata, viewport] = await Promise.all([
|
|
456
|
+
routeHeadResult.metadata,
|
|
457
|
+
routeHeadResult.viewport,
|
|
458
|
+
throwIfAccessError()
|
|
459
|
+
]);
|
|
460
|
+
head = {
|
|
461
|
+
metadata,
|
|
462
|
+
viewport
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
if (conventionHead && !streamedRouteMetadata && isHtmlLimitedBot && (!options.isCacheCandidate || isRenderDynamicLatched())) head = conventionHead;
|
|
466
|
+
} else head = await resolveConventionHead();
|
|
298
467
|
} else head = await resolveAppPageHead({
|
|
299
468
|
applyFileBasedMetadata: options.applyFileBasedMetadata,
|
|
300
469
|
basePath: options.basePath ?? "",
|
|
301
|
-
layoutModules,
|
|
302
|
-
layoutTreePositions: resolveHttpAccessFallbackHeadLayoutTreePositions(options.route,
|
|
470
|
+
layoutModules: headLayoutModules,
|
|
471
|
+
layoutTreePositions: resolveHttpAccessFallbackHeadLayoutTreePositions(options.route, headLayoutModules),
|
|
303
472
|
metadataRoutes: options.metadataRoutes,
|
|
304
|
-
pageModule:
|
|
473
|
+
pageModule: headBoundaryModule,
|
|
305
474
|
params: options.matchedParams,
|
|
306
475
|
routePath: options.route?.pattern ?? pathname,
|
|
307
476
|
routeSegments
|
|
@@ -323,16 +492,30 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
323
492
|
if (metadata) headElements.push(createElement(MetadataHead, {
|
|
324
493
|
key: "metadata",
|
|
325
494
|
metadata,
|
|
326
|
-
pathname,
|
|
495
|
+
pathname: routePathname,
|
|
327
496
|
trailingSlash: options.trailingSlash
|
|
328
497
|
}));
|
|
329
|
-
headElements.push(createElement(ViewportHead, {
|
|
498
|
+
if (viewport) headElements.push(createElement(ViewportHead, {
|
|
330
499
|
key: "viewport",
|
|
331
500
|
viewport
|
|
332
501
|
}));
|
|
502
|
+
const bodyElements = [];
|
|
503
|
+
if (streamedRouteMetadata) bodyElements.push(createElement("div", {
|
|
504
|
+
hidden: true,
|
|
505
|
+
key: "streamed-metadata"
|
|
506
|
+
}, createElement(Suspense, { fallback: null }, createElement(AppPageBoundaryStreamedMetadata, {
|
|
507
|
+
metadata: streamedRouteMetadata,
|
|
508
|
+
pathname: routePathname,
|
|
509
|
+
scriptNonce: options.scriptNonce,
|
|
510
|
+
trailingSlash: options.trailingSlash
|
|
511
|
+
}))));
|
|
512
|
+
if (streamedConventionHead) bodyElements.push(createElement("div", {
|
|
513
|
+
hidden: true,
|
|
514
|
+
key: "error-shell-metadata"
|
|
515
|
+
}, createElement(Suspense, { fallback: null }, createElement(AppPageBoundarySettledHead, { head: streamedConventionHead }))));
|
|
333
516
|
const skipLayoutWrapping = options.skipLayoutWrapping ?? false;
|
|
334
517
|
const element = wrapRenderedBoundaryElement({
|
|
335
|
-
element: createElement(Fragment, null, ...headElements, createElement(boundaryComponent)),
|
|
518
|
+
element: createElement(Fragment, null, ...headElements, createElement(boundaryComponent), ...bodyElements),
|
|
336
519
|
globalErrorModule: options.globalErrorModule,
|
|
337
520
|
includeGlobalErrorBoundary: true,
|
|
338
521
|
isRscRequest: options.isRscRequest,
|
|
@@ -344,7 +527,7 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
344
527
|
routeSegments: options.route?.routeSegments,
|
|
345
528
|
skipLayoutWrapping
|
|
346
529
|
});
|
|
347
|
-
return renderAppPageBoundaryElementResponse({
|
|
530
|
+
return failOnLateAccessError(await renderAppPageBoundaryElementResponse({
|
|
348
531
|
...options,
|
|
349
532
|
element,
|
|
350
533
|
handleSpecialErrors: true,
|
|
@@ -354,7 +537,7 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
354
537
|
route: skipLayoutWrapping ? null : options.route,
|
|
355
538
|
routePattern: options.route?.pattern,
|
|
356
539
|
status: options.statusCode
|
|
357
|
-
});
|
|
540
|
+
}), lateAccessErrors);
|
|
358
541
|
}
|
|
359
542
|
async function renderAppPageErrorBoundary(options) {
|
|
360
543
|
const errorBoundary = resolveAppPageErrorBoundary({
|
|
@@ -29,6 +29,13 @@ type ResolveAppPageParentHttpAccessBoundaryModuleOptions<TModule> = {
|
|
|
29
29
|
routeUnauthorizedModules?: readonly (TModule | null | undefined)[] | null;
|
|
30
30
|
statusCode: number;
|
|
31
31
|
};
|
|
32
|
+
type ResolveAppPageLayoutHttpAccessBoundaryOptions<TModule> = {
|
|
33
|
+
/** Segment boundaries for the status, root first, aligned with the positions. */
|
|
34
|
+
boundaryModules: readonly (TModule | null | undefined)[];
|
|
35
|
+
boundaryTreePositions: readonly number[];
|
|
36
|
+
/** Tree position of the layout that threw. */
|
|
37
|
+
layoutTreePosition: number;
|
|
38
|
+
};
|
|
32
39
|
type ResolveAppPageErrorBoundaryOptions<TModule, TComponent> = {
|
|
33
40
|
getDefaultExport: (module: TModule | null | undefined) => TComponent | null | undefined;
|
|
34
41
|
globalErrorModule?: TModule | null;
|
|
@@ -74,11 +81,32 @@ type RenderAppPageBoundaryResponseOptions<TElement> = {
|
|
|
74
81
|
};
|
|
75
82
|
export declare function resolveAppPageHttpAccessBoundaryComponent<TModule, TComponent>(options: ResolveAppPageHttpAccessBoundaryComponentOptions<TModule, TComponent>): TComponent | null;
|
|
76
83
|
export declare function resolveAppPageHttpAccessBoundaryModule<TModule>(options: ResolveAppPageHttpAccessBoundaryModuleOptions<TModule>): TModule | null;
|
|
77
|
-
export declare function resolveAppPageParentHttpAccessBoundaryModule<TModule>(options: ResolveAppPageParentHttpAccessBoundaryModuleOptions<TModule>): TModule | null;
|
|
78
84
|
/**
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
85
|
+
* The boundary that catches `notFound()` / `forbidden()` / `unauthorized()`
|
|
86
|
+
* thrown by a layout: the deepest segment boundary above the layout's own
|
|
87
|
+
* segment. A segment's boundary wraps its children inside its layout, so the
|
|
88
|
+
* layout's own boundary, and any below it, cannot catch the layout's error.
|
|
89
|
+
* Returns `null` when no segment above the layout has one (issue #4045).
|
|
90
|
+
*/
|
|
91
|
+
export declare function resolveAppPageLayoutHttpAccessBoundary<TModule>(options: ResolveAppPageLayoutHttpAccessBoundaryOptions<TModule>): {
|
|
92
|
+
module: TModule;
|
|
93
|
+
treePosition: number;
|
|
94
|
+
} | null;
|
|
95
|
+
/**
|
|
96
|
+
* Tree position at which the root segment's boundary catches a layout's error.
|
|
97
|
+
* Next.js gives a first-layer route group the root segment's boundary (the
|
|
98
|
+
* custom file or the built-in page) when the group has none of its
|
|
99
|
+
* own, so the boundary renders inside the group's layout, which is often the
|
|
100
|
+
* root layout. Without `app/layout`, the root layout sits deeper (for example
|
|
101
|
+
* `app/[lang]/layout`), and the boundary renders inside it so the page keeps
|
|
102
|
+
* its `<html>` and `<body>`. A boundary file above that root layout renders
|
|
103
|
+
* there too.
|
|
104
|
+
*/
|
|
105
|
+
export declare function resolveAppPageRootHttpAccessBoundaryTreePosition(routeSegments: readonly string[], layoutTreePositions: readonly number[], layoutTreePosition: number | undefined): number;
|
|
106
|
+
/**
|
|
107
|
+
* Resolves the nearest layout-aligned boundary before `layoutIndex`, falling
|
|
108
|
+
* back to the root module, and returns the layout index that owns it so
|
|
109
|
+
* callers can slice the layouts array to skip layouts below the boundary owner.
|
|
82
110
|
*
|
|
83
111
|
* `layoutIndex` is the per-layout index where the boundary lives, or `null` if
|
|
84
112
|
* the resolved boundary is the root module (which conceptually sits above all
|
|
@@ -98,4 +126,5 @@ export declare function resolveAppPageParentHttpAccessBoundary<TModule>(options:
|
|
|
98
126
|
export declare function resolveAppPageErrorBoundary<TModule, TComponent>(options: ResolveAppPageErrorBoundaryOptions<TModule, TComponent>): ResolveAppPageErrorBoundaryResult<TComponent>;
|
|
99
127
|
export declare function wrapAppPageBoundaryElement<TElement, TLayoutModule, TLayoutComponent, TChildSegments, TGlobalErrorComponent>(options: WrapAppPageBoundaryElementOptions<TElement, TLayoutModule, TLayoutComponent, TChildSegments, TGlobalErrorComponent>): TElement;
|
|
100
128
|
export declare function renderAppPageBoundaryResponse<TElement>(options: RenderAppPageBoundaryResponseOptions<TElement>): Promise<Response>;
|
|
101
|
-
//#endregion
|
|
129
|
+
//#endregion
|
|
130
|
+
export {};
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { VINEXT_RSC_VARY_HEADER } from "./app-rsc-vary.js";
|
|
2
2
|
import { runWithFetchDedupe } from "../shims/fetch-cache.js";
|
|
3
|
-
import { resolveAppPageSegmentParams } from "./app-page-params.js";
|
|
4
3
|
import { VINEXT_RSC_CONTENT_TYPE, applyRscCompatibilityIdHeader, applyRscDeploymentIdHeader } from "./app-rsc-cache-busting.js";
|
|
5
4
|
import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js";
|
|
6
5
|
import { applyEdgeRuntimeHeader } from "./app-page-response.js";
|
|
6
|
+
import { resolveAppPageSegmentParams } from "./app-page-params.js";
|
|
7
|
+
import { isAppPageRouteGroupSegment } from "./app-page-segment-state.js";
|
|
7
8
|
//#region src/server/app-page-boundary.ts
|
|
8
9
|
function resolveAppPageHttpAccessBoundaryComponent(options) {
|
|
9
10
|
return options.getDefaultExport(resolveAppPageHttpAccessBoundaryModule({
|
|
@@ -23,13 +24,45 @@ function resolveAppPageHttpAccessBoundaryModule(options) {
|
|
|
23
24
|
else boundaryModule = options.routeNotFoundModule ?? options.rootNotFoundModule;
|
|
24
25
|
return boundaryModule ?? null;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
/**
|
|
28
|
+
* The boundary that catches `notFound()` / `forbidden()` / `unauthorized()`
|
|
29
|
+
* thrown by a layout: the deepest segment boundary above the layout's own
|
|
30
|
+
* segment. A segment's boundary wraps its children inside its layout, so the
|
|
31
|
+
* layout's own boundary, and any below it, cannot catch the layout's error.
|
|
32
|
+
* Returns `null` when no segment above the layout has one (issue #4045).
|
|
33
|
+
*/
|
|
34
|
+
function resolveAppPageLayoutHttpAccessBoundary(options) {
|
|
35
|
+
for (let index = options.boundaryTreePositions.length - 1; index >= 0; index--) {
|
|
36
|
+
const treePosition = options.boundaryTreePositions[index];
|
|
37
|
+
const module = options.boundaryModules[index];
|
|
38
|
+
if (module && treePosition < options.layoutTreePosition) return {
|
|
39
|
+
module,
|
|
40
|
+
treePosition
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Tree position at which the root segment's boundary catches a layout's error.
|
|
47
|
+
* Next.js gives a first-layer route group the root segment's boundary (the
|
|
48
|
+
* custom file or the built-in page) when the group has none of its
|
|
49
|
+
* own, so the boundary renders inside the group's layout, which is often the
|
|
50
|
+
* root layout. Without `app/layout`, the root layout sits deeper (for example
|
|
51
|
+
* `app/[lang]/layout`), and the boundary renders inside it so the page keeps
|
|
52
|
+
* its `<html>` and `<body>`. A boundary file above that root layout renders
|
|
53
|
+
* there too.
|
|
54
|
+
*/
|
|
55
|
+
function resolveAppPageRootHttpAccessBoundaryTreePosition(routeSegments, layoutTreePositions, layoutTreePosition) {
|
|
56
|
+
if (layoutTreePosition === void 0) return 0;
|
|
57
|
+
const firstSegment = routeSegments[0];
|
|
58
|
+
const groupTreePosition = layoutTreePosition > 1 && firstSegment !== void 0 && isAppPageRouteGroupSegment(firstSegment) ? 1 : 0;
|
|
59
|
+
const rootLayoutTreePosition = layoutTreePositions[0] ?? 0;
|
|
60
|
+
return rootLayoutTreePosition < layoutTreePosition ? Math.max(groupTreePosition, rootLayoutTreePosition) : groupTreePosition;
|
|
28
61
|
}
|
|
29
62
|
/**
|
|
30
|
-
*
|
|
31
|
-
* the
|
|
32
|
-
* layouts array to skip
|
|
63
|
+
* Resolves the nearest layout-aligned boundary before `layoutIndex`, falling
|
|
64
|
+
* back to the root module, and returns the layout index that owns it so
|
|
65
|
+
* callers can slice the layouts array to skip layouts below the boundary owner.
|
|
33
66
|
*
|
|
34
67
|
* `layoutIndex` is the per-layout index where the boundary lives, or `null` if
|
|
35
68
|
* the resolved boundary is the root module (which conceptually sits above all
|
|
@@ -119,4 +152,4 @@ async function renderAppPageBoundaryResponse(options) {
|
|
|
119
152
|
return options.createHtmlResponse(rscStream, options.status);
|
|
120
153
|
}
|
|
121
154
|
//#endregion
|
|
122
|
-
export { renderAppPageBoundaryResponse, resolveAppPageErrorBoundary, resolveAppPageHttpAccessBoundaryComponent, resolveAppPageHttpAccessBoundaryModule, resolveAppPageParentHttpAccessBoundary,
|
|
155
|
+
export { renderAppPageBoundaryResponse, resolveAppPageErrorBoundary, resolveAppPageHttpAccessBoundaryComponent, resolveAppPageHttpAccessBoundaryModule, resolveAppPageLayoutHttpAccessBoundary, resolveAppPageParentHttpAccessBoundary, resolveAppPageRootHttpAccessBoundaryTreePosition, wrapAppPageBoundaryElement };
|
|
@@ -98,4 +98,5 @@ export declare function finalizeAppPageCacheabilityEvaluationResponse(response:
|
|
|
98
98
|
export declare function finalizeAppPageHtmlCacheResponse(response: Response, options: FinalizeAppPageHtmlCacheResponseOptions): Response;
|
|
99
99
|
export declare function finalizeAppPageRscCacheResponse(response: Response, options: ScheduleAppPageRscCacheWriteOptions): Response;
|
|
100
100
|
export declare function scheduleAppPageRscCacheWrite(options: ScheduleAppPageRscCacheWriteOptions): boolean;
|
|
101
|
-
//#endregion
|
|
101
|
+
//#endregion
|
|
102
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
|
|
1
2
|
import { NEXTJS_CACHE_HEADER, VINEXT_CACHE_HEADER } from "./headers.js";
|
|
2
3
|
import { getCdnCacheAdapter } from "../shims/cdn-cache.js";
|
|
3
4
|
import { captureRouteCacheabilityResponsePolicy, deferRouteCacheability, isRouteCacheabilityEvaluation } from "../shims/cacheability-classification.js";
|
|
@@ -6,7 +7,6 @@ import { buildAppPageCacheValue, isrCacheControl, resolveRouteExpireSeconds } fr
|
|
|
6
7
|
import { resolveClientStaleTimeSeconds } from "../utils/cache-control-metadata.js";
|
|
7
8
|
import { setCacheStateHeaders } from "./cache-headers.js";
|
|
8
9
|
import { readStreamAsText } from "../utils/text-stream.js";
|
|
9
|
-
import { deferUntilStreamConsumed } from "./defer-until-stream-consumed.js";
|
|
10
10
|
import { markFrameworkLinkHeaders } from "./app-response-header-provenance.js";
|
|
11
11
|
import { hasQueryInvariantRenderProof } from "./cache-proof.js";
|
|
12
12
|
import { createEmptyAppPageRenderObservationState } from "./app-page-render-observation.js";
|
|
@@ -35,7 +35,14 @@ export type RenderAppPageCacheArtifactsOptions = {
|
|
|
35
35
|
* Render the document of a special error that rejected the shell, or return
|
|
36
36
|
* null to fail the render with it.
|
|
37
37
|
*/
|
|
38
|
-
renderShellSpecialError?: (error: unknown
|
|
38
|
+
renderShellSpecialError?: (error: unknown,
|
|
39
|
+
/** The page's own document, in which parallel slot boundaries caught it. */
|
|
40
|
+
caughtDocument?: {
|
|
41
|
+
html: string;
|
|
42
|
+
linkHeader?: string;
|
|
43
|
+
}) => Promise<AppPageCacheSpecialErrorDocument | null>;
|
|
44
|
+
/** The parallel slot not-found boundaries that catch a shell error. See handleSsr. */
|
|
45
|
+
resolveCaughtNotFoundBoundaries?: (error: unknown) => readonly string[] | null;
|
|
39
46
|
renderToReadableStream: (element: AppPageRenderableElement, options: {
|
|
40
47
|
onError: (error: unknown, requestInfo: unknown, errorContext: unknown) => unknown;
|
|
41
48
|
}) => ReadableStream<Uint8Array>;
|
|
@@ -73,4 +80,5 @@ export type RenderAppPageCacheArtifactsResult = {
|
|
|
73
80
|
* shell regeneration.
|
|
74
81
|
*/
|
|
75
82
|
export declare function renderAppPageCacheArtifacts(options: RenderAppPageCacheArtifactsOptions): Promise<RenderAppPageCacheArtifactsResult>;
|
|
76
|
-
//#endregion
|
|
83
|
+
//#endregion
|
|
84
|
+
export {};
|
|
@@ -5,9 +5,9 @@ import { getCollectedFetchTags } from "../shims/fetch-cache.js";
|
|
|
5
5
|
import { readStreamAsText } from "../utils/text-stream.js";
|
|
6
6
|
import { buildAppPageFontLinkHeader, teeAppPageRscStreamForCapture } from "./app-page-execution.js";
|
|
7
7
|
import { recordAppPageRenderError, traceAppPageRender } from "./app-page-tracing.js";
|
|
8
|
-
import { buildAppPageTags } from "./implicit-tags.js";
|
|
9
|
-
import { consumeAppPageRenderObservationState, createAppPageHtmlOutputScope, createAppPageRenderObservation, createAppPageRscOutputScope } from "./app-page-render-observation.js";
|
|
10
8
|
import { buildAppPageLinkHeader, createAppPageSsrErrorHandler, isAppSsrRenderResult } from "./app-page-stream.js";
|
|
9
|
+
import { consumeAppPageRenderObservationState, createAppPageHtmlOutputScope, createAppPageRenderObservation, createAppPageRscOutputScope } from "./app-page-render-observation.js";
|
|
10
|
+
import { buildAppPageTags } from "./implicit-tags.js";
|
|
11
11
|
//#region src/server/app-page-cache-render.ts
|
|
12
12
|
/**
|
|
13
13
|
* Render an App page element to HTML (and optionally its RSC payload) for cache
|
|
@@ -44,6 +44,7 @@ async function renderAppPageCacheArtifactsImpl(options, renderSpan) {
|
|
|
44
44
|
isStaticGeneration: true,
|
|
45
45
|
isForceStatic: options.isForceStatic,
|
|
46
46
|
preloadRoutePattern: options.route.pattern,
|
|
47
|
+
resolveCaughtNotFoundBoundaries: options.resolveCaughtNotFoundBoundaries,
|
|
47
48
|
onSsrError: options.onSsrError && options.isCapturedRscError ? createAppPageSsrErrorHandler((error) => {
|
|
48
49
|
recordAppPageRenderError(renderSpan, error);
|
|
49
50
|
return options.onSsrError?.(error);
|
|
@@ -69,6 +70,17 @@ async function renderAppPageCacheArtifactsImpl(options, renderSpan) {
|
|
|
69
70
|
const reactLinkHeader = isAppSsrRenderResult(htmlResult) ? htmlResult.linkHeader : void 0;
|
|
70
71
|
linkHeader = buildAppPageLinkHeader(reactLinkHeader, buildAppPageFontLinkHeader(fontPreloads), options.reactMaxHeadersLength);
|
|
71
72
|
html = await readStreamAsText(htmlStream);
|
|
73
|
+
const caughtShellError = isAppSsrRenderResult(htmlResult) ? htmlResult.caughtShellError : void 0;
|
|
74
|
+
if (caughtShellError !== void 0) {
|
|
75
|
+
await capturedRscDataRef.value?.catch(() => {});
|
|
76
|
+
specialErrorDocument = await options.renderShellSpecialError?.(caughtShellError, {
|
|
77
|
+
html,
|
|
78
|
+
linkHeader
|
|
79
|
+
}) ?? null;
|
|
80
|
+
if (!specialErrorDocument) throw caughtShellError;
|
|
81
|
+
html = specialErrorDocument.html;
|
|
82
|
+
linkHeader = specialErrorDocument.linkHeader;
|
|
83
|
+
}
|
|
72
84
|
}
|
|
73
85
|
let rscData;
|
|
74
86
|
if (options.captureRscData) {
|
|
@@ -10,10 +10,10 @@ import { VINEXT_RSC_CONTENT_TYPE, applyRscCompatibilityIdHeader, applyRscDeploym
|
|
|
10
10
|
import { mergeMiddlewareResponseHeaders } from "./middleware-response-headers.js";
|
|
11
11
|
import { markFrameworkLinkHeaders } from "./app-response-header-provenance.js";
|
|
12
12
|
import { applyClientStaleTimeHeader, applyEdgeRuntimeHeader } from "./app-page-response.js";
|
|
13
|
-
import { hasQueryInvariantRenderProof } from "./cache-proof.js";
|
|
14
13
|
import { isAppPprDynamicFallbackShellHtml } from "./app-ppr-fallback-shell.js";
|
|
15
|
-
import {
|
|
14
|
+
import { hasQueryInvariantRenderProof } from "./cache-proof.js";
|
|
16
15
|
import { finalizeAppPageHtmlCacheResponse, finalizeAppPageRscCacheResponse, scheduleAppPageRscCacheWrite } from "./app-page-cache-finalizer.js";
|
|
16
|
+
import { buildPageCacheTags } from "./implicit-tags.js";
|
|
17
17
|
//#region src/server/app-page-cache.ts
|
|
18
18
|
function recordAppPageCacheOutcome(recordCacheOutcome, input) {
|
|
19
19
|
try {
|