vinext 1.3.0 → 1.4.0
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 +5 -2
- package/THIRD_PARTY_LICENSES.md +47 -0
- package/dist/_virtual/_rolldown/runtime.js +4 -3
- 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/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 +6 -5
- package/dist/build/report.d.ts +2 -15
- package/dist/build/report.js +1 -51
- 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 +5 -1
- package/dist/cli-args.d.ts +2 -1
- package/dist/cli.js +5 -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/dev-error-overlay.js +1 -1
- package/dist/client/index.js +1 -2
- package/dist/client/instrumentation-client-state.js +5 -5
- package/dist/client/navigation-runtime.d.ts +16 -2
- package/dist/client/navigation-runtime.js +2 -2
- 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 +32 -1
- package/dist/config/next-config.js +93 -5
- package/dist/config/tsconfig-paths.d.ts +2 -1
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-codec.js +327 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/dbcs-data.js +123 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/index.js +29 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/internal.js +134 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-codec.js +50 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data-generated.js +455 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/sbcs-data.js +147 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/big5-added.json.js +169 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp936.json.js +2584 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp949.json.js +2220 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/cp950.json.js +227 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/eucjp.json.js +425 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gb18030-ranges.json.js +427 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/gbk-added.json.js +229 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/tables/shiftjis.json.js +292 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf16.js +106 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/encodings/utf7.js +182 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/bom-handling.js +42 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/extend-node.js +147 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/index.js +94 -0
- package/dist/deps/.pnpm/iconv-lite@0.4.24/deps/iconv-lite/lib/streams.js +95 -0
- 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/safer-buffer@2.1.2/deps/safer-buffer/safer.js +45 -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 +59 -60
- package/dist/entries/app-rsc-manifest.d.ts +2 -1
- package/dist/entries/app-rsc-manifest.js +56 -4
- package/dist/entries/app-ssr-entry.js +1 -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 +34 -9
- 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 +184 -103
- package/dist/init-cloudflare.d.ts +1 -3
- package/dist/init-cloudflare.js +10 -48
- package/dist/init-platform.d.ts +2 -0
- package/dist/init-platform.js +4 -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/extensionless-dynamic-import.js +6 -2
- 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/next-intl-catalog.d.ts +12 -0
- package/dist/plugins/next-intl-catalog.js +85 -0
- 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 +3 -1
- package/dist/plugins/pages-node-externals.js +1 -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/use-cache-callable.d.ts +1 -1
- package/dist/plugins/use-cache-callable.js +136 -94
- 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 +46 -0
- package/dist/routing/app-route-graph.js +131 -51
- 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/api-handler.js +19 -4
- package/dist/server/app-action-forwarding.d.ts +2 -1
- package/dist/server/app-bfcache-identity.d.ts +2 -1
- package/dist/server/app-bfcache-identity.js +1 -1
- package/dist/server/app-browser-action-result.d.ts +2 -1
- package/dist/server/app-browser-entry.js +106 -66
- package/dist/server/app-browser-error.d.ts +2 -1
- package/dist/server/app-browser-history-controller.d.ts +7 -5
- package/dist/server/app-browser-history-controller.js +93 -15
- 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.d.ts +2 -2
- package/dist/server/app-browser-navigation-controller.js +16 -12
- 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-rsc-redirect.js +4 -4
- package/dist/server/app-browser-server-action-client.d.ts +4 -1
- package/dist/server/app-browser-server-action-client.js +4 -3
- package/dist/server/app-browser-state.d.ts +2 -4
- package/dist/server/app-browser-state.js +9 -4
- package/dist/server/app-browser-stream.d.ts +2 -1
- package/dist/server/app-browser-supplemental-refresh.js +16 -1
- package/dist/server/app-browser-visible-commit.d.ts +3 -2
- package/dist/server/app-browser-visible-commit.js +2 -12
- 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 +8 -39
- package/dist/server/app-elements-wire.js +4 -41
- package/dist/server/app-elements.d.ts +4 -2
- package/dist/server/app-elements.js +4 -2
- 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 +4 -3
- package/dist/server/app-history-state.js +5 -2
- package/dist/server/app-inline-css-client.d.ts +2 -1
- package/dist/server/app-metadata-tracing.d.ts +2 -1
- package/dist/server/app-mounted-layouts.d.ts +21 -0
- package/dist/server/app-mounted-layouts.js +67 -0
- package/dist/server/app-optimistic-routing.d.ts +37 -2
- package/dist/server/app-optimistic-routing.js +75 -2
- package/dist/server/app-page-boundary-render.d.ts +20 -2
- package/dist/server/app-page-boundary-render.js +224 -40
- package/dist/server/app-page-boundary.d.ts +34 -5
- package/dist/server/app-page-boundary.js +41 -8
- package/dist/server/app-page-cache-finalizer.d.ts +14 -2
- package/dist/server/app-page-cache-finalizer.js +71 -30
- 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.d.ts +13 -1
- package/dist/server/app-page-cache.js +33 -11
- package/dist/server/app-page-dispatch.d.ts +39 -11
- package/dist/server/app-page-dispatch.js +236 -177
- package/dist/server/app-page-element-builder.d.ts +19 -3
- package/dist/server/app-page-element-builder.js +193 -71
- package/dist/server/app-page-execution.d.ts +43 -51
- package/dist/server/app-page-execution.js +205 -92
- package/dist/server/app-page-head.d.ts +108 -3
- package/dist/server/app-page-head.js +337 -154
- package/dist/server/app-page-http-access-fallback-metadata.d.ts +49 -2
- package/dist/server/app-page-http-access-fallback-metadata.js +77 -2
- package/dist/server/app-page-layout-gate.d.ts +35 -0
- package/dist/server/app-page-layout-gate.js +50 -0
- package/dist/server/app-page-method.d.ts +2 -1
- package/dist/server/app-page-params.d.ts +0 -1
- package/dist/server/app-page-params.js +1 -14
- package/dist/server/app-page-probe.d.ts +5 -22
- package/dist/server/app-page-probe.js +4 -37
- package/dist/server/app-page-render-identity.d.ts +2 -1
- package/dist/server/app-page-render.d.ts +9 -13
- package/dist/server/app-page-render.js +108 -214
- package/dist/server/app-page-request.d.ts +15 -4
- package/dist/server/app-page-request.js +2 -2
- package/dist/server/app-page-response.js +3 -3
- package/dist/server/app-page-route-wiring.d.ts +65 -8
- package/dist/server/app-page-route-wiring.js +259 -103
- package/dist/server/app-page-rsc-render-status.d.ts +29 -2
- package/dist/server/app-page-rsc-render-status.js +121 -13
- 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 +33 -1
- package/dist/server/app-page-stream.js +25 -6
- package/dist/server/app-pages-bridge.d.ts +6 -1
- package/dist/server/app-pages-bridge.js +7 -3
- 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 +21 -4
- package/dist/server/app-render-dependency.js +100 -33
- package/dist/server/app-request-stage-dispatch.js +1 -1
- 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-cache.js +2 -2
- package/dist/server/app-route-handler-dispatch.d.ts +2 -1
- package/dist/server/app-route-handler-dispatch.js +15 -10
- package/dist/server/app-route-handler-execution.d.ts +2 -1
- package/dist/server/app-route-handler-execution.js +8 -3
- package/dist/server/app-route-handler-policy.d.ts +1 -1
- package/dist/server/app-route-handler-policy.js +3 -3
- package/dist/server/app-route-handler-response.d.ts +2 -1
- package/dist/server/app-route-handler-response.js +1 -1
- package/dist/server/app-route-handler-runtime.d.ts +2 -1
- package/dist/server/app-route-handler-runtime.js +17 -4
- 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-cache-busting.d.ts +2 -2
- package/dist/server/app-rsc-cache-busting.js +4 -4
- package/dist/server/app-rsc-error-handler.d.ts +4 -2
- package/dist/server/app-rsc-error-handler.js +9 -1
- package/dist/server/app-rsc-errors.d.ts +10 -1
- package/dist/server/app-rsc-errors.js +8 -1
- package/dist/server/app-rsc-handler.d.ts +7 -6
- package/dist/server/app-rsc-handler.js +36 -34
- package/dist/server/app-rsc-request-normalization.d.ts +0 -4
- package/dist/server/app-rsc-request-normalization.js +1 -4
- package/dist/server/app-rsc-response-finalizer.d.ts +2 -1
- package/dist/server/app-rsc-response-finalizer.js +2 -2
- package/dist/server/app-rsc-response-stage.js +5 -3
- 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 +5 -2
- package/dist/server/app-server-action-execution.js +10 -7
- package/dist/server/app-ssr-entry.d.ts +8 -0
- package/dist/server/app-ssr-entry.js +98 -50
- 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 +300 -68
- 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 +38 -2
- package/dist/server/app-visited-response-cache.js +46 -5
- package/dist/server/app-worker-stages.d.ts +27 -4
- package/dist/server/app-worker-stages.js +45 -6
- package/dist/server/artifact-compatibility.d.ts +2 -2
- package/dist/server/artifact-compatibility.js +1 -10
- package/dist/server/bfcache-identity.d.ts +2 -1
- package/dist/server/cache-headers.d.ts +2 -1
- package/dist/server/cache-proof.d.ts +1 -115
- package/dist/server/cache-proof.js +1 -544
- package/dist/server/cacheability-request.d.ts +2 -1
- package/dist/server/cacheability-request.js +13 -8
- 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 +14 -6
- 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/headers.d.ts +6 -3
- package/dist/server/headers.js +9 -5
- 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/isr-cache.d.ts +8 -2
- package/dist/server/isr-cache.js +26 -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 +32 -15
- package/dist/server/metadata-routes.d.ts +2 -1
- package/dist/server/middleware-runtime.d.ts +2 -1
- package/dist/server/multi-stage.d.ts +52 -11
- package/dist/server/multi-stage.js +13 -1
- package/dist/server/navigation-planner.js +1 -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-api-route.js +28 -19
- 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-media-type.d.ts +21 -1
- package/dist/server/pages-media-type.js +69 -5
- package/dist/server/pages-node-compat.js +52 -27
- 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 +27 -27
- 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 +10 -1
- package/dist/server/pages-request-pipeline.js +6 -7
- package/dist/server/pages-request-stage-entry.d.ts +2 -1
- package/dist/server/pages-request-stage-entry.js +14 -12
- package/dist/server/pages-response-stage-entry.d.ts +2 -1
- package/dist/server/pages-response-stage-entry.js +9 -3
- 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 +14 -4
- package/dist/server/request-log.d.ts +2 -1
- package/dist/server/request-pipeline.d.ts +6 -0
- package/dist/server/request-pipeline.js +21 -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/shared-cache-identity.d.ts +23 -0
- package/dist/server/shared-cache-identity.js +36 -0
- package/dist/server/static-file-cache.d.ts +2 -1
- package/dist/server/static-file-cache.js +1 -0
- package/dist/server/worker-revalidation-context.d.ts +2 -1
- package/dist/server/worker-stages.d.ts +18 -4
- package/dist/server/worker-stages.js +23 -4
- 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 +31 -11
- package/dist/shims/cache-request-state.d.ts +17 -20
- package/dist/shims/cache-request-state.js +16 -21
- package/dist/shims/cache-runtime.js +27 -11
- package/dist/shims/cache.d.ts +8 -7
- package/dist/shims/cache.js +17 -19
- package/dist/shims/cacheability-classification.d.ts +2 -0
- 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-cache.d.ts +22 -5
- 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/client-page-root.js +2 -2
- 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 +9 -6
- package/dist/shims/error-boundary.d.ts +39 -3
- package/dist/shims/error-boundary.js +33 -18
- package/dist/shims/fetch-cache-state.d.ts +5 -1
- package/dist/shims/fetch-cache-state.js +1 -3
- package/dist/shims/fetch-cache.d.ts +2 -1
- package/dist/shims/fetch-cache.js +34 -24
- 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 +3 -3
- package/dist/shims/headers.d.ts +8 -23
- package/dist/shims/headers.js +17 -67
- 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/navigation-untracked.js +1 -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 +197 -52
- package/dist/shims/metadata.d.ts +52 -29
- package/dist/shims/metadata.js +142 -42
- package/dist/shims/navigation-errors.d.ts +2 -1
- package/dist/shims/navigation-server.js +1 -1
- package/dist/shims/navigation.d.ts +95 -8
- package/dist/shims/navigation.js +255 -47
- package/dist/shims/navigation.react-server.js +2 -2
- package/dist/shims/pages-router-runtime.d.ts +2 -1
- package/dist/shims/ppr-fallback-shell.d.ts +2 -1
- package/dist/shims/request-state-types.d.ts +2 -2
- package/dist/shims/router.js +14 -3
- package/dist/shims/slot.d.ts +12 -0
- package/dist/shims/slot.js +37 -9
- package/dist/shims/unified-request-context.d.ts +1 -1
- package/dist/shims/unified-request-context.js +5 -6
- package/dist/typegen.d.ts +2 -1
- package/dist/utils/cache-control-metadata.d.ts +5 -0
- package/dist/utils/cache-control-metadata.js +9 -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 +4 -3
- package/dist/utils/project.js +12 -17
- package/dist/utils/query.d.ts +2 -1
- package/dist/utils/regex.d.ts +5 -0
- package/dist/utils/regex.js +11 -1
- package/dist/utils/text-stream.d.ts +10 -5
- package/dist/utils/text-stream.js +6 -6
- package/dist/utils/vite-cli-invocation.d.ts +2 -1
- package/package.json +6 -5
- package/dist/build/layout-classification-types.d.ts +0 -60
- package/dist/build/layout-classification-types.js +0 -1
- package/dist/build/layout-classification.d.ts +0 -61
- package/dist/build/layout-classification.js +0 -98
- package/dist/build/route-classification-injector.d.ts +0 -32
- package/dist/build/route-classification-injector.js +0 -59
- package/dist/build/route-classification-manifest.d.ts +0 -53
- package/dist/build/route-classification-manifest.js +0 -143
- package/dist/deps/.pnpm/image-size@2.0.2/deps/image-size/dist/index.js +0 -808
- package/dist/server/app-browser-client-reuse-manifest.d.ts +0 -10
- package/dist/server/app-browser-client-reuse-manifest.js +0 -101
- package/dist/server/app-layout-param-observation.d.ts +0 -41
- package/dist/server/app-layout-param-observation.js +0 -168
- package/dist/server/client-reuse-manifest.d.ts +0 -102
- package/dist/server/client-reuse-manifest.js +0 -209
- 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/server/skip-cache-proof.d.ts +0 -60
- package/dist/server/skip-cache-proof.js +0 -168
- package/dist/server/static-layout-client-reuse-proof.d.ts +0 -13
- package/dist/server/static-layout-client-reuse-proof.js +0 -33
- package/dist/utils/sorted-array.d.ts +0 -7
- package/dist/utils/sorted-array.js +0 -20
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, seedFullPrefetchFromVisitedResponse, hasNavigationFreshVisitedResponse, 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,14 +299,23 @@ 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(() => {});
|
|
255
314
|
}
|
|
256
315
|
return;
|
|
257
316
|
}
|
|
317
|
+
if (autoPrefetch.dynamicStaleTime === "full-prefetch" && seedFullPrefetchFromVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls)) return;
|
|
318
|
+
if (autoPrefetch.dynamicStaleTime !== "full-prefetch" && hasNavigationFreshVisitedResponse(rscUrl, interceptionContext, mountedSlotsHeader, additionalRscUrls)) return;
|
|
258
319
|
prefetched.add(cacheKey);
|
|
259
320
|
const gateViaRouteTree = (__prefetchInlining || requiresRouteTreePrefetch) && mode === "auto" && autoPrefetch.prefetchShellFirst;
|
|
260
321
|
const gateViaExplicitSearchShell = mode === "full" && hasSearchParams && autoPrefetch.prefetchShellFirst && mountedSlotsHeader === null;
|
|
@@ -266,7 +327,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
266
327
|
}
|
|
267
328
|
return fetchRouteTreeGatedPrefetch({
|
|
268
329
|
fetchFullRscPayload,
|
|
269
|
-
fetchRouteTree: (routeTreeRscUrl, routeTreeHeaders) =>
|
|
330
|
+
fetchRouteTree: (routeTreeRscUrl, routeTreeHeaders) => scheduleOwnedLinkPrefetch(owned, (signal) => fetch(routeTreeRscUrl, {
|
|
270
331
|
headers: routeTreeHeaders,
|
|
271
332
|
credentials: "include",
|
|
272
333
|
priority,
|
|
@@ -279,6 +340,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
279
340
|
mountedSlotsHeader
|
|
280
341
|
});
|
|
281
342
|
})() : fetchFullRscPayload();
|
|
343
|
+
trackOwnedLinkPrefetch(owned, fetchPromise);
|
|
282
344
|
if (!__prefetchInlining && mode === "full" && autoPrefetch.cacheForNavigation && autoPrefetch.prefetchShellFirst && mountedSlotsHeader === null && !gateViaExplicitSearchShell) fetchLoadingShellForReuse();
|
|
283
345
|
prefetchRscResponse(rscUrl, fetchPromise, interceptionContext, mountedSlotsHeader, void 0, {
|
|
284
346
|
cacheForNavigation: autoPrefetch.cacheForNavigation,
|
|
@@ -310,7 +372,7 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
310
372
|
console.error("[vinext] RSC prefetch setup error:", error);
|
|
311
373
|
});
|
|
312
374
|
};
|
|
313
|
-
if (priority === "high" ||
|
|
375
|
+
if (priority === "high" || hasLinkAppNavigationRuntime()) {
|
|
314
376
|
runPrefetch();
|
|
315
377
|
return;
|
|
316
378
|
}
|
|
@@ -318,18 +380,24 @@ function prefetchUrl(href, mode, priority = "low", pagesRouteHref, locale) {
|
|
|
318
380
|
}
|
|
319
381
|
async function promotePrefetchEntriesForNavigation(href) {
|
|
320
382
|
if (typeof window === "undefined") return;
|
|
321
|
-
if (!
|
|
322
|
-
const [{ getPrefetchCache }, { parseRscRequestPath, stripRscCacheBustingSearchParam, stripRscSuffix }] = await Promise.all([loadNavigationModule(),
|
|
383
|
+
if (!hasLinkAppNavigationRuntime()) return;
|
|
384
|
+
const [{ getMountedSlotsHeader, getPrefetchCache, getPrefetchInterceptionContext, promotePrefetchCacheEntryForNavigation }, { parseRscRequestPath, stripRscCacheBustingSearchParam, stripRscSuffix }] = await Promise.all([loadNavigationModule(), loadAppRscCacheBustingModule()]);
|
|
323
385
|
let target;
|
|
386
|
+
const fullHref = toCanonicalBrowserNavigationHref(href, window.location.href, __basePath, __trailingSlash);
|
|
324
387
|
try {
|
|
325
|
-
target = new URL(
|
|
388
|
+
target = new URL(fullHref, window.location.href);
|
|
326
389
|
} catch {
|
|
327
390
|
return;
|
|
328
391
|
}
|
|
392
|
+
const interceptionContext = getPrefetchInterceptionContext(fullHref);
|
|
393
|
+
const mountedSlotsHeader = getMountedSlotsHeader();
|
|
329
394
|
for (const [cacheKey, entry] of getPrefetchCache()) {
|
|
330
395
|
if (entry.optimisticRouteShell === true) continue;
|
|
331
396
|
if (entry.prefetchKind === "route-tree") continue;
|
|
332
|
-
|
|
397
|
+
if ((entry.mountedSlotsHeader ?? null) !== mountedSlotsHeader) continue;
|
|
398
|
+
const separatorIndex = cacheKey.indexOf("\0");
|
|
399
|
+
const rscUrl = separatorIndex === -1 ? cacheKey : cacheKey.slice(0, separatorIndex);
|
|
400
|
+
if ((separatorIndex === -1 ? null : cacheKey.slice(separatorIndex + 1)) !== interceptionContext) continue;
|
|
333
401
|
let cached;
|
|
334
402
|
try {
|
|
335
403
|
cached = parseRscRequestPath(rscUrl);
|
|
@@ -337,7 +405,7 @@ async function promotePrefetchEntriesForNavigation(href) {
|
|
|
337
405
|
continue;
|
|
338
406
|
}
|
|
339
407
|
stripRscCacheBustingSearchParam(cached);
|
|
340
|
-
if (stripRscSuffix(cached.pathname) === target.pathname && cached.search === target.search) entry
|
|
408
|
+
if (stripRscSuffix(cached.pathname) === target.pathname && cached.search === target.search) promotePrefetchCacheEntryForNavigation(cacheKey, entry);
|
|
341
409
|
}
|
|
342
410
|
}
|
|
343
411
|
/**
|
|
@@ -349,6 +417,66 @@ const observedLinkPrefetches = /* @__PURE__ */ new WeakMap();
|
|
|
349
417
|
const visibleLinkPrefetches = /* @__PURE__ */ new Set();
|
|
350
418
|
const visibleAppPrefetchQueue = [];
|
|
351
419
|
let visibleAppPrefetchDrainScheduled = false;
|
|
420
|
+
const ownedLinkPrefetches = /* @__PURE__ */ new WeakMap();
|
|
421
|
+
function createOwnedLinkPrefetch(owner) {
|
|
422
|
+
if (owner === void 0) return void 0;
|
|
423
|
+
return {
|
|
424
|
+
owners: /* @__PURE__ */ new Set([owner]),
|
|
425
|
+
requests: []
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
function hasVisibleOwner(owned) {
|
|
429
|
+
for (const owner of owned.owners) if (owner.isVisible) return true;
|
|
430
|
+
return false;
|
|
431
|
+
}
|
|
432
|
+
function isOwnedLinkPrefetchWanted(owned) {
|
|
433
|
+
if (owned.droppedAt !== void 0) return isAppPrefetchFetchClaimed(owned.claimable, owned.droppedAt);
|
|
434
|
+
return isAppPrefetchFetchClaimed(owned.claimable) || hasVisibleOwner(owned);
|
|
435
|
+
}
|
|
436
|
+
function scheduleOwnedLinkPrefetch(owned, fetcher, priority) {
|
|
437
|
+
if (owned && !isOwnedLinkPrefetchWanted(owned)) return Promise.reject(new DOMException("Prefetch is no longer wanted", "AbortError"));
|
|
438
|
+
const request = scheduleAppPrefetchFetch(fetcher, priority, owned && (() => isOwnedLinkPrefetchWanted(owned)));
|
|
439
|
+
owned?.requests.push(request);
|
|
440
|
+
return request;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Registers the promise cached for `owned`, which reusing Links join. Owners
|
|
444
|
+
* are registered here, not in `createOwnedLinkPrefetch`, since a cache hit
|
|
445
|
+
* returns before sending anything.
|
|
446
|
+
*/
|
|
447
|
+
function trackOwnedLinkPrefetch(owned, fetchPromise) {
|
|
448
|
+
if (owned === void 0) return;
|
|
449
|
+
for (const owner of owned.owners) owner.ownedPrefetches.add(owned);
|
|
450
|
+
owned.claimable = fetchPromise;
|
|
451
|
+
ownedLinkPrefetches.set(fetchPromise, owned);
|
|
452
|
+
const settle = (failed) => {
|
|
453
|
+
ownedLinkPrefetches.delete(fetchPromise);
|
|
454
|
+
for (const owner of owned.owners) {
|
|
455
|
+
owner.ownedPrefetches.delete(owned);
|
|
456
|
+
if (failed && owned.droppedAt !== void 0 && owner.isVisible) scheduleVisibleAppPrefetch(owner);
|
|
457
|
+
}
|
|
458
|
+
owned.owners.clear();
|
|
459
|
+
};
|
|
460
|
+
fetchPromise.then(() => settle(false), () => settle(true));
|
|
461
|
+
}
|
|
462
|
+
function joinOwnedLinkPrefetch(fetchPromise, owner) {
|
|
463
|
+
const owned = fetchPromise && ownedLinkPrefetches.get(fetchPromise);
|
|
464
|
+
if (!owned || owner === void 0) return;
|
|
465
|
+
owned.owners.add(owner);
|
|
466
|
+
owner.ownedPrefetches.add(owned);
|
|
467
|
+
}
|
|
468
|
+
/** Called when a Link leaves the viewport or unmounts. */
|
|
469
|
+
function releaseOwnedLinkPrefetches(instance) {
|
|
470
|
+
instance.leaveCount += 1;
|
|
471
|
+
for (const owned of instance.ownedPrefetches) {
|
|
472
|
+
owned.owners.delete(instance);
|
|
473
|
+
if (owned.droppedAt !== void 0 || hasVisibleOwner(owned)) continue;
|
|
474
|
+
owned.droppedAt = getAppPrefetchFetchClaimSequence();
|
|
475
|
+
if (isAppPrefetchFetchClaimed(owned.claimable)) continue;
|
|
476
|
+
for (const request of owned.requests) cancelQueuedAppPrefetchFetch(request);
|
|
477
|
+
}
|
|
478
|
+
instance.ownedPrefetches.clear();
|
|
479
|
+
}
|
|
352
480
|
function drainVisibleAppPrefetchQueue() {
|
|
353
481
|
visibleAppPrefetchDrainScheduled = false;
|
|
354
482
|
while (true) {
|
|
@@ -356,7 +484,7 @@ function drainVisibleAppPrefetchQueue() {
|
|
|
356
484
|
if (!instance) return;
|
|
357
485
|
instance.queuedViewportPrefetch = false;
|
|
358
486
|
if (!instance.isVisible || instance.routerMode !== "app") continue;
|
|
359
|
-
prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref);
|
|
487
|
+
prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref, void 0, instance);
|
|
360
488
|
}
|
|
361
489
|
}
|
|
362
490
|
function scheduleVisibleAppPrefetch(instance) {
|
|
@@ -375,11 +503,17 @@ function setVisibleLinkPrefetch(instance, isVisible) {
|
|
|
375
503
|
if (instance.routerMode === "app") scheduleVisibleAppPrefetch(instance);
|
|
376
504
|
else prefetchUrl(instance.href, instance.mode, "low", instance.pagesRouteHref, instance.locale);
|
|
377
505
|
instance.viewportPrefetched = true;
|
|
378
|
-
} else
|
|
506
|
+
} else {
|
|
507
|
+
visibleLinkPrefetches.delete(instance);
|
|
508
|
+
releaseOwnedLinkPrefetches(instance);
|
|
509
|
+
}
|
|
379
510
|
}
|
|
511
|
+
let visibleLinkPingRuntime = null;
|
|
380
512
|
function registerVisibleLinkPing() {
|
|
381
513
|
if (typeof window === "undefined") return;
|
|
382
|
-
|
|
514
|
+
const functions = visibleLinkPingRuntime?.functions;
|
|
515
|
+
if (visibleLinkPingRuntime !== null && Reflect.get(window, NAVIGATION_RUNTIME_KEY) === visibleLinkPingRuntime && typeof functions === "object" && functions !== null && Reflect.get(functions, "pingVisibleLinks") === pingVisibleLinkPrefetches) return;
|
|
516
|
+
visibleLinkPingRuntime = registerNavigationRuntimeFunctions({ pingVisibleLinks: pingVisibleLinkPrefetches });
|
|
383
517
|
}
|
|
384
518
|
function pingVisibleLinkPrefetches() {
|
|
385
519
|
for (const instance of visibleLinkPrefetches) if (instance.isVisible && instance.routerMode === "app") scheduleVisibleAppPrefetch(instance);
|
|
@@ -401,11 +535,14 @@ function getDefaultLocale() {
|
|
|
401
535
|
return getI18nContext()?.defaultLocale;
|
|
402
536
|
}
|
|
403
537
|
function getCurrentLocale() {
|
|
404
|
-
if (typeof window !== "undefined")
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
538
|
+
if (typeof window !== "undefined") {
|
|
539
|
+
const domainLocales = getDomainLocales();
|
|
540
|
+
return getCurrentBrowserLocale({
|
|
541
|
+
basePath: __basePath,
|
|
542
|
+
domainLocales,
|
|
543
|
+
hostname: domainLocales?.length ? getCurrentHostname() : void 0
|
|
544
|
+
});
|
|
545
|
+
}
|
|
409
546
|
return getI18nContext()?.locale;
|
|
410
547
|
}
|
|
411
548
|
function getDomainLocales() {
|
|
@@ -459,19 +596,17 @@ function resolveConcreteRouteHref(href, as) {
|
|
|
459
596
|
if (typeof as !== "string") return null;
|
|
460
597
|
return interpolateDynamicRouteHref(href, as)?.href || null;
|
|
461
598
|
}
|
|
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, ...
|
|
599
|
+
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
600
|
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;
|
|
601
|
+
const hrefStr = resolvePagesLinkValue(href, pagesRouter);
|
|
602
|
+
const asHref = as === void 0 ? void 0 : resolvePagesLinkValue(as, pagesRouter);
|
|
468
603
|
let children = childrenProp;
|
|
469
604
|
if (legacyBehavior && (typeof childrenProp === "string" || typeof childrenProp === "number")) children = React.createElement("a", null, childrenProp);
|
|
470
605
|
const hrefForImplicitInterpolation = isAbsoluteOrProtocolRelativeUrl(hrefStr) ? hrefStr.startsWith("//") ? null : toSameOriginAppPath(hrefStr, __basePath) : hrefStr;
|
|
471
606
|
const implicitDynamicRouteHref = HAS_PAGES_ROUTER && pagesRouter !== null && asHref === void 0 && hrefForImplicitInterpolation !== null ? resolveDynamicRouteHref(hrefForImplicitInterpolation) : null;
|
|
472
607
|
const pagesAsHref = asHref ?? implicitDynamicRouteHref?.as;
|
|
473
608
|
const unresolvedHref = pagesAsHref ?? hrefStr;
|
|
474
|
-
const resolvedHref = unresolvedHref.startsWith("#") && !
|
|
609
|
+
const resolvedHref = unresolvedHref.startsWith("#") && !hasLinkAppNavigationRuntime() ? resolvePagesQueryOnlyHref(unresolvedHref) : unresolvedHref;
|
|
475
610
|
const concreteRouteHref = HAS_PAGES_ROUTER ? resolveConcreteRouteHref(hrefForImplicitInterpolation ?? hrefStr, pagesAsHref) : null;
|
|
476
611
|
const routeHrefRaw = hrefStr;
|
|
477
612
|
const prefetchRouteHrefRaw = concreteRouteHref ?? routeHrefRaw;
|
|
@@ -483,6 +618,14 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
483
618
|
const normalizedHref = normalizePathTrailingSlash(localizedHref, __trailingSlash);
|
|
484
619
|
const normalizedRouteHref = hasPagesHrefAsPair ? normalizePathTrailingSlash(applyLocaleToHref(isRouteDangerous ? "/" : prefetchRouteHrefRaw, locale), __trailingSlash) : normalizedHref;
|
|
485
620
|
const fullHref = normalizePathTrailingSlash(withBasePath(normalizedHref, __basePath), __trailingSlash);
|
|
621
|
+
if (isServer && !legacyBehavior && !isDangerous) return /* @__PURE__ */ jsx(LinkStatusContext.Provider, {
|
|
622
|
+
value: { pending: false },
|
|
623
|
+
children: /* @__PURE__ */ jsx("a", {
|
|
624
|
+
href: fullHref,
|
|
625
|
+
...anchorProps,
|
|
626
|
+
children
|
|
627
|
+
})
|
|
628
|
+
});
|
|
486
629
|
const [pending, setPending] = useState(false);
|
|
487
630
|
const mountedRef = useRef(true);
|
|
488
631
|
const pendingPagesIntentPrefetchRef = useRef(null);
|
|
@@ -514,15 +657,15 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
514
657
|
if (typeof forwardedRef === "function") forwardedRef(node);
|
|
515
658
|
else if (forwardedRef) forwardedRef.current = node;
|
|
516
659
|
}, [forwardedRef]);
|
|
517
|
-
|
|
660
|
+
useLayoutEffect(() => {
|
|
518
661
|
if (!shouldViewportPrefetch || typeof window === "undefined") return;
|
|
519
662
|
const node = internalRef.current;
|
|
520
663
|
if (!node) return;
|
|
521
|
-
const hrefToPrefetch = getLinkPrefetchHref({
|
|
664
|
+
const hrefToPrefetch = isAbsoluteOrProtocolRelativeUrl(normalizedHref) ? getLinkPrefetchHref({
|
|
522
665
|
href: normalizedHref,
|
|
523
666
|
basePath: __basePath,
|
|
524
667
|
currentOrigin: window.location.origin
|
|
525
|
-
});
|
|
668
|
+
}) : normalizedHref;
|
|
526
669
|
if (hrefToPrefetch == null) return;
|
|
527
670
|
const observer = getSharedObserver();
|
|
528
671
|
if (!observer) return;
|
|
@@ -532,6 +675,8 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
532
675
|
isVisible: false,
|
|
533
676
|
locale,
|
|
534
677
|
mode: prefetchMode,
|
|
678
|
+
ownedPrefetches: /* @__PURE__ */ new Set(),
|
|
679
|
+
leaveCount: 0,
|
|
535
680
|
pagesRouteHref: normalizedRouteHref === normalizedHref ? void 0 : getLinkPrefetchHref({
|
|
536
681
|
href: normalizedRouteHref,
|
|
537
682
|
basePath: __basePath,
|
|
@@ -548,6 +693,7 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
548
693
|
observedLinkPrefetches.delete(node);
|
|
549
694
|
visibleLinkPrefetches.delete(instance);
|
|
550
695
|
instance.isVisible = false;
|
|
696
|
+
releaseOwnedLinkPrefetches(instance);
|
|
551
697
|
};
|
|
552
698
|
}, [
|
|
553
699
|
shouldViewportPrefetch,
|
|
@@ -623,7 +769,7 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
623
769
|
navigateHref = localPath;
|
|
624
770
|
}
|
|
625
771
|
e.preventDefault();
|
|
626
|
-
const hasAppNavigationRuntime =
|
|
772
|
+
const hasAppNavigationRuntime = hasLinkAppNavigationRuntime();
|
|
627
773
|
const pagesNavigateHref = HAS_PAGES_ROUTER && resolvedHref.startsWith("?") ? resolvePagesLinkNavigationHref(resolvedHref, locale) : navigateHref;
|
|
628
774
|
const pagesAsForLink = hasPagesHrefAsPair ? pagesNavigateHref : void 0;
|
|
629
775
|
const pagesHrefForLink = pagesAsForLink === void 0 ? pagesNavigateHref : routeHrefRaw;
|
|
@@ -681,7 +827,6 @@ const Link = forwardRef(function Link({ href, as, replace = false, prefetch: pre
|
|
|
681
827
|
} else if (replace) window.location.replace(absoluteFullHref);
|
|
682
828
|
else window.location.assign(absoluteFullHref);
|
|
683
829
|
};
|
|
684
|
-
const anchorProps = restWithoutLocale;
|
|
685
830
|
const linkStatusValue = React.useMemo(() => ({ pending }), [pending]);
|
|
686
831
|
if (isDangerous) {
|
|
687
832
|
if (process.env.NODE_ENV !== "production") console.warn(`<Link> blocked dangerous href: ${resolvedHref}`);
|
package/dist/shims/metadata.d.ts
CHANGED
|
@@ -21,12 +21,13 @@ export declare function mergeViewport(viewportList: readonly Viewport[]): Resolv
|
|
|
21
21
|
export declare function ViewportHead({ viewport }: {
|
|
22
22
|
viewport: Viewport;
|
|
23
23
|
}): React.JSX.Element;
|
|
24
|
+
type MetadataTitle = string | {
|
|
25
|
+
default?: string;
|
|
26
|
+
template?: string | null;
|
|
27
|
+
absolute?: string;
|
|
28
|
+
};
|
|
24
29
|
export type Metadata = {
|
|
25
|
-
title?:
|
|
26
|
-
default?: string;
|
|
27
|
-
template?: string;
|
|
28
|
-
absolute?: string;
|
|
29
|
-
};
|
|
30
|
+
title?: MetadataTitle;
|
|
30
31
|
description?: string;
|
|
31
32
|
generator?: string;
|
|
32
33
|
applicationName?: string;
|
|
@@ -52,37 +53,35 @@ export type Metadata = {
|
|
|
52
53
|
[key: string]: unknown;
|
|
53
54
|
};
|
|
54
55
|
openGraph?: {
|
|
55
|
-
title?:
|
|
56
|
+
title?: MetadataTitle;
|
|
56
57
|
description?: string;
|
|
57
58
|
url?: string | URL;
|
|
58
59
|
siteName?: string;
|
|
59
60
|
images?: string | URL | SocialImageDescriptor | Array<string | URL | SocialImageDescriptor>;
|
|
60
|
-
videos?:
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
audio?: Array<{
|
|
66
|
-
url: string | URL;
|
|
67
|
-
}>;
|
|
61
|
+
videos?: OGVideo | OGVideo[];
|
|
62
|
+
audio?: OGAudio | OGAudio[];
|
|
63
|
+
emails?: string | string[];
|
|
64
|
+
phoneNumbers?: string | string[];
|
|
65
|
+
faxNumbers?: string | string[];
|
|
68
66
|
locale?: string;
|
|
67
|
+
alternateLocale?: string | string[];
|
|
69
68
|
type?: string;
|
|
70
69
|
publishedTime?: string;
|
|
71
70
|
modifiedTime?: string;
|
|
72
71
|
authors?: string[];
|
|
73
|
-
};
|
|
72
|
+
} | null;
|
|
74
73
|
twitter?: {
|
|
75
74
|
card?: string;
|
|
76
75
|
site?: string;
|
|
77
76
|
siteId?: string;
|
|
78
|
-
title?:
|
|
77
|
+
title?: MetadataTitle;
|
|
79
78
|
description?: string;
|
|
80
79
|
images?: string | URL | SocialImageDescriptor | Array<string | URL | SocialImageDescriptor>;
|
|
81
80
|
creator?: string;
|
|
82
81
|
creatorId?: string;
|
|
83
82
|
players?: TwitterPlayerDescriptor | TwitterPlayerDescriptor[];
|
|
84
83
|
app?: TwitterAppDescriptor;
|
|
85
|
-
};
|
|
84
|
+
} | null;
|
|
86
85
|
icons?: IconsMetadata;
|
|
87
86
|
manifest?: string | URL;
|
|
88
87
|
alternates?: {
|
|
@@ -169,6 +168,20 @@ type TwitterAppDescriptor = {
|
|
|
169
168
|
};
|
|
170
169
|
name?: string;
|
|
171
170
|
};
|
|
171
|
+
type OGVideoDescriptor = {
|
|
172
|
+
url: string | URL;
|
|
173
|
+
secureUrl?: string | URL;
|
|
174
|
+
type?: string;
|
|
175
|
+
width?: string | number;
|
|
176
|
+
height?: string | number;
|
|
177
|
+
};
|
|
178
|
+
type OGVideo = string | URL | OGVideoDescriptor;
|
|
179
|
+
type OGAudioDescriptor = {
|
|
180
|
+
url: string | URL;
|
|
181
|
+
secureUrl?: string | URL;
|
|
182
|
+
type?: string;
|
|
183
|
+
};
|
|
184
|
+
type OGAudio = string | URL | OGAudioDescriptor;
|
|
172
185
|
type SocialImageDescriptor = {
|
|
173
186
|
url: string | URL;
|
|
174
187
|
alt?: string;
|
|
@@ -194,18 +207,15 @@ type IconsMap = {
|
|
|
194
207
|
};
|
|
195
208
|
type IconsMetadata = IconInput | IconInput[] | IconsMap;
|
|
196
209
|
export type MetadataMergeEntry = {
|
|
197
|
-
|
|
210
|
+
/** Passes on the title template it received rather than its own. */
|
|
198
211
|
isPage?: boolean;
|
|
199
212
|
metadata: Metadata;
|
|
200
213
|
};
|
|
201
214
|
/**
|
|
202
215
|
* Merge metadata from multiple sources (layouts + page).
|
|
203
216
|
*
|
|
204
|
-
* The list is ordered [rootLayout, nestedLayout, ..., page]
|
|
205
|
-
*
|
|
206
|
-
* the segment that defines the template itself. `title.absolute`
|
|
207
|
-
* skips all templates. `title.default` is the fallback when no
|
|
208
|
-
* child provides a title.
|
|
217
|
+
* The list is ordered [rootLayout, nestedLayout, ..., page], with titles
|
|
218
|
+
* resolved as {@link mergeMetadataEntries} does.
|
|
209
219
|
*
|
|
210
220
|
* Shallow merge: later entries override earlier ones (per Next.js docs).
|
|
211
221
|
*/
|
|
@@ -226,16 +236,28 @@ export declare function postProcessMetadata(merged: Metadata): Metadata;
|
|
|
226
236
|
/**
|
|
227
237
|
* Merge metadata from multiple sources (layouts + page).
|
|
228
238
|
*
|
|
229
|
-
* The list is ordered [rootLayout, nestedLayout, ..., page].
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
239
|
+
* The list is ordered [rootLayout, nestedLayout, ..., page]. Like Next.js's
|
|
240
|
+
* accumulateMetadata, each title resolves with the template of the title
|
|
241
|
+
* before it: a `title.template` wraps later titles, not its own entry's
|
|
242
|
+
* `title.default`, and a plain-string title, or one without a template,
|
|
243
|
+
* clears it. An `isPage` entry passes on the template it received.
|
|
244
|
+
* `title.absolute` skips all templates.
|
|
234
245
|
*
|
|
235
246
|
* For top-level keys, later entries override earlier ones. `other` custom meta
|
|
236
247
|
* tags are the exception: Next.js merges those across segments.
|
|
248
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolve-metadata.ts (accumulateMetadata)
|
|
237
249
|
*/
|
|
238
250
|
export declare function mergeMetadataEntries(entries: readonly MetadataMergeEntry[]): Metadata;
|
|
251
|
+
/**
|
|
252
|
+
* Merge metadata into the `parent` a later segment's resolver receives. Like
|
|
253
|
+
* {@link mergeMetadataEntries}, except the title stays resolved as Next.js's
|
|
254
|
+
* `{ absolute, template }`, so `(await parent).title?.absolute` reads the
|
|
255
|
+
* title so far. `template` is the last title's own, the one the next title
|
|
256
|
+
* gets, so merging this parent with later entries resolves their titles as
|
|
257
|
+
* the full merge does.
|
|
258
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/lib/metadata/resolvers/resolve-title.ts
|
|
259
|
+
*/
|
|
260
|
+
export declare function mergeParentMetadataEntries(entries: readonly MetadataMergeEntry[]): Metadata;
|
|
239
261
|
/**
|
|
240
262
|
* Resolve metadata from a module. Handles both static `metadata` export
|
|
241
263
|
* and async `generateMetadata()` function.
|
|
@@ -258,4 +280,5 @@ export declare function renderMetadataToHtml(metadata: Metadata, pathname?: stri
|
|
|
258
280
|
streamedIconKey?: string;
|
|
259
281
|
}): string;
|
|
260
282
|
export declare function MetadataHead({ metadata, pathname, trailingSlash, streamedIconKey }: MetadataHeadProps): React.JSX.Element;
|
|
261
|
-
//#endregion
|
|
283
|
+
//#endregion
|
|
284
|
+
export {};
|