vinext 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +1 -1
- package/dist/build/action-owner-manifest.d.ts +3 -2
- package/dist/build/action-owner-manifest.js +18 -2
- package/dist/build/app-page-static-eligibility.d.ts +17 -1
- package/dist/build/app-page-static-eligibility.js +80 -13
- package/dist/build/clean-output.d.ts +2 -1
- package/dist/build/client-build-config.d.ts +13 -3
- package/dist/build/client-build-config.js +46 -9
- package/dist/build/client-reference-async.d.ts +48 -0
- package/dist/build/client-reference-async.js +123 -0
- package/dist/build/client-reference-chunks.d.ts +32 -0
- package/dist/build/client-reference-chunks.js +111 -0
- package/dist/build/client-reference-groups.d.ts +9 -1
- package/dist/build/client-reference-groups.js +40 -2
- package/dist/build/css-url-assets.d.ts +2 -1
- package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
- package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
- package/dist/build/google-fonts/font-metadata.d.ts +2 -1
- package/dist/build/google-fonts/validate.d.ts +2 -1
- package/dist/build/inline-css.d.ts +2 -1
- package/dist/build/layout-classification.d.ts +2 -1
- package/dist/build/module-dependency-cache.d.ts +2 -1
- package/dist/build/next-client-runtime-manifests.d.ts +2 -1
- package/dist/build/precompress.d.ts +2 -1
- package/dist/build/precompress.js +1 -1
- package/dist/build/prerender-paths.d.ts +2 -1
- package/dist/build/prerender-phase.d.ts +2 -1
- package/dist/build/prerender-server-pool.js +1 -1
- package/dist/build/prerender.d.ts +3 -2
- package/dist/build/prerender.js +5 -4
- package/dist/build/report.d.ts +2 -1
- package/dist/build/route-classification-injector.d.ts +2 -1
- package/dist/build/route-classification-manifest.d.ts +2 -1
- package/dist/build/run-prerender.d.ts +2 -1
- package/dist/build/server-actions-encryption-key.d.ts +2 -1
- package/dist/build/ssr-manifest.js +25 -2
- package/dist/build/standalone.d.ts +2 -1
- package/dist/cache/cache-adapters-virtual.d.ts +2 -1
- package/dist/cache.js +1 -2
- package/dist/check.d.ts +2 -1
- package/dist/check.js +4 -0
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +2 -0
- package/dist/client/client-redirect-matcher.js +2 -1
- package/dist/client/client-redirects.d.ts +4 -3
- package/dist/client/client-redirects.js +2 -1
- package/dist/client/client-rewrites.d.ts +2 -1
- package/dist/client/dev-error-overlay-store.d.ts +2 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +3 -1
- package/dist/client/navigation-runtime.js +1 -1
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -1
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +12 -1
- package/dist/config/config-matchers.js +111 -16
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/next-config.d.ts +13 -1
- package/dist/config/next-config.js +29 -4
- package/dist/config/tsconfig-paths.d.ts +2 -1
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
- package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
- package/dist/entries/app-browser-entry.d.ts +20 -5
- package/dist/entries/app-browser-entry.js +79 -6
- package/dist/entries/app-rsc-entry.d.ts +2 -1
- package/dist/entries/app-rsc-entry.js +42 -12
- package/dist/entries/app-rsc-manifest.d.ts +2 -1
- package/dist/entries/app-rsc-manifest.js +53 -0
- package/dist/entries/pages-entry-helpers.js +1 -2
- package/dist/entries/pages-server-entry.d.ts +2 -1
- package/dist/entries/pages-server-entry.js +1 -1
- package/dist/entries/runtime-entry-module.d.ts +1 -0
- package/dist/entries/runtime-entry-module.js +4 -1
- package/dist/image/image-adapters-virtual.d.ts +2 -1
- package/dist/index.js +102 -34
- package/dist/plugins/client-compile-hints.d.ts +30 -0
- package/dist/plugins/client-compile-hints.js +88 -0
- package/dist/plugins/client-reference-dedup.d.ts +2 -1
- package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
- package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
- package/dist/plugins/dynamic-preload-metadata.js +1 -1
- package/dist/plugins/environment.d.ts +2 -1
- package/dist/plugins/fonts.js +9 -12
- package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
- package/dist/plugins/import-meta-url.d.ts +2 -1
- package/dist/plugins/og-assets.d.ts +2 -1
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +2 -1
- package/dist/plugins/pages-node-externals.d.ts +2 -1
- package/dist/plugins/remove-console.d.ts +2 -1
- package/dist/plugins/require-condition-resolution.d.ts +2 -1
- package/dist/plugins/rsc-client-reference-loaders.d.ts +8 -0
- package/dist/plugins/rsc-client-reference-loaders.js +170 -68
- package/dist/plugins/rsc-client-shim-excludes.js +2 -0
- package/dist/plugins/sass.d.ts +2 -1
- package/dist/plugins/strip-server-exports.d.ts +2 -1
- package/dist/plugins/styled-jsx.d.ts +2 -1
- package/dist/plugins/transform-result.d.ts +2 -1
- package/dist/plugins/typeof-window.d.ts +2 -1
- package/dist/plugins/worker-image-imports.js +1 -1
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +40 -0
- package/dist/routing/app-route-graph.js +122 -50
- package/dist/routing/browser-route-manifest.d.ts +2 -1
- package/dist/routing/optimistic-route-trie.d.ts +2 -1
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/app-action-forwarding.d.ts +2 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
- package/dist/server/app-browser-entry.js +30 -6
- package/dist/server/app-browser-error.d.ts +2 -1
- package/dist/server/app-browser-history-controller.d.ts +2 -1
- package/dist/server/app-browser-hydration.d.ts +2 -1
- package/dist/server/app-browser-interception-context.d.ts +2 -1
- package/dist/server/app-browser-navigation-controller.js +15 -10
- package/dist/server/app-browser-popstate.d.ts +2 -1
- package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
- package/dist/server/app-browser-server-action-client.d.ts +2 -1
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-visible-commit.d.ts +2 -1
- package/dist/server/app-client-reference-manifest.d.ts +31 -0
- package/dist/server/app-client-reference-manifest.js +46 -0
- package/dist/server/app-client-reference-preloader.d.ts +25 -5
- package/dist/server/app-client-reference-preloader.js +22 -7
- package/dist/server/app-elements-wire.d.ts +2 -1
- package/dist/server/app-elements.d.ts +2 -0
- package/dist/server/app-elements.js +3 -1
- package/dist/server/app-fallback-renderer.d.ts +9 -2
- package/dist/server/app-fallback-renderer.js +4 -1
- package/dist/server/app-history-state.d.ts +2 -1
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-layout-param-observation.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-optimistic-routing.d.ts +18 -1
- package/dist/server/app-optimistic-routing.js +34 -1
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +221 -38
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +40 -7
- package/dist/server/app-page-cache-finalizer.d.ts +2 -1
- package/dist/server/app-page-cache-finalizer.js +1 -1
- package/dist/server/app-page-cache-render.d.ts +10 -2
- package/dist/server/app-page-cache-render.js +14 -2
- package/dist/server/app-page-cache.js +2 -2
- package/dist/server/app-page-dispatch.d.ts +34 -1
- package/dist/server/app-page-dispatch.js +163 -34
- package/dist/server/app-page-element-builder.d.ts +17 -1
- package/dist/server/app-page-element-builder.js +187 -66
- package/dist/server/app-page-execution.d.ts +28 -1
- package/dist/server/app-page-execution.js +114 -5
- package/dist/server/app-page-head.d.ts +95 -3
- package/dist/server/app-page-head.js +307 -152
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-probe.d.ts +2 -1
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +7 -1
- package/dist/server/app-page-render.js +35 -10
- package/dist/server/app-page-request.d.ts +14 -1
- package/dist/server/app-page-request.js +1 -1
- package/dist/server/app-page-route-wiring.d.ts +52 -2
- package/dist/server/app-page-route-wiring.js +197 -47
- package/dist/server/app-page-rsc-render-status.d.ts +2 -1
- package/dist/server/app-page-search-params-observation.d.ts +7 -2
- package/dist/server/app-page-search-params-observation.js +8 -1
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +31 -1
- package/dist/server/app-page-stream.js +23 -4
- package/dist/server/app-pages-bridge.d.ts +2 -1
- package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
- package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
- package/dist/server/app-prerender-endpoints.d.ts +2 -1
- package/dist/server/app-prerender-static-params.d.ts +2 -1
- package/dist/server/app-render-dependency.d.ts +11 -1
- package/dist/server/app-render-dependency.js +26 -7
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +1 -1
- package/dist/server/app-route-handler-execution.d.ts +2 -1
- package/dist/server/app-route-handler-response.d.ts +2 -1
- package/dist/server/app-route-handler-runtime.d.ts +2 -1
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +8 -0
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-rsc-error-handler.d.ts +2 -1
- package/dist/server/app-rsc-errors.d.ts +2 -1
- package/dist/server/app-rsc-handler.d.ts +2 -1
- package/dist/server/app-rsc-handler.js +6 -10
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
- package/dist/server/app-rsc-route-matching.d.ts +38 -1
- package/dist/server/app-rsc-route-matching.js +24 -0
- package/dist/server/app-segment-config.d.ts +2 -1
- package/dist/server/app-segment-config.js +1 -14
- package/dist/server/app-server-action-execution.d.ts +2 -1
- package/dist/server/app-server-action-execution.js +3 -3
- package/dist/server/app-ssr-entry.d.ts +6 -0
- package/dist/server/app-ssr-entry.js +91 -44
- package/dist/server/app-ssr-error-meta.d.ts +2 -1
- package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
- package/dist/server/app-ssr-stream.d.ts +22 -10
- package/dist/server/app-ssr-stream.js +299 -67
- package/dist/server/app-static-generation.d.ts +2 -1
- package/dist/server/app-streamed-client-references.d.ts +39 -0
- package/dist/server/app-streamed-client-references.js +156 -0
- package/dist/server/app-visited-response-cache.d.ts +2 -1
- package/dist/server/app-worker-stages.d.ts +2 -1
- package/dist/server/artifact-compatibility.d.ts +2 -1
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/client-reuse-manifest.d.ts +2 -1
- package/dist/server/config-headers.d.ts +2 -1
- package/dist/server/csp.d.ts +2 -1
- package/dist/server/default-global-not-found-module.d.ts +2 -1
- package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
- package/dist/server/default-http-access-fallback-modules.js +31 -0
- package/dist/server/defer-until-stream-consumed.d.ts +34 -0
- package/dist/server/defer-until-stream-consumed.js +154 -21
- package/dist/server/dev-lockfile.d.ts +32 -2
- package/dist/server/dev-lockfile.js +46 -2
- package/dist/server/dev-module-runner.d.ts +2 -1
- package/dist/server/dev-server.js +10 -3
- package/dist/server/fetch-handler.js +1 -2
- package/dist/server/file-based-metadata.d.ts +2 -1
- package/dist/server/framework-tracer.d.ts +2 -1
- package/dist/server/html.d.ts +1 -0
- package/dist/server/html.js +19 -1
- package/dist/server/http-conditional.d.ts +2 -1
- package/dist/server/http-error-responses.d.ts +2 -1
- package/dist/server/implicit-tags.d.ts +2 -1
- package/dist/server/metadata-route-build-data.d.ts +2 -1
- package/dist/server/metadata-route-build-data.js +1 -1
- package/dist/server/metadata-route-response.d.ts +2 -1
- package/dist/server/metadata-route-response.js +1 -1
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/navigation-trace.d.ts +2 -1
- package/dist/server/next-error-digest.d.ts +2 -1
- package/dist/server/nitro-public-files-plugin.d.ts +2 -1
- package/dist/server/nitro-public-files.d.ts +2 -1
- package/dist/server/opentelemetry-api.d.ts +2 -1
- package/dist/server/operation-token.d.ts +2 -1
- package/dist/server/pages-api-route.d.ts +2 -1
- package/dist/server/pages-asset-tags.d.ts +2 -1
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +4 -0
- package/dist/server/pages-data-route.d.ts +2 -1
- package/dist/server/pages-document-asset-props.d.ts +2 -1
- package/dist/server/pages-document-initial-props.d.ts +2 -1
- package/dist/server/pages-execution-tracing.d.ts +2 -1
- package/dist/server/pages-execution-tracing.js +1 -1
- package/dist/server/pages-get-initial-props.d.ts +2 -1
- package/dist/server/pages-page-data.d.ts +7 -1
- package/dist/server/pages-page-data.js +35 -12
- package/dist/server/pages-page-handler.d.ts +3 -2
- package/dist/server/pages-page-handler.js +16 -7
- package/dist/server/pages-page-method.d.ts +2 -1
- package/dist/server/pages-page-response.d.ts +2 -1
- package/dist/server/pages-preview.d.ts +2 -1
- package/dist/server/pages-readiness.d.ts +2 -1
- package/dist/server/pages-request-pipeline.d.ts +2 -1
- package/dist/server/pages-request-pipeline.js +4 -5
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-route-data-kind.d.ts +2 -1
- package/dist/server/prerender-cache-life-header.d.ts +2 -1
- package/dist/server/prerender-route-params.d.ts +2 -1
- package/dist/server/prod-server.js +9 -3
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-tracing.d.ts +2 -1
- package/dist/server/request-tracing.js +1 -1
- package/dist/server/response-start-tracing.js +7 -29
- package/dist/server/rsc-render-stream.d.ts +4 -0
- package/dist/server/rsc-render-stream.js +25 -0
- package/dist/server/seed-cache.d.ts +2 -1
- package/dist/server/seed-cache.js +1 -1
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +1 -0
- package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +2 -1
- package/dist/shims/app.d.ts +2 -1
- package/dist/shims/cache-callable-runtime.d.ts +2 -1
- package/dist/shims/cache-handler.d.ts +8 -3
- package/dist/shims/cache-handler.js +29 -9
- package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
- package/dist/shims/caught-not-found-boundaries.js +48 -0
- package/dist/shims/cdn-purge-routes.d.ts +2 -1
- package/dist/shims/client-locale.js +2 -1
- package/dist/shims/client-page-root.d.ts +2 -1
- package/dist/shims/config.d.ts +2 -1
- package/dist/shims/default-forbidden.d.ts +4 -0
- package/dist/shims/default-forbidden.js +18 -0
- package/dist/shims/default-not-found.d.ts +0 -5
- package/dist/shims/default-not-found.js +5 -41
- package/dist/shims/default-unauthorized.d.ts +4 -0
- package/dist/shims/default-unauthorized.js +18 -0
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +31 -16
- package/dist/shims/font-google.js +1 -2
- package/dist/shims/font-utils.d.ts +3 -2
- package/dist/shims/font-utils.js +5 -3
- package/dist/shims/form.js +1 -1
- package/dist/shims/http-access-error-fallback.d.ts +7 -0
- package/dist/shims/http-access-error-fallback.js +47 -0
- package/dist/shims/image.d.ts +1 -22
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
- package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
- package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
- package/dist/shims/internal/client-reference-loader.d.ts +7 -0
- package/dist/shims/internal/client-reference-loader.js +91 -0
- package/dist/shims/internal/cookie-serialize.d.ts +2 -1
- package/dist/shims/internal/cookies.js +1 -2
- package/dist/shims/internal/headers-state.d.ts +2 -0
- package/dist/shims/internal/headers-state.js +6 -1
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +2 -1
- package/dist/shims/internal/interpolate-as.d.ts +2 -1
- package/dist/shims/internal/pages-data-target.d.ts +2 -1
- package/dist/shims/internal/pages-data-url.d.ts +2 -1
- package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
- package/dist/shims/link.js +195 -52
- package/dist/shims/metadata.d.ts +32 -11
- package/dist/shims/metadata.js +88 -26
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation.d.ts +22 -2
- package/dist/shims/navigation.js +74 -20
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/router.js +14 -3
- package/dist/shims/unified-request-context.js +3 -3
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +9 -2
- package/dist/utils/client-entry-manifest.d.ts +13 -0
- package/dist/utils/client-entry-manifest.js +20 -1
- package/dist/utils/client-reference-chunks.d.ts +45 -0
- package/dist/utils/client-reference-chunks.js +30 -0
- package/dist/utils/client-runtime-metadata.d.ts +9 -1
- package/dist/utils/client-runtime-metadata.js +40 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +14 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/project.d.ts +2 -1
- package/dist/utils/project.js +9 -1
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/sorted-array.d.ts +2 -1
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +5 -5
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/default-not-found-module.d.ts +0 -19
- package/dist/server/default-not-found-module.js +0 -18
- package/dist/server/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import { compareFolderNames } from "../utils/compare.js";
|
|
1
2
|
import { runWithFetchDedupe } from "../shims/fetch-cache.js";
|
|
2
3
|
import { searchParamsToRecord } from "../utils/query.js";
|
|
3
|
-
import { mergeMetadataEntries, mergeViewport, postProcessMetadata, resolveModuleMetadata as resolveModuleMetadata$1, resolveModuleViewport } from "../shims/metadata.js";
|
|
4
|
-
import { resolveAppPageBranchParams, resolveAppPageSegmentParams } from "./app-page-params.js";
|
|
4
|
+
import { mergeMetadataEntries, mergeParentMetadataEntries, mergeViewport, postProcessMetadata, resolveModuleMetadata as resolveModuleMetadata$1, resolveModuleViewport } from "../shims/metadata.js";
|
|
5
5
|
import { tagAppPageMetadataError } from "./app-page-execution.js";
|
|
6
|
+
import { resolveAppPageBranchParams, resolveAppPageSegmentParams } from "./app-page-params.js";
|
|
6
7
|
import { createAppMetadataModuleRoute, traceGenerateMetadata } from "./app-metadata-tracing.js";
|
|
7
8
|
//#region src/server/app-page-head.ts
|
|
8
9
|
/**
|
|
@@ -25,7 +26,8 @@ async function resolveModuleMetadata(moduleRoute, ...args) {
|
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
28
|
function resolveActiveParallelRouteHeadInputs(options) {
|
|
28
|
-
|
|
29
|
+
const slotEntries = Object.entries(options.slots ?? {});
|
|
30
|
+
return slotEntries.map(([slotKey, slot]) => {
|
|
29
31
|
const ownerTreePosition = options.layoutTreePositions?.[slot.layoutIndex ?? 0] ?? 0;
|
|
30
32
|
const ownerRouteSegments = options.routeSegments.slice(0, ownerTreePosition);
|
|
31
33
|
const ownerParams = resolveAppPageSegmentParams(options.routeSegments, ownerTreePosition, options.params);
|
|
@@ -64,7 +66,8 @@ function resolveActiveParallelRouteHeadInputs(options) {
|
|
|
64
66
|
notFoundModuleRouteSegments: interceptNotFoundRouteSegments,
|
|
65
67
|
notFoundParams: interceptNotFoundParams
|
|
66
68
|
} : {},
|
|
67
|
-
ownerTreePosition
|
|
69
|
+
ownerTreePosition,
|
|
70
|
+
slotKey
|
|
68
71
|
};
|
|
69
72
|
}
|
|
70
73
|
const slotRouteSegments = slot.routeSegments ?? options.routeSegments;
|
|
@@ -83,14 +86,85 @@ function resolveActiveParallelRouteHeadInputs(options) {
|
|
|
83
86
|
...slot.routeSegments ? {} : { moduleRouteSegments },
|
|
84
87
|
routeSegments: slotRouteSegments
|
|
85
88
|
},
|
|
86
|
-
...slot.notFound ? {
|
|
89
|
+
...slot.notFound && slot.page ? {
|
|
87
90
|
notFoundModule: slot.notFound,
|
|
88
91
|
notFoundModuleRouteSegments: [...ownerRouteSegments, ...moduleRouteSegments.slice(0, slot.notFoundTreePosition ?? 0)],
|
|
89
92
|
notFoundParams
|
|
90
93
|
} : {},
|
|
91
|
-
ownerTreePosition
|
|
94
|
+
ownerTreePosition,
|
|
95
|
+
slotKey
|
|
92
96
|
};
|
|
93
|
-
}).
|
|
97
|
+
}).map((input, index) => {
|
|
98
|
+
const [slotKey, slot] = slotEntries[index];
|
|
99
|
+
return {
|
|
100
|
+
directoryDepth: slot.ownerTreePosition ?? input.ownerTreePosition,
|
|
101
|
+
input,
|
|
102
|
+
name: slot.name ?? slotKey
|
|
103
|
+
};
|
|
104
|
+
}).sort((left, right) => right.directoryDepth - left.directoryDepth || compareFolderNames(left.name, right.name)).map(({ input }) => input);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Whether a slot intercept keeps the source route's head. Next.js's client
|
|
108
|
+
* renders the head of the first leaf on a children-first walk of its router
|
|
109
|
+
* tree that skips `default` segments, and a slot intercept keeps the leaves
|
|
110
|
+
* before its slot from the source route. When one of them is a page, such as
|
|
111
|
+
* the source page in `children`, the source head stays; otherwise the walk
|
|
112
|
+
* reaches the intercept's leaf, headed by the intercepting render.
|
|
113
|
+
* `sourceParallelRoutes` are the source route's own slot branches, in the
|
|
114
|
+
* walk's order (resolveActiveParallelRouteHeadInputs).
|
|
115
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/client/components/router-reducer/reducers/find-head-in-cache.ts
|
|
116
|
+
*/
|
|
117
|
+
function slotInterceptKeepsSourceHead(options) {
|
|
118
|
+
const { route } = options;
|
|
119
|
+
if (route.page != null && (route.childrenSlot?.state ?? "active") === "active") return true;
|
|
120
|
+
const interceptIndex = options.sourceParallelRoutes.findIndex((input) => input.slotKey === options.interceptSlotKey);
|
|
121
|
+
return options.sourceParallelRoutes.slice(0, interceptIndex === -1 ? void 0 : interceptIndex).some((input) => input.head.pageModule != null);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Like Promise.all, but awaits the already-started promises one at a time, so
|
|
125
|
+
* the first rejection in this order wins, not the first to settle. Next.js's
|
|
126
|
+
* accumulateMetadata and accumulateViewport await their loader-tree items this
|
|
127
|
+
* way, so an earlier segment's signal beats a later one's. Each promise is
|
|
128
|
+
* handled up front, so none rejects unhandled.
|
|
129
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolve-metadata.ts
|
|
130
|
+
*/
|
|
131
|
+
async function allInOrder(promises) {
|
|
132
|
+
for (const promise of promises) promise.catch(() => null);
|
|
133
|
+
const results = [];
|
|
134
|
+
for (const promise of promises) results.push(await promise);
|
|
135
|
+
return results;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* A segment's `parent` that records a rejection its resolver saw, through
|
|
139
|
+
* `await` or any other `then()`, so that an error the resolver took from
|
|
140
|
+
* `parent` can be told from its own, even when both are the same value.
|
|
141
|
+
*/
|
|
142
|
+
var ObservedParent = class extends Promise {
|
|
143
|
+
static get [Symbol.species]() {
|
|
144
|
+
return Promise;
|
|
145
|
+
}
|
|
146
|
+
rejection = null;
|
|
147
|
+
/** Whether the resolver read it, and what to call when it first does. */
|
|
148
|
+
read = false;
|
|
149
|
+
onRead = null;
|
|
150
|
+
then(onFulfilled, onRejected) {
|
|
151
|
+
if (!this.read) {
|
|
152
|
+
this.read = true;
|
|
153
|
+
this.onRead?.();
|
|
154
|
+
}
|
|
155
|
+
return super.then(onFulfilled, (error) => {
|
|
156
|
+
this.rejection = { error };
|
|
157
|
+
if (onRejected) return onRejected(error);
|
|
158
|
+
throw error;
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
function observeParent(parent) {
|
|
163
|
+
const observed = new ObservedParent((resolveParent, rejectParent) => {
|
|
164
|
+
parent.then(resolveParent, rejectParent);
|
|
165
|
+
});
|
|
166
|
+
Promise.prototype.then.call(observed, void 0, () => null);
|
|
167
|
+
return observed;
|
|
94
168
|
}
|
|
95
169
|
function isPresent(value) {
|
|
96
170
|
return value !== null && value !== void 0;
|
|
@@ -145,113 +219,201 @@ function createLayoutInputs(layoutModules, layoutTreePositions) {
|
|
|
145
219
|
}
|
|
146
220
|
return layoutInputs;
|
|
147
221
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
const parentForLayout = accumulatedMetadata;
|
|
153
|
-
const layoutParams = resolveAppPageSegmentParams(routeSegments, layoutInput.treePosition, params);
|
|
154
|
-
const metadataPromise = resolveModuleMetadata(createAppMetadataModuleRoute(routeSegments.slice(0, layoutInput.treePosition), "layout"), layoutInput.module, layoutParams, void 0, parentForLayout);
|
|
155
|
-
layoutMetadataPromises.push(metadataPromise);
|
|
156
|
-
metadataPromise.catch(() => null);
|
|
157
|
-
accumulatedMetadata = metadataPromise.then(async (metadataResult) => {
|
|
158
|
-
if (metadataResult) return mergeMetadataEntries([{ metadata: await parentForLayout }, { metadata: metadataResult }]);
|
|
159
|
-
return parentForLayout;
|
|
160
|
-
});
|
|
161
|
-
accumulatedMetadata.catch(() => null);
|
|
162
|
-
}
|
|
163
|
-
return Promise.all(layoutMetadataPromises);
|
|
164
|
-
}
|
|
165
|
-
function resolveLayoutViewport(layoutInputs, params, routeSegments) {
|
|
166
|
-
const viewportPromises = [];
|
|
167
|
-
let accumulatedViewport = Promise.resolve(mergeViewport([]));
|
|
168
|
-
for (const layoutInput of layoutInputs) {
|
|
169
|
-
const parentForLayout = accumulatedViewport;
|
|
170
|
-
const layoutParams = resolveAppPageSegmentParams(routeSegments, layoutInput.treePosition, params);
|
|
171
|
-
const viewportPromise = resolveModuleViewport(layoutInput.module, layoutParams, void 0, parentForLayout);
|
|
172
|
-
viewportPromises.push(viewportPromise);
|
|
173
|
-
viewportPromise.catch(() => null);
|
|
174
|
-
accumulatedViewport = mergeResolvedViewport(parentForLayout, viewportPromise);
|
|
175
|
-
accumulatedViewport.catch(() => null);
|
|
176
|
-
}
|
|
222
|
+
/** The walk's accumulated metadata, with its resolved title as the shown string. */
|
|
223
|
+
function toShownMetadata(accumulated) {
|
|
224
|
+
const title = accumulated.title;
|
|
225
|
+
if (title === void 0 || typeof title === "string") return accumulated;
|
|
177
226
|
return {
|
|
178
|
-
|
|
179
|
-
|
|
227
|
+
...accumulated,
|
|
228
|
+
title: title.absolute || void 0
|
|
180
229
|
};
|
|
181
230
|
}
|
|
182
|
-
function mergeResolvedViewport(parent, viewport) {
|
|
183
|
-
return Promise.all([parent, viewport]).then(([resolvedParent, resolvedViewport]) => resolvedViewport ? mergeViewport([resolvedParent, resolvedViewport]) : resolvedParent);
|
|
184
|
-
}
|
|
185
231
|
function getParallelRouteModules(parallelRoute) {
|
|
186
232
|
return [...parallelRoute.layoutModules ?? [], parallelRoute.layoutModule].filter(isPresent);
|
|
187
233
|
}
|
|
188
234
|
function parallelRouteHasDynamicMetadata(parallelRoute) {
|
|
189
235
|
return getParallelRouteModules(parallelRoute).some(hasGenerateMetadata) || hasGenerateMetadata(parallelRoute.pageModule);
|
|
190
236
|
}
|
|
191
|
-
|
|
237
|
+
function createRouteHeadBranch(layoutInputs, routeSegments, params, pageModule) {
|
|
238
|
+
const segments = layoutInputs.map((layoutInput) => ({
|
|
239
|
+
module: layoutInput.module,
|
|
240
|
+
moduleRoute: createAppMetadataModuleRoute(routeSegments.slice(0, layoutInput.treePosition), "layout"),
|
|
241
|
+
page: false,
|
|
242
|
+
params: resolveAppPageSegmentParams(routeSegments, layoutInput.treePosition, params)
|
|
243
|
+
}));
|
|
244
|
+
if (pageModule) segments.push({
|
|
245
|
+
module: pageModule,
|
|
246
|
+
moduleRoute: createAppMetadataModuleRoute(routeSegments, "page"),
|
|
247
|
+
page: true,
|
|
248
|
+
params
|
|
249
|
+
});
|
|
250
|
+
return {
|
|
251
|
+
routeSegments,
|
|
252
|
+
segments
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
function createParallelRouteHeadBranch(parallelRoute, fallbackParams, fallbackRouteSegments) {
|
|
192
256
|
const params = parallelRoute.params ?? fallbackParams;
|
|
193
257
|
const routeSegments = parallelRoute.routeSegments ?? fallbackRouteSegments;
|
|
194
258
|
const moduleRoutePrefixSegments = parallelRoute.moduleRoutePrefixSegments ?? [];
|
|
195
259
|
const moduleRouteSegments = parallelRoute.moduleRouteSegments ?? routeSegments;
|
|
196
|
-
const metadataResults = [];
|
|
197
|
-
const metadataSources = [];
|
|
198
|
-
let accumulatedMetadata = parent;
|
|
199
|
-
const layoutModules = getParallelRouteModules(parallelRoute);
|
|
200
260
|
const layoutTreePositions = parallelRoute.layoutTreePositions ?? [];
|
|
201
261
|
const layoutParams = parallelRoute.layoutParams ?? [];
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
if (parallelRoute.pageModule) {
|
|
216
|
-
const pageMetadata = await resolveModuleMetadata(createAppMetadataModuleRoute([...moduleRoutePrefixSegments, ...moduleRouteSegments], "page"), parallelRoute.pageModule, params, pageSearchParams, accumulatedMetadata, searchParamsObserver);
|
|
217
|
-
metadataResults.push(pageMetadata);
|
|
218
|
-
metadataSources.push({
|
|
219
|
-
metadata: pageMetadata,
|
|
220
|
-
routeSegments
|
|
221
|
-
});
|
|
222
|
-
}
|
|
262
|
+
const segments = getParallelRouteModules(parallelRoute).map((module, index) => ({
|
|
263
|
+
module,
|
|
264
|
+
moduleRoute: createAppMetadataModuleRoute([...moduleRoutePrefixSegments, ...moduleRouteSegments.slice(0, layoutTreePositions[index] ?? 0)], "layout"),
|
|
265
|
+
page: false,
|
|
266
|
+
params: layoutParams[index] ?? resolveParallelLayoutParams(routeSegments, layoutTreePositions[index] ?? 0, params)
|
|
267
|
+
}));
|
|
268
|
+
if (parallelRoute.pageModule) segments.push({
|
|
269
|
+
module: parallelRoute.pageModule,
|
|
270
|
+
moduleRoute: createAppMetadataModuleRoute([...moduleRoutePrefixSegments, ...moduleRouteSegments], "page"),
|
|
271
|
+
page: true,
|
|
272
|
+
params
|
|
273
|
+
});
|
|
223
274
|
return {
|
|
224
|
-
|
|
225
|
-
|
|
275
|
+
routeSegments,
|
|
276
|
+
segments
|
|
226
277
|
};
|
|
227
278
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
const
|
|
231
|
-
const
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
279
|
+
/** A hidden branch without the layouts it shares with its slot, which resolve once. */
|
|
280
|
+
function createHiddenHeadBranch(hidden, slot, fallbackParams, fallbackRouteSegments) {
|
|
281
|
+
const branch = createParallelRouteHeadBranch(hidden.route, fallbackParams, fallbackRouteSegments);
|
|
282
|
+
const sharedLayoutCount = slot ? Math.min(hidden.sharedLayoutCount, slot.segments.filter((segment) => !segment.page).length) : 0;
|
|
283
|
+
return {
|
|
284
|
+
parallelRouteIndex: slot ? hidden.parallelRouteIndex : -1,
|
|
285
|
+
routeSegments: branch.routeSegments,
|
|
286
|
+
segments: branch.segments.filter((segment, index) => segment.page || index >= sharedLayoutCount),
|
|
287
|
+
sharedLayoutCount
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Start an item with everything resolved before it as `parent`, and merge its
|
|
292
|
+
* value into that once both settle. Like Next.js's getResult, the resolver
|
|
293
|
+
* starts now; like its accumulateMetadata and accumulateViewport, the merge
|
|
294
|
+
* waits for the items before it, and its failure is the item's own error.
|
|
295
|
+
*
|
|
296
|
+
* With `deferParentErrors`, `error` never waits on `parent`: what can only be
|
|
297
|
+
* known after it goes to `deferredError` instead.
|
|
298
|
+
*/
|
|
299
|
+
function startAppPageHeadItem(kind, segment, parent, deferParentErrors = false) {
|
|
300
|
+
const observedParent = observeParent(parent);
|
|
301
|
+
const parentRead = new Promise((resolve) => {
|
|
302
|
+
observedParent.onRead = () => resolve(null);
|
|
303
|
+
});
|
|
304
|
+
const result = kind.resolve(segment, observedParent);
|
|
305
|
+
result.catch(() => null);
|
|
306
|
+
const resolved = parent.then((resolvedParent) => result.then((value) => value ? kind.merge(resolvedParent, value) : resolvedParent));
|
|
307
|
+
resolved.catch(() => null);
|
|
308
|
+
const mergeError = result.then((value) => value ? parent.then(() => resolved.then(() => null), () => null) : null, () => null);
|
|
309
|
+
const ownError = result.then(() => null, (error) => {
|
|
310
|
+
const rejection = observedParent.rejection;
|
|
311
|
+
if (rejection && Object.is(rejection.error, error)) return null;
|
|
312
|
+
throw error;
|
|
313
|
+
});
|
|
314
|
+
mergeError.catch(() => null);
|
|
315
|
+
ownError.catch(() => null);
|
|
316
|
+
if (!deferParentErrors) {
|
|
317
|
+
const error = ownError.then(() => mergeError);
|
|
318
|
+
error.catch(() => null);
|
|
319
|
+
return {
|
|
320
|
+
deferredError: null,
|
|
321
|
+
error,
|
|
322
|
+
resolved,
|
|
323
|
+
result
|
|
324
|
+
};
|
|
251
325
|
}
|
|
326
|
+
const readFirst = result.then(() => observedParent.read, () => observedParent.read);
|
|
327
|
+
const error = Promise.race([parentRead, readFirst.then((read) => read ? null : ownError)]);
|
|
328
|
+
const deferredError = readFirst.then((read) => read ? ownError.then(() => mergeError) : mergeError);
|
|
329
|
+
error.catch(() => null);
|
|
330
|
+
deferredError.catch(() => null);
|
|
252
331
|
return {
|
|
253
|
-
|
|
254
|
-
|
|
332
|
+
deferredError,
|
|
333
|
+
error,
|
|
334
|
+
resolved,
|
|
335
|
+
result
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Start metadata or viewport for every item, then merge their values one at
|
|
340
|
+
* a time, in loader-tree order, as Next.js's prerenderMetadata and
|
|
341
|
+
* accumulateMetadata (and their viewport twins) do. Next.js walks the tree
|
|
342
|
+
* depth first, `children` before the named slots: the route's layouts and
|
|
343
|
+
* page, then each slot's. A hidden branch starts in its slot's place, after
|
|
344
|
+
* the layouts they share, from everything resolved there, and its values stay
|
|
345
|
+
* out of the shown head.
|
|
346
|
+
*
|
|
347
|
+
* The items of a hidden branch and of the slot at `outletIndex` are the
|
|
348
|
+
* slot's. Like Next.js, which throws only the first error, an error of theirs
|
|
349
|
+
* counts only once everything before their branch resolved: one before it
|
|
350
|
+
* belongs to that earlier item, and never also throws inside the slot.
|
|
351
|
+
*
|
|
352
|
+
* The route's errors never wait on the outlet branch, whose resolvers may
|
|
353
|
+
* never settle. A route item after it counts its resolver's error in place
|
|
354
|
+
* until the resolver reads `parent`; what is only known after `parent`, a
|
|
355
|
+
* failed merge or an error after reading it, is deferred until every route
|
|
356
|
+
* error in place is known.
|
|
357
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolve-metadata.ts
|
|
358
|
+
*/
|
|
359
|
+
function walkAppPageHead(kind, route, slots, hiddenBranches, outletIndex) {
|
|
360
|
+
const errors = [];
|
|
361
|
+
const deferredErrors = [];
|
|
362
|
+
let resolved = Promise.resolve(kind.initial);
|
|
363
|
+
let slotBranchParent = null;
|
|
364
|
+
let afterOutlet = false;
|
|
365
|
+
const start = (segment, parent) => {
|
|
366
|
+
const item = startAppPageHeadItem(kind, segment, parent, !slotBranchParent && afterOutlet);
|
|
367
|
+
if (item.deferredError) deferredErrors.push(item.deferredError);
|
|
368
|
+
if (slotBranchParent) {
|
|
369
|
+
const error = slotBranchParent.then(() => item.error, () => null);
|
|
370
|
+
error.catch(() => null);
|
|
371
|
+
errors.push({
|
|
372
|
+
error,
|
|
373
|
+
owner: "slot"
|
|
374
|
+
});
|
|
375
|
+
} else errors.push({
|
|
376
|
+
error: item.error,
|
|
377
|
+
owner: "route"
|
|
378
|
+
});
|
|
379
|
+
return item;
|
|
380
|
+
};
|
|
381
|
+
const startShown = (segment) => {
|
|
382
|
+
const item = start(segment, resolved);
|
|
383
|
+
resolved = item.resolved;
|
|
384
|
+
return item.result;
|
|
385
|
+
};
|
|
386
|
+
const startHidden = (parallelRouteIndex, sharedLayoutCount) => {
|
|
387
|
+
for (const hidden of hiddenBranches) {
|
|
388
|
+
if (hidden.parallelRouteIndex !== parallelRouteIndex || hidden.sharedLayoutCount !== sharedLayoutCount) continue;
|
|
389
|
+
const shownBranchParent = slotBranchParent;
|
|
390
|
+
slotBranchParent = resolved;
|
|
391
|
+
let parent = resolved;
|
|
392
|
+
for (const segment of hidden.segments) parent = start(segment, parent).resolved;
|
|
393
|
+
slotBranchParent = shownBranchParent;
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
const routeResults = route.segments.map(startShown);
|
|
397
|
+
const slotResults = slots.map((slot, index) => {
|
|
398
|
+
slotBranchParent = index === outletIndex ? resolved : null;
|
|
399
|
+
let layoutCount = 0;
|
|
400
|
+
const results = slot.segments.map((segment) => {
|
|
401
|
+
startHidden(index, layoutCount);
|
|
402
|
+
if (!segment.page) layoutCount++;
|
|
403
|
+
return startShown(segment);
|
|
404
|
+
});
|
|
405
|
+
if (!slot.segments.at(-1)?.page) startHidden(index, layoutCount);
|
|
406
|
+
slotBranchParent = null;
|
|
407
|
+
if (index === outletIndex && results.length > 0) afterOutlet = true;
|
|
408
|
+
return results;
|
|
409
|
+
});
|
|
410
|
+
startHidden(-1, 0);
|
|
411
|
+
return {
|
|
412
|
+
deferredErrors,
|
|
413
|
+
errors,
|
|
414
|
+
resolved,
|
|
415
|
+
route: routeResults,
|
|
416
|
+
slots: slotResults
|
|
255
417
|
};
|
|
256
418
|
}
|
|
257
419
|
/**
|
|
@@ -266,7 +428,7 @@ function resolveOrderedAppPageMetadata(options) {
|
|
|
266
428
|
const metadataPromises = [];
|
|
267
429
|
let accumulatedEntriesPromise = Promise.resolve([]);
|
|
268
430
|
for (const source of options.sources) {
|
|
269
|
-
const parentPromise = accumulatedEntriesPromise.then((entries) => entries.length > 0 ?
|
|
431
|
+
const parentPromise = accumulatedEntriesPromise.then((entries) => entries.length > 0 ? mergeParentMetadataEntries(entries) : {});
|
|
270
432
|
const metadataPromise = resolveModuleMetadata(source.moduleRoute, source.module, source.params, source.searchParams, parentPromise, source.searchParamsObserver);
|
|
271
433
|
metadataPromises.push(metadataPromise);
|
|
272
434
|
metadataPromise.catch(() => null);
|
|
@@ -288,8 +450,10 @@ async function resolveAppPageHead(options) {
|
|
|
288
450
|
const prepared = prepareAppPageHead(options);
|
|
289
451
|
const [metadata, viewport] = await Promise.all([prepared.metadata, prepared.viewport]);
|
|
290
452
|
return {
|
|
291
|
-
|
|
453
|
+
hasDynamicMetadata: prepared.hasDynamicMetadata,
|
|
454
|
+
hasSearchParams: prepared.hasSearchParams,
|
|
292
455
|
metadata,
|
|
456
|
+
pageSearchParams: prepared.pageSearchParams,
|
|
293
457
|
viewport
|
|
294
458
|
};
|
|
295
459
|
}
|
|
@@ -298,7 +462,7 @@ async function resolveAppPageHead(options) {
|
|
|
298
462
|
* from the modules alone, so callers can place the head before resolving it.
|
|
299
463
|
*/
|
|
300
464
|
function hasAppPageDynamicMetadata(options) {
|
|
301
|
-
return options.layoutModules.some(hasGenerateMetadata) || hasGenerateMetadata(options.pageModule) || (options.parallelRoutes ?? []).some(parallelRouteHasDynamicMetadata);
|
|
465
|
+
return options.layoutModules.some(hasGenerateMetadata) || hasGenerateMetadata(options.pageModule) || (options.parallelRoutes ?? []).some(parallelRouteHasDynamicMetadata) || (options.hiddenParallelRoutes ?? []).some((hidden) => parallelRouteHasDynamicMetadata(hidden.route));
|
|
302
466
|
}
|
|
303
467
|
/**
|
|
304
468
|
* Start metadata and viewport resolution without coupling their completion.
|
|
@@ -316,73 +480,64 @@ function prepareAppPageHeadInner(options) {
|
|
|
316
480
|
const layoutInputs = createLayoutInputs(options.layoutModules, layoutTreePositions);
|
|
317
481
|
const layoutSourcePositions = layoutInputs.map((input) => input.treePosition);
|
|
318
482
|
const { hasSearchParams, pageSearchParams } = collectAppPageSearchParams(options.searchParams);
|
|
319
|
-
const layoutMetadataPromise = resolveLayoutMetadata(layoutInputs, options.params, routeSegments);
|
|
320
|
-
const layoutViewport = resolveLayoutViewport(layoutInputs, options.params, routeSegments);
|
|
321
|
-
const layoutViewportPromise = layoutViewport.viewportResults;
|
|
322
|
-
const layoutMetadataResultsForParent = layoutMetadataPromise.then((metadataResults) => metadataResults.filter(isPresent));
|
|
323
|
-
layoutMetadataResultsForParent.catch(() => null);
|
|
324
|
-
const pageParentPromise = layoutMetadataResultsForParent.then((metadataResults) => metadataResults.length > 0 ? mergeMetadataEntries(metadataResults.map((metadata) => ({ metadata }))) : {});
|
|
325
|
-
pageParentPromise.catch(() => null);
|
|
326
|
-
const pageMetadataPromise = options.pageModule ? resolveModuleMetadata(createAppMetadataModuleRoute(routeSegments, "page"), options.pageModule, options.params, pageSearchParams, pageParentPromise, options.searchParamsObserver) : Promise.resolve(null);
|
|
327
483
|
const parallelRoutes = options.parallelRoutes ?? [];
|
|
328
|
-
const
|
|
329
|
-
const
|
|
330
|
-
|
|
331
|
-
const
|
|
332
|
-
const
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
484
|
+
const route = createRouteHeadBranch(layoutInputs, routeSegments, options.params, options.pageModule);
|
|
485
|
+
const slots = parallelRoutes.map((parallelRoute) => createParallelRouteHeadBranch(parallelRoute, options.params, routeSegments));
|
|
486
|
+
const hiddenBranches = (options.hiddenParallelRoutes ?? []).map((hidden) => createHiddenHeadBranch(hidden, slots[hidden.parallelRouteIndex], options.params, routeSegments));
|
|
487
|
+
const outletIndex = options.outletParallelRouteIndex != null && options.outletParallelRouteIndex in slots ? options.outletParallelRouteIndex : -1;
|
|
488
|
+
const segmentSearchParams = (segment) => segment.page ? pageSearchParams : void 0;
|
|
489
|
+
const segmentSearchParamsObserver = (segment) => segment.page ? options.searchParamsObserver : void 0;
|
|
490
|
+
const metadataWalk = walkAppPageHead({
|
|
491
|
+
initial: {},
|
|
492
|
+
merge: (resolved, metadata) => {
|
|
493
|
+
try {
|
|
494
|
+
return mergeParentMetadataEntries([{ metadata: resolved }, { metadata }]);
|
|
495
|
+
} catch (error) {
|
|
496
|
+
throw tagAppPageMetadataError(error);
|
|
497
|
+
}
|
|
498
|
+
},
|
|
499
|
+
resolve: (segment, parent) => resolveModuleMetadata(segment.moduleRoute, segment.module, segment.params, segmentSearchParams(segment), parent, segmentSearchParamsObserver(segment))
|
|
500
|
+
}, route, slots, hiddenBranches, outletIndex);
|
|
501
|
+
const viewportWalk = walkAppPageHead({
|
|
502
|
+
initial: mergeViewport([]),
|
|
503
|
+
merge: (resolved, viewport) => mergeViewport([resolved, viewport]),
|
|
504
|
+
resolve: (segment, parent) => resolveModuleViewport(segment.module, segment.params, segmentSearchParams(segment), parent, segmentSearchParamsObserver(segment))
|
|
505
|
+
}, route, slots, hiddenBranches, outletIndex);
|
|
343
506
|
const hasDynamicMetadata = hasAppPageDynamicMetadata(options);
|
|
344
|
-
const metadata =
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
const parallelMetadataResults = parallelRouteMetadata.flatMap((head) => head.metadataResults);
|
|
350
|
-
const parallelMetadataSources = parallelRouteMetadata.flatMap((head) => head.metadataSources);
|
|
351
|
-
const primaryPageHasTitle = pageMetadata != null && pageMetadata.title !== void 0;
|
|
352
|
-
const metadataEntries = [
|
|
353
|
-
...layoutMetadataResults.filter(isPresent).map((entry) => ({ metadata: entry })),
|
|
354
|
-
...pageMetadata ? [{
|
|
355
|
-
isPage: true,
|
|
356
|
-
metadata: pageMetadata
|
|
357
|
-
}] : [],
|
|
358
|
-
...parallelMetadataResults.filter(isPresent).map((entry) => ({
|
|
359
|
-
contributesTitle: !primaryPageHasTitle,
|
|
360
|
-
metadata: entry
|
|
361
|
-
}))
|
|
362
|
-
];
|
|
363
|
-
const resolvedMetadataBase = metadataEntries.length > 0 ? mergeMetadataEntries(metadataEntries) : null;
|
|
507
|
+
const metadata = metadataWalk.resolved.then(async (accumulated) => {
|
|
508
|
+
const [routeResults, slotResults] = await Promise.all([Promise.all(metadataWalk.route), Promise.all(metadataWalk.slots.map((results) => Promise.all(results)))]);
|
|
509
|
+
const layoutMetadataResults = routeResults.slice(0, layoutInputs.length);
|
|
510
|
+
const pageMetadata = options.pageModule ? routeResults[layoutInputs.length] ?? null : null;
|
|
511
|
+
const hasMetadata = [...routeResults, ...slotResults.flat()].some(isPresent);
|
|
364
512
|
const metadataSources = createMetadataSources(layoutMetadataResults, routeSegments, layoutSourcePositions, pageMetadata, Boolean(options.pageModule));
|
|
365
|
-
metadataSources.push(...
|
|
366
|
-
|
|
513
|
+
metadataSources.push(...slotResults.flatMap((results, index) => results.map((entry) => ({
|
|
514
|
+
metadata: entry,
|
|
515
|
+
routeSegments: slots[index].routeSegments
|
|
516
|
+
}))));
|
|
517
|
+
return finalizeAppPageMetadata(hasMetadata ? toShownMetadata(accumulated) : null, metadataSources, options);
|
|
367
518
|
});
|
|
368
|
-
const viewport =
|
|
369
|
-
layoutViewportPromise,
|
|
370
|
-
pageViewportPromise,
|
|
371
|
-
parallelRouteViewportPromise
|
|
372
|
-
]).then(([layoutViewportResults, pageViewport, parallelRouteViewports]) => mergeViewport([
|
|
373
|
-
...layoutViewportResults.filter(isPresent),
|
|
374
|
-
...pageViewport ? [pageViewport] : [],
|
|
375
|
-
...parallelRouteViewports.flat().filter(isPresent)
|
|
376
|
-
]));
|
|
519
|
+
const viewport = viewportWalk.resolved;
|
|
377
520
|
metadata.catch(() => null);
|
|
378
521
|
viewport.catch(() => null);
|
|
522
|
+
const metadataHeadError = metadataWalk.resolved.then(() => metadata.then(() => null), () => null);
|
|
523
|
+
const headErrorOwner = outletIndex === -1 ? "route" : "slot";
|
|
524
|
+
const errorsOf = (owner) => {
|
|
525
|
+
const walkErrors = (walk, headErrors) => allInOrder([...walk.errors.flatMap((item) => item.owner === owner ? [item.error] : []), ...headErrors]).then(() => owner === "route" ? allInOrder(walk.deferredErrors) : null);
|
|
526
|
+
return Promise.all([walkErrors(metadataWalk, headErrorOwner === owner ? [metadataHeadError] : []), walkErrors(viewportWalk, [])]).then(() => null);
|
|
527
|
+
};
|
|
528
|
+
const hiddenErrors = errorsOf("slot");
|
|
529
|
+
hiddenErrors.catch(() => null);
|
|
530
|
+
const routeErrors = errorsOf("route");
|
|
531
|
+
routeErrors.catch(() => null);
|
|
379
532
|
return {
|
|
380
533
|
hasDynamicMetadata,
|
|
381
534
|
hasSearchParams,
|
|
535
|
+
hiddenErrors,
|
|
382
536
|
metadata,
|
|
383
537
|
pageSearchParams,
|
|
538
|
+
routeErrors,
|
|
384
539
|
viewport
|
|
385
540
|
};
|
|
386
541
|
}
|
|
387
542
|
//#endregion
|
|
388
|
-
export { collectAppPageSearchParams, hasAppPageDynamicMetadata, prepareAppPageHead, resolveActiveParallelRouteHeadInputs, resolveAppPageHead, resolveOrderedAppPageMetadata };
|
|
543
|
+
export { collectAppPageSearchParams, hasAppPageDynamicMetadata, prepareAppPageHead, resolveActiveParallelRouteHeadInputs, resolveAppPageHead, resolveOrderedAppPageMetadata, slotInterceptKeepsSourceHead };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MetadataFileRoute } from "./metadata-routes.js";
|
|
2
2
|
import { AppPageParams } from "./app-page-boundary.js";
|
|
3
|
-
import { Metadata, ResolvedViewport } from "../shims/metadata.js";
|
|
3
|
+
import { Metadata, ResolvedViewport, Viewport } from "../shims/metadata.js";
|
|
4
4
|
import { ActiveParallelRouteHeadInput, AppPageHeadModule, ApplyAppPageFileBasedMetadata, OrderedAppPageMetadataSource } from "./app-page-head.js";
|
|
5
5
|
//#region src/server/app-page-http-access-fallback-metadata.d.ts
|
|
6
6
|
type HttpAccessFallbackMetadataPlanOptions<TModule extends AppPageHeadModule = AppPageHeadModule> = {
|
|
@@ -26,5 +26,51 @@ type ResolveHttpAccessFallbackMetadataOptions<TModule extends AppPageHeadModule
|
|
|
26
26
|
};
|
|
27
27
|
export declare function createHttpAccessFallbackMetadataPlan<TModule extends AppPageHeadModule>(options: HttpAccessFallbackMetadataPlanOptions<TModule>): OrderedAppPageMetadataSource<TModule>[];
|
|
28
28
|
export declare function resolveHttpAccessFallbackMetadata<TModule extends AppPageHeadModule>(options: ResolveHttpAccessFallbackMetadataOptions<TModule>): Promise<Metadata | null>;
|
|
29
|
+
type RouteNotFoundHeadPlanRoute<TModule extends AppPageHeadModule> = {
|
|
30
|
+
layouts?: readonly (TModule | null | undefined)[];
|
|
31
|
+
layoutTreePositions?: readonly number[] | null;
|
|
32
|
+
notFound?: TModule | null;
|
|
33
|
+
notFounds?: readonly (TModule | null | undefined)[] | null;
|
|
34
|
+
notFoundTreePosition?: number | null;
|
|
35
|
+
routeSegments?: readonly string[] | null;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* The not-found head a route's own head falls back to. Like Next.js's
|
|
39
|
+
* metadata tree, every HTTP access signal from generateMetadata() or
|
|
40
|
+
* generateViewport() resolves through the not-found convention, whichever
|
|
41
|
+
* signal the route's render threw.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createRouteNotFoundHeadPlanOptions<TModule extends AppPageHeadModule>(options: {
|
|
44
|
+
parallelBranches: readonly ActiveParallelRouteHeadInput<TModule>[];
|
|
45
|
+
params: AppPageParams;
|
|
46
|
+
primaryParallelBranch: ActiveParallelRouteHeadInput<TModule> | null;
|
|
47
|
+
rootNotFoundModule?: TModule | null;
|
|
48
|
+
route: RouteNotFoundHeadPlanRoute<TModule>;
|
|
49
|
+
}): HttpAccessFallbackMetadataPlanOptions<TModule>;
|
|
50
|
+
/**
|
|
51
|
+
* Settle each branch of a route's head on its own, as Next.js's MetadataTree
|
|
52
|
+
* and ViewportTree do: an HTTP access signal from generateMetadata() keeps the
|
|
53
|
+
* resolved viewport and resolves the metadata through the not-found
|
|
54
|
+
* convention, and the same holds the other way round. Any other error leaves
|
|
55
|
+
* that branch empty; the route's render reports it where it renders.
|
|
56
|
+
*
|
|
57
|
+
* A `dynamic = "error"` access error leaves its branch empty too, but
|
|
58
|
+
* `accessError` keeps it, whether the route's head or the not-found head it
|
|
59
|
+
* recovers through threw it: Next.js fails such a render even where its
|
|
60
|
+
* metadata trees drop the error, so a fallback without the route's outlet
|
|
61
|
+
* rethrows it.
|
|
62
|
+
*/
|
|
63
|
+
export declare function recoverAppPageRouteHead<TModule extends AppPageHeadModule>(head: {
|
|
64
|
+
metadata: Promise<Metadata | null>;
|
|
65
|
+
viewport: Promise<ResolvedViewport>;
|
|
66
|
+
}, options: Omit<ResolveHttpAccessFallbackMetadataOptions<TModule>, keyof HttpAccessFallbackMetadataPlanOptions<TModule>> & {
|
|
67
|
+
resolvePlanOptions: () => HttpAccessFallbackMetadataPlanOptions<TModule>;
|
|
68
|
+
}): {
|
|
69
|
+
accessError: Promise<Error | null>;
|
|
70
|
+
metadata: Promise<Metadata | null>;
|
|
71
|
+
/** `null` when the branch failed: like Next.js's, the head then has no viewport tags. */
|
|
72
|
+
viewport: Promise<Viewport | null>;
|
|
73
|
+
};
|
|
29
74
|
export declare function resolveHttpAccessFallbackViewport<TModule extends AppPageHeadModule>(options: HttpAccessFallbackMetadataPlanOptions<TModule>): Promise<ResolvedViewport>;
|
|
30
|
-
//#endregion
|
|
75
|
+
//#endregion
|
|
76
|
+
export {};
|