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
package/dist/shims/link.js
CHANGED
|
@@ -11,14 +11,14 @@ import { formatUrlObject, formatUrlObjectWithValidation } from "./internal/forma
|
|
|
11
11
|
import { normalizeRouterHref, resolvePagesRouterHref } from "./internal/normalize-router-href.js";
|
|
12
12
|
import { getCurrentRoutePathnameForWarning } from "./internal/route-pattern-for-warning.js";
|
|
13
13
|
import { getCurrentBrowserLocale } from "./client-locale.js";
|
|
14
|
-
import { getNavigationRuntime,
|
|
14
|
+
import { NAVIGATION_RUNTIME_KEY, getNavigationRuntime, isNavigationRuntimeFunctions, loadNavigationRuntimeRouteManifest, registerNavigationRuntimeFunctions } from "../client/navigation-runtime.js";
|
|
15
15
|
import { navigatePagesRouterLinkWithFallback, resolvePagesRouterQueryOnlyHref } from "../client/pages-router-link-navigation.js";
|
|
16
|
-
import { scheduleAppPrefetchFetch } from "./internal/app-prefetch-fetch-queue.js";
|
|
16
|
+
import { cancelQueuedAppPrefetchFetch, getAppPrefetchFetchClaimSequence, isAppPrefetchFetchClaimed, scheduleAppPrefetchFetch } from "./internal/app-prefetch-fetch-queue.js";
|
|
17
17
|
import { getI18nContext } from "./i18n-context.js";
|
|
18
18
|
import { canLinkIntentPrefetch, canLinkPrefetch, getLinkPrefetchHref } from "./link-prefetch.js";
|
|
19
19
|
import { canAutoPrefetchFullAppRoute, resolveAutoAppRoutePrefetch, resolveFullAppRoutePrefetch } from "./internal/app-route-prefetch-policy.js";
|
|
20
20
|
import { clearLinkForCurrentNavigation, notifyLinkNavigationStart, setLinkForCurrentNavigation } from "./internal/link-status-registry.js";
|
|
21
|
-
import React, { createContext, forwardRef, useCallback, useContext, useEffect, useRef, useState } from "react";
|
|
21
|
+
import React, { createContext, forwardRef, useCallback, useContext, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
22
22
|
import { jsx } from "react/jsx-runtime";
|
|
23
23
|
//#region src/shims/link.tsx
|
|
24
24
|
/**
|
|
@@ -29,6 +29,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
29
29
|
* page swap via the router's navigation system.
|
|
30
30
|
*/
|
|
31
31
|
const HAS_PAGES_ROUTER = process.env.__VINEXT_HAS_PAGES_ROUTER !== "false";
|
|
32
|
+
const isServer = typeof window === "undefined";
|
|
32
33
|
const HAS_CLIENT_REWRITES = process.env.__VINEXT_HAS_CLIENT_REWRITES !== "false";
|
|
33
34
|
let loadedNavigationModule = null;
|
|
34
35
|
let navigationModulePromise = null;
|
|
@@ -46,6 +47,20 @@ function loadHybridClientRouteOwnerModule() {
|
|
|
46
47
|
return module;
|
|
47
48
|
});
|
|
48
49
|
}
|
|
50
|
+
let appRscCacheBustingModulePromise = null;
|
|
51
|
+
let appPrefetchModulesPromise = null;
|
|
52
|
+
function loadAppRscCacheBustingModule() {
|
|
53
|
+
return appRscCacheBustingModulePromise ??= import("../server/app-rsc-cache-busting.js");
|
|
54
|
+
}
|
|
55
|
+
function loadAppPrefetchModules() {
|
|
56
|
+
return appPrefetchModulesPromise ??= Promise.all([
|
|
57
|
+
import("../server/app-elements.js"),
|
|
58
|
+
loadAppRscCacheBustingModule(),
|
|
59
|
+
import("./internal/app-prefetch-rsc-request.js"),
|
|
60
|
+
import("../server/app-rsc-render-mode.js"),
|
|
61
|
+
import("../server/headers.js")
|
|
62
|
+
]);
|
|
63
|
+
}
|
|
49
64
|
const LinkStatusContext = createContext({ pending: false });
|
|
50
65
|
/**
|
|
51
66
|
* useLinkStatus returns the pending state of the enclosing <Link>.
|
|
@@ -70,11 +85,11 @@ function resolveHref(href, validate = false) {
|
|
|
70
85
|
if (typeof href === "string") return href;
|
|
71
86
|
return validate ? formatUrlObjectWithValidation(href) : formatUrlObject(href);
|
|
72
87
|
}
|
|
73
|
-
function resolvePagesLinkValue(value, pagesRouter
|
|
88
|
+
function resolvePagesLinkValue(value, pagesRouter) {
|
|
74
89
|
const formatted = resolveHref(value, pagesRouter !== null);
|
|
75
90
|
if (pagesRouter === null) return formatted;
|
|
76
91
|
if (typeof pagesRouter.pathname === "string" && typeof pagesRouter.asPath === "string" && !formatted.startsWith("?") && !formatted.startsWith("#")) return resolvePagesRouterHref(formatted, pagesRouter, __basePath);
|
|
77
|
-
return normalizeRouterHref(formatted,
|
|
92
|
+
return normalizeRouterHref(formatted, getCurrentRoutePathnameForWarning());
|
|
78
93
|
}
|
|
79
94
|
function resolvePagesQueryOnlyHref(href) {
|
|
80
95
|
if (!HAS_PAGES_ROUTER) return href;
|
|
@@ -101,8 +116,35 @@ function resolveLinkPrefetchMode(prefetchProp, isDangerous) {
|
|
|
101
116
|
if (prefetchProp === true) return "full";
|
|
102
117
|
return "auto";
|
|
103
118
|
}
|
|
119
|
+
let validatedNavigationRuntime = null;
|
|
120
|
+
let validatedNavigationRuntimeBootstrap = null;
|
|
121
|
+
let validatedNavigationRuntimeFunctions = null;
|
|
122
|
+
/**
|
|
123
|
+
* `hasAppNavigationRuntime()` for Link, which asks on every render and every
|
|
124
|
+
* prefetch. Full validation walks the whole navigation runtime, including every
|
|
125
|
+
* inline RSC chunk still held by the bootstrap, so skip it while window still
|
|
126
|
+
* holds the runtime that last passed it with the same bootstrap and function
|
|
127
|
+
* table objects. Registering either replaces that object, and a replaced
|
|
128
|
+
* runtime, bootstrap or table falls through to full validation. A table edited
|
|
129
|
+
* in place keeps its identity, so the function table is still checked on every
|
|
130
|
+
* call (it is cheap); chunks streamed into the held bootstrap are not
|
|
131
|
+
* revalidated.
|
|
132
|
+
*/
|
|
133
|
+
function hasLinkAppNavigationRuntime() {
|
|
134
|
+
if (typeof window === "undefined") return false;
|
|
135
|
+
const runtime = validatedNavigationRuntime;
|
|
136
|
+
if (runtime !== null && Reflect.get(window, NAVIGATION_RUNTIME_KEY) === runtime && runtime.bootstrap === validatedNavigationRuntimeBootstrap && runtime.functions === validatedNavigationRuntimeFunctions) {
|
|
137
|
+
const functions = runtime.functions;
|
|
138
|
+
return isNavigationRuntimeFunctions(functions) && typeof functions.navigate === "function";
|
|
139
|
+
}
|
|
140
|
+
const validated = getNavigationRuntime();
|
|
141
|
+
validatedNavigationRuntime = validated;
|
|
142
|
+
validatedNavigationRuntimeBootstrap = validated?.bootstrap ?? null;
|
|
143
|
+
validatedNavigationRuntimeFunctions = validated?.functions ?? null;
|
|
144
|
+
return typeof validated?.functions.navigate === "function";
|
|
145
|
+
}
|
|
104
146
|
function getLinkPrefetchRouterMode() {
|
|
105
|
-
return
|
|
147
|
+
return hasLinkAppNavigationRuntime() ? "app" : "pages";
|
|
106
148
|
}
|
|
107
149
|
/**
|
|
108
150
|
* Prefetch a URL for faster navigation.
|
|
@@ -115,8 +157,11 @@ function getLinkPrefetchRouterMode() {
|
|
|
115
157
|
* App Router and high-priority prefetches start immediately. Low-priority
|
|
116
158
|
* Pages Router fallback prefetches use `requestIdleCallback` (or `setTimeout`
|
|
117
159
|
* fallback) to avoid blocking the main thread during initial page load.
|
|
160
|
+
*
|
|
161
|
+
* `owner` is the visible Link behind a viewport prefetch; see
|
|
162
|
+
* `OwnedLinkPrefetch`.
|
|
118
163
|
*/
|
|
119
|
-
function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
164
|
+
function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale, owner) {
|
|
120
165
|
if (typeof window === "undefined") return;
|
|
121
166
|
const navigationEpoch = linkPrefetchNavigationEpoch;
|
|
122
167
|
const prefetchHref = getLinkPrefetchHref({
|
|
@@ -137,21 +182,17 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
137
182
|
if (mode === "auto" && priority === "low" && target.origin === window.location.origin && target.pathname === window.location.pathname && target.search !== window.location.search && target.hash !== "") return;
|
|
138
183
|
const runPrefetch = () => {
|
|
139
184
|
(async () => {
|
|
140
|
-
if (
|
|
185
|
+
if (hasLinkAppNavigationRuntime()) {
|
|
141
186
|
if (isBotUserAgent(window.navigator?.userAgent ?? "")) return;
|
|
142
|
-
const [navigation, { AppElementsWire }, rscCacheBusting, { resolveAppPrefetchRscRequest }, { APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL, APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL }, headersModule, hybridRouteOwner, routeManifestLoaded] = await Promise.all([
|
|
187
|
+
const [navigation, [{ AppElementsWire }, rscCacheBusting, { resolveAppPrefetchRscRequest }, { APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL, APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL }, headersModule], hybridRouteOwner, routeManifestLoaded] = await Promise.all([
|
|
143
188
|
loadNavigationModule(),
|
|
144
|
-
|
|
145
|
-
import("../server/app-rsc-cache-busting.js"),
|
|
146
|
-
import("./internal/app-prefetch-rsc-request.js"),
|
|
147
|
-
import("../server/app-rsc-render-mode.js"),
|
|
148
|
-
import("../server/headers.js"),
|
|
189
|
+
loadAppPrefetchModules(),
|
|
149
190
|
HAS_PAGES_ROUTER || HAS_CLIENT_REWRITES ? loadHybridClientRouteOwnerModule() : null,
|
|
150
191
|
loadNavigationRuntimeRouteManifest()
|
|
151
192
|
]);
|
|
152
193
|
if (routeManifestLoaded === false) return;
|
|
153
194
|
if (navigationEpoch !== linkPrefetchNavigationEpoch) return;
|
|
154
|
-
const { getPrefetchInterceptionContext, getPrefetchCache, getPrefetchedUrls, getMountedSlotsHeader, createAppPrefetchRequestHeaders, discardLearningOnlyPrefetchCacheEntry, fetchRouteTreeGatedPrefetch, hasFreshLearningOnlyPrefetchCacheEntry, hasSearchAgnosticPrefetchShellForRoute, hasPrefetchCacheEntryForNavigation, prefetchRscResponse, prepareNavigationPrefetchSnapshot, DYNAMIC_NAVIGATION_CACHE_TTL, PREFETCH_CACHE_TTL } = navigation;
|
|
195
|
+
const { getPrefetchInterceptionContext, getPrefetchCache, getPrefetchedUrls, getMountedSlotsHeader, createAppPrefetchRequestHeaders, discardLearningOnlyPrefetchCacheEntry, fetchRouteTreeGatedPrefetch, hasFreshLearningOnlyPrefetchCacheEntry, hasSearchAgnosticPrefetchShellForRoute, hasPrefetchCacheEntryForNavigation, prefetchRscResponse, prepareNavigationPrefetchSnapshot, promotePrefetchCacheEntryForNavigation, DYNAMIC_NAVIGATION_CACHE_TTL, PREFETCH_CACHE_TTL } = navigation;
|
|
155
196
|
const { createRscRequestUrl } = rscCacheBusting;
|
|
156
197
|
const { NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, VINEXT_MOUNTED_SLOTS_HEADER } = headersModule;
|
|
157
198
|
const hybridOwner = HAS_PAGES_ROUTER ? hybridRouteOwner.resolveHybridClientRouteOwner(prefetchHref, __basePath) : null;
|
|
@@ -160,16 +201,16 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
160
201
|
const prefetchPolicyHref = rewrittenPrefetchHref ?? prefetchHref;
|
|
161
202
|
const interceptionContext = getPrefetchInterceptionContext(fullHref);
|
|
162
203
|
const mountedSlotsHeader = getMountedSlotsHeader();
|
|
163
|
-
const autoPrefetch = mode === "auto" ? resolveAutoAppRoutePrefetch(prefetchPolicyHref) : resolveFullAppRoutePrefetch();
|
|
204
|
+
const autoPrefetch = mode === "auto" ? resolveAutoAppRoutePrefetch(prefetchPolicyHref, interceptionContext) : resolveFullAppRoutePrefetch();
|
|
164
205
|
if (!autoPrefetch.shouldPrefetch) return;
|
|
165
206
|
const isOptimisticRouteShellPrefetch = !autoPrefetch.cacheForNavigation;
|
|
166
207
|
const hasSearchParams = new URL(fullHref, window.location.href).search !== "";
|
|
167
208
|
const isAutomaticSearchParamShell = mode === "auto" && isOptimisticRouteShellPrefetch && hasSearchParams;
|
|
168
|
-
const hasSearchAgnosticShell = isAutomaticSearchParamShell && hasSearchAgnosticPrefetchShellForRoute(await createRscRequestUrl(fullHref, new Headers()), interceptionContext, mountedSlotsHeader);
|
|
209
|
+
const hasSearchAgnosticShell = isAutomaticSearchParamShell && (autoPrefetch.rendersDynamically === true || hasSearchAgnosticPrefetchShellForRoute(await createRscRequestUrl(fullHref, new Headers()), interceptionContext, mountedSlotsHeader));
|
|
169
210
|
const headers = createAppPrefetchRequestHeaders({
|
|
170
211
|
interceptionContext,
|
|
171
212
|
fetchPriority: priority,
|
|
172
|
-
prefetchKind: mode === "full" ? "full" : "auto",
|
|
213
|
+
prefetchKind: mode === "full" || mode === "full-after-shell" ? "full" : "auto",
|
|
173
214
|
renderMode: isOptimisticRouteShellPrefetch ? hasSearchAgnosticShell ? APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL : isAutomaticSearchParamShell ? APP_RSC_RENDER_MODE_PREFETCH_DYNAMIC_SHELL : APP_RSC_RENDER_MODE_PREFETCH_LOADING_SHELL : void 0
|
|
174
215
|
});
|
|
175
216
|
if (mountedSlotsHeader) headers.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
|
|
@@ -190,9 +231,13 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
190
231
|
if (navigationEpoch !== linkPrefetchNavigationEpoch) return;
|
|
191
232
|
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
192
233
|
const prefetched = getPrefetchedUrls();
|
|
193
|
-
if (autoPrefetch.
|
|
194
|
-
|
|
195
|
-
|
|
234
|
+
if (autoPrefetch.dynamicStaleTime !== "full-prefetch" && hasFreshLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext)) {
|
|
235
|
+
joinOwnedLinkPrefetch(getPrefetchCache().get(cacheKey)?.fetchPromise, owner);
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
if (autoPrefetch.cacheForNavigation) discardLearningOnlyPrefetchCacheEntry(rscUrl, interceptionContext, mountedSlotsHeader);
|
|
239
|
+
const owned = createOwnedLinkPrefetch(owner);
|
|
240
|
+
const fetchFullRscPayload = () => scheduleOwnedLinkPrefetch(owned, (signal) => fetch(rscUrl, {
|
|
196
241
|
headers,
|
|
197
242
|
credentials: "include",
|
|
198
243
|
priority,
|
|
@@ -208,25 +253,30 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
208
253
|
shellHeaders.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
|
|
209
254
|
shellHeaders.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
|
|
210
255
|
if (mountedSlotsHeader) shellHeaders.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
|
|
256
|
+
const ownerLeaveCount = owner?.leaveCount;
|
|
211
257
|
const shellRscUrl = await createRscRequestUrl(fullHref, shellHeaders);
|
|
258
|
+
if (owner && owner.leaveCount !== ownerLeaveCount) return;
|
|
212
259
|
const shellCacheKey = AppElementsWire.encodeCacheKey(shellRscUrl, interceptionContext);
|
|
213
260
|
const shellCache = getPrefetchCache();
|
|
214
261
|
let shellEntry = shellCache.get(shellCacheKey);
|
|
215
262
|
if (shellEntry === void 0) {
|
|
216
263
|
getPrefetchedUrls().add(shellCacheKey);
|
|
217
|
-
|
|
264
|
+
const shellOwned = createOwnedLinkPrefetch(owner);
|
|
265
|
+
const shellFetchPromise = scheduleOwnedLinkPrefetch(shellOwned, (signal) => fetch(shellRscUrl, {
|
|
218
266
|
headers: shellHeaders,
|
|
219
267
|
credentials: "include",
|
|
220
268
|
priority,
|
|
221
269
|
signal,
|
|
222
270
|
purpose: "prefetch"
|
|
223
|
-
}), priority)
|
|
271
|
+
}), priority);
|
|
272
|
+
trackOwnedLinkPrefetch(shellOwned, shellFetchPromise);
|
|
273
|
+
prefetchRscResponse(shellRscUrl, shellFetchPromise, interceptionContext, mountedSlotsHeader, void 0, {
|
|
224
274
|
cacheForNavigation: false,
|
|
225
275
|
optimisticRouteShell: true,
|
|
226
276
|
prefetchKind: "loading-shell"
|
|
227
277
|
});
|
|
228
278
|
shellEntry = shellCache.get(shellCacheKey);
|
|
229
|
-
}
|
|
279
|
+
} else joinOwnedLinkPrefetch(shellEntry.fetchPromise, owner);
|
|
230
280
|
await shellEntry?.pending?.catch(() => {});
|
|
231
281
|
};
|
|
232
282
|
const fetchAliasCacheHitProbe = async () => {
|
|
@@ -238,7 +288,9 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
238
288
|
probeHeaders.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
|
|
239
289
|
probeHeaders.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
|
|
240
290
|
if (mountedSlotsHeader) probeHeaders.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
|
|
291
|
+
const ownerLeaveCount = owner?.leaveCount;
|
|
241
292
|
const probeRscUrl = await createRscRequestUrl(fullHref, probeHeaders);
|
|
293
|
+
if (owner && owner.leaveCount !== ownerLeaveCount) throw new DOMException("Prefetch is no longer wanted", "AbortError");
|
|
242
294
|
return fetch(probeRscUrl, {
|
|
243
295
|
method: "HEAD",
|
|
244
296
|
headers: probeHeaders,
|
|
@@ -247,8 +299,15 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
247
299
|
purpose: "prefetch"
|
|
248
300
|
});
|
|
249
301
|
};
|
|
250
|
-
const
|
|
251
|
-
|
|
302
|
+
const onReuse = (entry, matchedCacheKey) => {
|
|
303
|
+
joinOwnedLinkPrefetch(entry.fetchPromise, owner);
|
|
304
|
+
if (autoPrefetch.dynamicStaleTime === "full-prefetch") promotePrefetchCacheEntryForNavigation(matchedCacheKey, entry);
|
|
305
|
+
};
|
|
306
|
+
const hasExactNavigationCacheEntry = autoPrefetch.cacheForNavigation && hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, { onReuse });
|
|
307
|
+
if (hasExactNavigationCacheEntry || autoPrefetch.cacheForNavigation && hasPrefetchCacheEntryForNavigation(rscUrl, interceptionContext, mountedSlotsHeader, {
|
|
308
|
+
additionalRscUrls,
|
|
309
|
+
onReuse
|
|
310
|
+
})) {
|
|
252
311
|
if (!hasExactNavigationCacheEntry && !prefetched.has(cacheKey) && additionalRscUrls.length > 0 && autoPrefetch.prefetchShellFirst && mountedSlotsHeader === null) {
|
|
253
312
|
prefetched.add(cacheKey);
|
|
254
313
|
fetchAliasCacheHitProbe().then((response) => response.arrayBuffer()).catch(() => {});
|
|
@@ -266,7 +325,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
266
325
|
}
|
|
267
326
|
return fetchRouteTreeGatedPrefetch({
|
|
268
327
|
fetchFullRscPayload,
|
|
269
|
-
fetchRouteTree: (routeTreeRscUrl, routeTreeHeaders) =>
|
|
328
|
+
fetchRouteTree: (routeTreeRscUrl, routeTreeHeaders) => scheduleOwnedLinkPrefetch(owned, (signal) => fetch(routeTreeRscUrl, {
|
|
270
329
|
headers: routeTreeHeaders,
|
|
271
330
|
credentials: "include",
|
|
272
331
|
priority,
|
|
@@ -279,6 +338,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
279
338
|
mountedSlotsHeader
|
|
280
339
|
});
|
|
281
340
|
})() : fetchFullRscPayload();
|
|
341
|
+
trackOwnedLinkPrefetch(owned, fetchPromise);
|
|
282
342
|
if (!__prefetchInlining && mode === "full" && autoPrefetch.cacheForNavigation && autoPrefetch.prefetchShellFirst && mountedSlotsHeader === null && !gateViaExplicitSearchShell) fetchLoadingShellForReuse();
|
|
283
343
|
prefetchRscResponse(rscUrl, fetchPromise, interceptionContext, mountedSlotsHeader, void 0, {
|
|
284
344
|
cacheForNavigation: autoPrefetch.cacheForNavigation,
|
|
@@ -310,7 +370,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
310
370
|
console.error("[vinext] RSC prefetch setup error:", error);
|
|
311
371
|
});
|
|
312
372
|
};
|
|
313
|
-
if (priority === "high" ||
|
|
373
|
+
if (priority === "high" || hasLinkAppNavigationRuntime()) {
|
|
314
374
|
runPrefetch();
|
|
315
375
|
return;
|
|
316
376
|
}
|
|
@@ -318,18 +378,24 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
318
378
|
}
|
|
319
379
|
async function promotePrefetchEntriesForNavigation(href) {
|
|
320
380
|
if (typeof window === "undefined") return;
|
|
321
|
-
if (!
|
|
322
|
-
const [{ getPrefetchCache }, { parseRscRequestPath, stripRscCacheBustingSearchParam, stripRscSuffix }] = await Promise.all([loadNavigationModule(),
|
|
381
|
+
if (!hasLinkAppNavigationRuntime()) return;
|
|
382
|
+
const [{ getMountedSlotsHeader, getPrefetchCache, getPrefetchInterceptionContext, promotePrefetchCacheEntryForNavigation }, { parseRscRequestPath, stripRscCacheBustingSearchParam, stripRscSuffix }] = await Promise.all([loadNavigationModule(), loadAppRscCacheBustingModule()]);
|
|
323
383
|
let target;
|
|
384
|
+
const fullHref = toCanonicalBrowserNavigationHref(href, window.location.href, __basePath, __trailingSlash);
|
|
324
385
|
try {
|
|
325
|
-
target = new URL(
|
|
386
|
+
target = new URL(fullHref, window.location.href);
|
|
326
387
|
} catch {
|
|
327
388
|
return;
|
|
328
389
|
}
|
|
390
|
+
const interceptionContext = getPrefetchInterceptionContext(fullHref);
|
|
391
|
+
const mountedSlotsHeader = getMountedSlotsHeader();
|
|
329
392
|
for (const [cacheKey, entry] of getPrefetchCache()) {
|
|
330
393
|
if (entry.optimisticRouteShell === true) continue;
|
|
331
394
|
if (entry.prefetchKind === "route-tree") continue;
|
|
332
|
-
|
|
395
|
+
if ((entry.mountedSlotsHeader ?? null) !== mountedSlotsHeader) continue;
|
|
396
|
+
const separatorIndex = cacheKey.indexOf("\0");
|
|
397
|
+
const rscUrl = separatorIndex === -1 ? cacheKey : cacheKey.slice(0, separatorIndex);
|
|
398
|
+
if ((separatorIndex === -1 ? null : cacheKey.slice(separatorIndex + 1)) !== interceptionContext) continue;
|
|
333
399
|
let cached;
|
|
334
400
|
try {
|
|
335
401
|
cached = parseRscRequestPath(rscUrl);
|
|
@@ -337,7 +403,7 @@ async function promotePrefetchEntriesForNavigation(href) {
|
|
|
337
403
|
continue;
|
|
338
404
|
}
|
|
339
405
|
stripRscCacheBustingSearchParam(cached);
|
|
340
|
-
if (stripRscSuffix(cached.pathname) === target.pathname && cached.search === target.search) entry
|
|
406
|
+
if (stripRscSuffix(cached.pathname) === target.pathname && cached.search === target.search) promotePrefetchCacheEntryForNavigation(cacheKey, entry);
|
|
341
407
|
}
|
|
342
408
|
}
|
|
343
409
|
/**
|
|
@@ -349,6 +415,66 @@ const observedLinkPrefetches = /* @__PURE__ */ new WeakMap();
|
|
|
349
415
|
const visibleLinkPrefetches = /* @__PURE__ */ new Set();
|
|
350
416
|
const visibleAppPrefetchQueue = [];
|
|
351
417
|
let visibleAppPrefetchDrainScheduled = false;
|
|
418
|
+
const ownedLinkPrefetches = /* @__PURE__ */ new WeakMap();
|
|
419
|
+
function createOwnedLinkPrefetch(owner) {
|
|
420
|
+
if (owner === void 0) return void 0;
|
|
421
|
+
return {
|
|
422
|
+
owners: /* @__PURE__ */ new Set([owner]),
|
|
423
|
+
requests: []
|
|
424
|
+
};
|
|
425
|
+
}
|
|
426
|
+
function hasVisibleOwner(owned) {
|
|
427
|
+
for (const owner of owned.owners) if (owner.isVisible) return true;
|
|
428
|
+
return false;
|
|
429
|
+
}
|
|
430
|
+
function isOwnedLinkPrefetchWanted(owned) {
|
|
431
|
+
if (owned.droppedAt !== void 0) return isAppPrefetchFetchClaimed(owned.claimable, owned.droppedAt);
|
|
432
|
+
return isAppPrefetchFetchClaimed(owned.claimable) || hasVisibleOwner(owned);
|
|
433
|
+
}
|
|
434
|
+
function scheduleOwnedLinkPrefetch(owned, fetcher, priority) {
|
|
435
|
+
if (owned && !isOwnedLinkPrefetchWanted(owned)) return Promise.reject(new DOMException("Prefetch is no longer wanted", "AbortError"));
|
|
436
|
+
const request = scheduleAppPrefetchFetch(fetcher, priority, owned && (() => isOwnedLinkPrefetchWanted(owned)));
|
|
437
|
+
owned?.requests.push(request);
|
|
438
|
+
return request;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Registers the promise cached for `owned`, which reusing Links join. Owners
|
|
442
|
+
* are registered here, not in `createOwnedLinkPrefetch`, since a cache hit
|
|
443
|
+
* returns before sending anything.
|
|
444
|
+
*/
|
|
445
|
+
function trackOwnedLinkPrefetch(owned, fetchPromise) {
|
|
446
|
+
if (owned === void 0) return;
|
|
447
|
+
for (const owner of owned.owners) owner.ownedPrefetches.add(owned);
|
|
448
|
+
owned.claimable = fetchPromise;
|
|
449
|
+
ownedLinkPrefetches.set(fetchPromise, owned);
|
|
450
|
+
const settle = (failed) => {
|
|
451
|
+
ownedLinkPrefetches.delete(fetchPromise);
|
|
452
|
+
for (const owner of owned.owners) {
|
|
453
|
+
owner.ownedPrefetches.delete(owned);
|
|
454
|
+
if (failed && owned.droppedAt !== void 0 && owner.isVisible) scheduleVisibleAppPrefetch(owner);
|
|
455
|
+
}
|
|
456
|
+
owned.owners.clear();
|
|
457
|
+
};
|
|
458
|
+
fetchPromise.then(() => settle(false), () => settle(true));
|
|
459
|
+
}
|
|
460
|
+
function joinOwnedLinkPrefetch(fetchPromise, owner) {
|
|
461
|
+
const owned = fetchPromise && ownedLinkPrefetches.get(fetchPromise);
|
|
462
|
+
if (!owned || owner === void 0) return;
|
|
463
|
+
owned.owners.add(owner);
|
|
464
|
+
owner.ownedPrefetches.add(owned);
|
|
465
|
+
}
|
|
466
|
+
/** Called when a Link leaves the viewport or unmounts. */
|
|
467
|
+
function releaseOwnedLinkPrefetches(instance) {
|
|
468
|
+
instance.leaveCount += 1;
|
|
469
|
+
for (const owned of instance.ownedPrefetches) {
|
|
470
|
+
owned.owners.delete(instance);
|
|
471
|
+
if (owned.droppedAt !== void 0 || hasVisibleOwner(owned)) continue;
|
|
472
|
+
owned.droppedAt = getAppPrefetchFetchClaimSequence();
|
|
473
|
+
if (isAppPrefetchFetchClaimed(owned.claimable)) continue;
|
|
474
|
+
for (const request of owned.requests) cancelQueuedAppPrefetchFetch(request);
|
|
475
|
+
}
|
|
476
|
+
instance.ownedPrefetches.clear();
|
|
477
|
+
}
|
|
352
478
|
function drainVisibleAppPrefetchQueue() {
|
|
353
479
|
visibleAppPrefetchDrainScheduled = false;
|
|
354
480
|
while (true) {
|
|
@@ -356,7 +482,7 @@ function drainVisibleAppPrefetchQueue() {
|
|
|
356
482
|
if (!instance) return;
|
|
357
483
|
instance.queuedViewportPrefetch = false;
|
|
358
484
|
if (!instance.isVisible || instance.routerMode !== "app") continue;
|
|
359
|
-
prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref);
|
|
485
|
+
prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref, void 0, instance);
|
|
360
486
|
}
|
|
361
487
|
}
|
|
362
488
|
function scheduleVisibleAppPrefetch(instance) {
|
|
@@ -375,11 +501,17 @@ function setVisibleLinkPrefetch(instance, isVisible) {
|
|
|
375
501
|
if (instance.routerMode === "app") scheduleVisibleAppPrefetch(instance);
|
|
376
502
|
else prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref, instance.locale);
|
|
377
503
|
instance.viewportPrefetched = true;
|
|
378
|
-
} else
|
|
504
|
+
} else {
|
|
505
|
+
visibleLinkPrefetches.delete(instance);
|
|
506
|
+
releaseOwnedLinkPrefetches(instance);
|
|
507
|
+
}
|
|
379
508
|
}
|
|
509
|
+
let visibleLinkPingRuntime = null;
|
|
380
510
|
function registerVisibleLinkPing() {
|
|
381
511
|
if (typeof window === "undefined") return;
|
|
382
|
-
|
|
512
|
+
const functions = visibleLinkPingRuntime?.functions;
|
|
513
|
+
if (visibleLinkPingRuntime !== null && Reflect.get(window, NAVIGATION_RUNTIME_KEY) === visibleLinkPingRuntime && typeof functions === "object" && functions !== null && Reflect.get(functions, "pingVisibleLinks") === pingVisibleLinkPrefetches) return;
|
|
514
|
+
visibleLinkPingRuntime = registerNavigationRuntimeFunctions({ pingVisibleLinks: pingVisibleLinkPrefetches });
|
|
383
515
|
}
|
|
384
516
|
function pingVisibleLinkPrefetches() {
|
|
385
517
|
for (const instance of visibleLinkPrefetches) if (instance.isVisible && instance.routerMode === "app") scheduleVisibleAppPrefetch(instance);
|
|
@@ -401,11 +533,14 @@ function getDefaultLocale() {
|
|
|
401
533
|
return getI18nContext()?.defaultLocale;
|
|
402
534
|
}
|
|
403
535
|
function getCurrentLocale() {
|
|
404
|
-
if (typeof window !== "undefined")
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
536
|
+
if (typeof window !== "undefined") {
|
|
537
|
+
const domainLocales = getDomainLocales();
|
|
538
|
+
return getCurrentBrowserLocale({
|
|
539
|
+
basePath: __basePath,
|
|
540
|
+
domainLocales,
|
|
541
|
+
hostname: domainLocales?.length ? getCurrentHostname() : void 0
|
|
542
|
+
});
|
|
543
|
+
}
|
|
409
544
|
return getI18nContext()?.locale;
|
|
410
545
|
}
|
|
411
546
|
function getDomainLocales() {
|
|
@@ -459,19 +594,17 @@ function resolveConcreteRouteHref(href, as) {
|
|
|
459
594
|
if (typeof as !== "string") return null;
|
|
460
595
|
return interpolateDynamicRouteHref(href, as)?.href || null;
|
|
461
596
|
}
|
|
462
|
-
const Link = forwardRef(function Link({ href, as, replace = false, prefetch: prefetchProp, scroll = true, shallow = false, children: childrenProp, onClick, onMouseEnter, onTouchStart, onNavigate, unstable_dynamicOnHover = false, legacyBehavior = false, passHref = false, transitionTypes: _transitionTypes, ...
|
|
597
|
+
const Link = forwardRef(function Link({ href, as, replace = false, prefetch: prefetchProp, scroll = true, shallow = false, children: childrenProp, onClick, onMouseEnter, onTouchStart, onNavigate, unstable_dynamicOnHover = false, legacyBehavior = false, passHref = false, transitionTypes: _transitionTypes, locale, ...anchorProps }, forwardedRef) {
|
|
463
598
|
const pagesRouter = useContext(RouterContext);
|
|
464
|
-
const
|
|
465
|
-
const
|
|
466
|
-
const asHref = as === void 0 ? void 0 : resolvePagesLinkValue(as, pagesRouter, routePathnameForWarning);
|
|
467
|
-
const { locale, ...restWithoutLocale } = rest;
|
|
599
|
+
const hrefStr = resolvePagesLinkValue(href, pagesRouter);
|
|
600
|
+
const asHref = as === void 0 ? void 0 : resolvePagesLinkValue(as, pagesRouter);
|
|
468
601
|
let children = childrenProp;
|
|
469
602
|
if (legacyBehavior && (typeof childrenProp === "string" || typeof childrenProp === "number")) children = React.createElement("a", null, childrenProp);
|
|
470
603
|
const hrefForImplicitInterpolation = isAbsoluteOrProtocolRelativeUrl(hrefStr) ? hrefStr.startsWith("//") ? null : toSameOriginAppPath(hrefStr, __basePath) : hrefStr;
|
|
471
604
|
const implicitDynamicRouteHref = HAS_PAGES_ROUTER && pagesRouter !== null && asHref === void 0 && hrefForImplicitInterpolation !== null ? resolveDynamicRouteHref(hrefForImplicitInterpolation) : null;
|
|
472
605
|
const pagesAsHref = asHref ?? implicitDynamicRouteHref?.as;
|
|
473
606
|
const unresolvedHref = pagesAsHref ?? hrefStr;
|
|
474
|
-
const resolvedHref = unresolvedHref.startsWith("#") && !
|
|
607
|
+
const resolvedHref = unresolvedHref.startsWith("#") && !hasLinkAppNavigationRuntime() ? resolvePagesQueryOnlyHref(unresolvedHref) : unresolvedHref;
|
|
475
608
|
const concreteRouteHref = HAS_PAGES_ROUTER ? resolveConcreteRouteHref(hrefForImplicitInterpolation ?? hrefStr, pagesAsHref) : null;
|
|
476
609
|
const routeHrefRaw = hrefStr;
|
|
477
610
|
const prefetchRouteHrefRaw = concreteRouteHref ?? routeHrefRaw;
|
|
@@ -483,6 +616,14 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
483
616
|
const normalizedHref = normalizePathTrailingSlash(localizedHref, __trailingSlash);
|
|
484
617
|
const normalizedRouteHref = hasPagesHrefAsPair ? normalizePathTrailingSlash(applyLocaleToHref(isRouteDangerous ? "/" : prefetchRouteHrefRaw, locale), __trailingSlash) : normalizedHref;
|
|
485
618
|
const fullHref = normalizePathTrailingSlash(withBasePath(normalizedHref, __basePath), __trailingSlash);
|
|
619
|
+
if (isServer && !legacyBehavior && !isDangerous) return /* @__PURE__ */ jsx(LinkStatusContext.Provider, {
|
|
620
|
+
value: { pending: false },
|
|
621
|
+
children: /* @__PURE__ */ jsx("a", {
|
|
622
|
+
href: fullHref,
|
|
623
|
+
...anchorProps,
|
|
624
|
+
children
|
|
625
|
+
})
|
|
626
|
+
});
|
|
486
627
|
const [pending, setPending] = useState(false);
|
|
487
628
|
const mountedRef = useRef(true);
|
|
488
629
|
const pendingPagesIntentPrefetchRef = useRef(null);
|
|
@@ -514,15 +655,15 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
514
655
|
if (typeof forwardedRef === "function") forwardedRef(node);
|
|
515
656
|
else if (forwardedRef) forwardedRef.current = node;
|
|
516
657
|
}, [forwardedRef]);
|
|
517
|
-
|
|
658
|
+
useLayoutEffect(() => {
|
|
518
659
|
if (!shouldViewportPrefetch || typeof window === "undefined") return;
|
|
519
660
|
const node = internalRef.current;
|
|
520
661
|
if (!node) return;
|
|
521
|
-
const hrefToPrefetch = getLinkPrefetchHref({
|
|
662
|
+
const hrefToPrefetch = isAbsoluteOrProtocolRelativeUrl(normalizedHref) ? getLinkPrefetchHref({
|
|
522
663
|
href: normalizedHref,
|
|
523
664
|
basePath: __basePath,
|
|
524
665
|
currentOrigin: window.location.origin
|
|
525
|
-
});
|
|
666
|
+
}) : normalizedHref;
|
|
526
667
|
if (hrefToPrefetch == null) return;
|
|
527
668
|
const observer = getSharedObserver();
|
|
528
669
|
if (!observer) return;
|
|
@@ -532,6 +673,8 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
532
673
|
isVisible: false,
|
|
533
674
|
locale,
|
|
534
675
|
mode: prefetchMode,
|
|
676
|
+
ownedPrefetches: /* @__PURE__ */ new Set(),
|
|
677
|
+
leaveCount: 0,
|
|
535
678
|
pagesRouteHref: normalizedRouteHref === normalizedHref ? void 0 : getLinkPrefetchHref({
|
|
536
679
|
href: normalizedRouteHref,
|
|
537
680
|
basePath: __basePath,
|
|
@@ -548,6 +691,7 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
548
691
|
observedLinkPrefetches.delete(node);
|
|
549
692
|
visibleLinkPrefetches.delete(instance);
|
|
550
693
|
instance.isVisible = false;
|
|
694
|
+
releaseOwnedLinkPrefetches(instance);
|
|
551
695
|
};
|
|
552
696
|
}, [
|
|
553
697
|
shouldViewportPrefetch,
|
|
@@ -623,7 +767,7 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
623
767
|
navigateHref = localPath;
|
|
624
768
|
}
|
|
625
769
|
e.preventDefault();
|
|
626
|
-
const hasAppNavigationRuntime =
|
|
770
|
+
const hasAppNavigationRuntime = hasLinkAppNavigationRuntime();
|
|
627
771
|
const pagesNavigateHref = HAS_PAGES_ROUTER && resolvedHref.startsWith("?") ? resolvePagesLinkNavigationHref(resolvedHref, locale) : navigateHref;
|
|
628
772
|
const pagesAsForLink = hasPagesHrefAsPair ? pagesNavigateHref : void 0;
|
|
629
773
|
const pagesHrefForLink = pagesAsForLink === void 0 ? pagesNavigateHref : routeHrefRaw;
|
|
@@ -681,7 +825,6 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
681
825
|
} else if (replace) window.location.replace(absoluteFullHref);
|
|
682
826
|
else window.location.assign(absoluteFullHref);
|
|
683
827
|
};
|
|
684
|
-
const anchorProps = restWithoutLocale;
|
|
685
828
|
const linkStatusValue = React.useMemo(() => ({ pending }), [pending]);
|
|
686
829
|
if (isDangerous) {
|
|
687
830
|
if (process.env.NODE_ENV !== "production") console.warn(`<Link> blocked dangerous href: ${resolvedHref}`);
|
package/dist/shims/metadata.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export declare function ViewportHead({ viewport }: {
|
|
|
24
24
|
export type Metadata = {
|
|
25
25
|
title?: string | {
|
|
26
26
|
default?: string;
|
|
27
|
-
template?: string;
|
|
27
|
+
template?: string | null;
|
|
28
28
|
absolute?: string;
|
|
29
29
|
};
|
|
30
30
|
description?: string;
|
|
@@ -57,15 +57,13 @@ export type Metadata = {
|
|
|
57
57
|
url?: string | URL;
|
|
58
58
|
siteName?: string;
|
|
59
59
|
images?: string | URL | SocialImageDescriptor | Array<string | URL | SocialImageDescriptor>;
|
|
60
|
-
videos?:
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
audio?: Array<{
|
|
66
|
-
url: string | URL;
|
|
67
|
-
}>;
|
|
60
|
+
videos?: OGVideo | OGVideo[];
|
|
61
|
+
audio?: OGAudio | OGAudio[];
|
|
62
|
+
emails?: string | string[];
|
|
63
|
+
phoneNumbers?: string | string[];
|
|
64
|
+
faxNumbers?: string | string[];
|
|
68
65
|
locale?: string;
|
|
66
|
+
alternateLocale?: string | string[];
|
|
69
67
|
type?: string;
|
|
70
68
|
publishedTime?: string;
|
|
71
69
|
modifiedTime?: string;
|
|
@@ -169,6 +167,20 @@ type TwitterAppDescriptor = {
|
|
|
169
167
|
};
|
|
170
168
|
name?: string;
|
|
171
169
|
};
|
|
170
|
+
type OGVideoDescriptor = {
|
|
171
|
+
url: string | URL;
|
|
172
|
+
secureUrl?: string | URL;
|
|
173
|
+
type?: string;
|
|
174
|
+
width?: string | number;
|
|
175
|
+
height?: string | number;
|
|
176
|
+
};
|
|
177
|
+
type OGVideo = string | URL | OGVideoDescriptor;
|
|
178
|
+
type OGAudioDescriptor = {
|
|
179
|
+
url: string | URL;
|
|
180
|
+
secureUrl?: string | URL;
|
|
181
|
+
type?: string;
|
|
182
|
+
};
|
|
183
|
+
type OGAudio = string | URL | OGAudioDescriptor;
|
|
172
184
|
type SocialImageDescriptor = {
|
|
173
185
|
url: string | URL;
|
|
174
186
|
alt?: string;
|
|
@@ -194,7 +206,6 @@ type IconsMap = {
|
|
|
194
206
|
};
|
|
195
207
|
type IconsMetadata = IconInput | IconInput[] | IconsMap;
|
|
196
208
|
export type MetadataMergeEntry = {
|
|
197
|
-
contributesTitle?: boolean;
|
|
198
209
|
isPage?: boolean;
|
|
199
210
|
metadata: Metadata;
|
|
200
211
|
};
|
|
@@ -236,6 +247,15 @@ export declare function postProcessMetadata(merged: Metadata): Metadata;
|
|
|
236
247
|
* tags are the exception: Next.js merges those across segments.
|
|
237
248
|
*/
|
|
238
249
|
export declare function mergeMetadataEntries(entries: readonly MetadataMergeEntry[]): Metadata;
|
|
250
|
+
/**
|
|
251
|
+
* Merge metadata into the `parent` a later segment's resolver receives. Like
|
|
252
|
+
* {@link mergeMetadataEntries}, except the title stays resolved as Next.js's
|
|
253
|
+
* `{ absolute, template }`, so `(await parent).title?.absolute` reads the
|
|
254
|
+
* title so far. `template` is the one the next title gets, so merging this
|
|
255
|
+
* parent with later entries resolves their titles as the full merge does.
|
|
256
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolvers/resolve-title.ts
|
|
257
|
+
*/
|
|
258
|
+
export declare function mergeParentMetadataEntries(entries: readonly MetadataMergeEntry[]): Metadata;
|
|
239
259
|
/**
|
|
240
260
|
* Resolve metadata from a module. Handles both static `metadata` export
|
|
241
261
|
* and async `generateMetadata()` function.
|
|
@@ -258,4 +278,5 @@ export declare function renderMetadataToHtml(metadata: Metadata, pathname?: stri
|
|
|
258
278
|
streamedIconKey?: string;
|
|
259
279
|
}): string;
|
|
260
280
|
export declare function MetadataHead({ metadata, pathname, trailingSlash, streamedIconKey }: MetadataHeadProps): React.JSX.Element;
|
|
261
|
-
//#endregion
|
|
281
|
+
//#endregion
|
|
282
|
+
export {};
|