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