vinext 0.0.50 → 0.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build/google-fonts/fallback-metrics-data.js +14031 -0
- package/dist/build/google-fonts/fallback-metrics-data.js.map +1 -0
- package/dist/build/google-fonts/fallback-metrics.d.ts +13 -0
- package/dist/build/google-fonts/fallback-metrics.js +46 -0
- package/dist/build/google-fonts/fallback-metrics.js.map +1 -0
- package/dist/build/precompress.d.ts +13 -2
- package/dist/build/precompress.js +23 -13
- package/dist/build/precompress.js.map +1 -1
- package/dist/build/prerender.d.ts +4 -15
- package/dist/build/prerender.js +83 -53
- package/dist/build/prerender.js.map +1 -1
- package/dist/build/report.d.ts +5 -4
- package/dist/build/report.js +196 -348
- package/dist/build/report.js.map +1 -1
- package/dist/check.js +5 -0
- package/dist/check.js.map +1 -1
- package/dist/cli-args.d.ts +1 -0
- package/dist/cli-args.js +5 -0
- package/dist/cli-args.js.map +1 -1
- package/dist/cli.js +99 -3
- package/dist/cli.js.map +1 -1
- package/dist/client/navigation-runtime.d.ts +47 -0
- package/dist/client/navigation-runtime.js +156 -0
- package/dist/client/navigation-runtime.js.map +1 -0
- package/dist/client/pages-router-link-navigation.d.ts +26 -0
- package/dist/client/pages-router-link-navigation.js +14 -0
- package/dist/client/pages-router-link-navigation.js.map +1 -0
- package/dist/client/vinext-next-data.d.ts +12 -2
- package/dist/client/vinext-next-data.js +50 -1
- package/dist/client/vinext-next-data.js.map +1 -0
- package/dist/client/window-next.d.ts +3 -1
- package/dist/client/window-next.js.map +1 -1
- package/dist/cloudflare/kv-cache-handler.js +2 -1
- package/dist/cloudflare/kv-cache-handler.js.map +1 -1
- package/dist/config/config-matchers.d.ts +63 -16
- package/dist/config/config-matchers.js +143 -8
- package/dist/config/config-matchers.js.map +1 -1
- package/dist/config/dotenv.d.ts +11 -1
- package/dist/config/dotenv.js.map +1 -1
- package/dist/config/next-config.d.ts +107 -5
- package/dist/config/next-config.js +233 -7
- package/dist/config/next-config.js.map +1 -1
- package/dist/config/tsconfig-paths.d.ts +13 -0
- package/dist/config/tsconfig-paths.js +117 -0
- package/dist/config/tsconfig-paths.js.map +1 -0
- package/dist/deploy.js +104 -41
- package/dist/deploy.js.map +1 -1
- package/dist/entries/app-browser-entry.d.ts +2 -2
- package/dist/entries/app-browser-entry.js +34 -3
- package/dist/entries/app-browser-entry.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts +19 -1
- package/dist/entries/app-rsc-entry.js +89 -23
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/app-rsc-manifest.d.ts +10 -0
- package/dist/entries/app-rsc-manifest.js +57 -7
- package/dist/entries/app-rsc-manifest.js.map +1 -1
- package/dist/entries/app-ssr-entry.d.ts +3 -3
- package/dist/entries/app-ssr-entry.js +4 -4
- package/dist/entries/app-ssr-entry.js.map +1 -1
- package/dist/entries/pages-client-entry.js +21 -7
- package/dist/entries/pages-client-entry.js.map +1 -1
- package/dist/entries/pages-server-entry.js +77 -9
- package/dist/entries/pages-server-entry.js.map +1 -1
- package/dist/entries/runtime-entry-module.d.ts +2 -1
- package/dist/entries/runtime-entry-module.js +9 -3
- package/dist/entries/runtime-entry-module.js.map +1 -1
- package/dist/index.js +260 -75
- package/dist/index.js.map +1 -1
- package/dist/plugins/client-reference-dedup.d.ts +15 -2
- package/dist/plugins/client-reference-dedup.js +138 -16
- package/dist/plugins/client-reference-dedup.js.map +1 -1
- package/dist/plugins/css-data-url.d.ts +7 -0
- package/dist/plugins/css-data-url.js +81 -0
- package/dist/plugins/css-data-url.js.map +1 -0
- package/dist/plugins/fonts.d.ts +2 -2
- package/dist/plugins/fonts.js +20 -9
- package/dist/plugins/fonts.js.map +1 -1
- package/dist/plugins/middleware-server-only.d.ts +54 -0
- package/dist/plugins/middleware-server-only.js +91 -0
- package/dist/plugins/middleware-server-only.js.map +1 -0
- package/dist/plugins/optimize-imports.js +4 -4
- package/dist/plugins/optimize-imports.js.map +1 -1
- package/dist/plugins/sass.d.ts +34 -0
- package/dist/plugins/sass.js +22 -0
- package/dist/plugins/sass.js.map +1 -0
- package/dist/plugins/strip-server-exports.js +5 -8
- package/dist/plugins/strip-server-exports.js.map +1 -1
- package/dist/routing/app-route-graph.d.ts +50 -2
- package/dist/routing/app-route-graph.js +140 -16
- package/dist/routing/app-route-graph.js.map +1 -1
- package/dist/routing/app-router.d.ts +2 -2
- package/dist/routing/app-router.js +2 -2
- package/dist/routing/app-router.js.map +1 -1
- package/dist/routing/route-pattern.d.ts +56 -1
- package/dist/routing/route-pattern.js +60 -1
- package/dist/routing/route-pattern.js.map +1 -1
- package/dist/routing/utils.d.ts +2 -1
- package/dist/routing/utils.js +4 -1
- package/dist/routing/utils.js.map +1 -1
- package/dist/server/api-handler.js +139 -37
- package/dist/server/api-handler.js.map +1 -1
- package/dist/server/app-browser-action-result.d.ts +27 -2
- package/dist/server/app-browser-action-result.js +63 -2
- package/dist/server/app-browser-action-result.js.map +1 -1
- package/dist/server/app-browser-entry.js +493 -195
- package/dist/server/app-browser-entry.js.map +1 -1
- package/dist/server/app-browser-hydration.d.ts +13 -1
- package/dist/server/app-browser-hydration.js +9 -1
- package/dist/server/app-browser-hydration.js.map +1 -1
- package/dist/server/app-browser-interception-context.d.ts +24 -0
- package/dist/server/app-browser-interception-context.js +32 -0
- package/dist/server/app-browser-interception-context.js.map +1 -0
- package/dist/server/app-browser-navigation-controller.d.ts +17 -2
- package/dist/server/app-browser-navigation-controller.js +33 -10
- package/dist/server/app-browser-navigation-controller.js.map +1 -1
- package/dist/server/app-browser-popstate.d.ts +16 -0
- package/dist/server/app-browser-popstate.js +17 -0
- package/dist/server/app-browser-popstate.js.map +1 -0
- package/dist/server/app-browser-rsc-redirect.d.ts +29 -0
- package/dist/server/app-browser-rsc-redirect.js +37 -0
- package/dist/server/app-browser-rsc-redirect.js.map +1 -0
- package/dist/server/app-browser-state.d.ts +28 -7
- package/dist/server/app-browser-state.js +63 -27
- package/dist/server/app-browser-state.js.map +1 -1
- package/dist/server/app-browser-stream.d.ts +9 -17
- package/dist/server/app-browser-stream.js +18 -13
- package/dist/server/app-browser-stream.js.map +1 -1
- package/dist/server/app-browser-visible-commit.d.ts +7 -1
- package/dist/server/app-browser-visible-commit.js +39 -5
- package/dist/server/app-browser-visible-commit.js.map +1 -1
- package/dist/server/app-elements-wire.d.ts +43 -6
- package/dist/server/app-elements-wire.js +189 -7
- package/dist/server/app-elements-wire.js.map +1 -1
- package/dist/server/app-elements.d.ts +3 -2
- package/dist/server/app-elements.js +3 -2
- package/dist/server/app-elements.js.map +1 -1
- package/dist/server/app-fallback-renderer.d.ts +10 -1
- package/dist/server/app-fallback-renderer.js +41 -3
- package/dist/server/app-fallback-renderer.js.map +1 -1
- package/dist/server/app-history-state.d.ts +26 -0
- package/dist/server/app-history-state.js +53 -0
- package/dist/server/app-history-state.js.map +1 -0
- package/dist/server/app-middleware.d.ts +13 -0
- package/dist/server/app-middleware.js +3 -1
- package/dist/server/app-middleware.js.map +1 -1
- package/dist/server/app-optimistic-routing.d.ts +54 -0
- package/dist/server/app-optimistic-routing.js +200 -0
- package/dist/server/app-optimistic-routing.js.map +1 -0
- package/dist/server/app-page-boundary-render.d.ts +10 -1
- package/dist/server/app-page-boundary-render.js +13 -6
- package/dist/server/app-page-boundary-render.js.map +1 -1
- package/dist/server/app-page-boundary.js +3 -2
- package/dist/server/app-page-boundary.js.map +1 -1
- package/dist/server/app-page-cache.d.ts +26 -1
- package/dist/server/app-page-cache.js +86 -14
- package/dist/server/app-page-cache.js.map +1 -1
- package/dist/server/app-page-dispatch.d.ts +7 -0
- package/dist/server/app-page-dispatch.js +96 -12
- package/dist/server/app-page-dispatch.js.map +1 -1
- package/dist/server/app-page-element-builder.d.ts +7 -0
- package/dist/server/app-page-element-builder.js +34 -5
- package/dist/server/app-page-element-builder.js.map +1 -1
- package/dist/server/app-page-execution.d.ts +28 -1
- package/dist/server/app-page-execution.js +91 -7
- package/dist/server/app-page-execution.js.map +1 -1
- package/dist/server/app-page-head.d.ts +7 -0
- package/dist/server/app-page-head.js +23 -3
- package/dist/server/app-page-head.js.map +1 -1
- package/dist/server/app-page-probe.d.ts +23 -1
- package/dist/server/app-page-probe.js +29 -1
- package/dist/server/app-page-probe.js.map +1 -1
- package/dist/server/app-page-render-observation.d.ts +35 -0
- package/dist/server/app-page-render-observation.js +68 -0
- package/dist/server/app-page-render-observation.js.map +1 -0
- package/dist/server/app-page-render.d.ts +7 -1
- package/dist/server/app-page-render.js +81 -4
- package/dist/server/app-page-render.js.map +1 -1
- package/dist/server/app-page-request.d.ts +1 -0
- package/dist/server/app-page-request.js.map +1 -1
- package/dist/server/app-page-response.js +7 -5
- package/dist/server/app-page-response.js.map +1 -1
- package/dist/server/app-page-route-wiring.d.ts +3 -1
- package/dist/server/app-page-route-wiring.js +59 -24
- package/dist/server/app-page-route-wiring.js.map +1 -1
- package/dist/server/app-page-stream.d.ts +5 -0
- package/dist/server/app-page-stream.js +2 -0
- package/dist/server/app-page-stream.js.map +1 -1
- package/dist/server/app-prerender-static-params.d.ts +2 -1
- package/dist/server/app-prerender-static-params.js +44 -8
- package/dist/server/app-prerender-static-params.js.map +1 -1
- package/dist/server/app-route-handler-cache.d.ts +2 -2
- package/dist/server/app-route-handler-cache.js +3 -2
- package/dist/server/app-route-handler-cache.js.map +1 -1
- package/dist/server/app-route-handler-dispatch.d.ts +6 -1
- package/dist/server/app-route-handler-dispatch.js +1 -1
- package/dist/server/app-route-handler-dispatch.js.map +1 -1
- package/dist/server/app-route-handler-execution.d.ts +17 -2
- package/dist/server/app-route-handler-execution.js.map +1 -1
- package/dist/server/app-route-handler-response.js +5 -4
- package/dist/server/app-route-handler-response.js.map +1 -1
- package/dist/server/app-router-entry.js +7 -15
- package/dist/server/app-router-entry.js.map +1 -1
- package/dist/server/app-rsc-cache-busting.d.ts +19 -1
- package/dist/server/app-rsc-cache-busting.js +36 -1
- package/dist/server/app-rsc-cache-busting.js.map +1 -1
- package/dist/server/app-rsc-embedded-chunks.d.ts +9 -0
- package/dist/server/app-rsc-embedded-chunks.js +34 -0
- package/dist/server/app-rsc-embedded-chunks.js.map +1 -0
- package/dist/server/app-rsc-errors.d.ts +4 -1
- package/dist/server/app-rsc-errors.js +1 -1
- package/dist/server/app-rsc-errors.js.map +1 -1
- package/dist/server/app-rsc-handler.d.ts +21 -5
- package/dist/server/app-rsc-handler.js +38 -15
- package/dist/server/app-rsc-handler.js.map +1 -1
- package/dist/server/app-rsc-render-mode.d.ts +4 -3
- package/dist/server/app-rsc-render-mode.js +7 -1
- package/dist/server/app-rsc-render-mode.js.map +1 -1
- package/dist/server/app-rsc-request-normalization.d.ts +4 -1
- package/dist/server/app-rsc-request-normalization.js +4 -1
- package/dist/server/app-rsc-request-normalization.js.map +1 -1
- package/dist/server/app-rsc-response-finalizer.d.ts +8 -1
- package/dist/server/app-rsc-response-finalizer.js +10 -3
- package/dist/server/app-rsc-response-finalizer.js.map +1 -1
- package/dist/server/app-rsc-route-matching.d.ts +23 -0
- package/dist/server/app-rsc-route-matching.js +47 -25
- package/dist/server/app-rsc-route-matching.js.map +1 -1
- package/dist/server/app-server-action-execution.d.ts +35 -3
- package/dist/server/app-server-action-execution.js +87 -33
- package/dist/server/app-server-action-execution.js.map +1 -1
- package/dist/server/app-ssr-entry.d.ts +3 -0
- package/dist/server/app-ssr-entry.js +83 -58
- package/dist/server/app-ssr-entry.js.map +1 -1
- package/dist/server/app-ssr-error-meta.d.ts +14 -0
- package/dist/server/app-ssr-error-meta.js +50 -0
- package/dist/server/app-ssr-error-meta.js.map +1 -0
- package/dist/server/app-ssr-stream.d.ts +7 -2
- package/dist/server/app-ssr-stream.js +26 -15
- package/dist/server/app-ssr-stream.js.map +1 -1
- package/dist/server/artifact-compatibility.d.ts +13 -3
- package/dist/server/artifact-compatibility.js +12 -8
- package/dist/server/artifact-compatibility.js.map +1 -1
- package/dist/server/cache-headers.d.ts +7 -0
- package/dist/server/cache-headers.js +19 -0
- package/dist/server/cache-headers.js.map +1 -0
- package/dist/server/cache-proof.d.ts +170 -5
- package/dist/server/cache-proof.js +472 -18
- package/dist/server/cache-proof.js.map +1 -1
- package/dist/server/client-reuse-manifest.d.ts +99 -0
- package/dist/server/client-reuse-manifest.js +212 -0
- package/dist/server/client-reuse-manifest.js.map +1 -0
- package/dist/server/default-global-error-module.d.ts +20 -0
- package/dist/server/default-global-error-module.js +20 -0
- package/dist/server/default-global-error-module.js.map +1 -0
- package/dist/server/dev-lockfile.d.ts +110 -0
- package/dist/server/dev-lockfile.js +180 -0
- package/dist/server/dev-lockfile.js.map +1 -0
- package/dist/server/dev-server.d.ts +9 -1
- package/dist/server/dev-server.js +76 -19
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/edge-api-runtime.d.ts +5 -0
- package/dist/server/edge-api-runtime.js +8 -0
- package/dist/server/edge-api-runtime.js.map +1 -0
- package/dist/server/file-based-metadata.d.ts +13 -0
- package/dist/server/file-based-metadata.js +49 -2
- package/dist/server/file-based-metadata.js.map +1 -1
- package/dist/server/headers.d.ts +20 -1
- package/dist/server/headers.js +22 -2
- package/dist/server/headers.js.map +1 -1
- package/dist/server/html.js +1 -1
- package/dist/server/html.js.map +1 -1
- package/dist/server/http-error-responses.d.ts +26 -1
- package/dist/server/http-error-responses.js +32 -2
- package/dist/server/http-error-responses.js.map +1 -1
- package/dist/server/isr-cache.d.ts +8 -3
- package/dist/server/isr-cache.js +24 -6
- package/dist/server/isr-cache.js.map +1 -1
- package/dist/server/metadata-route-response.js +22 -5
- package/dist/server/metadata-route-response.js.map +1 -1
- package/dist/server/metadata-routes.js +27 -8
- package/dist/server/metadata-routes.js.map +1 -1
- package/dist/server/middleware-runtime.d.ts +15 -0
- package/dist/server/middleware-runtime.js +60 -7
- package/dist/server/middleware-runtime.js.map +1 -1
- package/dist/server/middleware.d.ts +13 -1
- package/dist/server/middleware.js +16 -2
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/navigation-planner.d.ts +26 -6
- package/dist/server/navigation-planner.js +358 -24
- package/dist/server/navigation-planner.js.map +1 -1
- package/dist/server/navigation-trace.d.ts +9 -1
- package/dist/server/navigation-trace.js +8 -0
- package/dist/server/navigation-trace.js.map +1 -1
- package/dist/server/normalize-path.d.ts +2 -1
- package/dist/server/normalize-path.js +4 -1
- package/dist/server/normalize-path.js.map +1 -1
- package/dist/server/pages-api-route.d.ts +27 -1
- package/dist/server/pages-api-route.js +25 -3
- package/dist/server/pages-api-route.js.map +1 -1
- package/dist/server/pages-data-route.d.ts +77 -0
- package/dist/server/pages-data-route.js +97 -0
- package/dist/server/pages-data-route.js.map +1 -0
- package/dist/server/pages-i18n.d.ts +51 -1
- package/dist/server/pages-i18n.js +61 -1
- package/dist/server/pages-i18n.js.map +1 -1
- package/dist/server/pages-page-data.d.ts +32 -4
- package/dist/server/pages-page-data.js +52 -19
- package/dist/server/pages-page-data.js.map +1 -1
- package/dist/server/pages-page-response.d.ts +11 -1
- package/dist/server/pages-page-response.js +6 -4
- package/dist/server/pages-page-response.js.map +1 -1
- package/dist/server/prod-server.d.ts +26 -1
- package/dist/server/prod-server.js +150 -44
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/request-pipeline.d.ts +11 -2
- package/dist/server/request-pipeline.js +28 -11
- package/dist/server/request-pipeline.js.map +1 -1
- package/dist/server/seed-cache.d.ts +12 -31
- package/dist/server/seed-cache.js +22 -35
- package/dist/server/seed-cache.js.map +1 -1
- package/dist/server/server-action-not-found.d.ts +16 -3
- package/dist/server/server-action-not-found.js +27 -4
- package/dist/server/server-action-not-found.js.map +1 -1
- package/dist/server/server-globals.d.ts +5 -0
- package/dist/server/server-globals.js +37 -0
- package/dist/server/server-globals.js.map +1 -0
- package/dist/server/skip-cache-proof.d.ts +41 -0
- package/dist/server/skip-cache-proof.js +101 -0
- package/dist/server/skip-cache-proof.js.map +1 -0
- package/dist/server/static-file-cache.d.ts +1 -1
- package/dist/server/static-file-cache.js +7 -6
- package/dist/server/static-file-cache.js.map +1 -1
- package/dist/shims/cache-runtime.d.ts +19 -2
- package/dist/shims/cache-runtime.js +67 -11
- package/dist/shims/cache-runtime.js.map +1 -1
- package/dist/shims/cache.d.ts +5 -18
- package/dist/shims/cache.js +2 -0
- package/dist/shims/cache.js.map +1 -1
- package/dist/shims/client-locale.d.ts +15 -0
- package/dist/shims/client-locale.js +13 -0
- package/dist/shims/client-locale.js.map +1 -0
- package/dist/shims/default-global-error.d.ts +32 -0
- package/dist/shims/default-global-error.js +181 -0
- package/dist/shims/default-global-error.js.map +1 -0
- package/dist/shims/document.d.ts +59 -3
- package/dist/shims/document.js +36 -5
- package/dist/shims/document.js.map +1 -1
- package/dist/shims/error-boundary.d.ts +2 -2
- package/dist/shims/error-boundary.js +6 -8
- package/dist/shims/error-boundary.js.map +1 -1
- package/dist/shims/error.d.ts +18 -1
- package/dist/shims/error.js +56 -1
- package/dist/shims/error.js.map +1 -1
- package/dist/shims/fetch-cache.d.ts +4 -1
- package/dist/shims/fetch-cache.js +40 -5
- package/dist/shims/fetch-cache.js.map +1 -1
- package/dist/shims/font-google-base.d.ts +22 -8
- package/dist/shims/font-google-base.js +41 -71
- package/dist/shims/font-google-base.js.map +1 -1
- package/dist/shims/font-local.d.ts +3 -20
- package/dist/shims/font-local.js +23 -75
- package/dist/shims/font-local.js.map +1 -1
- package/dist/shims/font-utils.d.ts +51 -0
- package/dist/shims/font-utils.js +97 -0
- package/dist/shims/font-utils.js.map +1 -0
- package/dist/shims/form.js +13 -6
- package/dist/shims/form.js.map +1 -1
- package/dist/shims/hash-scroll.d.ts +7 -0
- package/dist/shims/hash-scroll.js +30 -0
- package/dist/shims/hash-scroll.js.map +1 -0
- package/dist/shims/headers.d.ts +8 -11
- package/dist/shims/headers.js +22 -2
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/image.d.ts +1 -0
- package/dist/shims/image.js +144 -78
- package/dist/shims/image.js.map +1 -1
- package/dist/shims/internal/app-router-context.d.ts +6 -6
- package/dist/shims/internal/app-router-context.js +17 -6
- package/dist/shims/internal/app-router-context.js.map +1 -1
- package/dist/shims/link-prefetch.d.ts +9 -1
- package/dist/shims/link-prefetch.js +11 -6
- package/dist/shims/link-prefetch.js.map +1 -1
- package/dist/shims/link.d.ts +33 -5
- package/dist/shims/link.js +205 -50
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/metadata.d.ts +16 -30
- package/dist/shims/metadata.js +91 -32
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation.d.ts +164 -17
- package/dist/shims/navigation.js +355 -84
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/navigation.react-server.d.ts +3 -2
- package/dist/shims/navigation.react-server.js +5 -2
- package/dist/shims/navigation.react-server.js.map +1 -1
- package/dist/shims/og.d.ts +18 -2
- package/dist/shims/og.js +49 -1
- package/dist/shims/og.js.map +1 -0
- package/dist/shims/pages-router-runtime.d.ts +7 -0
- package/dist/shims/pages-router-runtime.js +16 -0
- package/dist/shims/pages-router-runtime.js.map +1 -0
- package/dist/shims/request-state-types.d.ts +1 -1
- package/dist/shims/root-params.d.ts +3 -1
- package/dist/shims/root-params.js +11 -3
- package/dist/shims/root-params.js.map +1 -1
- package/dist/shims/router-state.d.ts +1 -0
- package/dist/shims/router-state.js.map +1 -1
- package/dist/shims/router.d.ts +40 -7
- package/dist/shims/router.js +355 -250
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/script.js +110 -32
- package/dist/shims/script.js.map +1 -1
- package/dist/shims/server.d.ts +21 -4
- package/dist/shims/server.js +31 -10
- package/dist/shims/server.js.map +1 -1
- package/dist/shims/slot.d.ts +1 -0
- package/dist/shims/slot.js +45 -1
- package/dist/shims/slot.js.map +1 -1
- package/dist/shims/unified-request-context.d.ts +1 -1
- package/dist/shims/unified-request-context.js +2 -0
- package/dist/shims/unified-request-context.js.map +1 -1
- package/dist/shims/unrecognized-action-error.d.ts +35 -0
- package/dist/shims/unrecognized-action-error.js +41 -0
- package/dist/shims/unrecognized-action-error.js.map +1 -0
- package/dist/shims/url-safety.d.ts +23 -1
- package/dist/shims/url-safety.js +29 -2
- package/dist/shims/url-safety.js.map +1 -1
- package/dist/shims/url-utils.d.ts +21 -1
- package/dist/shims/url-utils.js +67 -3
- package/dist/shims/url-utils.js.map +1 -1
- package/dist/typegen.d.ts +10 -0
- package/dist/typegen.js +242 -0
- package/dist/typegen.js.map +1 -0
- package/dist/utils/asset-prefix.d.ts +97 -0
- package/dist/utils/asset-prefix.js +124 -0
- package/dist/utils/asset-prefix.js.map +1 -0
- package/dist/utils/base-path.d.ts +7 -1
- package/dist/utils/base-path.js +10 -1
- package/dist/utils/base-path.js.map +1 -1
- package/dist/utils/cache-control-metadata.d.ts +2 -1
- package/dist/utils/cache-control-metadata.js +1 -3
- package/dist/utils/cache-control-metadata.js.map +1 -1
- package/dist/utils/domain-locale.d.ts +2 -1
- package/dist/utils/domain-locale.js +9 -1
- package/dist/utils/domain-locale.js.map +1 -1
- package/dist/utils/lazy-chunks.d.ts +1 -1
- package/dist/utils/lazy-chunks.js +1 -1
- package/dist/utils/lazy-chunks.js.map +1 -1
- package/dist/utils/navigation-signal.d.ts +1 -2
- package/dist/utils/navigation-signal.js +1 -1
- package/dist/utils/navigation-signal.js.map +1 -1
- package/dist/utils/prerender-output-paths.d.ts +15 -0
- package/dist/utils/prerender-output-paths.js +24 -0
- package/dist/utils/prerender-output-paths.js.map +1 -0
- package/dist/utils/query.d.ts +17 -1
- package/dist/utils/query.js +36 -1
- package/dist/utils/query.js.map +1 -1
- package/dist/utils/record.d.ts +5 -0
- package/dist/utils/record.js +8 -0
- package/dist/utils/record.js.map +1 -0
- package/dist/utils/sorted-array.d.ts +9 -0
- package/dist/utils/sorted-array.js +22 -0
- package/dist/utils/sorted-array.js.map +1 -0
- package/package.json +13 -5
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
2
|
+
import "./server-globals.js";
|
|
2
3
|
import { getRequestExecutionContext, runWithExecutionContext } from "../shims/request-context.js";
|
|
3
4
|
import { MIDDLEWARE_REWRITE_HEADER } from "./headers.js";
|
|
4
5
|
import { shouldKeepMiddlewareHeader } from "./middleware-request-headers.js";
|
|
@@ -7,6 +8,7 @@ import { normalizePath } from "./normalize-path.js";
|
|
|
7
8
|
import { matchesMiddleware } from "./middleware-matcher.js";
|
|
8
9
|
import { badRequestResponse, internalServerErrorResponse } from "./http-error-responses.js";
|
|
9
10
|
import { processMiddlewareHeaders } from "./request-pipeline.js";
|
|
11
|
+
import { mergeRewriteQuery } from "../utils/query.js";
|
|
10
12
|
//#region src/server/middleware-runtime.ts
|
|
11
13
|
function isMiddlewareHandler(value) {
|
|
12
14
|
return typeof value === "function";
|
|
@@ -42,6 +44,42 @@ function stripMiddlewareHeadersFromResponse(response) {
|
|
|
42
44
|
headers
|
|
43
45
|
});
|
|
44
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Make a same-host URL relative to the request origin. Cross-origin URLs are
|
|
49
|
+
* returned unchanged. Mirrors Next.js's `getRelativeURL` behaviour:
|
|
50
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/router/utils/relativize-url.ts
|
|
51
|
+
*/
|
|
52
|
+
function relativizeLocation(location, requestUrl) {
|
|
53
|
+
let parsed;
|
|
54
|
+
try {
|
|
55
|
+
parsed = new URL(location, requestUrl);
|
|
56
|
+
} catch {
|
|
57
|
+
return location;
|
|
58
|
+
}
|
|
59
|
+
const base = new URL(requestUrl);
|
|
60
|
+
if (parsed.origin !== base.origin) return parsed.toString();
|
|
61
|
+
return parsed.pathname + parsed.search + parsed.hash;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Translate a middleware redirect Response into the soft-redirect protocol
|
|
65
|
+
* used by Next.js for `_next/data` requests: a 200 OK with the redirect target
|
|
66
|
+
* carried in the `x-nextjs-redirect` header. The client router consumes this
|
|
67
|
+
* header to perform the navigation, avoiding CORS issues that would arise from
|
|
68
|
+
* an actual cross-origin HTTP redirect on a data fetch.
|
|
69
|
+
*
|
|
70
|
+
* Reference: packages/next/src/server/web/adapter.ts
|
|
71
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/server/web/adapter.ts
|
|
72
|
+
*/
|
|
73
|
+
function dataRedirectResponse(target, originalResponse) {
|
|
74
|
+
const headers = new Headers(originalResponse.headers);
|
|
75
|
+
processMiddlewareHeaders(headers);
|
|
76
|
+
headers.delete("Location");
|
|
77
|
+
headers.set("x-nextjs-redirect", target);
|
|
78
|
+
return new Response(null, {
|
|
79
|
+
status: 200,
|
|
80
|
+
headers
|
|
81
|
+
});
|
|
82
|
+
}
|
|
45
83
|
function collectMiddlewareHeaders(response) {
|
|
46
84
|
const responseHeaders = new Headers();
|
|
47
85
|
for (const [key, value] of response.headers) if (!key.startsWith("x-middleware-") || shouldKeepMiddlewareHeader(key)) responseHeaders.append(key, value);
|
|
@@ -62,7 +100,7 @@ function resolveMiddlewarePathname(request) {
|
|
|
62
100
|
return badRequestResponse();
|
|
63
101
|
}
|
|
64
102
|
}
|
|
65
|
-
function createNextRequest(request, normalizedPathname, i18nConfig, basePath) {
|
|
103
|
+
function createNextRequest(request, normalizedPathname, i18nConfig, basePath, trailingSlash) {
|
|
66
104
|
const url = new URL(request.url);
|
|
67
105
|
let mwRequest = request.body && !request.bodyUsed ? request.clone() : request;
|
|
68
106
|
if (normalizedPathname !== url.pathname) {
|
|
@@ -70,9 +108,10 @@ function createNextRequest(request, normalizedPathname, i18nConfig, basePath) {
|
|
|
70
108
|
mwUrl.pathname = normalizedPathname;
|
|
71
109
|
mwRequest = new Request(mwUrl, mwRequest);
|
|
72
110
|
}
|
|
73
|
-
const nextConfig = basePath || i18nConfig ? {
|
|
111
|
+
const nextConfig = basePath || i18nConfig || trailingSlash ? {
|
|
74
112
|
basePath: basePath ?? "",
|
|
75
|
-
i18n: i18nConfig ?? void 0
|
|
113
|
+
i18n: i18nConfig ?? void 0,
|
|
114
|
+
trailingSlash: trailingSlash ?? void 0
|
|
76
115
|
} : void 0;
|
|
77
116
|
return mwRequest instanceof NextRequest ? mwRequest : new NextRequest(mwRequest, nextConfig ? { nextConfig } : void 0);
|
|
78
117
|
}
|
|
@@ -87,7 +126,7 @@ async function executeMiddleware(options) {
|
|
|
87
126
|
response: normalizedPathname
|
|
88
127
|
};
|
|
89
128
|
if (!matchesMiddleware(normalizedPathname, middlewareMatcher(options.module), options.request, options.i18nConfig)) return { continue: true };
|
|
90
|
-
const nextRequest = createNextRequest(options.request, normalizedPathname, options.i18nConfig, options.basePath);
|
|
129
|
+
const nextRequest = createNextRequest(options.request, normalizedPathname, options.i18nConfig, options.basePath, options.trailingSlash);
|
|
91
130
|
const fetchEvent = new NextFetchEvent({ page: normalizedPathname });
|
|
92
131
|
let response;
|
|
93
132
|
try {
|
|
@@ -115,13 +154,26 @@ async function executeMiddleware(options) {
|
|
|
115
154
|
if (response.status >= 300 && response.status < 400) {
|
|
116
155
|
const location = response.headers.get("Location") ?? response.headers.get("location");
|
|
117
156
|
if (location) {
|
|
157
|
+
const relativeLocation = relativizeLocation(location, options.request.url);
|
|
158
|
+
if (options.isDataRequest) return {
|
|
159
|
+
continue: false,
|
|
160
|
+
response: dataRedirectResponse(relativeLocation, response),
|
|
161
|
+
waitUntilPromises
|
|
162
|
+
};
|
|
118
163
|
const responseHeaders = new Headers();
|
|
119
164
|
for (const [key, value] of response.headers) if (!key.startsWith("x-middleware-") && key.toLowerCase() !== "location") responseHeaders.append(key, value);
|
|
165
|
+
const relativizedResponseHeaders = new Headers(response.headers);
|
|
166
|
+
relativizedResponseHeaders.set("Location", relativeLocation);
|
|
167
|
+
const relativizedResponse = new Response(response.body, {
|
|
168
|
+
status: response.status,
|
|
169
|
+
statusText: response.statusText,
|
|
170
|
+
headers: relativizedResponseHeaders
|
|
171
|
+
});
|
|
120
172
|
return {
|
|
121
173
|
continue: false,
|
|
122
|
-
redirectUrl:
|
|
174
|
+
redirectUrl: relativeLocation,
|
|
123
175
|
redirectStatus: response.status,
|
|
124
|
-
response: stripMiddlewareHeadersFromResponse(
|
|
176
|
+
response: stripMiddlewareHeadersFromResponse(relativizedResponse),
|
|
125
177
|
responseHeaders,
|
|
126
178
|
waitUntilPromises
|
|
127
179
|
};
|
|
@@ -133,7 +185,8 @@ async function executeMiddleware(options) {
|
|
|
133
185
|
try {
|
|
134
186
|
const rewriteParsed = new URL(rewriteUrl, options.request.url);
|
|
135
187
|
const requestOrigin = new URL(options.request.url).origin;
|
|
136
|
-
|
|
188
|
+
if (rewriteParsed.origin === requestOrigin) rewritePath = mergeRewriteQuery(options.request.url, rewriteParsed.pathname + rewriteParsed.search);
|
|
189
|
+
else rewritePath = rewriteParsed.href;
|
|
137
190
|
} catch {
|
|
138
191
|
rewritePath = rewriteUrl;
|
|
139
192
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware-runtime.js","names":[],"sources":["../../src/server/middleware-runtime.ts"],"sourcesContent":["import type { NextI18nConfig } from \"../config/next-config.js\";\nimport { normalizePathnameForRouteMatchStrict } from \"../routing/utils.js\";\nimport {\n getRequestExecutionContext,\n runWithExecutionContext,\n type ExecutionContextLike,\n} from \"vinext/shims/request-context\";\nimport { NextFetchEvent, NextRequest } from \"vinext/shims/server\";\nimport { normalizePath } from \"./normalize-path.js\";\nimport {\n MIDDLEWARE_HEADER_PREFIX,\n MIDDLEWARE_NEXT_HEADER,\n MIDDLEWARE_REWRITE_HEADER,\n} from \"./headers.js\";\nimport { MatcherConfig, matchesMiddleware } from \"./middleware-matcher.js\";\nimport { shouldKeepMiddlewareHeader } from \"./middleware-request-headers.js\";\nimport { processMiddlewareHeaders } from \"./request-pipeline.js\";\nimport { badRequestResponse, internalServerErrorResponse } from \"./http-error-responses.js\";\n\nexport type MiddlewareModule = Record<string, unknown>;\n\nexport type MiddlewareResult = {\n continue: boolean;\n redirectUrl?: string;\n redirectStatus?: number;\n rewriteUrl?: string;\n rewriteStatus?: number;\n status?: number;\n responseHeaders?: Headers;\n response?: Response;\n waitUntilPromises?: Promise<unknown>[];\n};\n\ntype MiddlewareHandler = (\n request: NextRequest,\n event: NextFetchEvent,\n) => Response | undefined | void | Promise<Response | undefined | void>;\n\ntype MiddlewareConfigExport = {\n matcher?: MatcherConfig;\n};\n\ntype ExecuteMiddlewareOptions = {\n basePath?: string;\n filePath?: string;\n i18nConfig?: NextI18nConfig | null;\n includeErrorDetails?: boolean;\n isProxy: boolean;\n module: MiddlewareModule;\n normalizedPathname?: string;\n request: Request;\n};\n\ntype RunGeneratedMiddlewareOptions = ExecuteMiddlewareOptions & {\n ctx?: ExecutionContextLike;\n};\n\nfunction isMiddlewareHandler(value: unknown): value is MiddlewareHandler {\n return typeof value === \"function\";\n}\n\nfunction isMiddlewareConfigExport(value: unknown): value is MiddlewareConfigExport {\n return !!value && typeof value === \"object\";\n}\n\nfunction middlewareFileLabel(isProxy: boolean): string {\n return isProxy ? \"Proxy\" : \"Middleware\";\n}\n\nfunction middlewareExpectedExport(isProxy: boolean): string {\n return isProxy ? \"proxy\" : \"middleware\";\n}\n\nexport function resolveMiddlewareModuleHandler(\n mod: MiddlewareModule,\n options: { filePath?: string; isProxy: boolean },\n): MiddlewareHandler {\n const handler = options.isProxy ? (mod.proxy ?? mod.default) : (mod.middleware ?? mod.default);\n if (isMiddlewareHandler(handler)) return handler;\n\n const fileLabel = middlewareFileLabel(options.isProxy);\n const expectedExport = middlewareExpectedExport(options.isProxy);\n const fileSuffix = options.filePath ? ` \"${options.filePath}\"` : \"\";\n throw new Error(\n `The ${fileLabel} file${fileSuffix} must export a function named \\`${expectedExport}\\` or a \\`default\\` function.`,\n );\n}\n\nfunction middlewareMatcher(mod: MiddlewareModule): MatcherConfig | undefined {\n const config = mod.config;\n if (!isMiddlewareConfigExport(config)) return undefined;\n return config.matcher;\n}\n\nfunction stripMiddlewareHeadersFromResponse(response: Response): Response {\n const headers = new Headers(response.headers);\n processMiddlewareHeaders(headers);\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n}\n\nfunction collectMiddlewareHeaders(response: Response): Headers {\n const responseHeaders = new Headers();\n for (const [key, value] of response.headers) {\n if (!key.startsWith(MIDDLEWARE_HEADER_PREFIX) || shouldKeepMiddlewareHeader(key)) {\n responseHeaders.append(key, value);\n }\n }\n return responseHeaders;\n}\n\nfunction drainFetchEvent(fetchEvent: NextFetchEvent): Promise<unknown>[] {\n const waitUntilPromises = fetchEvent.waitUntilPromises;\n const drained = fetchEvent.drainWaitUntil();\n const executionContext = getRequestExecutionContext();\n if (executionContext) {\n executionContext.waitUntil(drained);\n } else {\n void drained;\n }\n return waitUntilPromises;\n}\n\nfunction resolveMiddlewarePathname(request: Request): string | Response {\n const url = new URL(request.url);\n try {\n return normalizePath(normalizePathnameForRouteMatchStrict(url.pathname));\n } catch {\n return badRequestResponse();\n }\n}\n\nfunction createNextRequest(\n request: Request,\n normalizedPathname: string,\n i18nConfig?: NextI18nConfig | null,\n basePath?: string,\n): NextRequest {\n const url = new URL(request.url);\n // Middleware gets an isolated body branch; downstream routing keeps owning\n // the original request body.\n let mwRequest = request.body && !request.bodyUsed ? request.clone() : request;\n if (normalizedPathname !== url.pathname) {\n const mwUrl = new URL(url);\n mwUrl.pathname = normalizedPathname;\n mwRequest = new Request(mwUrl, mwRequest);\n }\n\n const nextConfig =\n basePath || i18nConfig\n ? { basePath: basePath ?? \"\", i18n: i18nConfig ?? undefined }\n : undefined;\n\n return mwRequest instanceof NextRequest\n ? mwRequest\n : new NextRequest(mwRequest, nextConfig ? { nextConfig } : undefined);\n}\n\nexport async function executeMiddleware(\n options: ExecuteMiddlewareOptions,\n): Promise<MiddlewareResult> {\n const middlewareFn = resolveMiddlewareModuleHandler(options.module, {\n filePath: options.filePath,\n isProxy: options.isProxy,\n });\n const normalizedPathname =\n options.normalizedPathname ?? resolveMiddlewarePathname(options.request);\n if (normalizedPathname instanceof Response) {\n return { continue: false, response: normalizedPathname };\n }\n\n if (\n !matchesMiddleware(\n normalizedPathname,\n middlewareMatcher(options.module),\n options.request,\n options.i18nConfig,\n )\n ) {\n return { continue: true };\n }\n\n const nextRequest = createNextRequest(\n options.request,\n normalizedPathname,\n options.i18nConfig,\n options.basePath,\n );\n const fetchEvent = new NextFetchEvent({ page: normalizedPathname });\n\n let response: Response | undefined | void;\n try {\n response = await middlewareFn(nextRequest, fetchEvent);\n } catch (e) {\n console.error(\"[vinext] Middleware error:\", e);\n const waitUntilPromises = drainFetchEvent(fetchEvent);\n const message = options.includeErrorDetails\n ? \"Middleware Error: \" + (e instanceof Error ? e.message : String(e))\n : \"Internal Server Error\";\n return {\n continue: false,\n response: internalServerErrorResponse(message),\n waitUntilPromises,\n };\n }\n\n const waitUntilPromises = drainFetchEvent(fetchEvent);\n\n if (!response) {\n return { continue: true, waitUntilPromises };\n }\n\n if (response.headers.get(MIDDLEWARE_NEXT_HEADER) === \"1\") {\n return {\n continue: true,\n responseHeaders: collectMiddlewareHeaders(response),\n status: response.status !== 200 ? response.status : undefined,\n waitUntilPromises,\n };\n }\n\n if (response.status >= 300 && response.status < 400) {\n const location = response.headers.get(\"Location\") ?? response.headers.get(\"location\");\n if (location) {\n const responseHeaders = new Headers();\n for (const [key, value] of response.headers) {\n if (!key.startsWith(MIDDLEWARE_HEADER_PREFIX) && key.toLowerCase() !== \"location\") {\n responseHeaders.append(key, value);\n }\n }\n return {\n continue: false,\n redirectUrl: location,\n redirectStatus: response.status,\n response: stripMiddlewareHeadersFromResponse(response),\n responseHeaders,\n waitUntilPromises,\n };\n }\n }\n\n const rewriteUrl = response.headers.get(MIDDLEWARE_REWRITE_HEADER);\n if (rewriteUrl) {\n let rewritePath: string;\n try {\n const rewriteParsed = new URL(rewriteUrl, options.request.url);\n const requestOrigin = new URL(options.request.url).origin;\n rewritePath =\n rewriteParsed.origin === requestOrigin\n ? rewriteParsed.pathname + rewriteParsed.search\n : rewriteParsed.href;\n } catch {\n rewritePath = rewriteUrl;\n }\n return {\n continue: true,\n rewriteUrl: rewritePath,\n rewriteStatus: response.status !== 200 ? response.status : undefined,\n responseHeaders: collectMiddlewareHeaders(response),\n status: response.status !== 200 ? response.status : undefined,\n waitUntilPromises,\n };\n }\n\n return {\n continue: false,\n response: stripMiddlewareHeadersFromResponse(response),\n waitUntilPromises,\n };\n}\n\nexport async function runGeneratedMiddleware(\n options: RunGeneratedMiddlewareOptions,\n): Promise<MiddlewareResult> {\n const run = () => executeMiddleware(options);\n return options.ctx ? runWithExecutionContext(options.ctx, run) : run();\n}\n"],"mappings":";;;;;;;;;;AAyDA,SAAS,oBAAoB,OAA4C;CACvE,OAAO,OAAO,UAAU;;AAG1B,SAAS,yBAAyB,OAAiD;CACjF,OAAO,CAAC,CAAC,SAAS,OAAO,UAAU;;AAGrC,SAAS,oBAAoB,SAA0B;CACrD,OAAO,UAAU,UAAU;;AAG7B,SAAS,yBAAyB,SAA0B;CAC1D,OAAO,UAAU,UAAU;;AAG7B,SAAgB,+BACd,KACA,SACmB;CACnB,MAAM,UAAU,QAAQ,UAAW,IAAI,SAAS,IAAI,UAAY,IAAI,cAAc,IAAI;CACtF,IAAI,oBAAoB,QAAQ,EAAE,OAAO;CAEzC,MAAM,YAAY,oBAAoB,QAAQ,QAAQ;CACtD,MAAM,iBAAiB,yBAAyB,QAAQ,QAAQ;CAChE,MAAM,aAAa,QAAQ,WAAW,KAAK,QAAQ,SAAS,KAAK;CACjE,MAAM,IAAI,MACR,OAAO,UAAU,OAAO,WAAW,kCAAkC,eAAe,+BACrF;;AAGH,SAAS,kBAAkB,KAAkD;CAC3E,MAAM,SAAS,IAAI;CACnB,IAAI,CAAC,yBAAyB,OAAO,EAAE,OAAO,KAAA;CAC9C,OAAO,OAAO;;AAGhB,SAAS,mCAAmC,UAA8B;CACxE,MAAM,UAAU,IAAI,QAAQ,SAAS,QAAQ;CAC7C,yBAAyB,QAAQ;CACjC,OAAO,IAAI,SAAS,SAAS,MAAM;EACjC,QAAQ,SAAS;EACjB,YAAY,SAAS;EACrB;EACD,CAAC;;AAGJ,SAAS,yBAAyB,UAA6B;CAC7D,MAAM,kBAAkB,IAAI,SAAS;CACrC,KAAK,MAAM,CAAC,KAAK,UAAU,SAAS,SAClC,IAAI,CAAC,IAAI,WAAA,gBAAoC,IAAI,2BAA2B,IAAI,EAC9E,gBAAgB,OAAO,KAAK,MAAM;CAGtC,OAAO;;AAGT,SAAS,gBAAgB,YAAgD;CACvE,MAAM,oBAAoB,WAAW;CACrC,MAAM,UAAU,WAAW,gBAAgB;CAC3C,MAAM,mBAAmB,4BAA4B;CACrD,IAAI,kBACF,iBAAiB,UAAU,QAAQ;CAIrC,OAAO;;AAGT,SAAS,0BAA0B,SAAqC;CACtE,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;CAChC,IAAI;EACF,OAAO,cAAc,qCAAqC,IAAI,SAAS,CAAC;SAClE;EACN,OAAO,oBAAoB;;;AAI/B,SAAS,kBACP,SACA,oBACA,YACA,UACa;CACb,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;CAGhC,IAAI,YAAY,QAAQ,QAAQ,CAAC,QAAQ,WAAW,QAAQ,OAAO,GAAG;CACtE,IAAI,uBAAuB,IAAI,UAAU;EACvC,MAAM,QAAQ,IAAI,IAAI,IAAI;EAC1B,MAAM,WAAW;EACjB,YAAY,IAAI,QAAQ,OAAO,UAAU;;CAG3C,MAAM,aACJ,YAAY,aACR;EAAE,UAAU,YAAY;EAAI,MAAM,cAAc,KAAA;EAAW,GAC3D,KAAA;CAEN,OAAO,qBAAqB,cACxB,YACA,IAAI,YAAY,WAAW,aAAa,EAAE,YAAY,GAAG,KAAA,EAAU;;AAGzE,eAAsB,kBACpB,SAC2B;CAC3B,MAAM,eAAe,+BAA+B,QAAQ,QAAQ;EAClE,UAAU,QAAQ;EAClB,SAAS,QAAQ;EAClB,CAAC;CACF,MAAM,qBACJ,QAAQ,sBAAsB,0BAA0B,QAAQ,QAAQ;CAC1E,IAAI,8BAA8B,UAChC,OAAO;EAAE,UAAU;EAAO,UAAU;EAAoB;CAG1D,IACE,CAAC,kBACC,oBACA,kBAAkB,QAAQ,OAAO,EACjC,QAAQ,SACR,QAAQ,WACT,EAED,OAAO,EAAE,UAAU,MAAM;CAG3B,MAAM,cAAc,kBAClB,QAAQ,SACR,oBACA,QAAQ,YACR,QAAQ,SACT;CACD,MAAM,aAAa,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;CAEnE,IAAI;CACJ,IAAI;EACF,WAAW,MAAM,aAAa,aAAa,WAAW;UAC/C,GAAG;EACV,QAAQ,MAAM,8BAA8B,EAAE;EAC9C,MAAM,oBAAoB,gBAAgB,WAAW;EAIrD,OAAO;GACL,UAAU;GACV,UAAU,4BALI,QAAQ,sBACpB,wBAAwB,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE,IAClE,wBAG4C;GAC9C;GACD;;CAGH,MAAM,oBAAoB,gBAAgB,WAAW;CAErD,IAAI,CAAC,UACH,OAAO;EAAE,UAAU;EAAM;EAAmB;CAG9C,IAAI,SAAS,QAAQ,IAAA,oBAA2B,KAAK,KACnD,OAAO;EACL,UAAU;EACV,iBAAiB,yBAAyB,SAAS;EACnD,QAAQ,SAAS,WAAW,MAAM,SAAS,SAAS,KAAA;EACpD;EACD;CAGH,IAAI,SAAS,UAAU,OAAO,SAAS,SAAS,KAAK;EACnD,MAAM,WAAW,SAAS,QAAQ,IAAI,WAAW,IAAI,SAAS,QAAQ,IAAI,WAAW;EACrF,IAAI,UAAU;GACZ,MAAM,kBAAkB,IAAI,SAAS;GACrC,KAAK,MAAM,CAAC,KAAK,UAAU,SAAS,SAClC,IAAI,CAAC,IAAI,WAAA,gBAAoC,IAAI,IAAI,aAAa,KAAK,YACrE,gBAAgB,OAAO,KAAK,MAAM;GAGtC,OAAO;IACL,UAAU;IACV,aAAa;IACb,gBAAgB,SAAS;IACzB,UAAU,mCAAmC,SAAS;IACtD;IACA;IACD;;;CAIL,MAAM,aAAa,SAAS,QAAQ,IAAI,0BAA0B;CAClE,IAAI,YAAY;EACd,IAAI;EACJ,IAAI;GACF,MAAM,gBAAgB,IAAI,IAAI,YAAY,QAAQ,QAAQ,IAAI;GAC9D,MAAM,gBAAgB,IAAI,IAAI,QAAQ,QAAQ,IAAI,CAAC;GACnD,cACE,cAAc,WAAW,gBACrB,cAAc,WAAW,cAAc,SACvC,cAAc;UACd;GACN,cAAc;;EAEhB,OAAO;GACL,UAAU;GACV,YAAY;GACZ,eAAe,SAAS,WAAW,MAAM,SAAS,SAAS,KAAA;GAC3D,iBAAiB,yBAAyB,SAAS;GACnD,QAAQ,SAAS,WAAW,MAAM,SAAS,SAAS,KAAA;GACpD;GACD;;CAGH,OAAO;EACL,UAAU;EACV,UAAU,mCAAmC,SAAS;EACtD;EACD;;AAGH,eAAsB,uBACpB,SAC2B;CAC3B,MAAM,YAAY,kBAAkB,QAAQ;CAC5C,OAAO,QAAQ,MAAM,wBAAwB,QAAQ,KAAK,IAAI,GAAG,KAAK"}
|
|
1
|
+
{"version":3,"file":"middleware-runtime.js","names":[],"sources":["../../src/server/middleware-runtime.ts"],"sourcesContent":["import \"./server-globals.js\";\nimport type { NextI18nConfig } from \"../config/next-config.js\";\nimport { normalizePathnameForRouteMatchStrict } from \"../routing/utils.js\";\nimport {\n getRequestExecutionContext,\n runWithExecutionContext,\n type ExecutionContextLike,\n} from \"vinext/shims/request-context\";\nimport { NextFetchEvent, NextRequest } from \"vinext/shims/server\";\nimport { normalizePath } from \"./normalize-path.js\";\nimport {\n MIDDLEWARE_HEADER_PREFIX,\n MIDDLEWARE_NEXT_HEADER,\n MIDDLEWARE_REWRITE_HEADER,\n} from \"./headers.js\";\nimport { MatcherConfig, matchesMiddleware } from \"./middleware-matcher.js\";\nimport { shouldKeepMiddlewareHeader } from \"./middleware-request-headers.js\";\nimport { processMiddlewareHeaders } from \"./request-pipeline.js\";\nimport { badRequestResponse, internalServerErrorResponse } from \"./http-error-responses.js\";\nimport { mergeRewriteQuery } from \"../utils/query.js\";\n\nexport type MiddlewareModule = Record<string, unknown>;\n\nexport type MiddlewareResult = {\n continue: boolean;\n redirectUrl?: string;\n redirectStatus?: number;\n rewriteUrl?: string;\n rewriteStatus?: number;\n status?: number;\n responseHeaders?: Headers;\n response?: Response;\n waitUntilPromises?: Promise<unknown>[];\n};\n\ntype MiddlewareHandler = (\n request: NextRequest,\n event: NextFetchEvent,\n) => Response | undefined | void | Promise<Response | undefined | void>;\n\ntype MiddlewareConfigExport = {\n matcher?: MatcherConfig;\n};\n\ntype ExecuteMiddlewareOptions = {\n basePath?: string;\n filePath?: string;\n i18nConfig?: NextI18nConfig | null;\n includeErrorDetails?: boolean;\n /**\n * Whether the incoming request was a Next.js `_next/data` fetch (carried\n * `x-nextjs-data: 1`). The header itself is stripped by `filterInternalHeaders`\n * before the middleware request is constructed, so callers must capture this\n * flag from the raw incoming headers and forward it explicitly.\n */\n isDataRequest?: boolean;\n isProxy: boolean;\n module: MiddlewareModule;\n normalizedPathname?: string;\n request: Request;\n /**\n * The user's `trailingSlash` config. Plumbed into the NextRequest's NextURL\n * so `request.nextUrl.toString()` formats with the configured slash policy,\n * which feeds into `NextResponse.redirect(request.nextUrl)` Location headers.\n * Also used to normalize redirect Location pathnames returned via plain\n * `new URL('/x', req.url)`.\n */\n trailingSlash?: boolean;\n};\n\ntype RunGeneratedMiddlewareOptions = ExecuteMiddlewareOptions & {\n ctx?: ExecutionContextLike;\n};\n\nfunction isMiddlewareHandler(value: unknown): value is MiddlewareHandler {\n return typeof value === \"function\";\n}\n\nfunction isMiddlewareConfigExport(value: unknown): value is MiddlewareConfigExport {\n return !!value && typeof value === \"object\";\n}\n\nfunction middlewareFileLabel(isProxy: boolean): string {\n return isProxy ? \"Proxy\" : \"Middleware\";\n}\n\nfunction middlewareExpectedExport(isProxy: boolean): string {\n return isProxy ? \"proxy\" : \"middleware\";\n}\n\nexport function resolveMiddlewareModuleHandler(\n mod: MiddlewareModule,\n options: { filePath?: string; isProxy: boolean },\n): MiddlewareHandler {\n const handler = options.isProxy ? (mod.proxy ?? mod.default) : (mod.middleware ?? mod.default);\n if (isMiddlewareHandler(handler)) return handler;\n\n const fileLabel = middlewareFileLabel(options.isProxy);\n const expectedExport = middlewareExpectedExport(options.isProxy);\n const fileSuffix = options.filePath ? ` \"${options.filePath}\"` : \"\";\n throw new Error(\n `The ${fileLabel} file${fileSuffix} must export a function named \\`${expectedExport}\\` or a \\`default\\` function.`,\n );\n}\n\nfunction middlewareMatcher(mod: MiddlewareModule): MatcherConfig | undefined {\n const config = mod.config;\n if (!isMiddlewareConfigExport(config)) return undefined;\n return config.matcher;\n}\n\nfunction stripMiddlewareHeadersFromResponse(response: Response): Response {\n const headers = new Headers(response.headers);\n processMiddlewareHeaders(headers);\n return new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers,\n });\n}\n\n/**\n * Make a same-host URL relative to the request origin. Cross-origin URLs are\n * returned unchanged. Mirrors Next.js's `getRelativeURL` behaviour:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/shared/lib/router/utils/relativize-url.ts\n */\nfunction relativizeLocation(location: string, requestUrl: string): string {\n let parsed: URL;\n try {\n parsed = new URL(location, requestUrl);\n } catch {\n return location;\n }\n const base = new URL(requestUrl);\n if (parsed.origin !== base.origin) return parsed.toString();\n return parsed.pathname + parsed.search + parsed.hash;\n}\n\n/**\n * Translate a middleware redirect Response into the soft-redirect protocol\n * used by Next.js for `_next/data` requests: a 200 OK with the redirect target\n * carried in the `x-nextjs-redirect` header. The client router consumes this\n * header to perform the navigation, avoiding CORS issues that would arise from\n * an actual cross-origin HTTP redirect on a data fetch.\n *\n * Reference: packages/next/src/server/web/adapter.ts\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/server/web/adapter.ts\n */\nfunction dataRedirectResponse(target: string, originalResponse: Response): Response {\n const headers = new Headers(originalResponse.headers);\n processMiddlewareHeaders(headers);\n // Headers.delete is case-insensitive per the Fetch spec, so a single call\n // covers `Location` / `location` / `LOCATION`.\n headers.delete(\"Location\");\n headers.set(\"x-nextjs-redirect\", target);\n return new Response(null, { status: 200, headers });\n}\n\nfunction collectMiddlewareHeaders(response: Response): Headers {\n const responseHeaders = new Headers();\n for (const [key, value] of response.headers) {\n if (!key.startsWith(MIDDLEWARE_HEADER_PREFIX) || shouldKeepMiddlewareHeader(key)) {\n responseHeaders.append(key, value);\n }\n }\n return responseHeaders;\n}\n\nfunction drainFetchEvent(fetchEvent: NextFetchEvent): Promise<unknown>[] {\n const waitUntilPromises = fetchEvent.waitUntilPromises;\n const drained = fetchEvent.drainWaitUntil();\n const executionContext = getRequestExecutionContext();\n if (executionContext) {\n executionContext.waitUntil(drained);\n } else {\n void drained;\n }\n return waitUntilPromises;\n}\n\nfunction resolveMiddlewarePathname(request: Request): string | Response {\n const url = new URL(request.url);\n try {\n return normalizePath(normalizePathnameForRouteMatchStrict(url.pathname));\n } catch {\n return badRequestResponse();\n }\n}\n\nfunction createNextRequest(\n request: Request,\n normalizedPathname: string,\n i18nConfig?: NextI18nConfig | null,\n basePath?: string,\n trailingSlash?: boolean,\n): NextRequest {\n const url = new URL(request.url);\n // Middleware gets an isolated body branch; downstream routing keeps owning\n // the original request body.\n let mwRequest = request.body && !request.bodyUsed ? request.clone() : request;\n if (normalizedPathname !== url.pathname) {\n const mwUrl = new URL(url);\n mwUrl.pathname = normalizedPathname;\n mwRequest = new Request(mwUrl, mwRequest);\n }\n\n const hasNextConfig = basePath || i18nConfig || trailingSlash;\n const nextConfig = hasNextConfig\n ? {\n basePath: basePath ?? \"\",\n i18n: i18nConfig ?? undefined,\n trailingSlash: trailingSlash ?? undefined,\n }\n : undefined;\n\n return mwRequest instanceof NextRequest\n ? mwRequest\n : new NextRequest(mwRequest, nextConfig ? { nextConfig } : undefined);\n}\n\nexport async function executeMiddleware(\n options: ExecuteMiddlewareOptions,\n): Promise<MiddlewareResult> {\n const middlewareFn = resolveMiddlewareModuleHandler(options.module, {\n filePath: options.filePath,\n isProxy: options.isProxy,\n });\n const normalizedPathname =\n options.normalizedPathname ?? resolveMiddlewarePathname(options.request);\n if (normalizedPathname instanceof Response) {\n return { continue: false, response: normalizedPathname };\n }\n\n if (\n !matchesMiddleware(\n normalizedPathname,\n middlewareMatcher(options.module),\n options.request,\n options.i18nConfig,\n )\n ) {\n return { continue: true };\n }\n\n const nextRequest = createNextRequest(\n options.request,\n normalizedPathname,\n options.i18nConfig,\n options.basePath,\n options.trailingSlash,\n );\n const fetchEvent = new NextFetchEvent({ page: normalizedPathname });\n\n let response: Response | undefined | void;\n try {\n response = await middlewareFn(nextRequest, fetchEvent);\n } catch (e) {\n console.error(\"[vinext] Middleware error:\", e);\n const waitUntilPromises = drainFetchEvent(fetchEvent);\n const message = options.includeErrorDetails\n ? \"Middleware Error: \" + (e instanceof Error ? e.message : String(e))\n : \"Internal Server Error\";\n return {\n continue: false,\n response: internalServerErrorResponse(message),\n waitUntilPromises,\n };\n }\n\n const waitUntilPromises = drainFetchEvent(fetchEvent);\n\n if (!response) {\n return { continue: true, waitUntilPromises };\n }\n\n if (response.headers.get(MIDDLEWARE_NEXT_HEADER) === \"1\") {\n return {\n continue: true,\n responseHeaders: collectMiddlewareHeaders(response),\n status: response.status !== 200 ? response.status : undefined,\n waitUntilPromises,\n };\n }\n\n if (response.status >= 300 && response.status < 400) {\n const location = response.headers.get(\"Location\") ?? response.headers.get(\"location\");\n if (location) {\n // Make same-host Location relative for parity with Next.js, which only\n // emits absolute URLs for cross-origin redirects:\n // https://github.com/vercel/next.js/blob/canary/packages/next/src/server/web/adapter.ts\n const relativeLocation = relativizeLocation(location, options.request.url);\n\n // For `_next/data` requests, translate the HTTP redirect into the\n // `x-nextjs-redirect` soft-redirect protocol so the client router can\n // perform the navigation without tripping CORS on cross-origin targets.\n // `x-nextjs-data` lives in INTERNAL_HEADERS and is stripped before the\n // middleware request is constructed, so the flag is threaded in from the\n // caller (which sees the raw incoming headers).\n if (options.isDataRequest) {\n return {\n continue: false,\n response: dataRedirectResponse(relativeLocation, response),\n waitUntilPromises,\n };\n }\n\n const responseHeaders = new Headers();\n for (const [key, value] of response.headers) {\n if (!key.startsWith(MIDDLEWARE_HEADER_PREFIX) && key.toLowerCase() !== \"location\") {\n responseHeaders.append(key, value);\n }\n }\n // Rebuild the response with the relativized Location so consumers that\n // forward `result.response` (rather than `result.redirectUrl`) also send\n // the correct header.\n const relativizedResponseHeaders = new Headers(response.headers);\n relativizedResponseHeaders.set(\"Location\", relativeLocation);\n const relativizedResponse = new Response(response.body, {\n status: response.status,\n statusText: response.statusText,\n headers: relativizedResponseHeaders,\n });\n return {\n continue: false,\n redirectUrl: relativeLocation,\n redirectStatus: response.status,\n response: stripMiddlewareHeadersFromResponse(relativizedResponse),\n responseHeaders,\n waitUntilPromises,\n };\n }\n }\n\n const rewriteUrl = response.headers.get(MIDDLEWARE_REWRITE_HEADER);\n if (rewriteUrl) {\n let rewritePath: string;\n try {\n const rewriteParsed = new URL(rewriteUrl, options.request.url);\n const requestOrigin = new URL(options.request.url).origin;\n if (rewriteParsed.origin === requestOrigin) {\n // Preserve the original request's query params on internal rewrites.\n // Next.js merges via `Object.assign(parsedUrl.query, rewrittenParsedUrl.query)`\n // — original query first, rewrite-target overrides on key conflicts.\n rewritePath = mergeRewriteQuery(\n options.request.url,\n rewriteParsed.pathname + rewriteParsed.search,\n );\n } else {\n // External rewrites are proxied as-is; don't smuggle local query params\n // into the upstream URL.\n rewritePath = rewriteParsed.href;\n }\n } catch {\n rewritePath = rewriteUrl;\n }\n return {\n continue: true,\n rewriteUrl: rewritePath,\n rewriteStatus: response.status !== 200 ? response.status : undefined,\n responseHeaders: collectMiddlewareHeaders(response),\n status: response.status !== 200 ? response.status : undefined,\n waitUntilPromises,\n };\n }\n\n return {\n continue: false,\n response: stripMiddlewareHeadersFromResponse(response),\n waitUntilPromises,\n };\n}\n\nexport async function runGeneratedMiddleware(\n options: RunGeneratedMiddlewareOptions,\n): Promise<MiddlewareResult> {\n const run = () => executeMiddleware(options);\n return options.ctx ? runWithExecutionContext(options.ctx, run) : run();\n}\n"],"mappings":";;;;;;;;;;;;AA0EA,SAAS,oBAAoB,OAA4C;CACvE,OAAO,OAAO,UAAU;;AAG1B,SAAS,yBAAyB,OAAiD;CACjF,OAAO,CAAC,CAAC,SAAS,OAAO,UAAU;;AAGrC,SAAS,oBAAoB,SAA0B;CACrD,OAAO,UAAU,UAAU;;AAG7B,SAAS,yBAAyB,SAA0B;CAC1D,OAAO,UAAU,UAAU;;AAG7B,SAAgB,+BACd,KACA,SACmB;CACnB,MAAM,UAAU,QAAQ,UAAW,IAAI,SAAS,IAAI,UAAY,IAAI,cAAc,IAAI;CACtF,IAAI,oBAAoB,QAAQ,EAAE,OAAO;CAEzC,MAAM,YAAY,oBAAoB,QAAQ,QAAQ;CACtD,MAAM,iBAAiB,yBAAyB,QAAQ,QAAQ;CAChE,MAAM,aAAa,QAAQ,WAAW,KAAK,QAAQ,SAAS,KAAK;CACjE,MAAM,IAAI,MACR,OAAO,UAAU,OAAO,WAAW,kCAAkC,eAAe,+BACrF;;AAGH,SAAS,kBAAkB,KAAkD;CAC3E,MAAM,SAAS,IAAI;CACnB,IAAI,CAAC,yBAAyB,OAAO,EAAE,OAAO,KAAA;CAC9C,OAAO,OAAO;;AAGhB,SAAS,mCAAmC,UAA8B;CACxE,MAAM,UAAU,IAAI,QAAQ,SAAS,QAAQ;CAC7C,yBAAyB,QAAQ;CACjC,OAAO,IAAI,SAAS,SAAS,MAAM;EACjC,QAAQ,SAAS;EACjB,YAAY,SAAS;EACrB;EACD,CAAC;;;;;;;AAQJ,SAAS,mBAAmB,UAAkB,YAA4B;CACxE,IAAI;CACJ,IAAI;EACF,SAAS,IAAI,IAAI,UAAU,WAAW;SAChC;EACN,OAAO;;CAET,MAAM,OAAO,IAAI,IAAI,WAAW;CAChC,IAAI,OAAO,WAAW,KAAK,QAAQ,OAAO,OAAO,UAAU;CAC3D,OAAO,OAAO,WAAW,OAAO,SAAS,OAAO;;;;;;;;;;;;AAalD,SAAS,qBAAqB,QAAgB,kBAAsC;CAClF,MAAM,UAAU,IAAI,QAAQ,iBAAiB,QAAQ;CACrD,yBAAyB,QAAQ;CAGjC,QAAQ,OAAO,WAAW;CAC1B,QAAQ,IAAI,qBAAqB,OAAO;CACxC,OAAO,IAAI,SAAS,MAAM;EAAE,QAAQ;EAAK;EAAS,CAAC;;AAGrD,SAAS,yBAAyB,UAA6B;CAC7D,MAAM,kBAAkB,IAAI,SAAS;CACrC,KAAK,MAAM,CAAC,KAAK,UAAU,SAAS,SAClC,IAAI,CAAC,IAAI,WAAA,gBAAoC,IAAI,2BAA2B,IAAI,EAC9E,gBAAgB,OAAO,KAAK,MAAM;CAGtC,OAAO;;AAGT,SAAS,gBAAgB,YAAgD;CACvE,MAAM,oBAAoB,WAAW;CACrC,MAAM,UAAU,WAAW,gBAAgB;CAC3C,MAAM,mBAAmB,4BAA4B;CACrD,IAAI,kBACF,iBAAiB,UAAU,QAAQ;CAIrC,OAAO;;AAGT,SAAS,0BAA0B,SAAqC;CACtE,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;CAChC,IAAI;EACF,OAAO,cAAc,qCAAqC,IAAI,SAAS,CAAC;SAClE;EACN,OAAO,oBAAoB;;;AAI/B,SAAS,kBACP,SACA,oBACA,YACA,UACA,eACa;CACb,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;CAGhC,IAAI,YAAY,QAAQ,QAAQ,CAAC,QAAQ,WAAW,QAAQ,OAAO,GAAG;CACtE,IAAI,uBAAuB,IAAI,UAAU;EACvC,MAAM,QAAQ,IAAI,IAAI,IAAI;EAC1B,MAAM,WAAW;EACjB,YAAY,IAAI,QAAQ,OAAO,UAAU;;CAI3C,MAAM,aADgB,YAAY,cAAc,gBAE5C;EACE,UAAU,YAAY;EACtB,MAAM,cAAc,KAAA;EACpB,eAAe,iBAAiB,KAAA;EACjC,GACD,KAAA;CAEJ,OAAO,qBAAqB,cACxB,YACA,IAAI,YAAY,WAAW,aAAa,EAAE,YAAY,GAAG,KAAA,EAAU;;AAGzE,eAAsB,kBACpB,SAC2B;CAC3B,MAAM,eAAe,+BAA+B,QAAQ,QAAQ;EAClE,UAAU,QAAQ;EAClB,SAAS,QAAQ;EAClB,CAAC;CACF,MAAM,qBACJ,QAAQ,sBAAsB,0BAA0B,QAAQ,QAAQ;CAC1E,IAAI,8BAA8B,UAChC,OAAO;EAAE,UAAU;EAAO,UAAU;EAAoB;CAG1D,IACE,CAAC,kBACC,oBACA,kBAAkB,QAAQ,OAAO,EACjC,QAAQ,SACR,QAAQ,WACT,EAED,OAAO,EAAE,UAAU,MAAM;CAG3B,MAAM,cAAc,kBAClB,QAAQ,SACR,oBACA,QAAQ,YACR,QAAQ,UACR,QAAQ,cACT;CACD,MAAM,aAAa,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;CAEnE,IAAI;CACJ,IAAI;EACF,WAAW,MAAM,aAAa,aAAa,WAAW;UAC/C,GAAG;EACV,QAAQ,MAAM,8BAA8B,EAAE;EAC9C,MAAM,oBAAoB,gBAAgB,WAAW;EAIrD,OAAO;GACL,UAAU;GACV,UAAU,4BALI,QAAQ,sBACpB,wBAAwB,aAAa,QAAQ,EAAE,UAAU,OAAO,EAAE,IAClE,wBAG4C;GAC9C;GACD;;CAGH,MAAM,oBAAoB,gBAAgB,WAAW;CAErD,IAAI,CAAC,UACH,OAAO;EAAE,UAAU;EAAM;EAAmB;CAG9C,IAAI,SAAS,QAAQ,IAAA,oBAA2B,KAAK,KACnD,OAAO;EACL,UAAU;EACV,iBAAiB,yBAAyB,SAAS;EACnD,QAAQ,SAAS,WAAW,MAAM,SAAS,SAAS,KAAA;EACpD;EACD;CAGH,IAAI,SAAS,UAAU,OAAO,SAAS,SAAS,KAAK;EACnD,MAAM,WAAW,SAAS,QAAQ,IAAI,WAAW,IAAI,SAAS,QAAQ,IAAI,WAAW;EACrF,IAAI,UAAU;GAIZ,MAAM,mBAAmB,mBAAmB,UAAU,QAAQ,QAAQ,IAAI;GAQ1E,IAAI,QAAQ,eACV,OAAO;IACL,UAAU;IACV,UAAU,qBAAqB,kBAAkB,SAAS;IAC1D;IACD;GAGH,MAAM,kBAAkB,IAAI,SAAS;GACrC,KAAK,MAAM,CAAC,KAAK,UAAU,SAAS,SAClC,IAAI,CAAC,IAAI,WAAA,gBAAoC,IAAI,IAAI,aAAa,KAAK,YACrE,gBAAgB,OAAO,KAAK,MAAM;GAMtC,MAAM,6BAA6B,IAAI,QAAQ,SAAS,QAAQ;GAChE,2BAA2B,IAAI,YAAY,iBAAiB;GAC5D,MAAM,sBAAsB,IAAI,SAAS,SAAS,MAAM;IACtD,QAAQ,SAAS;IACjB,YAAY,SAAS;IACrB,SAAS;IACV,CAAC;GACF,OAAO;IACL,UAAU;IACV,aAAa;IACb,gBAAgB,SAAS;IACzB,UAAU,mCAAmC,oBAAoB;IACjE;IACA;IACD;;;CAIL,MAAM,aAAa,SAAS,QAAQ,IAAI,0BAA0B;CAClE,IAAI,YAAY;EACd,IAAI;EACJ,IAAI;GACF,MAAM,gBAAgB,IAAI,IAAI,YAAY,QAAQ,QAAQ,IAAI;GAC9D,MAAM,gBAAgB,IAAI,IAAI,QAAQ,QAAQ,IAAI,CAAC;GACnD,IAAI,cAAc,WAAW,eAI3B,cAAc,kBACZ,QAAQ,QAAQ,KAChB,cAAc,WAAW,cAAc,OACxC;QAID,cAAc,cAAc;UAExB;GACN,cAAc;;EAEhB,OAAO;GACL,UAAU;GACV,YAAY;GACZ,eAAe,SAAS,WAAW,MAAM,SAAS,SAAS,KAAA;GAC3D,iBAAiB,yBAAyB,SAAS;GACnD,QAAQ,SAAS,WAAW,MAAM,SAAS,SAAS,KAAA;GACpD;GACD;;CAGH,OAAO;EACL,UAAU;EACV,UAAU,mCAAmC,SAAS;EACtD;EACD;;AAGH,eAAsB,uBACpB,SAC2B;CAC3B,MAAM,YAAY,kBAAkB,QAAQ;CAC5C,OAAO,QAAQ,MAAM,wBAAwB,QAAQ,KAAK,IAAI,GAAG,KAAK"}
|
|
@@ -31,6 +31,18 @@ declare function resolveMiddlewareHandler(mod: MiddlewareModule, filePath: strin
|
|
|
31
31
|
* Find the proxy or middleware file in the project root.
|
|
32
32
|
* Checks for proxy.ts (Next.js 16) first, then falls back to middleware.ts.
|
|
33
33
|
* If middleware.ts is found, logs a deprecation warning.
|
|
34
|
+
*
|
|
35
|
+
* Note on log noise: this function is called from Vite's `config` hook, which
|
|
36
|
+
* fires once per build environment (RSC, SSR, client, …). That means a project
|
|
37
|
+
* still using `middleware.ts` will see this warning emitted 2–3 times per
|
|
38
|
+
* build. The warning is benign — it does not abort the build. Next.js itself
|
|
39
|
+
* emits the same message via `Log.warnOnce`; matching that parity would
|
|
40
|
+
* require either a per-root deduplication map or hoisting the warning out of
|
|
41
|
+
* this function (e.g. into the plugin's `configResolved` hook). Tracked as a
|
|
42
|
+
* follow-up; see the deploy-suite investigation in run 25870737355.
|
|
43
|
+
*
|
|
44
|
+
* @see https://github.com/vercel/next.js/blob/canary/packages/next/src/build/index.ts
|
|
45
|
+
* (search for "MIDDLEWARE_FILENAME" + "file convention is deprecated")
|
|
34
46
|
*/
|
|
35
47
|
declare function findMiddlewareFile(root: string, fileMatcher: ValidFileMatcher): string | null;
|
|
36
48
|
/**
|
|
@@ -45,7 +57,7 @@ declare function findMiddlewareFile(root: string, fileMatcher: ValidFileMatcher)
|
|
|
45
57
|
* @param request - The incoming Request object
|
|
46
58
|
* @returns Middleware result describing what action to take
|
|
47
59
|
*/
|
|
48
|
-
declare function runMiddleware(runner: ModuleRunner, middlewarePath: string, request: Request, i18nConfig?: NextI18nConfig | null, basePath?: string): Promise<MiddlewareResult>;
|
|
60
|
+
declare function runMiddleware(runner: ModuleRunner, middlewarePath: string, request: Request, i18nConfig?: NextI18nConfig | null, basePath?: string, trailingSlash?: boolean, isDataRequest?: boolean): Promise<MiddlewareResult>;
|
|
49
61
|
//#endregion
|
|
50
62
|
export { findMiddlewareFile, isProxyFile, matchPattern, matchesMiddleware, resolveMiddlewareHandler, runMiddleware };
|
|
51
63
|
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -37,6 +37,18 @@ const MIDDLEWARE_LOCATIONS = ["", "src/"];
|
|
|
37
37
|
* Find the proxy or middleware file in the project root.
|
|
38
38
|
* Checks for proxy.ts (Next.js 16) first, then falls back to middleware.ts.
|
|
39
39
|
* If middleware.ts is found, logs a deprecation warning.
|
|
40
|
+
*
|
|
41
|
+
* Note on log noise: this function is called from Vite's `config` hook, which
|
|
42
|
+
* fires once per build environment (RSC, SSR, client, …). That means a project
|
|
43
|
+
* still using `middleware.ts` will see this warning emitted 2–3 times per
|
|
44
|
+
* build. The warning is benign — it does not abort the build. Next.js itself
|
|
45
|
+
* emits the same message via `Log.warnOnce`; matching that parity would
|
|
46
|
+
* require either a per-root deduplication map or hoisting the warning out of
|
|
47
|
+
* this function (e.g. into the plugin's `configResolved` hook). Tracked as a
|
|
48
|
+
* follow-up; see the deploy-suite investigation in run 25870737355.
|
|
49
|
+
*
|
|
50
|
+
* @see https://github.com/vercel/next.js/blob/canary/packages/next/src/build/index.ts
|
|
51
|
+
* (search for "MIDDLEWARE_FILENAME" + "file convention is deprecated")
|
|
40
52
|
*/
|
|
41
53
|
function findMiddlewareFile(root, fileMatcher) {
|
|
42
54
|
for (const dir of MIDDLEWARE_LOCATIONS) for (const ext of fileMatcher.dottedExtensions) {
|
|
@@ -67,7 +79,7 @@ function isMiddlewareModule(value) {
|
|
|
67
79
|
* @param request - The incoming Request object
|
|
68
80
|
* @returns Middleware result describing what action to take
|
|
69
81
|
*/
|
|
70
|
-
async function runMiddleware(runner, middlewarePath, request, i18nConfig, basePath) {
|
|
82
|
+
async function runMiddleware(runner, middlewarePath, request, i18nConfig, basePath, trailingSlash, isDataRequest) {
|
|
71
83
|
const mod = await runner.import(middlewarePath);
|
|
72
84
|
if (!isMiddlewareModule(mod)) throw new Error(`Middleware module "${middlewarePath}" did not evaluate to an object.`);
|
|
73
85
|
return runGeneratedMiddleware({
|
|
@@ -75,9 +87,11 @@ async function runMiddleware(runner, middlewarePath, request, i18nConfig, basePa
|
|
|
75
87
|
filePath: middlewarePath,
|
|
76
88
|
i18nConfig,
|
|
77
89
|
includeErrorDetails: process.env.NODE_ENV !== "production",
|
|
90
|
+
isDataRequest,
|
|
78
91
|
isProxy: isProxyFile(middlewarePath),
|
|
79
92
|
module: mod,
|
|
80
|
-
request
|
|
93
|
+
request,
|
|
94
|
+
trailingSlash
|
|
81
95
|
});
|
|
82
96
|
}
|
|
83
97
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.js","names":[],"sources":["../../src/server/middleware.ts"],"sourcesContent":["/**\n * proxy.ts / middleware.ts runner\n *\n * Loads and executes the user's proxy.ts (Next.js 16) or middleware.ts file\n * before routing. Runs in Node (not Edge Runtime), per the vinext design.\n *\n * In Next.js 16, proxy.ts replaces middleware.ts:\n * - proxy.ts: default export OR named `proxy` function, runs on Node.js runtime\n * - middleware.ts: deprecated but still supported for Edge runtime use cases\n *\n * The proxy/middleware receives a NextRequest and can:\n * - Return NextResponse.next() to continue to the route\n * - Return NextResponse.redirect() to redirect\n * - Return NextResponse.rewrite() to rewrite the URL\n * - Set/modify headers and cookies\n * - Return a Response directly (e.g., for auth guards)\n *\n * Supports the `config.matcher` export for path filtering.\n */\n\nimport type { ModuleRunner } from \"vite/module-runner\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { NextI18nConfig } from \"../config/next-config.js\";\nimport { ValidFileMatcher } from \"../routing/file-matcher.js\";\nimport {\n resolveMiddlewareModuleHandler,\n runGeneratedMiddleware,\n type MiddlewareModule,\n type MiddlewareResult,\n} from \"./middleware-runtime.js\";\n\nexport { matchPattern, matchesMiddleware } from \"./middleware-matcher.js\";\n\n/**\n * Determine whether a middleware/proxy file path refers to a proxy file.\n * proxy.ts files accept `proxy` or `default` exports.\n * middleware.ts files accept `middleware` or `default` exports.\n *\n * Matches Next.js behavior where each file type only accepts its own\n * named export or a default export:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/build/templates/middleware.ts\n */\nexport function isProxyFile(filePath: string): boolean {\n const base = path.basename(filePath).replace(/\\.\\w+$/, \"\");\n return base === \"proxy\";\n}\n\n/**\n * Resolve the middleware/proxy handler function from a module's exports.\n * Matches Next.js behavior: for proxy files, check `proxy` then `default`;\n * for middleware files, check `middleware` then `default`.\n *\n * Throws if the file exists but doesn't export a valid function, matching\n * Next.js's ProxyMissingExportError behavior.\n *\n * @see https://github.com/vercel/next.js/blob/canary/packages/next/src/build/templates/middleware.ts\n * @see https://github.com/vercel/next.js/blob/canary/test/e2e/app-dir/proxy-missing-export/proxy-missing-export.test.ts\n */\nexport function resolveMiddlewareHandler(mod: MiddlewareModule, filePath: string) {\n return resolveMiddlewareModuleHandler(mod, {\n filePath,\n isProxy: isProxyFile(filePath),\n });\n}\n\nconst MIDDLEWARE_LOCATIONS = [\"\", \"src/\"];\n\n/**\n * Find the proxy or middleware file in the project root.\n * Checks for proxy.ts (Next.js 16) first, then falls back to middleware.ts.\n * If middleware.ts is found, logs a deprecation warning.\n */\nexport function findMiddlewareFile(root: string, fileMatcher: ValidFileMatcher): string | null {\n // Check proxy.ts first (Next.js 16 replacement for middleware.ts)\n for (const dir of MIDDLEWARE_LOCATIONS) {\n for (const ext of fileMatcher.dottedExtensions) {\n const fullPath = path.join(root, dir, `proxy${ext}`);\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n }\n }\n\n // Fall back to middleware.ts (deprecated in Next.js 16)\n for (const dir of MIDDLEWARE_LOCATIONS) {\n for (const ext of fileMatcher.dottedExtensions) {\n const fullPath = path.join(root, dir, `middleware${ext}`);\n if (fs.existsSync(fullPath)) {\n console.warn(\n \"[vinext] middleware.ts is deprecated in Next.js 16. \" +\n \"Rename to proxy.ts and export a default or named proxy function.\",\n );\n return fullPath;\n }\n }\n }\n return null;\n}\n\nfunction isMiddlewareModule(value: unknown): value is MiddlewareModule {\n return !!value && typeof value === \"object\";\n}\n\n/**\n * Load and execute middleware for a given request.\n *\n * @param runner - A ModuleRunner used to load the middleware module.\n * Must be a long-lived instance created once (e.g. in configureServer) via\n * createDirectRunner() — NOT recreated per request. Using server.ssrLoadModule\n * directly crashes with `outsideEmitter` when @cloudflare/vite-plugin is\n * present because SSRCompatModuleRunner reads environment.hot.api synchronously.\n * @param middlewarePath - Absolute path to the middleware file\n * @param request - The incoming Request object\n * @returns Middleware result describing what action to take\n */\nexport async function runMiddleware(\n runner: ModuleRunner,\n middlewarePath: string,\n request: Request,\n i18nConfig?: NextI18nConfig | null,\n basePath?: string,\n): Promise<MiddlewareResult> {\n // Load the middleware module via the direct-call ModuleRunner.\n // This bypasses the hot channel entirely and is safe with all Vite plugin\n // combinations, including @cloudflare/vite-plugin.\n const mod = await runner.import(middlewarePath);\n if (!isMiddlewareModule(mod)) {\n throw new Error(`Middleware module \"${middlewarePath}\" did not evaluate to an object.`);\n }\n\n return runGeneratedMiddleware({\n basePath,\n filePath: middlewarePath,\n i18nConfig,\n includeErrorDetails: process.env.NODE_ENV !== \"production\",\n isProxy: isProxyFile(middlewarePath),\n module: mod,\n request,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AA2CA,SAAgB,YAAY,UAA2B;CAErD,OADa,KAAK,SAAS,SAAS,CAAC,QAAQ,UAAU,GAC5C,KAAK;;;;;;;;;;;;;AAclB,SAAgB,yBAAyB,KAAuB,UAAkB;CAChF,OAAO,+BAA+B,KAAK;EACzC;EACA,SAAS,YAAY,SAAS;EAC/B,CAAC;;AAGJ,MAAM,uBAAuB,CAAC,IAAI,OAAO
|
|
1
|
+
{"version":3,"file":"middleware.js","names":[],"sources":["../../src/server/middleware.ts"],"sourcesContent":["/**\n * proxy.ts / middleware.ts runner\n *\n * Loads and executes the user's proxy.ts (Next.js 16) or middleware.ts file\n * before routing. Runs in Node (not Edge Runtime), per the vinext design.\n *\n * In Next.js 16, proxy.ts replaces middleware.ts:\n * - proxy.ts: default export OR named `proxy` function, runs on Node.js runtime\n * - middleware.ts: deprecated but still supported for Edge runtime use cases\n *\n * The proxy/middleware receives a NextRequest and can:\n * - Return NextResponse.next() to continue to the route\n * - Return NextResponse.redirect() to redirect\n * - Return NextResponse.rewrite() to rewrite the URL\n * - Set/modify headers and cookies\n * - Return a Response directly (e.g., for auth guards)\n *\n * Supports the `config.matcher` export for path filtering.\n */\n\nimport type { ModuleRunner } from \"vite/module-runner\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { NextI18nConfig } from \"../config/next-config.js\";\nimport { ValidFileMatcher } from \"../routing/file-matcher.js\";\nimport {\n resolveMiddlewareModuleHandler,\n runGeneratedMiddleware,\n type MiddlewareModule,\n type MiddlewareResult,\n} from \"./middleware-runtime.js\";\n\nexport { matchPattern, matchesMiddleware } from \"./middleware-matcher.js\";\n\n/**\n * Determine whether a middleware/proxy file path refers to a proxy file.\n * proxy.ts files accept `proxy` or `default` exports.\n * middleware.ts files accept `middleware` or `default` exports.\n *\n * Matches Next.js behavior where each file type only accepts its own\n * named export or a default export:\n * https://github.com/vercel/next.js/blob/canary/packages/next/src/build/templates/middleware.ts\n */\nexport function isProxyFile(filePath: string): boolean {\n const base = path.basename(filePath).replace(/\\.\\w+$/, \"\");\n return base === \"proxy\";\n}\n\n/**\n * Resolve the middleware/proxy handler function from a module's exports.\n * Matches Next.js behavior: for proxy files, check `proxy` then `default`;\n * for middleware files, check `middleware` then `default`.\n *\n * Throws if the file exists but doesn't export a valid function, matching\n * Next.js's ProxyMissingExportError behavior.\n *\n * @see https://github.com/vercel/next.js/blob/canary/packages/next/src/build/templates/middleware.ts\n * @see https://github.com/vercel/next.js/blob/canary/test/e2e/app-dir/proxy-missing-export/proxy-missing-export.test.ts\n */\nexport function resolveMiddlewareHandler(mod: MiddlewareModule, filePath: string) {\n return resolveMiddlewareModuleHandler(mod, {\n filePath,\n isProxy: isProxyFile(filePath),\n });\n}\n\nconst MIDDLEWARE_LOCATIONS = [\"\", \"src/\"];\n\n/**\n * Find the proxy or middleware file in the project root.\n * Checks for proxy.ts (Next.js 16) first, then falls back to middleware.ts.\n * If middleware.ts is found, logs a deprecation warning.\n *\n * Note on log noise: this function is called from Vite's `config` hook, which\n * fires once per build environment (RSC, SSR, client, …). That means a project\n * still using `middleware.ts` will see this warning emitted 2–3 times per\n * build. The warning is benign — it does not abort the build. Next.js itself\n * emits the same message via `Log.warnOnce`; matching that parity would\n * require either a per-root deduplication map or hoisting the warning out of\n * this function (e.g. into the plugin's `configResolved` hook). Tracked as a\n * follow-up; see the deploy-suite investigation in run 25870737355.\n *\n * @see https://github.com/vercel/next.js/blob/canary/packages/next/src/build/index.ts\n * (search for \"MIDDLEWARE_FILENAME\" + \"file convention is deprecated\")\n */\nexport function findMiddlewareFile(root: string, fileMatcher: ValidFileMatcher): string | null {\n // Check proxy.ts first (Next.js 16 replacement for middleware.ts)\n for (const dir of MIDDLEWARE_LOCATIONS) {\n for (const ext of fileMatcher.dottedExtensions) {\n const fullPath = path.join(root, dir, `proxy${ext}`);\n if (fs.existsSync(fullPath)) {\n return fullPath;\n }\n }\n }\n\n // Fall back to middleware.ts (deprecated in Next.js 16).\n // This is a warning, not an error: middleware.ts is still fully supported\n // by both Next.js 16 and vinext. Do not change to `throw` or `process.exit`.\n for (const dir of MIDDLEWARE_LOCATIONS) {\n for (const ext of fileMatcher.dottedExtensions) {\n const fullPath = path.join(root, dir, `middleware${ext}`);\n if (fs.existsSync(fullPath)) {\n console.warn(\n \"[vinext] middleware.ts is deprecated in Next.js 16. \" +\n \"Rename to proxy.ts and export a default or named proxy function.\",\n );\n return fullPath;\n }\n }\n }\n return null;\n}\n\nfunction isMiddlewareModule(value: unknown): value is MiddlewareModule {\n return !!value && typeof value === \"object\";\n}\n\n/**\n * Load and execute middleware for a given request.\n *\n * @param runner - A ModuleRunner used to load the middleware module.\n * Must be a long-lived instance created once (e.g. in configureServer) via\n * createDirectRunner() — NOT recreated per request. Using server.ssrLoadModule\n * directly crashes with `outsideEmitter` when @cloudflare/vite-plugin is\n * present because SSRCompatModuleRunner reads environment.hot.api synchronously.\n * @param middlewarePath - Absolute path to the middleware file\n * @param request - The incoming Request object\n * @returns Middleware result describing what action to take\n */\nexport async function runMiddleware(\n runner: ModuleRunner,\n middlewarePath: string,\n request: Request,\n i18nConfig?: NextI18nConfig | null,\n basePath?: string,\n trailingSlash?: boolean,\n isDataRequest?: boolean,\n): Promise<MiddlewareResult> {\n // Load the middleware module via the direct-call ModuleRunner.\n // This bypasses the hot channel entirely and is safe with all Vite plugin\n // combinations, including @cloudflare/vite-plugin.\n const mod = await runner.import(middlewarePath);\n if (!isMiddlewareModule(mod)) {\n throw new Error(`Middleware module \"${middlewarePath}\" did not evaluate to an object.`);\n }\n\n return runGeneratedMiddleware({\n basePath,\n filePath: middlewarePath,\n i18nConfig,\n includeErrorDetails: process.env.NODE_ENV !== \"production\",\n isDataRequest,\n isProxy: isProxyFile(middlewarePath),\n module: mod,\n request,\n trailingSlash,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AA2CA,SAAgB,YAAY,UAA2B;CAErD,OADa,KAAK,SAAS,SAAS,CAAC,QAAQ,UAAU,GAC5C,KAAK;;;;;;;;;;;;;AAclB,SAAgB,yBAAyB,KAAuB,UAAkB;CAChF,OAAO,+BAA+B,KAAK;EACzC;EACA,SAAS,YAAY,SAAS;EAC/B,CAAC;;AAGJ,MAAM,uBAAuB,CAAC,IAAI,OAAO;;;;;;;;;;;;;;;;;;AAmBzC,SAAgB,mBAAmB,MAAc,aAA8C;CAE7F,KAAK,MAAM,OAAO,sBAChB,KAAK,MAAM,OAAO,YAAY,kBAAkB;EAC9C,MAAM,WAAW,KAAK,KAAK,MAAM,KAAK,QAAQ,MAAM;EACpD,IAAI,GAAG,WAAW,SAAS,EACzB,OAAO;;CAQb,KAAK,MAAM,OAAO,sBAChB,KAAK,MAAM,OAAO,YAAY,kBAAkB;EAC9C,MAAM,WAAW,KAAK,KAAK,MAAM,KAAK,aAAa,MAAM;EACzD,IAAI,GAAG,WAAW,SAAS,EAAE;GAC3B,QAAQ,KACN,uHAED;GACD,OAAO;;;CAIb,OAAO;;AAGT,SAAS,mBAAmB,OAA2C;CACrE,OAAO,CAAC,CAAC,SAAS,OAAO,UAAU;;;;;;;;;;;;;;AAerC,eAAsB,cACpB,QACA,gBACA,SACA,YACA,UACA,eACA,eAC2B;CAI3B,MAAM,MAAM,MAAM,OAAO,OAAO,eAAe;CAC/C,IAAI,CAAC,mBAAmB,IAAI,EAC1B,MAAM,IAAI,MAAM,sBAAsB,eAAe,kCAAkC;CAGzF,OAAO,uBAAuB;EAC5B;EACA,UAAU;EACV;EACA,qBAAqB,QAAQ,IAAI,aAAa;EAC9C;EACA,SAAS,YAAY,eAAe;EACpC,QAAQ;EACR;EACA;EACD,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { RouteManifest } from "../routing/app-route-graph.js";
|
|
2
|
+
import { CacheEntryReuseDecision, CacheEntryReuseProof } from "./cache-proof.js";
|
|
3
|
+
import { AppElementsSlotBinding } from "./app-elements-wire.js";
|
|
2
4
|
import { NavigationTrace, NavigationTraceFields } from "./navigation-trace.js";
|
|
3
5
|
|
|
4
6
|
//#region src/server/navigation-planner.d.ts
|
|
@@ -13,17 +15,28 @@ type OperationToken = {
|
|
|
13
15
|
cacheVariantFingerprint?: string;
|
|
14
16
|
};
|
|
15
17
|
type RouteSnapshotV0 = {
|
|
18
|
+
interception: InterceptionSnapshotV0 | null;
|
|
19
|
+
interceptionContext: string | null;
|
|
16
20
|
routeId: string;
|
|
17
21
|
layoutIds: readonly string[];
|
|
18
22
|
mountedParallelSlots: readonly MountedParallelSlotSnapshotV0[];
|
|
19
23
|
rootBoundaryId: string | null;
|
|
20
24
|
displayUrl: string;
|
|
21
25
|
matchedUrl: string;
|
|
26
|
+
slotBindings: readonly ParallelSlotBindingSnapshotV0[];
|
|
27
|
+
};
|
|
28
|
+
type InterceptionSnapshotV0 = {
|
|
29
|
+
sourceMatchedUrl: string;
|
|
30
|
+
sourceRouteId: string;
|
|
31
|
+
slotId: string;
|
|
32
|
+
targetMatchedUrl: string;
|
|
33
|
+
targetRouteId: string;
|
|
22
34
|
};
|
|
23
35
|
type MountedParallelSlotSnapshotV0 = {
|
|
24
36
|
slotId: string;
|
|
25
37
|
ownerLayoutId: string | null;
|
|
26
38
|
};
|
|
39
|
+
type ParallelSlotBindingSnapshotV0 = AppElementsSlotBinding;
|
|
27
40
|
type NavigationPlannerStateV0 = {
|
|
28
41
|
nextOperationToken: OperationToken;
|
|
29
42
|
traceFields?: NavigationTraceFields;
|
|
@@ -31,6 +44,7 @@ type NavigationPlannerStateV0 = {
|
|
|
31
44
|
visibleSnapshot: RouteSnapshotV0;
|
|
32
45
|
};
|
|
33
46
|
type RefreshScope = "visible";
|
|
47
|
+
type TraverseDirection = "back" | "forward" | "unknown";
|
|
34
48
|
type NavigationEvent = {
|
|
35
49
|
kind: "navigate";
|
|
36
50
|
href: string;
|
|
@@ -40,7 +54,7 @@ type NavigationEvent = {
|
|
|
40
54
|
scope: RefreshScope;
|
|
41
55
|
} | {
|
|
42
56
|
kind: "traverse";
|
|
43
|
-
direction:
|
|
57
|
+
direction: TraverseDirection;
|
|
44
58
|
historyState: unknown;
|
|
45
59
|
} | {
|
|
46
60
|
kind: "prefetch";
|
|
@@ -55,7 +69,7 @@ type RequestedWork = {
|
|
|
55
69
|
href: string;
|
|
56
70
|
mode: "push" | "replace" | "refresh";
|
|
57
71
|
} | {
|
|
58
|
-
direction:
|
|
72
|
+
direction: TraverseDirection;
|
|
59
73
|
historyState: unknown;
|
|
60
74
|
kind: "traverseFlight";
|
|
61
75
|
} | {
|
|
@@ -63,14 +77,16 @@ type RequestedWork = {
|
|
|
63
77
|
href: string;
|
|
64
78
|
};
|
|
65
79
|
type CommitProposal = {
|
|
80
|
+
cacheEntryReuseDecision?: AcceptedCacheEntryReuseDecision;
|
|
66
81
|
preserveAbsentSlots: boolean;
|
|
67
82
|
preserveElementIds: readonly string[];
|
|
68
|
-
|
|
83
|
+
preservePreviousSlotIds: readonly string[];
|
|
84
|
+
reason: "currentRootBoundary" | "interceptedCurrentRootBoundary" | "unprovenTopologyFallback";
|
|
69
85
|
targetSnapshot: RouteSnapshotV0;
|
|
70
86
|
};
|
|
71
87
|
type NoCommitReason = "prefetchOnly";
|
|
72
|
-
type HardNavigationReason = "rootBoundaryChanged";
|
|
73
|
-
type RootBoundaryTransition = "currentRootBoundary" | "rootBoundaryChanged" | "
|
|
88
|
+
type HardNavigationReason = "cacheProofRejected" | "interceptionProofRejected" | "rootBoundaryChanged";
|
|
89
|
+
type RootBoundaryTransition = "currentRootBoundary" | "rootBoundaryChanged" | "rootBoundaryUnknown";
|
|
74
90
|
type NavigationDecisionV0 = {
|
|
75
91
|
kind: "requestWork";
|
|
76
92
|
token: OperationToken;
|
|
@@ -94,6 +110,7 @@ type NavigationDecisionV0 = {
|
|
|
94
110
|
trace: NavigationTrace;
|
|
95
111
|
};
|
|
96
112
|
type FlightResultV0 = {
|
|
113
|
+
cacheEntryReuseProof?: CacheEntryReuseProof;
|
|
97
114
|
href: string;
|
|
98
115
|
targetSnapshot: RouteSnapshotV0;
|
|
99
116
|
};
|
|
@@ -102,6 +119,9 @@ type NavigationPlannerInput = {
|
|
|
102
119
|
state: NavigationPlannerStateV0;
|
|
103
120
|
event: NavigationEvent;
|
|
104
121
|
};
|
|
122
|
+
type AcceptedCacheEntryReuseDecision = Extract<CacheEntryReuseDecision, {
|
|
123
|
+
canReuse: true;
|
|
124
|
+
}>;
|
|
105
125
|
declare function classifyRootBoundaryTransition(currentRootBoundaryId: string | null, nextRootBoundaryId: string | null): RootBoundaryTransition;
|
|
106
126
|
declare function resolveSameLayoutAncestorPersistence(currentSnapshot: RouteSnapshotV0, targetSnapshot: RouteSnapshotV0): readonly string[];
|
|
107
127
|
declare function resolveMountedParallelSlotPersistence(currentSnapshot: RouteSnapshotV0, targetSnapshot: RouteSnapshotV0): readonly string[];
|
|
@@ -115,5 +135,5 @@ declare const navigationPlanner: {
|
|
|
115
135
|
resolveSameLayoutAncestorPersistence: typeof resolveSameLayoutAncestorPersistence;
|
|
116
136
|
};
|
|
117
137
|
//#endregion
|
|
118
|
-
export { CommitProposal, FlightResultV0, HardNavigationReason, MountedParallelSlotSnapshotV0, NavigationDecisionV0, NavigationEvent, NavigationPlannerInput, NavigationPlannerStateV0, NoCommitReason, OperationLane, OperationToken, RefreshScope, RequestedWork, RootBoundaryTransition, RouteSnapshotV0, navigationPlanner };
|
|
138
|
+
export { CommitProposal, FlightResultV0, HardNavigationReason, InterceptionSnapshotV0, MountedParallelSlotSnapshotV0, NavigationDecisionV0, NavigationEvent, NavigationPlannerInput, NavigationPlannerStateV0, NoCommitReason, OperationLane, OperationToken, ParallelSlotBindingSnapshotV0, RefreshScope, RequestedWork, RootBoundaryTransition, RouteSnapshotV0, TraverseDirection, navigationPlanner };
|
|
119
139
|
//# sourceMappingURL=navigation-planner.d.ts.map
|