vinext 0.0.51 → 0.0.53
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 +1 -1
- package/dist/build/clean-output.d.ts +14 -0
- package/dist/build/clean-output.js +36 -0
- package/dist/build/clean-output.js.map +1 -0
- package/dist/build/precompress.d.ts +7 -7
- package/dist/build/precompress.js +18 -17
- package/dist/build/precompress.js.map +1 -1
- package/dist/build/prerender.d.ts +9 -16
- package/dist/build/prerender.js +88 -50
- package/dist/build/prerender.js.map +1 -1
- package/dist/build/run-prerender.js +10 -1
- package/dist/build/run-prerender.js.map +1 -1
- package/dist/build/static-export.d.ts +5 -0
- package/dist/build/static-export.js +8 -3
- package/dist/build/static-export.js.map +1 -1
- package/dist/check.js +4 -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 +58 -4
- package/dist/cli.js.map +1 -1
- package/dist/client/instrumentation-client-inject.d.ts +34 -0
- package/dist/client/instrumentation-client-inject.js +57 -0
- package/dist/client/instrumentation-client-inject.js.map +1 -0
- package/dist/client/navigation-runtime.d.ts +60 -0
- package/dist/client/navigation-runtime.js +171 -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 +14 -3
- 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 +10 -2
- 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/cloudflare/tpr.js +1 -1
- package/dist/cloudflare/tpr.js.map +1 -1
- package/dist/config/config-matchers.d.ts +63 -16
- package/dist/config/config-matchers.js +145 -9
- package/dist/config/config-matchers.js.map +1 -1
- package/dist/config/next-config.d.ts +32 -5
- package/dist/config/next-config.js +55 -15
- package/dist/config/next-config.js.map +1 -1
- package/dist/deploy.js +130 -46
- package/dist/deploy.js.map +1 -1
- package/dist/entries/app-browser-entry.js +9 -3
- package/dist/entries/app-browser-entry.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts +4 -2
- package/dist/entries/app-rsc-entry.js +76 -16
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/app-rsc-manifest.d.ts +1 -0
- package/dist/entries/app-rsc-manifest.js +53 -6
- 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 +40 -3
- package/dist/entries/pages-client-entry.js.map +1 -1
- package/dist/entries/pages-server-entry.js +261 -31
- 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 +161 -46
- package/dist/index.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.js +30 -5
- 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/strip-server-exports.js +5 -8
- package/dist/plugins/strip-server-exports.js.map +1 -1
- package/dist/routing/app-route-graph.d.ts +20 -1
- package/dist/routing/app-route-graph.js +58 -6
- 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-trie.js +13 -18
- package/dist/routing/route-trie.js.map +1 -1
- package/dist/routing/utils.d.ts +12 -1
- package/dist/routing/utils.js +18 -1
- package/dist/routing/utils.js.map +1 -1
- package/dist/server/api-handler.js +153 -42
- package/dist/server/api-handler.js.map +1 -1
- package/dist/server/app-browser-action-result.d.ts +16 -1
- package/dist/server/app-browser-action-result.js +15 -1
- package/dist/server/app-browser-action-result.js.map +1 -1
- package/dist/server/app-browser-entry.js +309 -155
- package/dist/server/app-browser-entry.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 +3 -1
- package/dist/server/app-browser-navigation-controller.js +5 -1
- package/dist/server/app-browser-navigation-controller.js.map +1 -1
- package/dist/server/app-browser-rsc-redirect.d.ts +2 -1
- package/dist/server/app-browser-rsc-redirect.js +2 -2
- package/dist/server/app-browser-rsc-redirect.js.map +1 -1
- package/dist/server/app-browser-state.d.ts +18 -1
- package/dist/server/app-browser-state.js +19 -1
- package/dist/server/app-browser-state.js.map +1 -1
- package/dist/server/app-browser-stream.d.ts +5 -14
- package/dist/server/app-browser-stream.js +13 -7
- package/dist/server/app-browser-stream.js.map +1 -1
- package/dist/server/app-browser-visible-commit.d.ts +2 -1
- package/dist/server/app-browser-visible-commit.js +1 -0
- package/dist/server/app-browser-visible-commit.js.map +1 -1
- package/dist/server/app-elements-wire.d.ts +10 -5
- package/dist/server/app-elements-wire.js +84 -2
- 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 +12 -3
- package/dist/server/app-fallback-renderer.js +15 -8
- package/dist/server/app-fallback-renderer.js.map +1 -1
- package/dist/server/app-history-state.js +6 -2
- package/dist/server/app-history-state.js.map +1 -1
- package/dist/server/app-interception-context-header.d.ts +33 -0
- package/dist/server/app-interception-context-header.js +44 -0
- package/dist/server/app-interception-context-header.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-mounted-slots-header.d.ts +19 -0
- package/dist/server/app-mounted-slots-header.js +40 -1
- package/dist/server/app-mounted-slots-header.js.map +1 -1
- package/dist/server/app-optimistic-routing.d.ts +54 -0
- package/dist/server/app-optimistic-routing.js +208 -0
- package/dist/server/app-optimistic-routing.js.map +1 -0
- package/dist/server/app-page-boundary-render.d.ts +1 -0
- package/dist/server/app-page-boundary-render.js +2 -0
- package/dist/server/app-page-boundary-render.js.map +1 -1
- package/dist/server/app-page-boundary.d.ts +1 -0
- package/dist/server/app-page-boundary.js +2 -0
- package/dist/server/app-page-boundary.js.map +1 -1
- package/dist/server/app-page-cache.d.ts +15 -1
- package/dist/server/app-page-cache.js +68 -7
- package/dist/server/app-page-cache.js.map +1 -1
- package/dist/server/app-page-dispatch.d.ts +5 -0
- package/dist/server/app-page-dispatch.js +39 -5
- package/dist/server/app-page-dispatch.js.map +1 -1
- package/dist/server/app-page-element-builder.d.ts +2 -1
- package/dist/server/app-page-element-builder.js +7 -3
- package/dist/server/app-page-element-builder.js.map +1 -1
- package/dist/server/app-page-execution.d.ts +29 -1
- package/dist/server/app-page-execution.js +91 -4
- package/dist/server/app-page-execution.js.map +1 -1
- package/dist/server/app-page-head.d.ts +1 -0
- package/dist/server/app-page-head.js +29 -2
- package/dist/server/app-page-head.js.map +1 -1
- package/dist/server/app-page-probe.js +1 -1
- package/dist/server/app-page-render-observation.js +1 -1
- package/dist/server/app-page-render.d.ts +3 -0
- package/dist/server/app-page-render.js +7 -3
- package/dist/server/app-page-render.js.map +1 -1
- package/dist/server/app-page-response.d.ts +11 -1
- package/dist/server/app-page-response.js +18 -5
- package/dist/server/app-page-response.js.map +1 -1
- package/dist/server/app-page-route-wiring.d.ts +1 -0
- package/dist/server/app-page-route-wiring.js +35 -15
- package/dist/server/app-page-route-wiring.js.map +1 -1
- package/dist/server/app-page-stream.d.ts +4 -0
- package/dist/server/app-page-stream.js +3 -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 +7 -1
- package/dist/server/app-route-handler-dispatch.js +4 -1
- package/dist/server/app-route-handler-dispatch.js.map +1 -1
- package/dist/server/app-route-handler-execution.d.ts +18 -2
- package/dist/server/app-route-handler-execution.js +1 -0
- package/dist/server/app-route-handler-execution.js.map +1 -1
- package/dist/server/app-route-handler-response.js +6 -5
- package/dist/server/app-route-handler-response.js.map +1 -1
- package/dist/server/app-router-entry.js +6 -2
- package/dist/server/app-router-entry.js.map +1 -1
- package/dist/server/app-rsc-handler.d.ts +11 -1
- package/dist/server/app-rsc-handler.js +48 -21
- 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 +6 -2
- 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.js +2 -2
- package/dist/server/app-rsc-route-matching.js.map +1 -1
- package/dist/server/app-segment-config.d.ts +4 -1
- package/dist/server/app-segment-config.js +6 -1
- package/dist/server/app-segment-config.js.map +1 -1
- package/dist/server/app-server-action-execution.d.ts +1 -0
- package/dist/server/app-server-action-execution.js +5 -1
- package/dist/server/app-server-action-execution.js.map +1 -1
- package/dist/server/app-ssr-entry.d.ts +2 -0
- package/dist/server/app-ssr-entry.js +92 -55
- package/dist/server/app-ssr-entry.js.map +1 -1
- package/dist/server/app-ssr-stream.d.ts +30 -2
- package/dist/server/app-ssr-stream.js +95 -8
- package/dist/server/app-ssr-stream.js.map +1 -1
- package/dist/server/app-static-generation.d.ts +1 -0
- package/dist/server/app-static-generation.js +2 -1
- package/dist/server/app-static-generation.js.map +1 -1
- package/dist/server/artifact-compatibility.d.ts +1 -1
- 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 +49 -3
- package/dist/server/cache-proof.js +78 -22
- 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/default-not-found-module.d.ts +20 -0
- package/dist/server/default-not-found-module.js +20 -0
- package/dist/server/default-not-found-module.js.map +1 -0
- package/dist/server/dev-server.d.ts +10 -2
- package/dist/server/dev-server.js +99 -36
- 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/headers.d.ts +22 -1
- package/dist/server/headers.js +22 -1
- package/dist/server/headers.js.map +1 -1
- package/dist/server/http-error-responses.d.ts +16 -1
- package/dist/server/http-error-responses.js +21 -1
- package/dist/server/http-error-responses.js.map +1 -1
- package/dist/server/image-optimization.d.ts +13 -4
- package/dist/server/image-optimization.js +15 -4
- package/dist/server/image-optimization.js.map +1 -1
- package/dist/server/isr-cache.d.ts +6 -2
- package/dist/server/isr-cache.js +20 -4
- package/dist/server/isr-cache.js.map +1 -1
- package/dist/server/middleware-runtime.d.ts +15 -0
- package/dist/server/middleware-runtime.js +59 -7
- package/dist/server/middleware-runtime.js.map +1 -1
- package/dist/server/middleware.d.ts +1 -1
- package/dist/server/middleware.js +5 -3
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/navigation-planner.d.ts +9 -3
- package/dist/server/navigation-planner.js +98 -25
- package/dist/server/navigation-planner.js.map +1 -1
- package/dist/server/navigation-trace.d.ts +2 -1
- package/dist/server/navigation-trace.js +1 -0
- package/dist/server/navigation-trace.js.map +1 -1
- package/dist/server/pages-api-route.d.ts +45 -1
- package/dist/server/pages-api-route.js +27 -4
- package/dist/server/pages-api-route.js.map +1 -1
- package/dist/server/pages-body-parser-config.d.ts +60 -0
- package/dist/server/pages-body-parser-config.js +79 -0
- package/dist/server/pages-body-parser-config.js.map +1 -0
- package/dist/server/pages-data-route.d.ts +77 -0
- package/dist/server/pages-data-route.js +98 -0
- package/dist/server/pages-data-route.js.map +1 -0
- package/dist/server/pages-default-404.d.ts +31 -0
- package/dist/server/pages-default-404.js +40 -0
- package/dist/server/pages-default-404.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-node-compat.d.ts +10 -0
- package/dist/server/pages-node-compat.js +12 -1
- package/dist/server/pages-node-compat.js.map +1 -1
- package/dist/server/pages-page-data.d.ts +69 -2
- package/dist/server/pages-page-data.js +47 -31
- package/dist/server/pages-page-data.js.map +1 -1
- package/dist/server/pages-page-response.d.ts +13 -1
- package/dist/server/pages-page-response.js +16 -11
- package/dist/server/pages-page-response.js.map +1 -1
- package/dist/server/prerender-route-params.d.ts +14 -0
- package/dist/server/prerender-route-params.js +94 -0
- package/dist/server/prerender-route-params.js.map +1 -0
- package/dist/server/prod-server.d.ts +15 -37
- package/dist/server/prod-server.js +143 -107
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/proxy-trust.d.ts +41 -0
- package/dist/server/proxy-trust.js +70 -0
- package/dist/server/proxy-trust.js.map +1 -0
- package/dist/server/request-pipeline.d.ts +13 -4
- package/dist/server/request-pipeline.js +32 -14
- package/dist/server/request-pipeline.js.map +1 -1
- package/dist/server/seed-cache.d.ts +12 -31
- package/dist/server/seed-cache.js +30 -37
- package/dist/server/seed-cache.js.map +1 -1
- package/dist/server/server-action-not-found.js +8 -3
- package/dist/server/server-action-not-found.js.map +1 -1
- 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 +8 -7
- package/dist/server/static-file-cache.js.map +1 -1
- package/dist/server/streaming-metadata.d.ts +5 -0
- package/dist/server/streaming-metadata.js +10 -0
- package/dist/server/streaming-metadata.js.map +1 -0
- package/dist/shims/app-router-scroll-state.d.ts +12 -0
- package/dist/shims/app-router-scroll-state.js +38 -0
- package/dist/shims/app-router-scroll-state.js.map +1 -0
- package/dist/shims/app-router-scroll.d.ts +14 -0
- package/dist/shims/app-router-scroll.js +100 -0
- package/dist/shims/app-router-scroll.js.map +1 -0
- package/dist/shims/before-interactive-context.d.ts +30 -0
- package/dist/shims/before-interactive-context.js +10 -0
- package/dist/shims/before-interactive-context.js.map +1 -0
- package/dist/shims/cache-runtime.d.ts +1 -1
- package/dist/shims/cache-runtime.js +14 -1
- package/dist/shims/cache-runtime.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/default-not-found.d.ts +12 -0
- package/dist/shims/default-not-found.js +61 -0
- package/dist/shims/default-not-found.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/font-local.d.ts +5 -0
- package/dist/shims/font-local.js +6 -2
- package/dist/shims/font-local.js.map +1 -1
- package/dist/shims/form.js +13 -6
- package/dist/shims/form.js.map +1 -1
- package/dist/shims/head.js +4 -4
- package/dist/shims/head.js.map +1 -1
- package/dist/shims/headers.d.ts +6 -2
- package/dist/shims/headers.js +64 -21
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/image.d.ts +1 -1
- package/dist/shims/image.js +4 -4
- package/dist/shims/image.js.map +1 -1
- package/dist/shims/internal/pages-data-target.d.ts +58 -0
- package/dist/shims/internal/pages-data-target.js +91 -0
- package/dist/shims/internal/pages-data-target.js.map +1 -0
- package/dist/shims/internal/pages-data-url.d.ts +42 -0
- package/dist/shims/internal/pages-data-url.js +73 -0
- package/dist/shims/internal/pages-data-url.js.map +1 -0
- package/dist/shims/link.d.ts +21 -3
- package/dist/shims/link.js +189 -30
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/metadata.d.ts +2 -1
- package/dist/shims/metadata.js +65 -6
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation.d.ts +8 -2
- package/dist/shims/navigation.js +67 -23
- package/dist/shims/navigation.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/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 +12 -5
- package/dist/shims/router.js +535 -86
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/script.js +86 -12
- package/dist/shims/script.js.map +1 -1
- package/dist/shims/server.d.ts +21 -4
- package/dist/shims/server.js +30 -9
- package/dist/shims/server.js.map +1 -1
- package/dist/shims/slot.js +5 -1
- package/dist/shims/slot.js.map +1 -1
- package/dist/shims/unified-request-context.d.ts +1 -1
- 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 +2 -1
- package/dist/shims/url-utils.js +15 -4
- 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 +33 -5
- package/dist/utils/asset-prefix.js +39 -6
- package/dist/utils/asset-prefix.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/html-limited-bots.d.ts +5 -0
- package/dist/utils/html-limited-bots.js +15 -0
- package/dist/utils/html-limited-bots.js.map +1 -0
- 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/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 +23 -1
- package/dist/utils/query.js +46 -2
- 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/package.json +11 -3
|
@@ -1,21 +1,26 @@
|
|
|
1
1
|
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
2
|
-
import { hasBasePath,
|
|
3
|
-
import { VINEXT_PRERENDER_SECRET_HEADER, VINEXT_STATIC_FILE_HEADER } from "./headers.js";
|
|
2
|
+
import { hasBasePath, stripBasePath } from "../utils/base-path.js";
|
|
3
|
+
import { VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, VINEXT_PRERENDER_SECRET_HEADER, VINEXT_STATIC_FILE_HEADER } from "./headers.js";
|
|
4
4
|
import { normalizePath } from "./normalize-path.js";
|
|
5
5
|
import { applyMiddlewareRequestHeaders, isExternalUrl, matchRedirect, matchRewrite, proxyExternalRequest, requestContextFromRequest, sanitizeDestination } from "../config/config-matchers.js";
|
|
6
6
|
import { notFoundResponse } from "./http-error-responses.js";
|
|
7
|
-
import { applyConfigHeadersToHeaderRecord, filterInternalHeaders, isOpenRedirectShaped } from "./request-pipeline.js";
|
|
7
|
+
import { applyConfigHeadersToHeaderRecord, filterInternalHeaders, isOpenRedirectShaped, normalizeTrailingSlash } from "./request-pipeline.js";
|
|
8
|
+
import { mergeRewriteQuery } from "../utils/query.js";
|
|
9
|
+
import { normalizeDefaultLocalePathname, stripI18nLocaleForApiRoute } from "./pages-i18n.js";
|
|
10
|
+
import { resolveRequestHost, resolveRequestProtocol, trustProxy, trustedHosts } from "./proxy-trust.js";
|
|
11
|
+
import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, isImageOptimizationPath, isSafeImageContentType, parseImageParams } from "./image-optimization.js";
|
|
8
12
|
import { installSocketErrorBackstop } from "./socket-error-backstop.js";
|
|
13
|
+
import { ASSET_PREFIX_URL_DIR, assetPrefixPathname, isAbsoluteAssetPrefix } from "../utils/asset-prefix.js";
|
|
9
14
|
import { CONTENT_TYPES, StaticFileCache, etagFromFilenameHash } from "./static-file-cache.js";
|
|
15
|
+
import { buildNextDataNotFoundResponse, isNextDataPathname, parseNextDataPathname } from "./pages-data-route.js";
|
|
10
16
|
import { manifestFileWithBase } from "../utils/manifest-paths.js";
|
|
11
|
-
import {
|
|
12
|
-
import { DEFAULT_DEVICE_SIZES, DEFAULT_IMAGE_SIZES, isSafeImageContentType, parseImageParams } from "./image-optimization.js";
|
|
17
|
+
import { readTrustedPrerenderRouteParamsFromHeaders, serializePrerenderRouteParamsHeader } from "./prerender-route-params.js";
|
|
13
18
|
import { computeLazyChunks } from "../utils/lazy-chunks.js";
|
|
14
19
|
import { readPrerenderSecret } from "../build/server-manifest.js";
|
|
15
20
|
import { seedMemoryCacheFromPrerender } from "./seed-cache.js";
|
|
16
21
|
import fs from "node:fs";
|
|
17
22
|
import path from "node:path";
|
|
18
|
-
import
|
|
23
|
+
import fs$1 from "node:fs/promises";
|
|
19
24
|
import { pathToFileURL } from "node:url";
|
|
20
25
|
import zlib from "node:zlib";
|
|
21
26
|
import { createServer } from "node:http";
|
|
@@ -129,8 +134,20 @@ function mergeResponseHeaders(middlewareHeaders, response) {
|
|
|
129
134
|
}
|
|
130
135
|
function toWebHeaders(headersRecord) {
|
|
131
136
|
const headers = new Headers();
|
|
132
|
-
for (const [key, value] of Object.entries(headersRecord))
|
|
133
|
-
|
|
137
|
+
for (const [key, value] of Object.entries(headersRecord)) appendWebHeader(headers, key, value);
|
|
138
|
+
return headers;
|
|
139
|
+
}
|
|
140
|
+
function appendWebHeader(headers, key, value) {
|
|
141
|
+
if (value === void 0) return;
|
|
142
|
+
if (Array.isArray(value)) {
|
|
143
|
+
for (const item of value) headers.append(key, item);
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
headers.set(key, value);
|
|
147
|
+
}
|
|
148
|
+
function nodeHeadersToWebHeaders(headersRecord) {
|
|
149
|
+
const headers = new Headers();
|
|
150
|
+
for (const [key, value] of Object.entries(headersRecord)) appendWebHeader(headers, key, value);
|
|
134
151
|
return headers;
|
|
135
152
|
}
|
|
136
153
|
const NO_BODY_RESPONSE_STATUSES = new Set([
|
|
@@ -325,7 +342,7 @@ async function tryServeStatic(req, res, clientDir, pathname, compress, cache, ex
|
|
|
325
342
|
if (!resolved) return false;
|
|
326
343
|
const ext = path.extname(resolved.path);
|
|
327
344
|
const ct = CONTENT_TYPES[ext] ?? "application/octet-stream";
|
|
328
|
-
const isHashed = pathname.
|
|
345
|
+
const isHashed = pathname.includes(`/${ASSET_PREFIX_URL_DIR}/`);
|
|
329
346
|
const cacheControl = isHashed ? "public, max-age=31536000, immutable" : "public, max-age=3600";
|
|
330
347
|
const etag = isHashed && etagFromFilenameHash(resolved.path, ext) || `W/"${resolved.size}-${Math.floor(resolved.mtimeMs / 1e3)}"`;
|
|
331
348
|
const baseType = ct.split(";")[0].trim();
|
|
@@ -415,7 +432,7 @@ async function resolveStaticFile(staticFile) {
|
|
|
415
432
|
}
|
|
416
433
|
async function statIfFile(filePath) {
|
|
417
434
|
try {
|
|
418
|
-
const stat = await
|
|
435
|
+
const stat = await fs$1.stat(filePath);
|
|
419
436
|
return stat.isFile() ? {
|
|
420
437
|
size: stat.size,
|
|
421
438
|
mtimeMs: stat.mtimeMs
|
|
@@ -425,35 +442,6 @@ async function statIfFile(filePath) {
|
|
|
425
442
|
}
|
|
426
443
|
}
|
|
427
444
|
/**
|
|
428
|
-
* Resolve the host for a request, ignoring X-Forwarded-Host to prevent
|
|
429
|
-
* host header poisoning attacks (open redirects, cache poisoning).
|
|
430
|
-
*
|
|
431
|
-
* X-Forwarded-Host is only trusted when the VINEXT_TRUSTED_HOSTS env var
|
|
432
|
-
* lists the forwarded host value. Without this, an attacker can send
|
|
433
|
-
* X-Forwarded-Host: evil.com and poison any redirect that resolves
|
|
434
|
-
* against request.url.
|
|
435
|
-
*
|
|
436
|
-
* On Cloudflare Workers, X-Forwarded-Host is always set by Cloudflare
|
|
437
|
-
* itself, so this is only a concern for the Node.js prod-server.
|
|
438
|
-
*/
|
|
439
|
-
function resolveHost(req, fallback) {
|
|
440
|
-
const rawForwarded = req.headers["x-forwarded-host"];
|
|
441
|
-
const hostHeader = req.headers.host;
|
|
442
|
-
if (rawForwarded) {
|
|
443
|
-
const forwardedHost = rawForwarded.split(",")[0].trim().toLowerCase();
|
|
444
|
-
if (forwardedHost && trustedHosts.has(forwardedHost)) return forwardedHost;
|
|
445
|
-
}
|
|
446
|
-
return hostHeader || fallback;
|
|
447
|
-
}
|
|
448
|
-
/** Hosts that are allowed as X-Forwarded-Host values (stored lowercase). */
|
|
449
|
-
const trustedHosts = new Set((process.env.VINEXT_TRUSTED_HOSTS ?? "").split(",").map((h) => h.trim().toLowerCase()).filter(Boolean));
|
|
450
|
-
/**
|
|
451
|
-
* Whether to trust X-Forwarded-Proto from upstream proxies.
|
|
452
|
-
* Enabled when VINEXT_TRUST_PROXY=1 or when VINEXT_TRUSTED_HOSTS is set
|
|
453
|
-
* (having trusted hosts implies a trusted proxy).
|
|
454
|
-
*/
|
|
455
|
-
const trustProxy = process.env.VINEXT_TRUST_PROXY === "1" || trustedHosts.size > 0;
|
|
456
|
-
/**
|
|
457
445
|
* Convert a Node.js IncomingMessage to a Web Request object.
|
|
458
446
|
*
|
|
459
447
|
* When `urlOverride` is provided, it is used as the path + query string
|
|
@@ -462,17 +450,14 @@ const trustProxy = process.env.VINEXT_TRUST_PROXY === "1" || trustedHosts.size >
|
|
|
462
450
|
* Router prod server normalizes before static-asset lookup, and can pass
|
|
463
451
|
* the result here so the downstream RSC handler doesn't re-normalize).
|
|
464
452
|
*/
|
|
465
|
-
function nodeToWebRequest(req, urlOverride) {
|
|
466
|
-
const
|
|
467
|
-
const origin = `${rawProto === "https" || rawProto === "http" ? rawProto : "http"}://${resolveHost(req, "localhost")}`;
|
|
453
|
+
function nodeToWebRequest(req, urlOverride, prerenderSecret) {
|
|
454
|
+
const origin = `${resolveRequestProtocol(req)}://${resolveRequestHost(req, "localhost")}`;
|
|
468
455
|
const url = new URL(urlOverride ?? req.url ?? "/", origin);
|
|
469
|
-
const rawHeaders =
|
|
470
|
-
|
|
471
|
-
if (value === void 0) continue;
|
|
472
|
-
if (Array.isArray(value)) for (const v of value) rawHeaders.append(key, v);
|
|
473
|
-
else rawHeaders.set(key, value);
|
|
474
|
-
}
|
|
456
|
+
const rawHeaders = nodeHeadersToWebHeaders(req.headers);
|
|
457
|
+
const prerenderRouteParamsPayload = readTrustedPrerenderRouteParamsFromHeaders(rawHeaders, prerenderSecret);
|
|
475
458
|
const headers = filterInternalHeaders(rawHeaders);
|
|
459
|
+
const prerenderRouteParamsHeader = serializePrerenderRouteParamsHeader(prerenderRouteParamsPayload);
|
|
460
|
+
if (prerenderRouteParamsHeader !== null) headers.set(VINEXT_PRERENDER_ROUTE_PARAMS_HEADER, prerenderRouteParamsHeader);
|
|
476
461
|
const method = req.method ?? "GET";
|
|
477
462
|
const hasBody = method !== "GET" && method !== "HEAD";
|
|
478
463
|
const init = {
|
|
@@ -584,6 +569,22 @@ function resolveAppRouterHandler(entry) {
|
|
|
584
569
|
console.error("[vinext] App Router entry must export either a default handler function or a Worker-style default export with fetch()");
|
|
585
570
|
process.exit(1);
|
|
586
571
|
}
|
|
572
|
+
function isAppRouterPrerenderSeederExport(value) {
|
|
573
|
+
return typeof value === "function";
|
|
574
|
+
}
|
|
575
|
+
function resolveAppRouterPrerenderSeeder(entryModule) {
|
|
576
|
+
if (typeof entryModule !== "object" || entryModule === null) return seedMemoryCacheFromPrerender;
|
|
577
|
+
const seedExport = Object.getOwnPropertyDescriptor(entryModule, "seedMemoryCacheFromPrerender")?.value;
|
|
578
|
+
if (!isAppRouterPrerenderSeederExport(seedExport)) {
|
|
579
|
+
if (process.env.NEXT_PRIVATE_DEBUG_CACHE) console.debug("[vinext] ISR: using fallback prerender cache seeder");
|
|
580
|
+
return seedMemoryCacheFromPrerender;
|
|
581
|
+
}
|
|
582
|
+
if (process.env.NEXT_PRIVATE_DEBUG_CACHE) console.debug("[vinext] ISR: using App Router entry prerender cache seeder");
|
|
583
|
+
return async (serverDir) => {
|
|
584
|
+
const result = await Promise.resolve(seedExport(serverDir));
|
|
585
|
+
return typeof result === "number" ? result : 0;
|
|
586
|
+
};
|
|
587
|
+
}
|
|
587
588
|
/**
|
|
588
589
|
* Resolve a request pathname to a static-asset lookup path inside `clientDir`.
|
|
589
590
|
*
|
|
@@ -592,27 +593,21 @@ function resolveAppRouterHandler(entry) {
|
|
|
592
593
|
*
|
|
593
594
|
* Three URL shapes are recognised:
|
|
594
595
|
*
|
|
595
|
-
* - `/
|
|
596
|
-
*
|
|
596
|
+
* - `/_next/static/...` — the default layout. Files land on disk at
|
|
597
|
+
* `dist/client/_next/static/...`, so the pathname maps 1:1. Also covers
|
|
598
|
+
* absolute-URL `assetPrefix` with no path component (same on-disk and
|
|
599
|
+
* URL shape).
|
|
597
600
|
* - `<assetPathPrefix>/_next/static/...` — when `assetPrefix` is a path
|
|
598
601
|
* prefix (e.g. `/custom-asset-prefix`). The on-disk layout is
|
|
599
602
|
* `dist/client/<prefix>/_next/static/...`, so the pathname maps 1:1.
|
|
600
|
-
* -
|
|
601
|
-
*
|
|
602
|
-
*
|
|
603
|
-
*
|
|
604
|
-
*
|
|
605
|
-
*
|
|
606
|
-
* (e.g. `https://cdn.example.com/sub`), files are written to
|
|
607
|
-
* `dist/client/_next/static/...` but emitted URLs prepend the full URL
|
|
608
|
-
* (`https://cdn.example.com/sub/_next/static/...`). Requests for those
|
|
609
|
-
* URLs do not normally arrive at this server — they go to the CDN. We
|
|
610
|
-
* still accept `<pathname>/_next/static/...` so a same-origin reverse
|
|
611
|
-
* proxy can route through.
|
|
603
|
+
* - `<absoluteURLPathname>/_next/static/...` — when `assetPrefix` is an
|
|
604
|
+
* absolute URL with a non-empty pathname (e.g. `https://cdn/sub`).
|
|
605
|
+
* Files are written to `dist/client/_next/static/...` but emitted URLs
|
|
606
|
+
* prepend the full URL. Requests do not normally arrive here — they go
|
|
607
|
+
* to the CDN — but we accept them so a same-origin reverse proxy can
|
|
608
|
+
* route through; the on-disk path is just `_next/static/...`.
|
|
612
609
|
*/
|
|
613
610
|
function resolveAppRouterAssetPath(pathname, assetPathPrefix, assetPrefix) {
|
|
614
|
-
if (pathname.startsWith("/assets/")) return pathname;
|
|
615
|
-
if (!assetPrefix) return null;
|
|
616
611
|
const nextStaticDir = `/${ASSET_PREFIX_URL_DIR}/`;
|
|
617
612
|
if (assetPathPrefix) {
|
|
618
613
|
if (pathname === assetPathPrefix || pathname.startsWith(assetPathPrefix + "/")) {
|
|
@@ -657,7 +652,7 @@ async function startAppRouterServer(options) {
|
|
|
657
652
|
const rscHandler = resolveAppRouterHandler(rscModule.default);
|
|
658
653
|
const appRouterAssetPrefix = typeof rscModule.__assetPrefix === "string" ? rscModule.__assetPrefix : "";
|
|
659
654
|
const appAssetPathPrefix = assetPrefixPathname(appRouterAssetPrefix);
|
|
660
|
-
const seededRoutes = await
|
|
655
|
+
const seededRoutes = await resolveAppRouterPrerenderSeeder(rscModule)(path.dirname(rscEntryPath));
|
|
661
656
|
if (seededRoutes > 0) console.log(`[vinext] Seeded ${seededRoutes} pre-rendered route${seededRoutes !== 1 ? "s" : ""} into memory cache`);
|
|
662
657
|
const staticCache = await StaticFileCache.create(clientDir);
|
|
663
658
|
const handleRequest = async (req, res) => {
|
|
@@ -687,9 +682,14 @@ async function startAppRouterServer(options) {
|
|
|
687
682
|
}
|
|
688
683
|
{
|
|
689
684
|
const assetLookupPath = resolveAppRouterAssetPath(pathname, appAssetPathPrefix, appRouterAssetPrefix);
|
|
690
|
-
if (assetLookupPath
|
|
685
|
+
if (assetLookupPath) {
|
|
686
|
+
if (await tryServeStatic(req, res, clientDir, assetLookupPath, compress, staticCache)) return;
|
|
687
|
+
res.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" });
|
|
688
|
+
res.end("Not Found");
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
691
|
}
|
|
692
|
-
if (pathname
|
|
692
|
+
if (isImageOptimizationPath(pathname)) {
|
|
693
693
|
const params = parseImageParams(new URL(rawUrl, "http://localhost"), [...DEFAULT_DEVICE_SIZES, ...DEFAULT_IMAGE_SIZES]);
|
|
694
694
|
if (!params) {
|
|
695
695
|
res.writeHead(400);
|
|
@@ -713,7 +713,7 @@ async function startAppRouterServer(options) {
|
|
|
713
713
|
}
|
|
714
714
|
try {
|
|
715
715
|
const qs = rawUrl.includes("?") ? rawUrl.slice(rawUrl.indexOf("?")) : "";
|
|
716
|
-
const response = await rscHandler(nodeToWebRequest(req, pathname + qs));
|
|
716
|
+
const response = await rscHandler(nodeToWebRequest(req, pathname + qs, prerenderSecret));
|
|
717
717
|
const staticFileSignal = response.headers.get(VINEXT_STATIC_FILE_HEADER);
|
|
718
718
|
if (staticFileSignal) {
|
|
719
719
|
let staticFilePath = "/";
|
|
@@ -775,7 +775,7 @@ function readPagesServerEntryPageRoutes(value) {
|
|
|
775
775
|
*
|
|
776
776
|
* Uses the server entry (dist/server/entry.js) which exports:
|
|
777
777
|
* - renderPage(request, url, manifest, ctx?, middlewareHeaders?) — SSR rendering (Web Request → Response)
|
|
778
|
-
* - handleApiRoute(request, url) — API route handling (
|
|
778
|
+
* - handleApiRoute(request, url, ctx?) — API route handling (ctx optional; pass for ctx.waitUntil() on Workers)
|
|
779
779
|
* - runMiddleware(request, ctx?) — middleware execution (ctx optional; pass for ctx.waitUntil() on Workers)
|
|
780
780
|
* - vinextConfig — embedded next.config.js settings
|
|
781
781
|
*/
|
|
@@ -783,7 +783,7 @@ async function startPagesRouterServer(options) {
|
|
|
783
783
|
const { port, host, clientDir, serverEntryPath, compress, purpose } = options;
|
|
784
784
|
const serverMtime = fs.statSync(serverEntryPath).mtimeMs;
|
|
785
785
|
const serverEntry = await import(`${pathToFileURL(serverEntryPath).href}?t=${serverMtime}`);
|
|
786
|
-
const { renderPage, handleApiRoute: handleApi, runMiddleware, vinextConfig } = serverEntry;
|
|
786
|
+
const { renderPage, handleApiRoute: handleApi, runMiddleware, vinextConfig, buildId: pagesBuildId } = serverEntry;
|
|
787
787
|
const matchPageRoute = typeof serverEntry.matchPageRoute === "function" ? serverEntry.matchPageRoute : void 0;
|
|
788
788
|
const pageRoutes = readPagesServerEntryPageRoutes(serverEntry.pageRoutes);
|
|
789
789
|
const prerenderSecret = readPrerenderSecret(path.dirname(serverEntryPath));
|
|
@@ -792,6 +792,7 @@ async function startPagesRouterServer(options) {
|
|
|
792
792
|
const pagesAssetPathPrefix = assetPrefixPathname(assetPrefix);
|
|
793
793
|
const assetBase = basePath ? `${basePath}/` : "/";
|
|
794
794
|
const trailingSlash = vinextConfig?.trailingSlash ?? false;
|
|
795
|
+
const i18nConfig = vinextConfig?.i18n ?? null;
|
|
795
796
|
const configRedirects = vinextConfig?.redirects ?? [];
|
|
796
797
|
const configRewrites = vinextConfig?.rewrites ?? {
|
|
797
798
|
beforeFiles: [],
|
|
@@ -867,8 +868,13 @@ async function startPagesRouterServer(options) {
|
|
|
867
868
|
}
|
|
868
869
|
const staticLookupPath = stripBasePath(pathname, basePath);
|
|
869
870
|
const pagesAssetLookup = resolveAppRouterAssetPath(pathname, pagesAssetPathPrefix, assetPrefix);
|
|
870
|
-
if (pagesAssetLookup
|
|
871
|
-
|
|
871
|
+
if (pagesAssetLookup) {
|
|
872
|
+
if (await tryServeStatic(req, res, clientDir, pagesAssetLookup, compress, staticCache)) return;
|
|
873
|
+
res.writeHead(404, { "Content-Type": "text/plain; charset=utf-8" });
|
|
874
|
+
res.end("Not Found");
|
|
875
|
+
return;
|
|
876
|
+
}
|
|
877
|
+
if (isImageOptimizationPath(pathname) || isImageOptimizationPath(staticLookupPath)) {
|
|
872
878
|
const params = parseImageParams(new URL(rawUrl, "http://localhost"), allowedImageWidths);
|
|
873
879
|
if (!params) {
|
|
874
880
|
res.writeHead(400);
|
|
@@ -891,6 +897,7 @@ async function startPagesRouterServer(options) {
|
|
|
891
897
|
return;
|
|
892
898
|
}
|
|
893
899
|
try {
|
|
900
|
+
const hadBasePath = !basePath || hasBasePath(pathname, basePath);
|
|
894
901
|
{
|
|
895
902
|
const stripped = stripBasePath(pathname, basePath);
|
|
896
903
|
if (stripped !== pathname) {
|
|
@@ -898,27 +905,37 @@ async function startPagesRouterServer(options) {
|
|
|
898
905
|
pathname = stripped;
|
|
899
906
|
}
|
|
900
907
|
}
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
908
|
+
const basePathState = {
|
|
909
|
+
basePath,
|
|
910
|
+
hadBasePath
|
|
911
|
+
};
|
|
912
|
+
{
|
|
913
|
+
const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
|
|
914
|
+
const trailingSlashRedirect = normalizeTrailingSlash(pathname, basePath, trailingSlash, qs);
|
|
915
|
+
if (trailingSlashRedirect) {
|
|
916
|
+
const location = trailingSlashRedirect.headers.get("Location");
|
|
917
|
+
res.writeHead(trailingSlashRedirect.status, location ? { Location: location } : void 0);
|
|
906
918
|
res.end();
|
|
907
919
|
return;
|
|
908
|
-
}
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
let isDataReq = false;
|
|
923
|
+
if (isNextDataPathname(pathname)) {
|
|
924
|
+
const dataMatch = pagesBuildId ? parseNextDataPathname(pathname, pagesBuildId) : null;
|
|
925
|
+
if (!dataMatch) {
|
|
926
|
+
await sendWebResponse(buildNextDataNotFoundResponse(), req, res, compress);
|
|
912
927
|
return;
|
|
913
928
|
}
|
|
929
|
+
isDataReq = true;
|
|
930
|
+
const qs = url.includes("?") ? url.slice(url.indexOf("?")) : "";
|
|
931
|
+
url = dataMatch.pagePathname + qs;
|
|
932
|
+
pathname = dataMatch.pagePathname;
|
|
914
933
|
}
|
|
915
|
-
const
|
|
916
|
-
const
|
|
917
|
-
const
|
|
918
|
-
const
|
|
919
|
-
|
|
920
|
-
return h;
|
|
921
|
-
}, new Headers()));
|
|
934
|
+
const protocol = resolveRequestProtocol(req);
|
|
935
|
+
const hostHeader = resolveRequestHost(req, `${host}:${port}`);
|
|
936
|
+
const rawReqHeaders = nodeHeadersToWebHeaders(req.headers);
|
|
937
|
+
const isDataRequest = rawReqHeaders.get("x-nextjs-data") === "1";
|
|
938
|
+
const reqHeaders = filterInternalHeaders(rawReqHeaders);
|
|
922
939
|
const method = req.method ?? "GET";
|
|
923
940
|
const hasBody = method !== "GET" && method !== "HEAD";
|
|
924
941
|
let webRequest = new Request(`${protocol}://${hostHeader}${url}`, {
|
|
@@ -928,10 +945,12 @@ async function startPagesRouterServer(options) {
|
|
|
928
945
|
duplex: hasBody ? "half" : void 0
|
|
929
946
|
});
|
|
930
947
|
const reqCtx = requestContextFromRequest(webRequest);
|
|
948
|
+
const requestHostname = i18nConfig ? new URL(webRequest.url).hostname : "";
|
|
949
|
+
const matchPathname = i18nConfig ? normalizeDefaultLocalePathname(pathname, i18nConfig, { hostname: requestHostname }) : pathname;
|
|
931
950
|
if (configRedirects.length) {
|
|
932
|
-
const redirect = matchRedirect(
|
|
951
|
+
const redirect = matchRedirect(matchPathname, configRedirects, reqCtx, basePathState);
|
|
933
952
|
if (redirect) {
|
|
934
|
-
const dest = sanitizeDestination(basePath && !isExternalUrl(redirect.destination) && !hasBasePath(redirect.destination, basePath) ? basePath + redirect.destination : redirect.destination);
|
|
953
|
+
const dest = sanitizeDestination(basePath && hadBasePath && !isExternalUrl(redirect.destination) && !hasBasePath(redirect.destination, basePath) ? basePath + redirect.destination : redirect.destination);
|
|
935
954
|
res.writeHead(redirect.permanent ? 308 : 307, { Location: dest });
|
|
936
955
|
res.end();
|
|
937
956
|
return;
|
|
@@ -941,7 +960,7 @@ async function startPagesRouterServer(options) {
|
|
|
941
960
|
const middlewareHeaders = {};
|
|
942
961
|
let middlewareStatus;
|
|
943
962
|
if (typeof runMiddleware === "function") {
|
|
944
|
-
const result = await runMiddleware(webRequest, void 0);
|
|
963
|
+
const result = await runMiddleware(webRequest, void 0, { isDataRequest });
|
|
945
964
|
if (result.waitUntilPromises && result.waitUntilPromises.length > 0) Promise.allSettled(result.waitUntilPromises);
|
|
946
965
|
if (!result.continue) {
|
|
947
966
|
if (result.redirectUrl) {
|
|
@@ -983,30 +1002,41 @@ async function startPagesRouterServer(options) {
|
|
|
983
1002
|
const { postMwReqCtx, request: postMwReq } = applyMiddlewareRequestHeaders(middlewareHeaders, webRequest, { preserveCredentialHeaders: isExternalUrl(resolvedUrl) });
|
|
984
1003
|
webRequest = postMwReq;
|
|
985
1004
|
let resolvedPathname = resolvedUrl.split("?")[0];
|
|
1005
|
+
const matchResolvedPathname = (p) => i18nConfig ? normalizeDefaultLocalePathname(p, i18nConfig, { hostname: requestHostname }) : p;
|
|
986
1006
|
if (configHeaders.length) applyConfigHeadersToHeaderRecord(middlewareHeaders, {
|
|
987
1007
|
configHeaders,
|
|
988
|
-
pathname,
|
|
989
|
-
requestContext: reqCtx
|
|
1008
|
+
pathname: matchPathname,
|
|
1009
|
+
requestContext: reqCtx,
|
|
1010
|
+
basePathState
|
|
990
1011
|
});
|
|
991
1012
|
if (isExternalUrl(resolvedUrl)) {
|
|
992
1013
|
await sendWebResponse(mergeWebResponse(middlewareHeaders, await proxyExternalRequest(webRequest, resolvedUrl), void 0), req, res, compress);
|
|
993
1014
|
return;
|
|
994
1015
|
}
|
|
995
|
-
if (staticLookupPath !== "/" && !staticLookupPath.startsWith("/api/") && !staticLookupPath.startsWith(
|
|
1016
|
+
if (staticLookupPath !== "/" && !staticLookupPath.startsWith("/api/") && !staticLookupPath.startsWith(`/_next/static/`) && await tryServeStatic(req, res, clientDir, staticLookupPath, compress, staticCache, middlewareHeaders)) return;
|
|
1017
|
+
let configRewriteFired = false;
|
|
996
1018
|
if (configRewrites.beforeFiles?.length) {
|
|
997
|
-
const rewritten = matchRewrite(resolvedPathname, configRewrites.beforeFiles, postMwReqCtx);
|
|
1019
|
+
const rewritten = matchRewrite(matchResolvedPathname(resolvedPathname), configRewrites.beforeFiles, postMwReqCtx, basePathState);
|
|
998
1020
|
if (rewritten) {
|
|
999
1021
|
if (isExternalUrl(rewritten)) {
|
|
1000
1022
|
await sendWebResponse(await proxyExternalRequest(webRequest, rewritten), req, res, compress);
|
|
1001
1023
|
return;
|
|
1002
1024
|
}
|
|
1003
|
-
resolvedUrl = rewritten;
|
|
1004
|
-
resolvedPathname =
|
|
1025
|
+
resolvedUrl = mergeRewriteQuery(resolvedUrl, rewritten);
|
|
1026
|
+
resolvedPathname = resolvedUrl.split("?")[0];
|
|
1027
|
+
configRewriteFired = true;
|
|
1005
1028
|
}
|
|
1006
1029
|
}
|
|
1007
|
-
if (
|
|
1030
|
+
if (basePath && !hadBasePath && !configRewriteFired) {
|
|
1031
|
+
res.writeHead(404, { "Content-Type": "text/html; charset=utf-8" });
|
|
1032
|
+
res.end("This page could not be found");
|
|
1033
|
+
return;
|
|
1034
|
+
}
|
|
1035
|
+
const apiLookupUrl = stripI18nLocaleForApiRoute(resolvedUrl, vinextConfig?.i18n ?? null);
|
|
1036
|
+
const apiLookupPathname = apiLookupUrl.split("?")[0];
|
|
1037
|
+
if (apiLookupPathname.startsWith("/api/") || apiLookupPathname === "/api") {
|
|
1008
1038
|
let response;
|
|
1009
|
-
if (typeof handleApi === "function") response = await handleApi(webRequest,
|
|
1039
|
+
if (typeof handleApi === "function") response = await handleApi(webRequest, apiLookupUrl, createNodeExecutionContext());
|
|
1010
1040
|
else response = new Response("404 - API route not found", { status: 404 });
|
|
1011
1041
|
const mergedResponse = mergeWebResponse(middlewareHeaders, response, middlewareStatus);
|
|
1012
1042
|
if (!mergedResponse.body) {
|
|
@@ -1022,30 +1052,36 @@ async function startPagesRouterServer(options) {
|
|
|
1022
1052
|
}
|
|
1023
1053
|
const pageMatch = matchPageRoute ? matchPageRoute(resolvedPathname, webRequest) : null;
|
|
1024
1054
|
if ((!pageMatch || pageMatch.route.isDynamic) && configRewrites.afterFiles?.length) {
|
|
1025
|
-
const rewritten = matchRewrite(resolvedPathname, configRewrites.afterFiles, postMwReqCtx);
|
|
1055
|
+
const rewritten = matchRewrite(matchResolvedPathname(resolvedPathname), configRewrites.afterFiles, postMwReqCtx, basePathState);
|
|
1026
1056
|
if (rewritten) {
|
|
1027
1057
|
if (isExternalUrl(rewritten)) {
|
|
1028
1058
|
await sendWebResponse(await proxyExternalRequest(webRequest, rewritten), req, res, compress);
|
|
1029
1059
|
return;
|
|
1030
1060
|
}
|
|
1031
|
-
resolvedUrl = rewritten;
|
|
1032
|
-
resolvedPathname =
|
|
1061
|
+
resolvedUrl = mergeRewriteQuery(resolvedUrl, rewritten);
|
|
1062
|
+
resolvedPathname = resolvedUrl.split("?")[0];
|
|
1033
1063
|
}
|
|
1034
1064
|
}
|
|
1035
1065
|
let response;
|
|
1036
1066
|
if (typeof renderPage === "function") {
|
|
1037
1067
|
const middlewareResponseHeaders = toWebHeaders(middlewareHeaders);
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1068
|
+
const renderPageMatch = matchPageRoute ? matchPageRoute(resolvedPathname, webRequest) : null;
|
|
1069
|
+
const shouldDeferErrorPageOnMiss = !isDataReq && !!matchPageRoute && !renderPageMatch;
|
|
1070
|
+
const dataRenderOptions = isDataReq ? { isDataReq: true } : void 0;
|
|
1071
|
+
response = await renderPage(webRequest, resolvedUrl, ssrManifest, void 0, middlewareResponseHeaders, shouldDeferErrorPageOnMiss ? { renderErrorPageOnMiss: false } : dataRenderOptions);
|
|
1072
|
+
let matchedFallbackRewrite = false;
|
|
1073
|
+
if (response && response.status === 404 && shouldDeferErrorPageOnMiss && configRewrites.fallback?.length) {
|
|
1074
|
+
const fallbackRewrite = matchRewrite(matchResolvedPathname(resolvedPathname), configRewrites.fallback, postMwReqCtx, basePathState);
|
|
1041
1075
|
if (fallbackRewrite) {
|
|
1042
1076
|
if (isExternalUrl(fallbackRewrite)) {
|
|
1043
1077
|
await sendWebResponse(await proxyExternalRequest(webRequest, fallbackRewrite), req, res, compress);
|
|
1044
1078
|
return;
|
|
1045
1079
|
}
|
|
1046
|
-
|
|
1080
|
+
matchedFallbackRewrite = true;
|
|
1081
|
+
response = await renderPage(webRequest, mergeRewriteQuery(resolvedUrl, fallbackRewrite), ssrManifest, void 0, middlewareResponseHeaders, dataRenderOptions);
|
|
1047
1082
|
}
|
|
1048
1083
|
}
|
|
1084
|
+
if (response && response.status === 404 && shouldDeferErrorPageOnMiss && !matchedFallbackRewrite) response = await renderPage(webRequest, resolvedUrl, ssrManifest, void 0, middlewareResponseHeaders);
|
|
1049
1085
|
}
|
|
1050
1086
|
if (!response) {
|
|
1051
1087
|
res.writeHead(404);
|
|
@@ -1088,6 +1124,6 @@ async function startPagesRouterServer(options) {
|
|
|
1088
1124
|
};
|
|
1089
1125
|
}
|
|
1090
1126
|
//#endregion
|
|
1091
|
-
export { COMPRESSIBLE_TYPES, COMPRESS_THRESHOLD, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveAppRouterAssetPath, resolveHost, sendCompressed, sendWebResponse, startProdServer, trustProxy, trustedHosts, tryServeStatic };
|
|
1127
|
+
export { COMPRESSIBLE_TYPES, COMPRESS_THRESHOLD, mergeResponseHeaders, mergeWebResponse, negotiateEncoding, nodeToWebRequest, resolveAppRouterAssetPath, resolveAppRouterPrerenderSeeder, resolveRequestHost as resolveHost, sendCompressed, sendWebResponse, startProdServer, trustProxy, trustedHosts, tryServeStatic };
|
|
1092
1128
|
|
|
1093
1129
|
//# sourceMappingURL=prod-server.js.map
|