vinext 1.2.1 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -9
- package/dist/_virtual/_rolldown/runtime.js +1 -1
- package/dist/build/action-owner-manifest.d.ts +3 -2
- package/dist/build/action-owner-manifest.js +18 -2
- package/dist/build/app-page-static-eligibility.d.ts +17 -1
- package/dist/build/app-page-static-eligibility.js +80 -13
- package/dist/build/clean-output.d.ts +2 -1
- package/dist/build/client-build-config.d.ts +77 -6
- package/dist/build/client-build-config.js +176 -12
- package/dist/build/client-reference-async.d.ts +48 -0
- package/dist/build/client-reference-async.js +123 -0
- package/dist/build/client-reference-chunks.d.ts +32 -0
- package/dist/build/client-reference-chunks.js +111 -0
- package/dist/build/client-reference-groups.d.ts +171 -0
- package/dist/build/client-reference-groups.js +572 -0
- package/dist/build/css-url-assets.d.ts +2 -1
- package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
- package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
- package/dist/build/google-fonts/font-metadata.d.ts +2 -1
- package/dist/build/google-fonts/validate.d.ts +2 -1
- package/dist/build/inline-css.d.ts +2 -1
- package/dist/build/layout-classification.d.ts +2 -1
- package/dist/build/module-dependency-cache.d.ts +33 -1
- package/dist/build/module-dependency-cache.js +51 -1
- package/dist/build/next-client-runtime-manifests.d.ts +12 -2
- package/dist/build/next-client-runtime-manifests.js +19 -4
- package/dist/build/nitro-public-files.d.ts +24 -0
- package/dist/build/nitro-public-files.js +60 -0
- package/dist/build/pages-client-assets-module.js +1 -1
- package/dist/build/precompress.d.ts +2 -1
- package/dist/build/precompress.js +1 -1
- package/dist/build/prerender-paths.d.ts +2 -1
- package/dist/build/prerender-paths.js +5 -2
- package/dist/build/prerender-phase.d.ts +2 -1
- package/dist/build/prerender-server-pool.js +1 -1
- package/dist/build/prerender.d.ts +3 -2
- package/dist/build/prerender.js +5 -4
- package/dist/build/report.d.ts +2 -1
- package/dist/build/route-classification-injector.d.ts +2 -1
- package/dist/build/route-classification-manifest.d.ts +2 -1
- package/dist/build/run-prerender.d.ts +2 -1
- package/dist/build/server-actions-encryption-key.d.ts +24 -0
- package/dist/build/server-actions-encryption-key.js +101 -0
- package/dist/build/ssr-manifest.d.ts +3 -0
- package/dist/build/ssr-manifest.js +34 -2
- package/dist/build/standalone.d.ts +2 -1
- package/dist/cache/cache-adapters-virtual.d.ts +2 -1
- package/dist/cache.js +1 -2
- package/dist/check.d.ts +2 -1
- package/dist/check.js +4 -0
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +2 -0
- package/dist/client/client-redirect-matcher.js +2 -1
- package/dist/client/client-redirects.d.ts +4 -3
- package/dist/client/client-redirects.js +2 -1
- package/dist/client/client-rewrite-params.d.ts +9 -0
- package/dist/client/client-rewrite-params.js +20 -0
- package/dist/client/client-rewrites.d.ts +2 -1
- package/dist/client/dev-error-overlay-store.d.ts +2 -1
- package/dist/client/dev-error-overlay.js +2 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +28 -3
- package/dist/client/navigation-runtime.js +42 -11
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -2
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +27 -41
- package/dist/config/config-matchers.js +293 -270
- package/dist/config/config-source.d.ts +34 -0
- package/dist/config/config-source.js +141 -0
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/header-params.d.ts +29 -0
- package/dist/config/header-params.js +106 -0
- package/dist/config/next-config.d.ts +20 -6
- package/dist/config/next-config.js +149 -11
- package/dist/config/tsconfig-paths.d.ts +2 -1
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
- package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
- package/dist/entries/app-browser-entry.d.ts +34 -6
- package/dist/entries/app-browser-entry.js +103 -40
- package/dist/entries/app-rsc-entry.d.ts +4 -1
- package/dist/entries/app-rsc-entry.js +131 -66
- package/dist/entries/app-rsc-manifest.d.ts +12 -1
- package/dist/entries/app-rsc-manifest.js +73 -1
- package/dist/entries/app-ssr-entry.d.ts +4 -1
- package/dist/entries/app-ssr-entry.js +9 -2
- package/dist/entries/pages-client-entry.d.ts +1 -0
- package/dist/entries/pages-client-entry.js +6 -6
- package/dist/entries/pages-entry-helpers.js +1 -2
- package/dist/entries/pages-server-entry.d.ts +2 -1
- package/dist/entries/pages-server-entry.js +18 -15
- package/dist/entries/runtime-entry-module.d.ts +1 -0
- package/dist/entries/runtime-entry-module.js +4 -1
- package/dist/image/image-adapters-virtual.d.ts +2 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.js +340 -116
- package/dist/init.js +17 -0
- package/dist/plugins/client-compile-hints.d.ts +30 -0
- package/dist/plugins/client-compile-hints.js +88 -0
- package/dist/plugins/client-reference-dedup.d.ts +2 -1
- package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
- package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
- package/dist/plugins/dynamic-preload-metadata.js +1 -1
- package/dist/plugins/environment.d.ts +2 -1
- package/dist/plugins/fonts.js +9 -12
- package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
- package/dist/plugins/import-meta-url.d.ts +2 -1
- package/dist/plugins/og-assets.d.ts +2 -1
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +27 -3
- package/dist/plugins/optimize-imports.js +106 -20
- package/dist/plugins/pages-node-externals.d.ts +2 -1
- package/dist/plugins/remove-console.d.ts +2 -1
- package/dist/plugins/require-condition-resolution.d.ts +2 -1
- package/dist/plugins/rsc-client-reference-loaders.d.ts +53 -1
- package/dist/plugins/rsc-client-reference-loaders.js +447 -27
- package/dist/plugins/rsc-client-shim-excludes.js +2 -0
- package/dist/plugins/sass.d.ts +2 -1
- package/dist/plugins/strip-server-exports.d.ts +2 -1
- package/dist/plugins/styled-jsx.d.ts +2 -1
- package/dist/plugins/transform-result.d.ts +2 -1
- package/dist/plugins/typeof-window.d.ts +2 -1
- package/dist/plugins/use-cache-callable.d.ts +5 -0
- package/dist/plugins/use-cache-callable.js +30 -8
- package/dist/plugins/worker-image-imports.d.ts +1 -0
- package/dist/plugins/worker-image-imports.js +2 -2
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +41 -1
- package/dist/routing/app-route-graph.js +122 -50
- package/dist/routing/browser-route-manifest.d.ts +44 -0
- package/dist/routing/browser-route-manifest.js +195 -0
- package/dist/routing/hashed-route-patterns.d.ts +4 -0
- package/dist/routing/hashed-route-patterns.js +22 -0
- package/dist/routing/optimistic-route-trie.d.ts +28 -0
- package/dist/routing/optimistic-route-trie.js +102 -0
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/routing/route-validation.d.ts +6 -1
- package/dist/routing/route-validation.js +26 -10
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/app-action-forwarding.d.ts +10 -1
- package/dist/server/app-action-forwarding.js +15 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
- package/dist/server/app-browser-entry.js +175 -64
- package/dist/server/app-browser-error.d.ts +5 -2
- package/dist/server/app-browser-error.js +7 -2
- package/dist/server/app-browser-history-controller.d.ts +2 -1
- package/dist/server/app-browser-hydration.d.ts +2 -1
- package/dist/server/app-browser-interception-context.d.ts +4 -3
- package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
- package/dist/server/app-browser-mpa-navigation.js +6 -5
- package/dist/server/app-browser-navigation-controller.d.ts +17 -6
- package/dist/server/app-browser-navigation-controller.js +103 -36
- package/dist/server/app-browser-popstate.d.ts +2 -1
- package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
- package/dist/server/app-browser-server-action-client.d.ts +2 -1
- package/dist/server/app-browser-state.d.ts +2 -2
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-visible-commit.d.ts +6 -5
- package/dist/server/app-client-reference-manifest.d.ts +31 -0
- package/dist/server/app-client-reference-manifest.js +46 -0
- package/dist/server/app-client-reference-preloader.d.ts +45 -2
- package/dist/server/app-client-reference-preloader.js +48 -10
- package/dist/server/app-elements-wire.d.ts +2 -1
- package/dist/server/app-elements.d.ts +2 -0
- package/dist/server/app-elements.js +3 -1
- package/dist/server/app-fallback-renderer.d.ts +9 -2
- package/dist/server/app-fallback-renderer.js +6 -2
- package/dist/server/app-history-state.d.ts +2 -1
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-layout-param-observation.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-middleware.d.ts +6 -0
- package/dist/server/app-middleware.js +8 -10
- package/dist/server/app-optimistic-routing.d.ts +26 -11
- package/dist/server/app-optimistic-routing.js +38 -96
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +229 -39
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +40 -7
- package/dist/server/app-page-cache-finalizer.d.ts +2 -1
- package/dist/server/app-page-cache-finalizer.js +1 -1
- package/dist/server/app-page-cache-render.d.ts +10 -2
- package/dist/server/app-page-cache-render.js +15 -2
- package/dist/server/app-page-cache.js +2 -2
- package/dist/server/app-page-dispatch.d.ts +34 -1
- package/dist/server/app-page-dispatch.js +165 -34
- package/dist/server/app-page-element-builder.d.ts +17 -1
- package/dist/server/app-page-element-builder.js +187 -66
- package/dist/server/app-page-execution.d.ts +28 -1
- package/dist/server/app-page-execution.js +114 -5
- package/dist/server/app-page-head.d.ts +95 -3
- package/dist/server/app-page-head.js +307 -152
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-probe.d.ts +2 -1
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +7 -1
- package/dist/server/app-page-render.js +38 -11
- package/dist/server/app-page-request.d.ts +14 -1
- package/dist/server/app-page-request.js +1 -1
- package/dist/server/app-page-route-wiring.d.ts +52 -2
- package/dist/server/app-page-route-wiring.js +197 -47
- package/dist/server/app-page-rsc-render-status.d.ts +3 -1
- package/dist/server/app-page-rsc-render-status.js +1 -0
- package/dist/server/app-page-search-params-observation.d.ts +8 -6
- package/dist/server/app-page-search-params-observation.js +16 -11
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +38 -1
- package/dist/server/app-page-stream.js +24 -4
- package/dist/server/app-pages-bridge.d.ts +4 -2
- package/dist/server/app-pages-bridge.js +11 -7
- package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
- package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
- package/dist/server/app-prerender-endpoints.d.ts +2 -1
- package/dist/server/app-prerender-static-params.d.ts +2 -1
- package/dist/server/app-prerender-static-params.js +3 -2
- package/dist/server/app-render-dependency.d.ts +11 -1
- package/dist/server/app-render-dependency.js +65 -6
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-request-stage-independent-entry.js +2 -2
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.js +3 -3
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +4 -2
- package/dist/server/app-route-handler-execution.d.ts +4 -1
- package/dist/server/app-route-handler-execution.js +9 -2
- package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
- package/dist/server/app-route-handler-middleware-context.js +3 -3
- package/dist/server/app-route-handler-response.d.ts +4 -2
- package/dist/server/app-route-handler-response.js +2 -2
- package/dist/server/app-route-handler-runtime.d.ts +4 -1
- package/dist/server/app-route-handler-runtime.js +20 -3
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +15 -6
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-route-tree.d.ts +20 -0
- package/dist/server/app-route-tree.js +18 -0
- package/dist/server/app-router-entry.js +2 -2
- package/dist/server/app-rsc-combined-handler.js +8 -1
- package/dist/server/app-rsc-error-handler.d.ts +2 -1
- package/dist/server/app-rsc-errors.d.ts +9 -1
- package/dist/server/app-rsc-errors.js +9 -2
- package/dist/server/app-rsc-handler.d.ts +6 -2
- package/dist/server/app-rsc-handler.js +152 -140
- package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
- package/dist/server/app-rsc-response-finalizer.js +4 -1
- package/dist/server/app-rsc-response-stage.js +3 -1
- package/dist/server/app-rsc-route-matching.d.ts +39 -1
- package/dist/server/app-rsc-route-matching.js +25 -1
- package/dist/server/app-segment-config.d.ts +2 -1
- package/dist/server/app-segment-config.js +1 -14
- package/dist/server/app-server-action-execution.d.ts +25 -7
- package/dist/server/app-server-action-execution.js +53 -59
- package/dist/server/app-ssr-entry.d.ts +12 -0
- package/dist/server/app-ssr-entry.js +104 -48
- package/dist/server/app-ssr-error-meta.d.ts +2 -1
- package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
- package/dist/server/app-ssr-stream.d.ts +29 -10
- package/dist/server/app-ssr-stream.js +311 -67
- package/dist/server/app-static-generation.d.ts +2 -1
- package/dist/server/app-streamed-client-references.d.ts +39 -0
- package/dist/server/app-streamed-client-references.js +156 -0
- package/dist/server/app-visited-response-cache.d.ts +2 -1
- package/dist/server/app-worker-stages.d.ts +2 -1
- package/dist/server/artifact-compatibility.d.ts +2 -1
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/client-reuse-manifest.d.ts +2 -1
- package/dist/server/config-headers.d.ts +2 -1
- package/dist/server/config-headers.js +12 -3
- package/dist/server/csp.d.ts +2 -1
- package/dist/server/default-global-not-found-module.d.ts +2 -1
- package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
- package/dist/server/default-http-access-fallback-modules.js +31 -0
- package/dist/server/defer-until-stream-consumed.d.ts +34 -0
- package/dist/server/defer-until-stream-consumed.js +154 -21
- package/dist/server/dev-lockfile.d.ts +32 -2
- package/dist/server/dev-lockfile.js +46 -2
- package/dist/server/dev-module-runner.d.ts +2 -1
- package/dist/server/dev-server.js +10 -3
- package/dist/server/fetch-handler.js +1 -2
- package/dist/server/file-based-metadata.d.ts +2 -1
- package/dist/server/framework-tracer.d.ts +2 -1
- package/dist/server/html.d.ts +1 -0
- package/dist/server/html.js +19 -1
- package/dist/server/http-conditional.d.ts +2 -1
- package/dist/server/http-error-responses.d.ts +2 -1
- package/dist/server/implicit-tags.d.ts +2 -1
- package/dist/server/isolate-shared-promise.d.ts +10 -0
- package/dist/server/isolate-shared-promise.js +33 -0
- package/dist/server/isr-cache.js +3 -2
- package/dist/server/metadata-route-build-data.d.ts +2 -1
- package/dist/server/metadata-route-build-data.js +1 -1
- package/dist/server/metadata-route-response.d.ts +2 -1
- package/dist/server/metadata-route-response.js +1 -1
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-matcher-pattern.d.ts +0 -1
- package/dist/server/middleware-matcher-pattern.js +11 -140
- package/dist/server/middleware-matcher.js +5 -6
- package/dist/server/middleware-response-headers.d.ts +31 -0
- package/dist/server/middleware-response-headers.js +57 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/middleware-runtime.js +26 -13
- package/dist/server/navigation-planner.d.ts +2 -2
- package/dist/server/navigation-trace.d.ts +2 -1
- package/dist/server/next-error-digest.d.ts +2 -1
- package/dist/server/nitro-public-files-plugin.d.ts +39 -0
- package/dist/server/nitro-public-files-plugin.js +106 -0
- package/dist/server/nitro-public-files.d.ts +22 -0
- package/dist/server/nitro-public-files.js +39 -0
- package/dist/server/opentelemetry-api.d.ts +2 -1
- package/dist/server/operation-token.d.ts +2 -1
- package/dist/server/pages-api-route.d.ts +2 -1
- package/dist/server/pages-asset-tags.d.ts +7 -1
- package/dist/server/pages-asset-tags.js +9 -2
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +8 -1
- package/dist/server/pages-data-route.d.ts +2 -1
- package/dist/server/pages-document-asset-props.d.ts +2 -1
- package/dist/server/pages-document-initial-props.d.ts +2 -1
- package/dist/server/pages-execution-tracing.d.ts +2 -1
- package/dist/server/pages-execution-tracing.js +1 -1
- package/dist/server/pages-get-initial-props.d.ts +2 -1
- package/dist/server/pages-i18n.d.ts +18 -0
- package/dist/server/pages-i18n.js +18 -2
- package/dist/server/pages-node-compat.d.ts +5 -3
- package/dist/server/pages-node-compat.js +35 -16
- package/dist/server/pages-page-data.d.ts +7 -1
- package/dist/server/pages-page-data.js +35 -12
- package/dist/server/pages-page-handler.d.ts +3 -2
- package/dist/server/pages-page-handler.js +16 -7
- package/dist/server/pages-page-method.d.ts +2 -1
- package/dist/server/pages-page-response.d.ts +2 -1
- package/dist/server/pages-preview.d.ts +2 -1
- package/dist/server/pages-readiness.d.ts +2 -1
- package/dist/server/pages-request-pipeline.d.ts +8 -2
- package/dist/server/pages-request-pipeline.js +35 -40
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-request-stage-entry.js +16 -6
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.js +1 -1
- package/dist/server/pages-revalidate.js +1 -0
- package/dist/server/pages-route-data-kind.d.ts +2 -1
- package/dist/server/pages-router-entry.js +1 -1
- package/dist/server/prerender-cache-life-header.d.ts +2 -1
- package/dist/server/prerender-route-params.d.ts +2 -1
- package/dist/server/prod-server.d.ts +2 -2
- package/dist/server/prod-server.js +80 -36
- package/dist/server/proxy-trust.d.ts +6 -0
- package/dist/server/proxy-trust.js +12 -6
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-pipeline.d.ts +5 -0
- package/dist/server/request-pipeline.js +12 -1
- package/dist/server/request-tracing.d.ts +2 -1
- package/dist/server/request-tracing.js +1 -1
- package/dist/server/response-start-tracing.js +7 -29
- package/dist/server/rsc-render-stream.d.ts +4 -0
- package/dist/server/rsc-render-stream.js +25 -0
- package/dist/server/seed-cache.d.ts +2 -1
- package/dist/server/seed-cache.js +1 -1
- package/dist/server/server-reference-loader.js +10 -1
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +16 -3
- package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +2 -1
- package/dist/server/worker-utils.js +1 -1
- package/dist/shims/app.d.ts +2 -1
- package/dist/shims/cache-callable-runtime.d.ts +2 -1
- package/dist/shims/cache-handler.d.ts +8 -3
- package/dist/shims/cache-handler.js +32 -11
- package/dist/shims/cache-request-state.d.ts +40 -3
- package/dist/shims/cache-request-state.js +70 -5
- package/dist/shims/cache-runtime.js +47 -19
- package/dist/shims/cache.d.ts +2 -2
- package/dist/shims/cache.js +17 -8
- package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
- package/dist/shims/caught-not-found-boundaries.js +48 -0
- package/dist/shims/cdn-purge-routes.d.ts +25 -0
- package/dist/shims/cdn-purge-routes.js +77 -0
- package/dist/shims/client-locale.js +2 -1
- package/dist/shims/client-page-root.d.ts +2 -1
- package/dist/shims/config.d.ts +2 -1
- package/dist/shims/default-forbidden.d.ts +4 -0
- package/dist/shims/default-forbidden.js +18 -0
- package/dist/shims/default-not-found.d.ts +0 -5
- package/dist/shims/default-not-found.js +5 -41
- package/dist/shims/default-unauthorized.d.ts +4 -0
- package/dist/shims/default-unauthorized.js +18 -0
- package/dist/shims/dynamic.js +17 -4
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +31 -16
- package/dist/shims/font-google.js +1 -2
- package/dist/shims/font-utils.d.ts +3 -2
- package/dist/shims/font-utils.js +5 -3
- package/dist/shims/form.js +9 -4
- package/dist/shims/http-access-error-fallback.d.ts +7 -0
- package/dist/shims/http-access-error-fallback.js +47 -0
- package/dist/shims/image-props.d.ts +93 -0
- package/dist/shims/image-props.js +323 -0
- package/dist/shims/image.d.ts +4 -39
- package/dist/shims/image.js +4 -319
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
- package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
- package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
- package/dist/shims/internal/client-reference-loader.d.ts +7 -0
- package/dist/shims/internal/client-reference-loader.js +91 -0
- package/dist/shims/internal/cookie-serialize.d.ts +2 -1
- package/dist/shims/internal/cookies.js +1 -2
- package/dist/shims/internal/headers-state.d.ts +9 -0
- package/dist/shims/internal/headers-state.js +19 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
- package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
- package/dist/shims/internal/interpolate-as.d.ts +2 -1
- package/dist/shims/internal/pages-data-target.d.ts +2 -1
- package/dist/shims/internal/pages-data-url.d.ts +2 -1
- package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
- package/dist/shims/link.js +198 -53
- package/dist/shims/metadata.d.ts +32 -11
- package/dist/shims/metadata.js +88 -26
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation.d.ts +23 -3
- package/dist/shims/navigation.js +91 -25
- package/dist/shims/og.js +35 -10
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/request-context.d.ts +13 -0
- package/dist/shims/router.js +33 -43
- package/dist/shims/server.d.ts +31 -4
- package/dist/shims/server.js +58 -10
- package/dist/shims/thenable-params.d.ts +6 -1
- package/dist/shims/thenable-params.js +11 -2
- package/dist/shims/unified-request-context.d.ts +5 -0
- package/dist/shims/unified-request-context.js +5 -3
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/asset-prefix.d.ts +7 -0
- package/dist/utils/asset-prefix.js +10 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +20 -6
- package/dist/utils/client-entry-manifest.d.ts +13 -0
- package/dist/utils/client-entry-manifest.js +20 -1
- package/dist/utils/client-reference-chunks.d.ts +45 -0
- package/dist/utils/client-reference-chunks.js +30 -0
- package/dist/utils/client-runtime-metadata.d.ts +10 -1
- package/dist/utils/client-runtime-metadata.js +53 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +18 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/manifest-paths.d.ts +14 -0
- package/dist/utils/manifest-paths.js +22 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/path-to-regexp.d.ts +21 -0
- package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
- package/dist/utils/plugin-react-version.d.ts +15 -0
- package/dist/utils/plugin-react-version.js +64 -0
- package/dist/utils/project.d.ts +2 -1
- package/dist/utils/project.js +9 -1
- package/dist/utils/public-routes.d.ts +2 -0
- package/dist/utils/public-routes.js +18 -7
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/sorted-array.d.ts +2 -1
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +5 -5
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/default-not-found-module.d.ts +0 -19
- package/dist/server/default-not-found-module.js +0 -18
- package/dist/server/middleware-path-to-regexp.d.ts +0 -13
- package/dist/server/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
- package/dist/utils/regex-safety.d.ts +0 -17
- package/dist/utils/regex-safety.js +0 -789
|
@@ -1,6 +1,8 @@
|
|
|
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";
|
|
5
|
+
import { createArtifactCompatibilityEnvelope } from "./artifact-compatibility.js";
|
|
4
6
|
import { AppElementsWire } from "./app-elements-wire.js";
|
|
5
7
|
import "./app-elements.js";
|
|
6
8
|
import DefaultGlobalError from "../shims/default-global-error.js";
|
|
@@ -8,20 +10,52 @@ import { ErrorBoundary, GlobalErrorBoundary, SerializedErrorBoundary } from "../
|
|
|
8
10
|
import { LayoutSegmentProvider } from "../shims/layout-segment-context.js";
|
|
9
11
|
import { withUseCacheLayoutMarker } from "../shims/internal/app-page-props-cache-key.js";
|
|
10
12
|
import { MetadataHead, ViewportHead } from "../shims/metadata.js";
|
|
11
|
-
import { resolveAppPageBranchParams, resolveAppPageSegmentParams } from "./app-page-params.js";
|
|
12
13
|
import { stripRscSuffix } from "./app-rsc-cache-busting.js";
|
|
14
|
+
import { copyLinkHeaderProvenance } from "./app-response-header-provenance.js";
|
|
13
15
|
import { buildRscRedirectFlightStream } from "./app-rsc-redirect-flight.js";
|
|
14
16
|
import { bufferAppPageBinaryStream, buildAppPageSpecialErrorResponse, resolveAppPageSpecialError } from "./app-page-execution.js";
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
+
import { resolveAppPageBranchParams, resolveAppPageSegmentParams } from "./app-page-params.js";
|
|
18
|
+
import { createAppPageLayoutEntries, createAppPageRouteBodyMetadata, createAppPageSourcePage } from "./app-page-route-wiring.js";
|
|
17
19
|
import { buildClientHookErrorMessage } from "../shims/client-hook-error.js";
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
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";
|
|
21
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";
|
|
22
25
|
import { resolveSlotParamOverrides } from "./app-page-element-builder.js";
|
|
23
|
-
import {
|
|
26
|
+
import { createAppPageFontData, createAppPageRscErrorTracker, createAppPageSsrErrorHandler, renderAppPageHtmlResponse } from "./app-page-stream.js";
|
|
27
|
+
import { Fragment, Suspense, createElement } from "react";
|
|
24
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
|
+
}
|
|
25
59
|
const DEFAULT_GLOBAL_ERROR_COMPONENT = DefaultGlobalError;
|
|
26
60
|
function getDefaultExport(module) {
|
|
27
61
|
return module?.default ?? null;
|
|
@@ -34,6 +68,8 @@ function resolveHttpAccessBoundaryTreePosition(route, boundaryModule, statusCode
|
|
|
34
68
|
if (boundaryModule === routeBoundary && statusCode === 403) return route.forbiddenTreePosition ?? null;
|
|
35
69
|
if (boundaryModule === routeBoundary && statusCode === 401) return route.unauthorizedTreePosition ?? null;
|
|
36
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;
|
|
37
73
|
return null;
|
|
38
74
|
}
|
|
39
75
|
function wrapRenderedBoundaryElement(options) {
|
|
@@ -96,14 +132,19 @@ function createAppPageBoundaryRscPayload(options) {
|
|
|
96
132
|
const routeId = AppElementsWire.encodeRouteId(options.pathname, null);
|
|
97
133
|
const layoutEntries = createAppPageBoundaryLayoutEntries(options.route, options.layoutModules);
|
|
98
134
|
const sourcePageSegments = options.sourcePageSegments ?? options.route?.routeSegments;
|
|
135
|
+
const rootLayoutTreePath = layoutEntries[0]?.treePath ?? null;
|
|
99
136
|
return {
|
|
100
137
|
...AppElementsWire.createMetadataEntries({
|
|
101
138
|
interceptionContext: null,
|
|
102
139
|
layoutIds: layoutEntries.map((entry) => entry.id),
|
|
103
|
-
rootLayoutTreePath
|
|
140
|
+
rootLayoutTreePath,
|
|
104
141
|
routeId,
|
|
105
142
|
sourcePage: sourcePageSegments ? createAppPageSourcePage(sourcePageSegments) : null
|
|
106
143
|
}),
|
|
144
|
+
[AppElementsWire.keys.artifactCompatibility]: createArtifactCompatibilityEnvelope({
|
|
145
|
+
deploymentVersion: process.env.__VINEXT_BUILD_ID ?? null,
|
|
146
|
+
rootBoundaryId: rootLayoutTreePath
|
|
147
|
+
}),
|
|
107
148
|
[routeId]: options.element
|
|
108
149
|
};
|
|
109
150
|
}
|
|
@@ -157,6 +198,7 @@ async function renderAppPageBoundaryElementResponse(options) {
|
|
|
157
198
|
isCacheCandidate: options.isCacheCandidate,
|
|
158
199
|
isEdgeRuntime: options.isEdgeRuntime,
|
|
159
200
|
middlewareHeaders: options.middlewareContext.headers,
|
|
201
|
+
preloadRoutePattern: options.route ? options.route.pattern : null,
|
|
160
202
|
navigationContext: options.getNavigationContext() ?? {
|
|
161
203
|
pathname,
|
|
162
204
|
searchParams: requestUrl.searchParams,
|
|
@@ -217,17 +259,23 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
217
259
|
const layoutModules = options.layoutModules ?? options.route?.layouts ?? options.rootLayouts;
|
|
218
260
|
const pathname = new URL(options.requestUrl).pathname;
|
|
219
261
|
const routePathname = options.routePathname ?? stripRscSuffix(stripBasePath(pathname, options.basePath ?? ""));
|
|
220
|
-
const
|
|
262
|
+
const headBoundaryModule = options.headBoundaryModule ?? boundaryModule;
|
|
263
|
+
const headLayoutModules = options.headLayoutModules ?? layoutModules;
|
|
264
|
+
const routeSegments = resolveHttpAccessFallbackHeadRouteSegments(options.route, headLayoutModules);
|
|
221
265
|
const fallbackRouteSegments = routeSegments ?? [];
|
|
222
266
|
let head;
|
|
267
|
+
let streamedRouteMetadata = null;
|
|
268
|
+
let streamedConventionHead = null;
|
|
269
|
+
const lateAccessErrors = [];
|
|
223
270
|
try {
|
|
224
271
|
if ([
|
|
225
272
|
401,
|
|
226
273
|
403,
|
|
227
274
|
404
|
|
228
275
|
].includes(options.statusCode)) {
|
|
229
|
-
const boundaryTreePosition = resolveHttpAccessBoundaryTreePosition(options.route,
|
|
230
|
-
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);
|
|
231
279
|
const intercept = options.intercept;
|
|
232
280
|
const isSiblingIntercept = intercept?.interceptSlotKey === "__vinext_page_intercept" && intercept.interceptPage != null;
|
|
233
281
|
const effectiveParams = isSiblingIntercept ? intercept.interceptParams ?? options.matchedParams : options.matchedParams;
|
|
@@ -249,52 +297,180 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
249
297
|
slotParams,
|
|
250
298
|
slots: options.route?.slots ?? null
|
|
251
299
|
});
|
|
252
|
-
const
|
|
300
|
+
const resolvePrimaryParallelBranch = (segments) => isSiblingIntercept ? {
|
|
253
301
|
head: {
|
|
254
302
|
layoutModules: intercept?.interceptLayouts ?? [],
|
|
255
|
-
layoutParams: (intercept?.interceptLayoutSegments ?? []).map((
|
|
303
|
+
layoutParams: (intercept?.interceptLayoutSegments ?? []).map((layoutSegments) => resolveAppPageBranchParams(intercept?.interceptBranchSegments ?? layoutSegments, layoutSegments.length, effectiveParams, layoutSegments)),
|
|
256
304
|
pageModule: intercept?.interceptPage ?? null,
|
|
257
305
|
params: effectiveParams,
|
|
258
|
-
routeSegments: intercept?.interceptSourcePageSegments ??
|
|
306
|
+
routeSegments: intercept?.interceptSourcePageSegments ?? segments
|
|
259
307
|
},
|
|
260
308
|
...intercept?.interceptNotFound ? {
|
|
261
309
|
notFoundModule: intercept.interceptNotFound,
|
|
262
|
-
notFoundModuleRouteSegments: (intercept.interceptNotFoundBranchSegments ?? intercept.interceptSourcePageSegments ??
|
|
263
|
-
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)
|
|
264
312
|
} : {},
|
|
265
|
-
ownerTreePosition:
|
|
313
|
+
ownerTreePosition: segments.length
|
|
266
314
|
} : null;
|
|
315
|
+
const primaryParallelBranch = resolvePrimaryParallelBranch(fallbackRouteSegments);
|
|
267
316
|
const fallbackHeadOptions = {
|
|
268
|
-
boundaryModule,
|
|
317
|
+
boundaryModule: headBoundaryModule,
|
|
269
318
|
boundaryParams,
|
|
270
|
-
boundaryRouteSegments
|
|
319
|
+
boundaryRouteSegments,
|
|
271
320
|
branchNotFoundConventions: options.statusCode === 404,
|
|
272
321
|
errorConvention: options.statusCode === 403 ? "forbidden" : options.statusCode === 401 ? "unauthorized" : "not-found",
|
|
273
|
-
layoutModules,
|
|
274
|
-
layoutTreePositions: resolveHttpAccessFallbackHeadLayoutTreePositions(options.route,
|
|
322
|
+
layoutModules: headLayoutModules,
|
|
323
|
+
layoutTreePositions: resolveHttpAccessFallbackHeadLayoutTreePositions(options.route, headLayoutModules),
|
|
275
324
|
parallelBranches,
|
|
276
325
|
params: options.matchedParams,
|
|
277
326
|
primaryParallelBranch,
|
|
278
327
|
routeSegments
|
|
279
328
|
};
|
|
280
|
-
const
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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
|
+
};
|
|
290
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();
|
|
291
467
|
} else head = await resolveAppPageHead({
|
|
292
468
|
applyFileBasedMetadata: options.applyFileBasedMetadata,
|
|
293
469
|
basePath: options.basePath ?? "",
|
|
294
|
-
layoutModules,
|
|
295
|
-
layoutTreePositions: resolveHttpAccessFallbackHeadLayoutTreePositions(options.route,
|
|
470
|
+
layoutModules: headLayoutModules,
|
|
471
|
+
layoutTreePositions: resolveHttpAccessFallbackHeadLayoutTreePositions(options.route, headLayoutModules),
|
|
296
472
|
metadataRoutes: options.metadataRoutes,
|
|
297
|
-
pageModule:
|
|
473
|
+
pageModule: headBoundaryModule,
|
|
298
474
|
params: options.matchedParams,
|
|
299
475
|
routePath: options.route?.pattern ?? pathname,
|
|
300
476
|
routeSegments
|
|
@@ -316,16 +492,30 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
316
492
|
if (metadata) headElements.push(createElement(MetadataHead, {
|
|
317
493
|
key: "metadata",
|
|
318
494
|
metadata,
|
|
319
|
-
pathname,
|
|
495
|
+
pathname: routePathname,
|
|
320
496
|
trailingSlash: options.trailingSlash
|
|
321
497
|
}));
|
|
322
|
-
headElements.push(createElement(ViewportHead, {
|
|
498
|
+
if (viewport) headElements.push(createElement(ViewportHead, {
|
|
323
499
|
key: "viewport",
|
|
324
500
|
viewport
|
|
325
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 }))));
|
|
326
516
|
const skipLayoutWrapping = options.skipLayoutWrapping ?? false;
|
|
327
517
|
const element = wrapRenderedBoundaryElement({
|
|
328
|
-
element: createElement(Fragment, null, ...headElements, createElement(boundaryComponent)),
|
|
518
|
+
element: createElement(Fragment, null, ...headElements, createElement(boundaryComponent), ...bodyElements),
|
|
329
519
|
globalErrorModule: options.globalErrorModule,
|
|
330
520
|
includeGlobalErrorBoundary: true,
|
|
331
521
|
isRscRequest: options.isRscRequest,
|
|
@@ -337,7 +527,7 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
337
527
|
routeSegments: options.route?.routeSegments,
|
|
338
528
|
skipLayoutWrapping
|
|
339
529
|
});
|
|
340
|
-
return renderAppPageBoundaryElementResponse({
|
|
530
|
+
return failOnLateAccessError(await renderAppPageBoundaryElementResponse({
|
|
341
531
|
...options,
|
|
342
532
|
element,
|
|
343
533
|
handleSpecialErrors: true,
|
|
@@ -347,7 +537,7 @@ async function renderAppPageHttpAccessFallback(options) {
|
|
|
347
537
|
route: skipLayoutWrapping ? null : options.route,
|
|
348
538
|
routePattern: options.route?.pattern,
|
|
349
539
|
status: options.statusCode
|
|
350
|
-
});
|
|
540
|
+
}), lateAccessErrors);
|
|
351
541
|
}
|
|
352
542
|
async function renderAppPageErrorBoundary(options) {
|
|
353
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
|
|
@@ -43,6 +43,8 @@ async function renderAppPageCacheArtifactsImpl(options, renderSpan) {
|
|
|
43
43
|
mirrorNextFlight: options.mirrorNextFlight,
|
|
44
44
|
isStaticGeneration: true,
|
|
45
45
|
isForceStatic: options.isForceStatic,
|
|
46
|
+
preloadRoutePattern: options.route.pattern,
|
|
47
|
+
resolveCaughtNotFoundBoundaries: options.resolveCaughtNotFoundBoundaries,
|
|
46
48
|
onSsrError: options.onSsrError && options.isCapturedRscError ? createAppPageSsrErrorHandler((error) => {
|
|
47
49
|
recordAppPageRenderError(renderSpan, error);
|
|
48
50
|
return options.onSsrError?.(error);
|
|
@@ -68,6 +70,17 @@ async function renderAppPageCacheArtifactsImpl(options, renderSpan) {
|
|
|
68
70
|
const reactLinkHeader = isAppSsrRenderResult(htmlResult) ? htmlResult.linkHeader : void 0;
|
|
69
71
|
linkHeader = buildAppPageLinkHeader(reactLinkHeader, buildAppPageFontLinkHeader(fontPreloads), options.reactMaxHeadersLength);
|
|
70
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
|
+
}
|
|
71
84
|
}
|
|
72
85
|
let rscData;
|
|
73
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 {
|