vinext 1.2.1 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -9
- package/dist/_virtual/_rolldown/runtime.js +1 -1
- package/dist/build/action-owner-manifest.d.ts +3 -2
- package/dist/build/action-owner-manifest.js +18 -2
- package/dist/build/app-page-static-eligibility.d.ts +17 -1
- package/dist/build/app-page-static-eligibility.js +80 -13
- package/dist/build/clean-output.d.ts +2 -1
- package/dist/build/client-build-config.d.ts +77 -6
- package/dist/build/client-build-config.js +176 -12
- package/dist/build/client-reference-async.d.ts +48 -0
- package/dist/build/client-reference-async.js +123 -0
- package/dist/build/client-reference-chunks.d.ts +32 -0
- package/dist/build/client-reference-chunks.js +111 -0
- package/dist/build/client-reference-groups.d.ts +171 -0
- package/dist/build/client-reference-groups.js +572 -0
- package/dist/build/css-url-assets.d.ts +2 -1
- package/dist/build/google-fonts/fallback-metrics.d.ts +2 -1
- package/dist/build/google-fonts/find-font-files-in-css.d.ts +1 -0
- package/dist/build/google-fonts/find-font-files-in-css.js +17 -4
- package/dist/build/google-fonts/font-metadata.d.ts +2 -1
- package/dist/build/google-fonts/validate.d.ts +2 -1
- package/dist/build/inline-css.d.ts +2 -1
- package/dist/build/layout-classification.d.ts +2 -1
- package/dist/build/module-dependency-cache.d.ts +33 -1
- package/dist/build/module-dependency-cache.js +51 -1
- package/dist/build/next-client-runtime-manifests.d.ts +12 -2
- package/dist/build/next-client-runtime-manifests.js +19 -4
- package/dist/build/nitro-public-files.d.ts +24 -0
- package/dist/build/nitro-public-files.js +60 -0
- package/dist/build/pages-client-assets-module.js +1 -1
- package/dist/build/precompress.d.ts +2 -1
- package/dist/build/precompress.js +1 -1
- package/dist/build/prerender-paths.d.ts +2 -1
- package/dist/build/prerender-paths.js +5 -2
- package/dist/build/prerender-phase.d.ts +2 -1
- package/dist/build/prerender-server-pool.js +1 -1
- package/dist/build/prerender.d.ts +3 -2
- package/dist/build/prerender.js +5 -4
- package/dist/build/report.d.ts +2 -1
- package/dist/build/route-classification-injector.d.ts +2 -1
- package/dist/build/route-classification-manifest.d.ts +2 -1
- package/dist/build/run-prerender.d.ts +2 -1
- package/dist/build/server-actions-encryption-key.d.ts +24 -0
- package/dist/build/server-actions-encryption-key.js +101 -0
- package/dist/build/ssr-manifest.d.ts +3 -0
- package/dist/build/ssr-manifest.js +34 -2
- package/dist/build/standalone.d.ts +2 -1
- package/dist/cache/cache-adapters-virtual.d.ts +2 -1
- package/dist/cache.js +1 -2
- package/dist/check.d.ts +2 -1
- package/dist/check.js +4 -0
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +2 -0
- package/dist/client/client-redirect-matcher.js +2 -1
- package/dist/client/client-redirects.d.ts +4 -3
- package/dist/client/client-redirects.js +2 -1
- package/dist/client/client-rewrite-params.d.ts +9 -0
- package/dist/client/client-rewrite-params.js +20 -0
- package/dist/client/client-rewrites.d.ts +2 -1
- package/dist/client/dev-error-overlay-store.d.ts +2 -1
- package/dist/client/dev-error-overlay.js +2 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +28 -3
- package/dist/client/navigation-runtime.js +42 -11
- package/dist/client/pages-router-link-navigation.d.ts +2 -1
- package/dist/client/vinext-next-data.d.ts +25 -2
- package/dist/client/window-next.d.ts +2 -1
- package/dist/config/config-matchers.d.ts +27 -41
- package/dist/config/config-matchers.js +293 -270
- package/dist/config/config-source.d.ts +34 -0
- package/dist/config/config-source.js +141 -0
- package/dist/config/dotenv.d.ts +2 -1
- package/dist/config/header-params.d.ts +29 -0
- package/dist/config/header-params.js +106 -0
- package/dist/config/next-config.d.ts +20 -6
- package/dist/config/next-config.js +149 -11
- package/dist/config/tsconfig-paths.d.ts +2 -1
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/detector.js +23 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/index.js +2 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/lookup.js +25 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/bmp.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/cur.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/dds.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/gif.js +12 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/heif.js +55 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/icns.js +76 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ico.js +39 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/index.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/j2c.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jp2.js +21 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jpg.js +71 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl-stream.js +42 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/jxl.js +46 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/ktx.js +19 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/png.js +28 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/pnm.js +54 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/psd.js +11 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/svg.js +79 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tga.js +15 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/tiff.js +96 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/utils.js +53 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/types/webp.js +45 -0
- package/dist/deps/.pnpm/image-size@2.0.4/deps/image-size/dist/esm/utils/bit-reader.js +38 -0
- package/dist/deps/.pnpm/ua-parser-js@1.0.35/deps/ua-parser-js/src/ua-parser.js +2 -2
- package/dist/entries/app-browser-entry.d.ts +34 -6
- package/dist/entries/app-browser-entry.js +103 -40
- package/dist/entries/app-rsc-entry.d.ts +4 -1
- package/dist/entries/app-rsc-entry.js +131 -66
- package/dist/entries/app-rsc-manifest.d.ts +12 -1
- package/dist/entries/app-rsc-manifest.js +73 -1
- package/dist/entries/app-ssr-entry.d.ts +4 -1
- package/dist/entries/app-ssr-entry.js +9 -2
- package/dist/entries/pages-client-entry.d.ts +1 -0
- package/dist/entries/pages-client-entry.js +6 -6
- package/dist/entries/pages-entry-helpers.js +1 -2
- package/dist/entries/pages-server-entry.d.ts +2 -1
- package/dist/entries/pages-server-entry.js +18 -15
- package/dist/entries/runtime-entry-module.d.ts +1 -0
- package/dist/entries/runtime-entry-module.js +4 -1
- package/dist/image/image-adapters-virtual.d.ts +2 -1
- package/dist/index.d.ts +11 -0
- package/dist/index.js +340 -116
- package/dist/init.js +17 -0
- package/dist/plugins/client-compile-hints.d.ts +30 -0
- package/dist/plugins/client-compile-hints.js +88 -0
- package/dist/plugins/client-reference-dedup.d.ts +2 -1
- package/dist/plugins/cloudflare-dev-module-urls.d.ts +2 -1
- package/dist/plugins/dynamic-preload-metadata.d.ts +3 -1
- package/dist/plugins/dynamic-preload-metadata.js +1 -1
- package/dist/plugins/environment.d.ts +2 -1
- package/dist/plugins/fonts.js +9 -12
- package/dist/plugins/ignore-dynamic-requests.d.ts +2 -1
- package/dist/plugins/import-meta-url.d.ts +2 -1
- package/dist/plugins/og-assets.d.ts +2 -1
- package/dist/plugins/og-assets.js +2 -3
- package/dist/plugins/optimize-imports.d.ts +27 -3
- package/dist/plugins/optimize-imports.js +106 -20
- package/dist/plugins/pages-node-externals.d.ts +2 -1
- package/dist/plugins/remove-console.d.ts +2 -1
- package/dist/plugins/require-condition-resolution.d.ts +2 -1
- package/dist/plugins/rsc-client-reference-loaders.d.ts +53 -1
- package/dist/plugins/rsc-client-reference-loaders.js +447 -27
- package/dist/plugins/rsc-client-shim-excludes.js +2 -0
- package/dist/plugins/sass.d.ts +2 -1
- package/dist/plugins/strip-server-exports.d.ts +2 -1
- package/dist/plugins/styled-jsx.d.ts +2 -1
- package/dist/plugins/transform-result.d.ts +2 -1
- package/dist/plugins/typeof-window.d.ts +2 -1
- package/dist/plugins/use-cache-callable.d.ts +5 -0
- package/dist/plugins/use-cache-callable.js +30 -8
- package/dist/plugins/worker-image-imports.d.ts +1 -0
- package/dist/plugins/worker-image-imports.js +2 -2
- package/dist/plugins/worker-use-server.d.ts +2 -1
- package/dist/routing/app-route-graph.d.ts +41 -1
- package/dist/routing/app-route-graph.js +122 -50
- package/dist/routing/browser-route-manifest.d.ts +44 -0
- package/dist/routing/browser-route-manifest.js +195 -0
- package/dist/routing/hashed-route-patterns.d.ts +4 -0
- package/dist/routing/hashed-route-patterns.js +22 -0
- package/dist/routing/optimistic-route-trie.d.ts +28 -0
- package/dist/routing/optimistic-route-trie.js +102 -0
- package/dist/routing/route-matching.d.ts +2 -1
- package/dist/routing/route-pattern.d.ts +2 -1
- package/dist/routing/route-validation.d.ts +6 -1
- package/dist/routing/route-validation.js +26 -10
- package/dist/server/accept-encoding.d.ts +2 -1
- package/dist/server/app-action-forwarding.d.ts +10 -1
- package/dist/server/app-action-forwarding.js +15 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-client-reuse-manifest.d.ts +2 -1
- package/dist/server/app-browser-entry.js +175 -64
- package/dist/server/app-browser-error.d.ts +5 -2
- package/dist/server/app-browser-error.js +7 -2
- package/dist/server/app-browser-history-controller.d.ts +2 -1
- package/dist/server/app-browser-hydration.d.ts +2 -1
- package/dist/server/app-browser-interception-context.d.ts +4 -3
- package/dist/server/app-browser-mpa-navigation.d.ts +1 -0
- package/dist/server/app-browser-mpa-navigation.js +6 -5
- package/dist/server/app-browser-navigation-controller.d.ts +17 -6
- package/dist/server/app-browser-navigation-controller.js +103 -36
- package/dist/server/app-browser-popstate.d.ts +2 -1
- package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
- package/dist/server/app-browser-server-action-client.d.ts +2 -1
- package/dist/server/app-browser-state.d.ts +2 -2
- package/dist/server/app-browser-state.js +1 -1
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-visible-commit.d.ts +6 -5
- package/dist/server/app-client-reference-manifest.d.ts +31 -0
- package/dist/server/app-client-reference-manifest.js +46 -0
- package/dist/server/app-client-reference-preloader.d.ts +45 -2
- package/dist/server/app-client-reference-preloader.js +48 -10
- package/dist/server/app-elements-wire.d.ts +2 -1
- package/dist/server/app-elements.d.ts +2 -0
- package/dist/server/app-elements.js +3 -1
- package/dist/server/app-fallback-renderer.d.ts +9 -2
- package/dist/server/app-fallback-renderer.js +6 -2
- package/dist/server/app-history-state.d.ts +2 -1
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-layout-param-observation.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-middleware.d.ts +6 -0
- package/dist/server/app-middleware.js +8 -10
- package/dist/server/app-optimistic-routing.d.ts +26 -11
- package/dist/server/app-optimistic-routing.js +38 -96
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +229 -39
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +40 -7
- package/dist/server/app-page-cache-finalizer.d.ts +2 -1
- package/dist/server/app-page-cache-finalizer.js +1 -1
- package/dist/server/app-page-cache-render.d.ts +10 -2
- package/dist/server/app-page-cache-render.js +15 -2
- package/dist/server/app-page-cache.js +2 -2
- package/dist/server/app-page-dispatch.d.ts +34 -1
- package/dist/server/app-page-dispatch.js +165 -34
- package/dist/server/app-page-element-builder.d.ts +17 -1
- package/dist/server/app-page-element-builder.js +187 -66
- package/dist/server/app-page-execution.d.ts +28 -1
- package/dist/server/app-page-execution.js +114 -5
- package/dist/server/app-page-head.d.ts +95 -3
- package/dist/server/app-page-head.js +307 -152
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +48 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +76 -1
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-probe.d.ts +2 -1
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +7 -1
- package/dist/server/app-page-render.js +38 -11
- package/dist/server/app-page-request.d.ts +14 -1
- package/dist/server/app-page-request.js +1 -1
- package/dist/server/app-page-route-wiring.d.ts +52 -2
- package/dist/server/app-page-route-wiring.js +197 -47
- package/dist/server/app-page-rsc-render-status.d.ts +3 -1
- package/dist/server/app-page-rsc-render-status.js +1 -0
- package/dist/server/app-page-search-params-observation.d.ts +8 -6
- package/dist/server/app-page-search-params-observation.js +16 -11
- package/dist/server/app-page-segment-plan.d.ts +2 -1
- package/dist/server/app-page-stream.d.ts +38 -1
- package/dist/server/app-page-stream.js +24 -4
- package/dist/server/app-pages-bridge.d.ts +4 -2
- package/dist/server/app-pages-bridge.js +11 -7
- package/dist/server/app-ppr-fallback-shell-render.d.ts +2 -1
- package/dist/server/app-ppr-fallback-shell.d.ts +2 -1
- package/dist/server/app-prerender-endpoints.d.ts +2 -1
- package/dist/server/app-prerender-static-params.d.ts +2 -1
- package/dist/server/app-prerender-static-params.js +3 -2
- package/dist/server/app-render-dependency.d.ts +11 -1
- package/dist/server/app-render-dependency.js +65 -6
- package/dist/server/app-request-stage-independent-entry.d.ts +2 -1
- package/dist/server/app-request-stage-independent-entry.js +2 -2
- package/dist/server/app-response-stage-entry.d.ts +2 -1
- package/dist/server/app-response-stage-entry.js +3 -3
- package/dist/server/app-route-handler-cache.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +4 -2
- package/dist/server/app-route-handler-execution.d.ts +4 -1
- package/dist/server/app-route-handler-execution.js +9 -2
- package/dist/server/app-route-handler-middleware-context.d.ts +2 -1
- package/dist/server/app-route-handler-middleware-context.js +3 -3
- package/dist/server/app-route-handler-response.d.ts +4 -2
- package/dist/server/app-route-handler-response.js +2 -2
- package/dist/server/app-route-handler-runtime.d.ts +4 -1
- package/dist/server/app-route-handler-runtime.js +20 -3
- package/dist/server/app-route-module-loader.d.ts +18 -1
- package/dist/server/app-route-module-loader.js +15 -6
- package/dist/server/app-route-tree-prefetch.d.ts +2 -1
- package/dist/server/app-route-tree.d.ts +20 -0
- package/dist/server/app-route-tree.js +18 -0
- package/dist/server/app-router-entry.js +2 -2
- package/dist/server/app-rsc-combined-handler.js +8 -1
- package/dist/server/app-rsc-error-handler.d.ts +2 -1
- package/dist/server/app-rsc-errors.d.ts +9 -1
- package/dist/server/app-rsc-errors.js +9 -2
- package/dist/server/app-rsc-handler.d.ts +6 -2
- package/dist/server/app-rsc-handler.js +152 -140
- package/dist/server/app-rsc-response-finalizer.d.ts +7 -1
- package/dist/server/app-rsc-response-finalizer.js +4 -1
- package/dist/server/app-rsc-response-stage.js +3 -1
- package/dist/server/app-rsc-route-matching.d.ts +39 -1
- package/dist/server/app-rsc-route-matching.js +25 -1
- package/dist/server/app-segment-config.d.ts +2 -1
- package/dist/server/app-segment-config.js +1 -14
- package/dist/server/app-server-action-execution.d.ts +25 -7
- package/dist/server/app-server-action-execution.js +53 -59
- package/dist/server/app-ssr-entry.d.ts +12 -0
- package/dist/server/app-ssr-entry.js +104 -48
- package/dist/server/app-ssr-error-meta.d.ts +2 -1
- package/dist/server/app-ssr-search-params-gate.d.ts +2 -1
- package/dist/server/app-ssr-stream.d.ts +29 -10
- package/dist/server/app-ssr-stream.js +311 -67
- package/dist/server/app-static-generation.d.ts +2 -1
- package/dist/server/app-streamed-client-references.d.ts +39 -0
- package/dist/server/app-streamed-client-references.js +156 -0
- package/dist/server/app-visited-response-cache.d.ts +2 -1
- package/dist/server/app-worker-stages.d.ts +2 -1
- package/dist/server/artifact-compatibility.d.ts +2 -1
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/client-reuse-manifest.d.ts +2 -1
- package/dist/server/config-headers.d.ts +2 -1
- package/dist/server/config-headers.js +12 -3
- package/dist/server/csp.d.ts +2 -1
- package/dist/server/default-global-not-found-module.d.ts +2 -1
- package/dist/server/default-http-access-fallback-modules.d.ts +33 -0
- package/dist/server/default-http-access-fallback-modules.js +31 -0
- package/dist/server/defer-until-stream-consumed.d.ts +34 -0
- package/dist/server/defer-until-stream-consumed.js +154 -21
- package/dist/server/dev-lockfile.d.ts +32 -2
- package/dist/server/dev-lockfile.js +46 -2
- package/dist/server/dev-module-runner.d.ts +2 -1
- package/dist/server/dev-server.js +10 -3
- package/dist/server/fetch-handler.js +1 -2
- package/dist/server/file-based-metadata.d.ts +2 -1
- package/dist/server/framework-tracer.d.ts +2 -1
- package/dist/server/html.d.ts +1 -0
- package/dist/server/html.js +19 -1
- package/dist/server/http-conditional.d.ts +2 -1
- package/dist/server/http-error-responses.d.ts +2 -1
- package/dist/server/implicit-tags.d.ts +2 -1
- package/dist/server/isolate-shared-promise.d.ts +10 -0
- package/dist/server/isolate-shared-promise.js +33 -0
- package/dist/server/isr-cache.js +3 -2
- package/dist/server/metadata-route-build-data.d.ts +2 -1
- package/dist/server/metadata-route-build-data.js +1 -1
- package/dist/server/metadata-route-response.d.ts +2 -1
- package/dist/server/metadata-route-response.js +1 -1
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-matcher-pattern.d.ts +0 -1
- package/dist/server/middleware-matcher-pattern.js +11 -140
- package/dist/server/middleware-matcher.js +5 -6
- package/dist/server/middleware-response-headers.d.ts +31 -0
- package/dist/server/middleware-response-headers.js +57 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/middleware-runtime.js +26 -13
- package/dist/server/navigation-planner.d.ts +2 -2
- package/dist/server/navigation-trace.d.ts +2 -1
- package/dist/server/next-error-digest.d.ts +2 -1
- package/dist/server/nitro-public-files-plugin.d.ts +39 -0
- package/dist/server/nitro-public-files-plugin.js +106 -0
- package/dist/server/nitro-public-files.d.ts +22 -0
- package/dist/server/nitro-public-files.js +39 -0
- package/dist/server/opentelemetry-api.d.ts +2 -1
- package/dist/server/operation-token.d.ts +2 -1
- package/dist/server/pages-api-route.d.ts +2 -1
- package/dist/server/pages-asset-tags.d.ts +7 -1
- package/dist/server/pages-asset-tags.js +9 -2
- package/dist/server/pages-body-parser-config.d.ts +2 -1
- package/dist/server/pages-client-assets.d.ts +8 -1
- package/dist/server/pages-data-route.d.ts +2 -1
- package/dist/server/pages-document-asset-props.d.ts +2 -1
- package/dist/server/pages-document-initial-props.d.ts +2 -1
- package/dist/server/pages-execution-tracing.d.ts +2 -1
- package/dist/server/pages-execution-tracing.js +1 -1
- package/dist/server/pages-get-initial-props.d.ts +2 -1
- package/dist/server/pages-i18n.d.ts +18 -0
- package/dist/server/pages-i18n.js +18 -2
- package/dist/server/pages-node-compat.d.ts +5 -3
- package/dist/server/pages-node-compat.js +35 -16
- package/dist/server/pages-page-data.d.ts +7 -1
- package/dist/server/pages-page-data.js +35 -12
- package/dist/server/pages-page-handler.d.ts +3 -2
- package/dist/server/pages-page-handler.js +16 -7
- package/dist/server/pages-page-method.d.ts +2 -1
- package/dist/server/pages-page-response.d.ts +2 -1
- package/dist/server/pages-preview.d.ts +2 -1
- package/dist/server/pages-readiness.d.ts +2 -1
- package/dist/server/pages-request-pipeline.d.ts +8 -2
- package/dist/server/pages-request-pipeline.js +35 -40
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-request-stage-entry.js +16 -6
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.js +1 -1
- package/dist/server/pages-revalidate.js +1 -0
- package/dist/server/pages-route-data-kind.d.ts +2 -1
- package/dist/server/pages-router-entry.js +1 -1
- package/dist/server/prerender-cache-life-header.d.ts +2 -1
- package/dist/server/prerender-route-params.d.ts +2 -1
- package/dist/server/prod-server.d.ts +2 -2
- package/dist/server/prod-server.js +80 -36
- package/dist/server/proxy-trust.d.ts +6 -0
- package/dist/server/proxy-trust.js +12 -6
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-pipeline.d.ts +5 -0
- package/dist/server/request-pipeline.js +12 -1
- package/dist/server/request-tracing.d.ts +2 -1
- package/dist/server/request-tracing.js +1 -1
- package/dist/server/response-start-tracing.js +7 -29
- package/dist/server/rsc-render-stream.d.ts +4 -0
- package/dist/server/rsc-render-stream.js +25 -0
- package/dist/server/seed-cache.d.ts +2 -1
- package/dist/server/seed-cache.js +1 -1
- package/dist/server/server-reference-loader.js +10 -1
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +16 -3
- package/dist/server/static-layout-client-reuse-proof.d.ts +2 -1
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +2 -1
- package/dist/server/worker-utils.js +1 -1
- package/dist/shims/app.d.ts +2 -1
- package/dist/shims/cache-callable-runtime.d.ts +2 -1
- package/dist/shims/cache-handler.d.ts +8 -3
- package/dist/shims/cache-handler.js +32 -11
- package/dist/shims/cache-request-state.d.ts +40 -3
- package/dist/shims/cache-request-state.js +70 -5
- package/dist/shims/cache-runtime.js +47 -19
- package/dist/shims/cache.d.ts +2 -2
- package/dist/shims/cache.js +17 -8
- package/dist/shims/caught-not-found-boundaries.d.ts +15 -0
- package/dist/shims/caught-not-found-boundaries.js +48 -0
- package/dist/shims/cdn-purge-routes.d.ts +25 -0
- package/dist/shims/cdn-purge-routes.js +77 -0
- package/dist/shims/client-locale.js +2 -1
- package/dist/shims/client-page-root.d.ts +2 -1
- package/dist/shims/config.d.ts +2 -1
- package/dist/shims/default-forbidden.d.ts +4 -0
- package/dist/shims/default-forbidden.js +18 -0
- package/dist/shims/default-not-found.d.ts +0 -5
- package/dist/shims/default-not-found.js +5 -41
- package/dist/shims/default-unauthorized.d.ts +4 -0
- package/dist/shims/default-unauthorized.js +18 -0
- package/dist/shims/dynamic.js +17 -4
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +31 -16
- package/dist/shims/font-google.js +1 -2
- package/dist/shims/font-utils.d.ts +3 -2
- package/dist/shims/font-utils.js +5 -3
- package/dist/shims/form.js +9 -4
- package/dist/shims/http-access-error-fallback.d.ts +7 -0
- package/dist/shims/http-access-error-fallback.js +47 -0
- package/dist/shims/image-props.d.ts +93 -0
- package/dist/shims/image-props.js +323 -0
- package/dist/shims/image.d.ts +4 -39
- package/dist/shims/image.js +4 -319
- package/dist/shims/internal/app-prefetch-fetch-queue.d.ts +22 -2
- package/dist/shims/internal/app-prefetch-fetch-queue.js +71 -18
- package/dist/shims/internal/app-route-prefetch-policy.d.ts +14 -3
- package/dist/shims/internal/app-route-prefetch-policy.js +29 -4
- package/dist/shims/internal/cache-context-accessor.d.ts +2 -1
- package/dist/shims/internal/client-reference-loader.d.ts +7 -0
- package/dist/shims/internal/client-reference-loader.js +91 -0
- package/dist/shims/internal/cookie-serialize.d.ts +2 -1
- package/dist/shims/internal/cookies.js +1 -2
- package/dist/shims/internal/headers-state.d.ts +9 -0
- package/dist/shims/internal/headers-state.js +19 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.d.ts +6 -2
- package/dist/shims/internal/hybrid-client-route-owner-direct.js +31 -14
- package/dist/shims/internal/hybrid-client-route-owner.js +8 -8
- package/dist/shims/internal/interpolate-as.d.ts +2 -1
- package/dist/shims/internal/pages-data-target.d.ts +2 -1
- package/dist/shims/internal/pages-data-url.d.ts +2 -1
- package/dist/shims/internal/thenable-well-known-properties.d.ts +2 -1
- package/dist/shims/link.js +198 -53
- package/dist/shims/metadata.d.ts +32 -11
- package/dist/shims/metadata.js +88 -26
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation.d.ts +23 -3
- package/dist/shims/navigation.js +91 -25
- package/dist/shims/og.js +35 -10
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/request-context.d.ts +13 -0
- package/dist/shims/router.js +33 -43
- package/dist/shims/server.d.ts +31 -4
- package/dist/shims/server.js +58 -10
- package/dist/shims/thenable-params.d.ts +6 -1
- package/dist/shims/thenable-params.js +11 -2
- package/dist/shims/unified-request-context.d.ts +5 -0
- package/dist/shims/unified-request-context.js +5 -3
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/asset-prefix.d.ts +7 -0
- package/dist/utils/asset-prefix.js +10 -1
- package/dist/utils/client-build-manifest.d.ts +4 -1
- package/dist/utils/client-build-manifest.js +20 -6
- package/dist/utils/client-entry-manifest.d.ts +13 -0
- package/dist/utils/client-entry-manifest.js +20 -1
- package/dist/utils/client-reference-chunks.d.ts +45 -0
- package/dist/utils/client-reference-chunks.js +30 -0
- package/dist/utils/client-runtime-metadata.d.ts +10 -1
- package/dist/utils/client-runtime-metadata.js +53 -9
- package/dist/utils/compare.d.ts +9 -0
- package/dist/utils/compare.js +15 -1
- package/dist/utils/lazy-chunks.d.ts +18 -0
- package/dist/utils/lazy-chunks.js +27 -1
- package/dist/utils/manifest-paths.d.ts +14 -0
- package/dist/utils/manifest-paths.js +22 -1
- package/dist/utils/middleware-request-headers.d.ts +2 -1
- package/dist/utils/path-to-regexp.d.ts +21 -0
- package/dist/{server/middleware-path-to-regexp.js → utils/path-to-regexp.js} +14 -11
- package/dist/utils/plugin-react-version.d.ts +15 -0
- package/dist/utils/plugin-react-version.js +64 -0
- package/dist/utils/project.d.ts +2 -1
- package/dist/utils/project.js +9 -1
- package/dist/utils/public-routes.d.ts +2 -0
- package/dist/utils/public-routes.js +18 -7
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/sorted-array.d.ts +2 -1
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +5 -5
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/default-not-found-module.d.ts +0 -19
- package/dist/server/default-not-found-module.js +0 -18
- package/dist/server/middleware-path-to-regexp.d.ts +0 -13
- package/dist/server/rsc-stream-hints.d.ts +0 -21
- package/dist/server/rsc-stream-hints.js +0 -227
- package/dist/utils/regex-safety.d.ts +0 -17
- package/dist/utils/regex-safety.js +0 -789
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,19 +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] = 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
|
-
|
|
146
|
-
|
|
147
|
-
import("../server/app-rsc-render-mode.js"),
|
|
148
|
-
import("../server/headers.js"),
|
|
149
|
-
HAS_PAGES_ROUTER || HAS_CLIENT_REWRITES ? loadHybridClientRouteOwnerModule() : null
|
|
189
|
+
loadAppPrefetchModules(),
|
|
190
|
+
HAS_PAGES_ROUTER || HAS_CLIENT_REWRITES ? loadHybridClientRouteOwnerModule() : null,
|
|
191
|
+
loadNavigationRuntimeRouteManifest()
|
|
150
192
|
]);
|
|
193
|
+
if (routeManifestLoaded === false) return;
|
|
151
194
|
if (navigationEpoch !== linkPrefetchNavigationEpoch) return;
|
|
152
|
-
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;
|
|
153
196
|
const { createRscRequestUrl } = rscCacheBusting;
|
|
154
197
|
const { NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, VINEXT_MOUNTED_SLOTS_HEADER } = headersModule;
|
|
155
198
|
const hybridOwner = HAS_PAGES_ROUTER ? hybridRouteOwner.resolveHybridClientRouteOwner(prefetchHref, __basePath) : null;
|
|
@@ -158,16 +201,16 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
158
201
|
const prefetchPolicyHref = rewrittenPrefetchHref ?? prefetchHref;
|
|
159
202
|
const interceptionContext = getPrefetchInterceptionContext(fullHref);
|
|
160
203
|
const mountedSlotsHeader = getMountedSlotsHeader();
|
|
161
|
-
const autoPrefetch = mode === "auto" ? resolveAutoAppRoutePrefetch(prefetchPolicyHref) : resolveFullAppRoutePrefetch();
|
|
204
|
+
const autoPrefetch = mode === "auto" ? resolveAutoAppRoutePrefetch(prefetchPolicyHref, interceptionContext) : resolveFullAppRoutePrefetch();
|
|
162
205
|
if (!autoPrefetch.shouldPrefetch) return;
|
|
163
206
|
const isOptimisticRouteShellPrefetch = !autoPrefetch.cacheForNavigation;
|
|
164
207
|
const hasSearchParams = new URL(fullHref, window.location.href).search !== "";
|
|
165
208
|
const isAutomaticSearchParamShell = mode === "auto" && isOptimisticRouteShellPrefetch && hasSearchParams;
|
|
166
|
-
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));
|
|
167
210
|
const headers = createAppPrefetchRequestHeaders({
|
|
168
211
|
interceptionContext,
|
|
169
212
|
fetchPriority: priority,
|
|
170
|
-
prefetchKind: mode === "full" ? "full" : "auto",
|
|
213
|
+
prefetchKind: mode === "full" || mode === "full-after-shell" ? "full" : "auto",
|
|
171
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
|
|
172
215
|
});
|
|
173
216
|
if (mountedSlotsHeader) headers.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
|
|
@@ -188,9 +231,13 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
188
231
|
if (navigationEpoch !== linkPrefetchNavigationEpoch) return;
|
|
189
232
|
const cacheKey = AppElementsWire.encodeCacheKey(rscUrl, interceptionContext);
|
|
190
233
|
const prefetched = getPrefetchedUrls();
|
|
191
|
-
if (autoPrefetch.
|
|
192
|
-
|
|
193
|
-
|
|
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, {
|
|
194
241
|
headers,
|
|
195
242
|
credentials: "include",
|
|
196
243
|
priority,
|
|
@@ -206,25 +253,30 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
206
253
|
shellHeaders.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
|
|
207
254
|
shellHeaders.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
|
|
208
255
|
if (mountedSlotsHeader) shellHeaders.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
|
|
256
|
+
const ownerLeaveCount = owner?.leaveCount;
|
|
209
257
|
const shellRscUrl = await createRscRequestUrl(fullHref, shellHeaders);
|
|
258
|
+
if (owner && owner.leaveCount !== ownerLeaveCount) return;
|
|
210
259
|
const shellCacheKey = AppElementsWire.encodeCacheKey(shellRscUrl, interceptionContext);
|
|
211
260
|
const shellCache = getPrefetchCache();
|
|
212
261
|
let shellEntry = shellCache.get(shellCacheKey);
|
|
213
262
|
if (shellEntry === void 0) {
|
|
214
263
|
getPrefetchedUrls().add(shellCacheKey);
|
|
215
|
-
|
|
264
|
+
const shellOwned = createOwnedLinkPrefetch(owner);
|
|
265
|
+
const shellFetchPromise = scheduleOwnedLinkPrefetch(shellOwned, (signal) => fetch(shellRscUrl, {
|
|
216
266
|
headers: shellHeaders,
|
|
217
267
|
credentials: "include",
|
|
218
268
|
priority,
|
|
219
269
|
signal,
|
|
220
270
|
purpose: "prefetch"
|
|
221
|
-
}), priority)
|
|
271
|
+
}), priority);
|
|
272
|
+
trackOwnedLinkPrefetch(shellOwned, shellFetchPromise);
|
|
273
|
+
prefetchRscResponse(shellRscUrl, shellFetchPromise, interceptionContext, mountedSlotsHeader, void 0, {
|
|
222
274
|
cacheForNavigation: false,
|
|
223
275
|
optimisticRouteShell: true,
|
|
224
276
|
prefetchKind: "loading-shell"
|
|
225
277
|
});
|
|
226
278
|
shellEntry = shellCache.get(shellCacheKey);
|
|
227
|
-
}
|
|
279
|
+
} else joinOwnedLinkPrefetch(shellEntry.fetchPromise, owner);
|
|
228
280
|
await shellEntry?.pending?.catch(() => {});
|
|
229
281
|
};
|
|
230
282
|
const fetchAliasCacheHitProbe = async () => {
|
|
@@ -236,7 +288,9 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
236
288
|
probeHeaders.set(NEXT_ROUTER_PREFETCH_HEADER, "1");
|
|
237
289
|
probeHeaders.set(NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, "1");
|
|
238
290
|
if (mountedSlotsHeader) probeHeaders.set(VINEXT_MOUNTED_SLOTS_HEADER, mountedSlotsHeader);
|
|
291
|
+
const ownerLeaveCount = owner?.leaveCount;
|
|
239
292
|
const probeRscUrl = await createRscRequestUrl(fullHref, probeHeaders);
|
|
293
|
+
if (owner && owner.leaveCount !== ownerLeaveCount) throw new DOMException("Prefetch is no longer wanted", "AbortError");
|
|
240
294
|
return fetch(probeRscUrl, {
|
|
241
295
|
method: "HEAD",
|
|
242
296
|
headers: probeHeaders,
|
|
@@ -245,8 +299,15 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
245
299
|
purpose: "prefetch"
|
|
246
300
|
});
|
|
247
301
|
};
|
|
248
|
-
const
|
|
249
|
-
|
|
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
|
+
})) {
|
|
250
311
|
if (!hasExactNavigationCacheEntry && !prefetched.has(cacheKey) && additionalRscUrls.length > 0 && autoPrefetch.prefetchShellFirst && mountedSlotsHeader === null) {
|
|
251
312
|
prefetched.add(cacheKey);
|
|
252
313
|
fetchAliasCacheHitProbe().then((response) => response.arrayBuffer()).catch(() => {});
|
|
@@ -264,7 +325,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
264
325
|
}
|
|
265
326
|
return fetchRouteTreeGatedPrefetch({
|
|
266
327
|
fetchFullRscPayload,
|
|
267
|
-
fetchRouteTree: (routeTreeRscUrl, routeTreeHeaders) =>
|
|
328
|
+
fetchRouteTree: (routeTreeRscUrl, routeTreeHeaders) => scheduleOwnedLinkPrefetch(owned, (signal) => fetch(routeTreeRscUrl, {
|
|
268
329
|
headers: routeTreeHeaders,
|
|
269
330
|
credentials: "include",
|
|
270
331
|
priority,
|
|
@@ -277,6 +338,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
277
338
|
mountedSlotsHeader
|
|
278
339
|
});
|
|
279
340
|
})() : fetchFullRscPayload();
|
|
341
|
+
trackOwnedLinkPrefetch(owned, fetchPromise);
|
|
280
342
|
if (!__prefetchInlining && mode === "full" && autoPrefetch.cacheForNavigation && autoPrefetch.prefetchShellFirst && mountedSlotsHeader === null && !gateViaExplicitSearchShell) fetchLoadingShellForReuse();
|
|
281
343
|
prefetchRscResponse(rscUrl, fetchPromise, interceptionContext, mountedSlotsHeader, void 0, {
|
|
282
344
|
cacheForNavigation: autoPrefetch.cacheForNavigation,
|
|
@@ -308,7 +370,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
308
370
|
console.error("[vinext] RSC prefetch setup error:", error);
|
|
309
371
|
});
|
|
310
372
|
};
|
|
311
|
-
if (priority === "high" ||
|
|
373
|
+
if (priority === "high" || hasLinkAppNavigationRuntime()) {
|
|
312
374
|
runPrefetch();
|
|
313
375
|
return;
|
|
314
376
|
}
|
|
@@ -316,18 +378,24 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
316
378
|
}
|
|
317
379
|
async function promotePrefetchEntriesForNavigation(href) {
|
|
318
380
|
if (typeof window === "undefined") return;
|
|
319
|
-
if (!
|
|
320
|
-
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()]);
|
|
321
383
|
let target;
|
|
384
|
+
const fullHref = toCanonicalBrowserNavigationHref(href, window.location.href, __basePath, __trailingSlash);
|
|
322
385
|
try {
|
|
323
|
-
target = new URL(
|
|
386
|
+
target = new URL(fullHref, window.location.href);
|
|
324
387
|
} catch {
|
|
325
388
|
return;
|
|
326
389
|
}
|
|
390
|
+
const interceptionContext = getPrefetchInterceptionContext(fullHref);
|
|
391
|
+
const mountedSlotsHeader = getMountedSlotsHeader();
|
|
327
392
|
for (const [cacheKey, entry] of getPrefetchCache()) {
|
|
328
393
|
if (entry.optimisticRouteShell === true) continue;
|
|
329
394
|
if (entry.prefetchKind === "route-tree") continue;
|
|
330
|
-
|
|
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;
|
|
331
399
|
let cached;
|
|
332
400
|
try {
|
|
333
401
|
cached = parseRscRequestPath(rscUrl);
|
|
@@ -335,7 +403,7 @@ async function promotePrefetchEntriesForNavigation(href) {
|
|
|
335
403
|
continue;
|
|
336
404
|
}
|
|
337
405
|
stripRscCacheBustingSearchParam(cached);
|
|
338
|
-
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);
|
|
339
407
|
}
|
|
340
408
|
}
|
|
341
409
|
/**
|
|
@@ -347,6 +415,66 @@ const observedLinkPrefetches = /* @__PURE__ */ new WeakMap();
|
|
|
347
415
|
const visibleLinkPrefetches = /* @__PURE__ */ new Set();
|
|
348
416
|
const visibleAppPrefetchQueue = [];
|
|
349
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
|
+
}
|
|
350
478
|
function drainVisibleAppPrefetchQueue() {
|
|
351
479
|
visibleAppPrefetchDrainScheduled = false;
|
|
352
480
|
while (true) {
|
|
@@ -354,7 +482,7 @@ function drainVisibleAppPrefetchQueue() {
|
|
|
354
482
|
if (!instance) return;
|
|
355
483
|
instance.queuedViewportPrefetch = false;
|
|
356
484
|
if (!instance.isVisible || instance.routerMode !== "app") continue;
|
|
357
|
-
prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref);
|
|
485
|
+
prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref, void 0, instance);
|
|
358
486
|
}
|
|
359
487
|
}
|
|
360
488
|
function scheduleVisibleAppPrefetch(instance) {
|
|
@@ -373,11 +501,17 @@ function setVisibleLinkPrefetch(instance, isVisible) {
|
|
|
373
501
|
if (instance.routerMode === "app") scheduleVisibleAppPrefetch(instance);
|
|
374
502
|
else prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref, instance.locale);
|
|
375
503
|
instance.viewportPrefetched = true;
|
|
376
|
-
} else
|
|
504
|
+
} else {
|
|
505
|
+
visibleLinkPrefetches.delete(instance);
|
|
506
|
+
releaseOwnedLinkPrefetches(instance);
|
|
507
|
+
}
|
|
377
508
|
}
|
|
509
|
+
let visibleLinkPingRuntime = null;
|
|
378
510
|
function registerVisibleLinkPing() {
|
|
379
511
|
if (typeof window === "undefined") return;
|
|
380
|
-
|
|
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 });
|
|
381
515
|
}
|
|
382
516
|
function pingVisibleLinkPrefetches() {
|
|
383
517
|
for (const instance of visibleLinkPrefetches) if (instance.isVisible && instance.routerMode === "app") scheduleVisibleAppPrefetch(instance);
|
|
@@ -399,11 +533,14 @@ function getDefaultLocale() {
|
|
|
399
533
|
return getI18nContext()?.defaultLocale;
|
|
400
534
|
}
|
|
401
535
|
function getCurrentLocale() {
|
|
402
|
-
if (typeof window !== "undefined")
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
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
|
+
}
|
|
407
544
|
return getI18nContext()?.locale;
|
|
408
545
|
}
|
|
409
546
|
function getDomainLocales() {
|
|
@@ -457,19 +594,17 @@ function resolveConcreteRouteHref(href, as) {
|
|
|
457
594
|
if (typeof as !== "string") return null;
|
|
458
595
|
return interpolateDynamicRouteHref(href, as)?.href || null;
|
|
459
596
|
}
|
|
460
|
-
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) {
|
|
461
598
|
const pagesRouter = useContext(RouterContext);
|
|
462
|
-
const
|
|
463
|
-
const
|
|
464
|
-
const asHref = as === void 0 ? void 0 : resolvePagesLinkValue(as, pagesRouter, routePathnameForWarning);
|
|
465
|
-
const { locale, ...restWithoutLocale } = rest;
|
|
599
|
+
const hrefStr = resolvePagesLinkValue(href, pagesRouter);
|
|
600
|
+
const asHref = as === void 0 ? void 0 : resolvePagesLinkValue(as, pagesRouter);
|
|
466
601
|
let children = childrenProp;
|
|
467
602
|
if (legacyBehavior && (typeof childrenProp === "string" || typeof childrenProp === "number")) children = React.createElement("a", null, childrenProp);
|
|
468
603
|
const hrefForImplicitInterpolation = isAbsoluteOrProtocolRelativeUrl(hrefStr) ? hrefStr.startsWith("//") ? null : toSameOriginAppPath(hrefStr, __basePath) : hrefStr;
|
|
469
604
|
const implicitDynamicRouteHref = HAS_PAGES_ROUTER && pagesRouter !== null && asHref === void 0 && hrefForImplicitInterpolation !== null ? resolveDynamicRouteHref(hrefForImplicitInterpolation) : null;
|
|
470
605
|
const pagesAsHref = asHref ?? implicitDynamicRouteHref?.as;
|
|
471
606
|
const unresolvedHref = pagesAsHref ?? hrefStr;
|
|
472
|
-
const resolvedHref = unresolvedHref.startsWith("#") && !
|
|
607
|
+
const resolvedHref = unresolvedHref.startsWith("#") && !hasLinkAppNavigationRuntime() ? resolvePagesQueryOnlyHref(unresolvedHref) : unresolvedHref;
|
|
473
608
|
const concreteRouteHref = HAS_PAGES_ROUTER ? resolveConcreteRouteHref(hrefForImplicitInterpolation ?? hrefStr, pagesAsHref) : null;
|
|
474
609
|
const routeHrefRaw = hrefStr;
|
|
475
610
|
const prefetchRouteHrefRaw = concreteRouteHref ?? routeHrefRaw;
|
|
@@ -481,6 +616,14 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
481
616
|
const normalizedHref = normalizePathTrailingSlash(localizedHref, __trailingSlash);
|
|
482
617
|
const normalizedRouteHref = hasPagesHrefAsPair ? normalizePathTrailingSlash(applyLocaleToHref(isRouteDangerous ? "/" : prefetchRouteHrefRaw, locale), __trailingSlash) : normalizedHref;
|
|
483
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
|
+
});
|
|
484
627
|
const [pending, setPending] = useState(false);
|
|
485
628
|
const mountedRef = useRef(true);
|
|
486
629
|
const pendingPagesIntentPrefetchRef = useRef(null);
|
|
@@ -512,15 +655,15 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
512
655
|
if (typeof forwardedRef === "function") forwardedRef(node);
|
|
513
656
|
else if (forwardedRef) forwardedRef.current = node;
|
|
514
657
|
}, [forwardedRef]);
|
|
515
|
-
|
|
658
|
+
useLayoutEffect(() => {
|
|
516
659
|
if (!shouldViewportPrefetch || typeof window === "undefined") return;
|
|
517
660
|
const node = internalRef.current;
|
|
518
661
|
if (!node) return;
|
|
519
|
-
const hrefToPrefetch = getLinkPrefetchHref({
|
|
662
|
+
const hrefToPrefetch = isAbsoluteOrProtocolRelativeUrl(normalizedHref) ? getLinkPrefetchHref({
|
|
520
663
|
href: normalizedHref,
|
|
521
664
|
basePath: __basePath,
|
|
522
665
|
currentOrigin: window.location.origin
|
|
523
|
-
});
|
|
666
|
+
}) : normalizedHref;
|
|
524
667
|
if (hrefToPrefetch == null) return;
|
|
525
668
|
const observer = getSharedObserver();
|
|
526
669
|
if (!observer) return;
|
|
@@ -530,6 +673,8 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
530
673
|
isVisible: false,
|
|
531
674
|
locale,
|
|
532
675
|
mode: prefetchMode,
|
|
676
|
+
ownedPrefetches: /* @__PURE__ */ new Set(),
|
|
677
|
+
leaveCount: 0,
|
|
533
678
|
pagesRouteHref: normalizedRouteHref === normalizedHref ? void 0 : getLinkPrefetchHref({
|
|
534
679
|
href: normalizedRouteHref,
|
|
535
680
|
basePath: __basePath,
|
|
@@ -546,6 +691,7 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
546
691
|
observedLinkPrefetches.delete(node);
|
|
547
692
|
visibleLinkPrefetches.delete(instance);
|
|
548
693
|
instance.isVisible = false;
|
|
694
|
+
releaseOwnedLinkPrefetches(instance);
|
|
549
695
|
};
|
|
550
696
|
}, [
|
|
551
697
|
shouldViewportPrefetch,
|
|
@@ -621,7 +767,7 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
621
767
|
navigateHref = localPath;
|
|
622
768
|
}
|
|
623
769
|
e.preventDefault();
|
|
624
|
-
const hasAppNavigationRuntime =
|
|
770
|
+
const hasAppNavigationRuntime = hasLinkAppNavigationRuntime();
|
|
625
771
|
const pagesNavigateHref = HAS_PAGES_ROUTER && resolvedHref.startsWith("?") ? resolvePagesLinkNavigationHref(resolvedHref, locale) : navigateHref;
|
|
626
772
|
const pagesAsForLink = hasPagesHrefAsPair ? pagesNavigateHref : void 0;
|
|
627
773
|
const pagesHrefForLink = pagesAsForLink === void 0 ? pagesNavigateHref : routeHrefRaw;
|
|
@@ -679,7 +825,6 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
679
825
|
} else if (replace) window.location.replace(absoluteFullHref);
|
|
680
826
|
else window.location.assign(absoluteFullHref);
|
|
681
827
|
};
|
|
682
|
-
const anchorProps = restWithoutLocale;
|
|
683
828
|
const linkStatusValue = React.useMemo(() => ({ pending }), [pending]);
|
|
684
829
|
if (isDangerous) {
|
|
685
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 {};
|